Questão Como atualizar um único pacote usando o apt-get?


Como faço para atualizar um único pacote? Tão longe quanto man apt-get diz apt-get upgrade não pega um pacote / lista de pacotes como parâmetro:

atualizar

upgrade é usado para instalar as versões mais recentes de todos os pacotes   atualmente instalado no sistema a partir das fontes enumeradas em    /etc/apt/sources.list. Pacotes atualmente instalados com novos   versões disponíveis são recuperadas e atualizadas; sob nenhuma circunstância   são pacotes atualmente instalados removidos, ou pacotes ainda não   instalado recuperado e instalado. Novas versões do atualmente instalado   pacotes que não podem ser atualizados sem alterar o status de instalação   de outro pacote será deixado em sua versão atual. Uma atualização   deve ser executado primeiro para que o apt-get saiba que novas versões   pacotes estão disponíveis.


715
2018-05-20 16:36


origem




Respostas:


Você só precisa fazer apt-get install --only-upgrade <packagename>. Isso atualizará apenas esse pacote único e somente se ele estiver instalado.

Se você deseja instalar o pacote, se ele não existe, ou atualizá-lo se isso acontecer, você pode deixar de fora --only-upgrade.


903
2018-05-20 16:41



@Raphink: Seu comentário sobre a atualização está correto, mas a instalação é considerada equivalente à atualização de um pacote; install is followed **by one** or more packages desired for installation or upgrading Se você tiver uma resposta melhor, você pode responder a pergunta. Seria ótimo. - Binarylife
apt-get install --only-upgrade <packagename> não instalará novos pacotes - taneli
Será que o install comando de atualização também as dependências desse pacote único, se necessário? - Pino
@Pino Será, faz sentido fazê-lo. E se a versão para a qual você está atualizando depender de uma versão mais recente de outro pacote? Você é manejado se você não atualizar ambos. Isso é por que installé o comando certo para isso, mesmo que pareça contra-intuitivo. - Matt Dodge
Isso remove a marca "auto"? Às vezes, quando você instala bibliotecas especificamente, o pacote é marcado como instalado manualmente. Eu não gosto de executar 'instalar' nas bibliotecas por esse motivo. - isaaclw


Para atualizar um único pacote usando o CLI:

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

por exemplo., 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.

116
2017-10-15 11:22



Eu recebo um erro com este comando: E: Sense only is not understood, try true or false. - Michael
Para aqueles que encontrarem o erro do comentarista anterior, veja minha resposta abaixo. - golem
downvoted como ele não adicionou novas informações de respostas anteriores - gokul_uf
Você deveria passar --only-upgrade para install subcomando, não diretamente para apt-get, então você não terá que acrescentar true. - Ruslan


Há duas maneiras possíveis de pensar:

  1. sudo apt-get install nameofpackage

    Isso atualizará o pacote mesmo se já estiver instalado:

    ~$ 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. UsandoSynaptic Package Manager: Clique com o botão direito → Marcar para atualização:

    enter image description here

    Nota: Às vezes, pode pedir pacotes ou dependências adicionais, é normal.


48
2018-05-20 16:39



Sim, deveria e sudo apt-get install whatever deve fazer upgrade por si só. - Binarylife
upgrade não aceita um argumento de pacote. - ℝaphink
Certo, obrigado, atualiza todos os pacotes. - Binarylife


Na minha experiência no Ubuntu 12.04 LTS, usar o comando abaixo não atualizará o pacote se usar um PPA separado -

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

Similarmente, eu não queria executar o comando upgrade, que atualizaria todos os pacotes no meu servidor -

sudo apt-get dist-upgrade

Por exemplo, eu tenho o PHP 5.3 instalado e adicionei o ondrej PPA ao meu apt.sources usando -

sudo add-apt-repository ppa:ondrej/php5

Se eu corro

sudo apt-get install php5

ele apenas reinstalará o PHP 5.3.

Preciso, primeiro, determinar o número da versão para atualização, usando

sudo apt-cache policy php5

Isso listará todos os números de versão disponíveis. Você deve encontrar o número da versão para o qual deseja atualizar e, em seguida, copiar a string inteira que faz referência a ela. Por exemplo, a string para PHP 5.5 no Ubuntu é "5.5.16 + dfsg-1 + deb.sury.org ~ precise + 2".

Agora, você pode executar o comando apt-get install com o número de versão específico, e voila!

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

Eu só adicionei isso porque não consegui encontrar essa informação em nenhum outro lugar!


22
2017-09-18 16:14





No Ubuntu 9.04 desenvolto,

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

rendimentos:

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

O comando

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

trabalhou no meu caso.


15
2018-04-13 18:21



Você deveria passar --only-upgrade para install subcomando, não diretamente para apt-get, então você não terá que acrescentar true. - Ruslan


Para uma solução de linha de comando que não instala o pacote, se ele ainda não existir:

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

Isso pode ser facilmente transformado em um script, por exemplo:

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

9
2018-05-22 07:58