Я получаю различные и непоследовательные ошибки с 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?
решение1
Если вы используете, 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"
]
}
Ссылка:
решение2
packer.json перед предоставлением:
"provisioners": [
{
"type": "shell",
"inline": ["/usr/bin/cloud-init status --wait"]
},
решение3
Я только что сам столкнулся с этой проблемой и считаю, что она возникает из-за того, что cloud-init все еще находится в процессе настройки экземпляра EC2 при apt-get
запуске. Я решил ее, вставив 30-секундную задержку в свой скрипт, которая запускается сразу после загрузки экземпляра. Я думаю, лучшим способом было бы попросить cloud-init запустить все скрипты User Data
или даже позволить ему обрабатывать установку пакетов и обновления для вас [1]. Для моего варианта использования, где я не хочу подтверждать cloud-init, добавление задержки было приемлемым решением.