How to upgrade a single package using apt-get?

  • How do I update a single package? As far as man apt-get says apt-get upgrade doesn't take a package/list of packages as parameter:

    upgrade

    upgrade is used to install the newest versions of all packages currently installed on the system from the sources enumerated in /etc/apt/sources.list. Packages currently installed with new versions available are retrieved and upgraded; under no circumstances are currently installed packages removed, or packages not already installed retrieved and installed. New versions of currently installed packages that cannot be upgraded without changing the install status of another package will be left at their current version. An update must be performed first so that apt-get knows that new versions of packages are available.

  • Josh

    Josh Correct answer

    9 years ago

    You just need to do apt-get install --only-upgrade <packagename>. This will upgrade only that single package, and only if it is installed.

    If you wish to install the package if it doesn't exist, or upgrade it if it does, you may leave out --only-upgrade.

    @Raphink: Your comment about the upgrade is right, but install is considered as an equivalent to upgrading one package; `install is followed **by one** or more packages desired for installation or upgrading` , If you have a better answer, you can answer the question.It would be great.

    `apt-get install --only-upgrade ` will not install any new packages

    Will the `install` command upgrade also the dependencies of that single package if necessary?

    @Pino It will, it makes sense to do so. What if the version you are upgrading to depends on a newer version of another package? You're hosed if you don't upgrade both. This is why `install` is the right command for this, even if it seems counter-intuitive.

    Do you need to restart after updating? My package is still showing the same version?

    Assuming dependencies are upgraded too, will that break applications using shared dependencies ?

    Does this remove the "auto" mark? Sometimes when you install libraries specifically the package is marked as manually installed. I don't like running 'install' on libraries for this reason.

    Works with Ubuntu 16.04 as well i mean `apt install --only-upgrade install `

    `--only-upgrade` is useless here. `install` solely will upgrade the package

    I just tested, since all information is pretty vague; on Ubuntu 16.04 (`apt 1.0.1`), upgrading a package using `apt install` does not affect the `auto` mark, whether `--only-upgrade` is supplied or not. Though of course using `--only-upgrade` makes sense if you don't want to accidentally install something new. It will also upgrade any *required* dependencies.

  • In order to update a single package using the CLI:

    sudo apt-get install --only-upgrade <packagename>
    

    e.g., sudo apt-get install --only-upgrade ack

    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    Skipping **ack**, it is not installed and only upgrades are requested.
    0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    

    I get an error with this command: `E: Sense only is not understood, try true or false.`

    For those who encounter the previous commentator's error see my answer below.

    downvoted as it did not add new information from previous answers

    You should pass `--only-upgrade` to `install` subcommand, not directly to `apt-get`, then you'll not have to append `true`.

  • There are two possible ways I can think of:

    1. sudo apt-get install nameofpackage

      This will upgrade the package even if is already installed:

      ~$ sudo apt-get install emesene
      Reading package lists... Done
      Building dependency tree       
      Reading state information... Done
      The following packages will be upgraded:
        emesene
      1 upgraded, 0 newly installed, 0 to remove and 5 not upgraded.
      Need to get 1,486 kB of archives.
      After this operation, 696 kB disk space will be freed.
      Get:1 http://il.archive.ubuntu.com/ubuntu/ natty-updates/universe emesene all 2.11.4+dfsg-0ubuntu1 [1,486 kB]
      
    2. UsingSynaptic Package Manager: Right click→Mark for upgrade:

      enter image description here

      Note: Sometimes it may asks for additional packages or dependencies, it is normal.

    Yeah , it should , and `sudo apt-get install whatever` should do upgrade by itself.

    `upgrade` doesn't take a package argument.

  • In my experience on Ubuntu 12.04 LTS, using the command below will not upgrade the package if using a separate PPA -

    sudo apt-get --only-upgrade install <packagename>
    

    Similarily, I did not want to run the upgrade command, which would upgrade all packages on my server -

    sudo apt-get dist-upgrade
    

    For example, I have PHP 5.3 installed and have added the ondrej PPA to my apt.sources using -

    sudo add-apt-repository ppa:ondrej/php5
    

    If I run

    sudo apt-get install php5
    

    it will just reinstall PHP 5.3.

    I have to, first, determine the version number to upgrade to, using

    sudo apt-cache policy php5
    

    This will list all available version numbers. You should find the version number you want to upgrade to, and then copy the whole string that references it. For example, the string for PHP 5.5 on Ubuntu is "5.5.16+dfsg-1+deb.sury.org~precise+2".

    Now, you can run the apt-get install command with the specific version number, and voila!

    sudo apt-get install php5=5.5.16+dfsg-1+deb.sury.org~precise+2
    

    I only added this because I was unable to find this information anywhere else!

    I suppose this is obvious to some, but if the above `apt-get install` command fails with a message like `Unable to fetch some archives`, you may need to run `apt update` first, then rerun `apt-cache policy` to identify the correct version for the final `install` command.

  • On Ubuntu 9.04 Jaunty,

    apt-get --only-upgrade install <package>
    

    yields:

    E: Sense only is not understood, try true or false.
    

    The command

    apt-get --only-upgrade true install <package>
    

    worked in my case.

    You should pass `--only-upgrade` to `install` subcommand, not directly to `apt-get`, then you'll not have to append `true`.

  • For a command line solution that doesn't install the package if it doesn't already exist:

    dpkg -s <package> 2>/dev/null | grep -q Status.*installed && sudo apt-get install <package>
    

    This can easily be made into a script, e.g.:

    upgrade-package.sh:

    #!/bin/bash
    
    [[ -z $1 ]] && { echo "Usage: $(basename $0) package"; exit 1; }
    
    if dpkg -s "$1" 2>/dev/null | grep -q Status.*installed; then
        echo "Attempting to upgrade $1"
        sudo apt-get install "$1"
    else
        echo "Package $1 is not installed"
    fi
    
  • Old but nice question, I take the freedom of adding an updated answer... For more modern distributions, where the apt wrapper is included, as simple as:

    sudo apt upgrade <package-name>
    

    This doesn't work; it still tries to upgrade everything.

    what do you mean by 'everything'? Think that this ALAWAYS will upgrade the package dependencies. You can try to download the .deb of the package and do 'dpkg -i .deb', but you may have to run 'apt install -f'

    Not just dependencies: It'll upgrade all other packages that have updates.

  • To upgrade a single package on Ubuntu 18.04 LTS:

    sudo apt update && sudo apt install --only-upgrade <packagename>
    

    To upgrade multiple packages:

    sudo apt update && sudo apt install --only-upgrade <package1> <package2> <package3>
    

License under CC-BY-SA with attribution


Content dated before 6/26/2020 9:53 AM