Atualização distinta 100% não interativa do Debian

38

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

O objetivo é ser capaz de iniciar remotamente dist-upgradeuma máquina bastante grande - mesmo para uma máquina que está muito atrasada - e não precisar cuidar dela, a menos que algo esteja horrivelmente, desastrosamente errado.

Certamente isso é possível?

Desde já, obrigado!

Alex Balashov
fonte
Para aqueles que desejam apenas atualizar (em vez de dist-upgrade) no Ubuntu, tente o pacote de atualização autônoma .
Jo Liss

Respostas:

42

Se você definir DEBIAN_FRONTEND=noninteractive(para impedir que os prompts do debconf apareçam) e adicionar force-confolde adicionar force-confdefao seu /etc/dpkg/dpkg.cfgarquivo, deverá ter uma experiência de instalação de pacotes completamente não interativa. Qualquer pacote que ainda solicite 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).

mulher
fonte
Isto não funcionou para mim. apt-listchangesfoi aberto por less.
magnetar
@magnetar: Esse é um problema com as apt-listchanges, não o apt. Desinstale o apt-listchanges ou configure-o apropriadamente.
womble
1
Tente: env APT_LISTCHANGES_FRONTEND = nenhum apt-get dist-upgrade -u -y
H.-Dirk Schmitt
21

Florian Lohoff postou uma maneira de obter o que o womble sugeria em 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 por confnew). Não sei em que casos isso faria diferença. Pessoalmente, preciso da atualização não interativa para atualizar as imagens de baunilha; nesse caso, suponho que sempre é bom escolher o novo arquivo de configuração (sem --force-confdef).

Jo Liss
fonte
W: --force-yes is deprecated, use one of the options starting with --allow instead.
Alex
3

Mesmo que a resposta de womble acima seja geralmente boa, ela não funcionou para mim e eu tive que fazer uma pesquisa adicional para ficar 100% autônoma. Pensei em compartilhar o resultado de maneira concisa para simplificar as coisas para futuros visitantes.

O seguinte é um script que será executado de acordo com as recomendações de atualização das notas de versão do debian 8 (principalmente) junto com flags e variáveis ​​de ambiente que o tornarão desacompanhado. (os echosão apenas para depuração e podem ser removidos - embora eu recomendo mantê-los, se o script travar, 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
Tom Klino
fonte
1
Nota: "--force-yes Force sim; esta é uma opção perigosa que fará com que o apt continue sem avisar se estiver fazendo algo potencialmente prejudicial. Não deve ser usado, exceto em situações muito especiais. O uso de force-yes pode potencialmente destruir seu sistema! Item de configuração: APT :: Get :: force-yes. Isso foi preterido e substituído por --allow-downgrades, --allow-remove-essential, --allow-change-hold-packages na 1.1. "
21418 Alex
1

> = Apt 1.1

Se você estiver usando Apt 1.1 ou acima, --force-yesfoi substituído , então você tem que usar as opções começando com --allowem vez disso, por exemplo --allow-downgrades, --allow-remove-essential, --allow-change-held-packages.

Portanto, o comando é:

DEBIAN_FRONTEND=noninteractive \
  apt-get \
  -o Dpkg::Options::=--force-confold \
  -o Dpkg::Options::=--force-confdef \
  -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
  dist-upgrade

Nota: Use --force-confoldpara manter a idade e --force-confnewmanter novas configurações.

Fonte: CFE-2360: torne a versão do módulo de pacote apt_get ciente .

Palavras-chave:

kenorb
fonte
-4

Na apt-get(8)página do manual:

   -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 -yopção também funciona yum(8).

koenigdmj
fonte
5
Eu sei disso. Eu uso esse sinalizador e ele responde com êxito 'yes' às perguntas padrão do APT S / N sobre como manter sobrescritas configurações existentes, etc. etc. Essas não são as perguntas às quais estou me referindo. Quando eu faço um dist-upgrade do apt-get -y dist, ele ainda me dá alguns avisos do que considera importantes, como alterações no mapa de teclas, reinício do serviço relacionado ao libc6 etc. Eu estava procurando por um sinalizador adicional para desligue isso também.
217 Alex Balashov