Como saber se há atualizações disponíveis?

8

Estou executando um servidor ubuntu 12.04 LTS. E acho que seria bom se eu fosse informado quando houver atualizações disponíveis. Mas não consigo encontrar como saber ...

Eu tentei olhar para a apt-getpágina de manual. A partir dele, eu pude usar apt-get -s upgradepara obter a saída do apt-get em um script sem bloquear as perguntas.

Agora, vejo claramente a diferença:

As atualizações estão disponíveis:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be upgraded:
  dpkg dpkg-dev libdpkg-perl
3 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Inst dpkg [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Conf dpkg (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [amd64])
Inst dpkg-dev [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all]) []
Inst libdpkg-perl [1.16.1.2ubuntu7.2] (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf libdpkg-perl (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])
Conf dpkg-dev (1.16.1.2ubuntu7.3 Ubuntu:12.04/precise-updates [all])

As atualizações não estão disponíveis:

apt-get -s upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Mas não sei como proceder a partir daí. Como posso saber, a partir de um script bash (ou script php), que existem atualizações disponíveis ou não?

Editar:

Aqui está o meu código atual do bash. Não funciona.

updates_available=`/etc/update-motd.d/90-updates-available`

if [ "${updates_available}" = "0 packages can be updated. 0 updates are security updates." ];
then
   echo "No updates are available"
else
   echo "There are updates available"
fi
Adeline
fonte
Bem, só vou dizer 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.se não houver atualizações.
Nattgew 29/04

Respostas:

18

Leia as páginas de manual para motd(5), pam_motd(8)e update-motd(5). No meu sistema, /etc/update-motd.d/90-updates-availablechama o /usr/lib/update-notifier/update-motd-updates-availableque exibe isso quando eu faço login:

19 packages can be updated.
12 updates are security updates.

Aprofundando um pouco mais, o script "...- updates-available" chama /usr/lib/update-notifier/apt-check --human-readable. Se você ler isso (python), verá que se omitir o sinalizador legível por humanos, ele exibirá "19; 12" para stderr. Podemos entender isso com isso:

IFS=';' read updates security_updates < <(/usr/lib/update-notifier/apt-check 2>&1)
echo $updates
echo $security_updates 
19
12

Agora você pode dizer:

if (( updates == 0 )); then
    echo "No updates are available"
else
    echo "There are updates available"
fi
Glenn Jackman
fonte
Eu posso ir com isso e testar if [ / etc / update-motd.d / 90-updates-available` = "0 pacotes podem ser atualizados. 0 atualizações são atualizações de segurança." ]; então ... fi` #
Adeline
Infelizmente, a verificação não funciona (adicionei as aspas esquecidas na minha resposta anterior.) Suspeito de algo a ver com as novas linhas. Atualizei minha postagem com o código derivado da sua resposta.
Adeline
resposta refinada.
precisa saber é o seguinte
Resposta incrível, @glennjackman. Eu estava indo para responder com google.com/search?q=apt-get+check+if+updates+are+available #ImNotHelpfulToday =)
0xSheepdog 29/04