Я получаю различные и непоследовательные ошибки с apt
на официальных образах Ubuntu (ami-83e769fb
). Я использую Packer для создания своего AMI, и он дает сбой примерно в 40% случаев. Повторный запуск сценария завершается успешно.
Мой скрипт запускается:
sudo apt-get clean all
sudo apt-get update
перед установкой любых пакетов.
Иногда я получаю такую ошибку:
amazon-ebs: W: GPG error: http://archive.ubuntu.com/ubuntu artful InRelease: Splitting up /var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_artful_InRelease into data and signature failed
amazon-ebs: E: The repository 'http://archive.ubuntu.com/ubuntu artful InRelease' is not signed.
Иногда apt-get update
хиты http://us-west-2.ec2.archive.ubuntu.com/ubuntu
... в других случаях это не так.
В других случаях пакеты отсутствуют (например, apache2
или python3
).
Я не понимаю, почему такое поведение непоследовательно.
Как я могу получить apt-get update
на официальном Ubuntu AMI работать стабильно?
Если вы используете cloud-init
вы можете дождаться его завершения.
while [ ! -f /var/lib/cloud/instance/boot-finished ]; do
echo 'Waiting for cloud-init...'
sleep 1
done
например упаковщик json:
{
"type": "shell",
"inline": [
"while [ ! -f /var/lib/cloud/instance/boot-finished ]; do echo 'Waiting for cloud-init...'; sleep 1; done"
]
}
Ссылка:
packer.json перед предоставлением:
"provisioners": [
{
"type": "shell",
"inline": ["/usr/bin/cloud-init status --wait"]
},
Я сам столкнулся с этой проблемой и считаю, что это происходит потому, что cloud-init все еще находится в процессе настройки экземпляра EC2, когда apt-get
бежит. Я решил это, вставив 30-секундную задержку в свой сценарий, который запускается сразу после загрузки экземпляра. Я думаю, что лучше было бы попросить cloud-init запускать любые скрипты через User Data
или даже позволить ему выполнять установку пакетов и обновления за вас [1]. Для моего варианта использования, когда я не хочу подтверждать cloud-init, добавление задержки было приемлемым решением.