A atualização automatizada do apt-get termina no meio do caminho

1

Eu configurei o cron de root para executar automaticamente apt-get upgrade . Bastante fácil. Aqui está a linha específica:

@daily (apt-get update && apt-get -y upgrade) 2>&1 > /var/log/tmp.log

No entanto, tenho acompanhado a saída do arquivo de log e ele sempre para na parte da saída em que ele normalmente faria (ou seja, sem -y ) perguntar Do you want to continue [Y/n]? . Confirmo que ele não continuou sendo executado porque apt-get upgrade ainda mostra pacotes precisando ser atualizados. Por que está parando neste momento? E como faço para continuar?

Editar:

### apt-get update output ###  

Building dependency tree...
Reading state information...
The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic
The following packages will be upgraded:
  file libgudev-1.0-0 libmagic1 libpam-systemd libsystemd-daemon0
  libsystemd-login0 libudev1 linux-libc-dev openssh-client openssh-server
   systemd-services udev
12 upgraded, 0 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B/3,412 kB of archives.
After this operation, 16.4 kB of additional disk space will be used.

Editar 2: encurtei o comando para tentar isolar o problema. Eu também li em man apt-get . Eu encontrei uma nova bandeira potencial para passar, deixando-me com:

@daily apt-get -y --force-yes upgrade 2>&1 > /var/log/tmp.log

Infelizmente, ainda recebo os mesmos resultados: (

    
por ubomb 07.04.2014 / 22:06

2 respostas

2

tldr; Não assuma qualquer variáveis de ambiente em cron (incluindo PATH ).

Depois de alguns dias, percebi que sou um idiota e coloquei 2>&1 no lugar errado. Depois de colocá-lo após o nome do arquivo de log, ele me deu os erros que causaram o meu problema:

dpkg: warning: 'ldconfig' not found in PATH or not executable
dpkg: warning: 'start-stop-daemon' not found in PATH or not executable
dpkg: error: 2 expected programs not found in PATH or not executable
Note: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin

Com essa nova informação, finalmente encontrei outro post com o mesmo problema . Acontece que cron tem variáveis de ambiente muito limitadas. Isso ocorreu devido a ataques antigos em cron que se aproveitam das referidas variáveis. Isso significa que a variável PATH nunca é carregada (indicada no erro acima) e, portanto, alguns comandos dos quais o apt-get upgrade depende não puderam ser executados. Isso pode ser corrigido configurando PATH manualmente em cron .

Há também alguns outros erros sobre o fato de que debconf precisa de um controle tty. Isso não impede que o comando seja executado, mas eles podem ser suprimidos configurando a variável de ambiente DEBIAN_FRONTEND em cron .

Aqui está em toda a sua glória:

PATH=/usr/bin:/bin:/usr/sbin:/sbin
DEBIAN_FRONTEND=noninteractive
@daily apt-get -y upgrade > /var/log/tmp.log 2>&1
    
por 11.04.2014 / 17:28
0

Quais pacotes não estão sendo atualizados?

Tem certeza de que não deseja apt-get dist-upgrade ? O pacote linux-image-* , por exemplo, não pôde ser atualizado simplesmente com apt-get upgrade porque um novo pacote está instalado. Novos pacotes só são instalados com dist-upgrade .

    
por 07.04.2014 / 22:25

Tags