100% não-interativo do Debian dist-upgrade

32

Existe uma maneira de fazer um apt-get dist-upgrade no Debian que não apenas responda automaticamente "sim" a todas as perguntas, mas também use padrões razoáveis como respostas a perguntas que são sofisticadas o suficiente para exigir várias caixas de diálogo interativas ? Estou pensando aqui no material do mapa de teclado que aparece quando você atualiza libc6 e as opções de imagem do kernel.

O objetivo é ser capaz de iniciar remotamente um dist-upgrade bastante grande - mesmo para uma máquina que está severamente atrasada - e não ter que tomar conta dele, a menos que algo seja horrível, desastrosamente errado.

Certamente isso é possível?

Obrigado antecipadamente!

    
por Alex Balashov 01.08.2009 / 01:43

4 respostas

36

Se você definir DEBIAN_FRONTEND=noninteractive (para impedir que os avisos do debconf apareçam) e adicione force-confold e force-confdef ao seu arquivo /etc/dpkg/dpkg.cfg , você deve ter uma experiência de instalação de pacote completamente não-interativa. Qualquer pacote que ainda lhe peça informações tem um bug crítico de lançamento (e eu digo isso como um viciado em automação e como um desenvolvedor Debian).

    
por 01.08.2009 / 04:51
17

Florian Lohoff postou uma maneira de conseguir o que a sugestão sugeria um único comando:

DEBIAN_FRONTEND=noninteractive \
apt-get \
-o Dpkg::Options::="--force-confnew" \
--force-yes \
-fuy \
dist-upgrade

É claro que você também pode usar -o Dpkg::Options::="--force-confnew --force-confdef" (pesquise na página de manual do dpkg para confnew). Não tenho certeza em que casos isso faria diferença. Eu pessoalmente preciso da atualização não interativa para atualizar as imagens baunilha, e nesse caso eu suponho que escolher sempre o novo arquivo de configuração (sem --force-confdef ) é uma coisa razoável.

    
por 11.06.2011 / 15:58
3

Mesmo que a resposta de womble acima seja geralmente boa, não funcionou para mim e eu tive que fazer algumas pesquisas adicionais para ir 100% sozinho. Eu pensei em compartilhar o resultado de maneira concisa para tornar as coisas mais simples para os futuros visitantes.

O seguinte é um script que será executado de acordo com as recomendações de atualização do release 8 do release do debian (principalmente), juntamente com sinalizadores e variáveis de ambiente que o tornarão autônomo. (os echo s são apenas para depuração e podem ser removidos - embora eu recomende mantê-los assim, se o script ficar preso, você saberá onde)

#!/bin/bash

apt-get remove apt-listchanges --assume-yes --force-yes &&

#using export is important since some of the commands in the script will fire in a subshell
export DEBIAN_FRONTEND=noninteractive &&
export APT_LISTCHANGES_FRONTEND=none &&

#lib6c was an issue for me as it ignored the DEBIAN_FRONTEND environment variable and fired a prompt anyway. This should fix it
echo 'libc6 libraries/restart-without-asking boolean true' | debconf-set-selections &&

echo "executing wheezy to jessie" &&
find /etc/apt -name "*.list" | xargs sed -i '/^deb/s/wheezy/jessie/g' &&

echo "executing autoremove" &&
apt-get -fuy --force-yes autoremove &&

echo "executing clean" &&
apt-get --force-yes clean &&

echo "executing update" &&
apt-get update &&

echo "executing upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy upgrade &&

echo "executing dist-upgrade" &&
apt-get --force-yes -o Dpkg::Options::="--force-confold" --force-yes -o Dpkg::Options::="--force-confdef" -fuy dist-upgrade
    
por 28.06.2017 / 16:40
-3

Na página apt-get(8) man:

   -y, --yes, --assume-yes
       Automatic yes to prompts; assume "yes" as answer to all prompts
       run non-interactively. If an undesirable situation, such as
       changing a held package, trying to install a unauthenticated
       package or removing an essential package occurs then apt-get will
       abort. Configuration Item: APT::Get::Assume-Yes.

Para referência, a opção -y também funciona em yum(8) .

    
por 01.08.2009 / 03:52