Неустойчивая Кв. - получает проблемы установки при создании AMI с помощью Packer

Я пытаюсь создать AMI на основе ami-3b054701 в ap-southeast-2 регион. Конфигурация Упаковщика имеет одного простого поставщика:

#!/bin/bash -e

info() {
    echo -e "[INFO] $1\n"
}

exec_cmd() {
    echo -e "\n[INFO] $1\n"
    eval $1
}

exec_cmd "apt-get update"

exec_cmd "apt-get -y upgrade"

exec_cmd "apt-get -y install build-essential git zip unzip wget default-jre"

Это иногда работает без проблемы, но иногда перестал работать с этой ошибкой:

ami: [INFO] apt-get -y install build-essential git zip unzip wget default-jre
ami:
ami: Reading package lists... Done
ami: Building dependency tree
ami: Reading state information... Done
ami: Package build-essential is not available, but is referred to by another package.
ami: This may mean that the package is missing, has been obsoleted, or
ami: is only available from another source
ami:
ami: Package default-jre is not available, but is referred to by another package.
ami: This may mean that the package is missing, has been obsoleted, or
ami: is only available from another source
ami:
ami: Package zip is not available, but is referred to by another package.
ami: This may mean that the package is missing, has been obsoleted, or
ami: is only available from another source
ami:
ami: E: Package 'build-essential' has no installation candidate
ami: E: Package 'zip' has no installation candidate
ami: E: Package 'default-jre' has no installation candidate

Я потратил впустую один целый день для нахождения способа избежать этого. Существует предложенное решение на Exchange Стека, но это - больше взлома, чем решение. Существует ли способ предотвратить эту ошибку периодически?

Вот полный вывод Packer

==> ami: Prevalidating AMI Name...
==> ami: Inspecting the source AMI...
==> ami: Creating temporary keypair: packer 55d33324-e319-bd49-24c5-c06a18b4fe09
==> ami: Launching a source AWS instance...
    ami: Instance ID: i-8b78cd55
==> ami: Waiting for instance (i-8b78cd55) to become ready...
==> ami: Waiting for SSH to become available...
==> ami: Connected to SSH!
==> ami: Provisioning with shell script: scripts/provision.sh
    ami:
    ami: [INFO] apt-get update
    ami:
    ami: Ign http://security.ubuntu.com trusty-security InRelease
    ami: Ign http://archive.ubuntu.com trusty InRelease
    ami: Get:1 http://security.ubuntu.com trusty-security Release.gpg [933 B]
    ami: Ign http://archive.ubuntu.com trusty-updates InRelease
    ami: Get:2 http://security.ubuntu.com trusty-security Release [63.5 kB]
    ami: Hit http://archive.ubuntu.com trusty Release.gpg
    ami: Get:3 http://archive.ubuntu.com trusty-updates Release.gpg [933 B]
    ami: Hit http://archive.ubuntu.com trusty Release
    ami: Get:4 http://archive.ubuntu.com trusty-updates Release [63.5 kB]
    ami: Get:5 http://security.ubuntu.com trusty-security/main amd64 Packages [333 kB]
    ami: Get:6 http://security.ubuntu.com trusty-security/restricted amd64 Packages [8875 B]
    ami: Hit http://archive.ubuntu.com trusty/main amd64 Packages
    ami: Get:7 http://security.ubuntu.com trusty-security/universe amd64 Packages [114 kB]
    ami: Hit http://archive.ubuntu.com trusty/restricted amd64 Packages
    ami: Hit http://archive.ubuntu.com trusty/universe amd64 Packages
    ami: Get:8 http://security.ubuntu.com trusty-security/multiverse amd64 Packages [3686 B]
    ami: Hit http://archive.ubuntu.com trusty/multiverse amd64 Packages
    ami: Get:9 http://security.ubuntu.com trusty-security/main Translation-en [181 kB]
    ami: Hit http://archive.ubuntu.com trusty/main Translation-en
    ami: Hit http://security.ubuntu.com trusty-security/multiverse Translation-en
    ami: Hit http://archive.ubuntu.com trusty/multiverse Translation-en
    ami: Hit http://security.ubuntu.com trusty-security/restricted Translation-en
    ami: Hit http://archive.ubuntu.com trusty/restricted Translation-en
    ami: Get:10 http://security.ubuntu.com trusty-security/universe Translation-en [66.6 kB]
    ami: Hit http://archive.ubuntu.com trusty/universe Translation-en
    ami: Get:11 http://archive.ubuntu.com trusty-updates/main amd64 Packages [605 kB]
    ami: Get:12 http://archive.ubuntu.com trusty-updates/restricted amd64 Packages [15.3 kB]
    ami: Get:13 http://archive.ubuntu.com trusty-updates/universe amd64 Packages [308 kB]
    ami: Get:14 http://archive.ubuntu.com trusty-updates/multiverse amd64 Packages [11.9 kB]
    ami: Get:15 http://archive.ubuntu.com trusty-updates/main Translation-en [292 kB]
    ami: Hit http://archive.ubuntu.com trusty-updates/multiverse Translation-en
    ami: Hit http://archive.ubuntu.com trusty-updates/restricted Translation-en
    ami: Get:16 http://archive.ubuntu.com trusty-updates/universe Translation-en [163 kB]
    ami: Fetched 2232 kB in 16s (134 kB/s)
    ami: Reading package lists... Done
    ami:
    ami: [INFO] apt-get -y upgrade
    ami:
    ami: Reading package lists... Done
    ami: Building dependency tree
    ami: Reading state information... Done
    ami: Calculating upgrade... Done
    ami: The following packages have been kept back:
    ami: linux-headers-generic linux-headers-virtual linux-image-virtual
    ami: linux-virtual
    ami: 0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
    ami:
    ami: [INFO] apt-get -y install build-essential git zip unzip wget default-jre
    ami:
    ami: Reading package lists... Done
    ami: Building dependency tree
    ami: Reading state information... Done
    ami: Package build-essential is not available, but is referred to by another package.
    ami: This may mean that the package is missing, has been obsoleted, or
    ami: is only available from another source
    ami:
    ami: Package default-jre is not available, but is referred to by another package.
    ami: This may mean that the package is missing, has been obsoleted, or
    ami: is only available from another source
    ami:
    ami: Package zip is not available, but is referred to by another package.
    ami: This may mean that the package is missing, has been obsoleted, or
    ami: is only available from another source
    ami:
    ami: E: Package 'build-essential' has no installation candidate
    ami: E: Package 'zip' has no installation candidate
    ami: E: Package 'default-jre' has no installation candidate
==> ami: Terminating the source AWS instance...
==> ami: No AMIs to cleanup
4
задан 13 April 2017 в 15:24

4 ответа

Я попросил, чтобы команда сервера смотрела на это и в то время как они разрабатывают ответ, я могу сказать, что решение на StackExchange принадлежит "проблемам" Несоответствия Суммы Хеша, которые не замечены в Вашем выводе.

По некоторым причинам метаданные архива, кажется, не имеют достойный пакетов, которые Вы просите устанавливать (которые находятся в основном), но склонный знает, что другие пакеты зависят от них так, это говорит Вам, что, чтобы сказать, что это не думает, что Вы являетесь сумасшедшими также. ;-)

0
ответ дан 14 April 2017 в 01:24
  • 1
    @Arronical, Что сказанный muru; время вызова, вероятно, будет доминировать. – a CVn 12 November 2016 в 02:23

Скорее всего, Вы столкнулись с состоянием состязания с облаком-init. Этот выпуск упаковщика дает некоторое понимание, и я попробовал следующее предложение, данное OP с успехом:

echo "waiting 180 seconds for cloud-init to update /etc/apt/sources.list"
timeout 180 /bin/bash -c \
  'until stat /var/lib/cloud/instance/boot-finished 2>/dev/null; do echo waiting ...; sleep 1; done'
8
ответ дан 14 April 2017 в 01:24
  • 1
    @Arronical, если Ваши выводы не waaaaaaaaaaaay больше, чем 100%, я сомневаюсь относительно you' d видят много различия.: P – muru 11 November 2016 в 01:15

Это все еще, кажется, проблема. Я разрешил его путем создания копии запаса, изображение Ubuntu и помещение Кв. - получают обертку на нем, которая будет ожидать существующих установок для окончания прежде, чем продолжиться (вместо того, чтобы перестать работать).

Шаги для решения

  1. Вход в систему консоли AWS и перемещенный к панели инструментов EC2.
  2. Создают новый экземпляр с изображением Ubuntu, которое Вы хотите.
  3. SSH в новый экземпляр и помещенный новое apt-get сценарий (см. ниже) в /usr/local/sbin/apt-get
  4. Делают это исполняемым файлом: sudo chmod 755 /usr/local/sbin/apt-get
  5. Гарантируют, что /usr/local/sbin/ впереди переменной ПУТИ в /etc/environment
  6. Выход из системы машины.
  7. Назад в недостатках AWS
    1. Остановка экземпляр ES2: Действия> состояние Экземпляра> Остановка
    2. Создают новое изображение из этого экземпляра: Действия> Изображение> Создают Изображение
  8. Использование сгенерированный AMI для всех новых экземпляров.

Сценарий: склонный - добираются

Сценарий, адаптированный от этого

#!/bin/bash

#
# Wait for the package manager locks to be released before trying to call apt-get
#

i=0
tput sc

while fuser /var/lib/dpkg/lock >/dev/null 2>&1 || fuser /var/lib/apt/lists/lock >/dev/null 2>&1; do
    case $(($i % 4)) in
        0 ) j="-" ;;
        1 ) j="\\" ;;
        2 ) j="|" ;;
        3 ) j="/" ;;
    esac
    tput rc
    echo -en "\r[$j] Waiting for other software managers to finish..."
    sleep 0.5
    ((i=i+1))
done

/usr/bin/apt-get "$@"
0
ответ дан 14 April 2017 в 01:24

В моем случае добавление текста /usr/bin/cloud-init status --wait && перед командой execute_command решило проблему,

файл json:

"provisioners" : [
    {
        "type" : "shell",
        "script" : "./setup.sh",
        "execute_command" : "/usr/bin/cloud-init status --wait && \
            sudo -E -S sh '{{ .Path }}'"
    }
]
4
ответ дан 5 May 2020 в 23:08

Другие вопросы по тегам:

Похожие вопросы: