Estou usando o Packer para criar uma AMI da AWS com base em uma imagem do Ubuntu 16.04. No começo, estou fazendo uma atualização:
sudo apt-get update
sudo apt-get upgrade -y
Aqui está a parte relevante da minha seção de provedores:
"provisioners": [
{
"type": "shell",
"inline": [
"sudo apt-get update",
"sudo apt-get upgrade -y"
]
}
]
Isso interrompe a automatização, no entanto, quando uma caixa de diálogo interativa é exibida:
amazon-ebs: Found kernel: /boot/vmlinuz-4.4.0-72-generic
amazon-ebs: A new version of /boot/grub/menu.lst is available, but the version installed
amazon-ebs: currently has been locally modified.
amazon-ebs:
amazon-ebs: 1. install the package maintainer's version
amazon-ebs: 2. keep the local version currently installed
amazon-ebs: 3. show the differences between the versions
amazon-ebs: 4. show a side-by-side difference between the versions
amazon-ebs: 5. show a 3-way difference between available versions
amazon-ebs: 6. do a 3-way merge between available versions (experimental)
amazon-ebs: 7. start a new shell to examine the situation
Eu também tentei definir export DEBIAN_FRONTEND=noninteractive
antes (como recomendado nesta resposta ). Infelizmente, isso não faz diferença.
Questões:
- Existe uma maneira de passar pela caixa de diálogo iterativa (selecionar a opção 1 seria aceitável)?
- É melhor evitar atualizações e confiar que as AMIs estão atualizadas e contêm os patches críticos de segurança?
Antecedentes: Esta é a parte relevante da minha seção "construtores", onde eu a configurei para usar a mais recente AMI disponível:
"builders": [{
"type": "amazon-ebs",
"region": "eu-central-1",
...
"source_ami_filter": {
"filters": {
"virtualization-type": "hvm",
"name": "*ubuntu-xenial-16.04-amd64-server-*",
"root-device-type": "ebs"
},
"owners": ["099720109477"],
"most_recent": true
},
...
}]
Nota : Acontece que o noniteractive
modo funciona se você executar o apt-get update com -y
os -q
sinalizadores e.
fonte
apt-get update ; DEBIAN_FRONTEND=noninteractive apt-get upgrade -yq
. Eu não acho queapt-get update
solicite nada, então provavelmente não precisaDEBIAN_FRONTEND
, e assim você realmente não precisaexport
DEBIAN_FRONTEND
e continua a existir pelo resto do seu ambiente. Em qualquer grau que seja importante para você.Seu problema é que a alteração do arquivo grub adere
ucf
e não ao debconf, conforme esse incidente na lista do apt, você não está sozinho.Como solução alternativa, encontrei esta resposta no askunbuntu. A remoção do
menu.lst
sistema de configuração UCF deve ser suficiente, para o seu caso:Isso deve evitar a pergunta do grub. Esteja avisado de que qualquer outro pacote usando o ucf também usará a versão do pacote de manutenção, para uma criação a partir de uma base não deve ser um problema, mas vale a pena notar.
fonte
ucf
correção deve ser incluída em uma solução completa, juntamente com os comandos na resposta por PhilippClaßenPara adicionar à resposta de Philipp, se você estiver usando
sudo
, certifique-se de definir aDEBIAN_FRONTEND
variável posteriormente, da seguinte forma:fonte
Não notei nenhuma diferença usando -y ou -q. Talvez porque a pergunta é sobre o uso de "empacotador"? (Eu uso scripts simples)
De qualquer forma, no meu caso, me livrei das caixas de diálogo para
apt upgrade
usar os seguintes comandos sed:Minha alteração é limitada ao tempo da atualização.
Tecnicamente, ele desativa as perguntas sobre manter ou não uma configuração existente ao atualizar o grub, mas apenas durante o tempo da atualização, para evitar efeitos colaterais.
Sistema operacional: Ubuntu 16.04 LTS
Espero que isto ajude
fonte
apt upgrade
único extremamente perigoso nesse caso? A menos que eu tenha uma captura instantânea ou outra maneira eficiente de reconstruir meu ambiente em questão de minutos, eu não tentaria.Você está omitindo o
-y
parâmetro do seuapt-get update
comando. Se você incluí-lo, o prompt deve desaparecer.Eu construí uma imagem do Ubuntu com o Packer também. Aqui está o script de shell que eu uso para executar a atualização:
https://github.com/devopskatas/learningvm/blob/master/script/update.sh
Isso é derivado de uma excelente e bem conservada biblioteca de versões do Ubuntu Packer:
https://github.com/boxcutter/ubuntu
fonte
apt-get update
se limita a atualizar a lista de pacotes do repositório remoto, não há nenhuma razão para definir um y lá ...