в aws ec2 я бы вставил свой скрипт в текстовое поле пользовательских данных, здесь я попробовал с помощью Custom Data установить скрипт, устанавливающий докер, но это не сработало, Я также попробовал закодировать его следующим образом:
certutil -encode installDockerBash.txt encoded.txt
прежде чем вставить его в текстовое поле, но докер все еще отсутствует, когда я подключаюсь к нему, поэтому я предполагаю, что скрипт не выполнился.
обновление: это мой сценарий, который я пытался вставить (необработанный и закодированный) в текстовое поле пользовательских данных на портале.azure.com -> Страница создания виртуальной машины (os Debian 11):
#!/bin/bash
echo "** Updating package lists..."
sudo apt update
echo "** Installing dependencies..."
sudo apt install -y apt-transport-https ca-certificates curl gnupg software-properties-common
echo "** Adding Docker GPG key..."
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
echo "** Adding Docker repository..."
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian bullseye stable"
echo "** Updating package lists again..."
sudo apt update
echo "** Installing Docker..."
sudo apt install -y docker-ce
echo "** Docker installation complete!"
обновление 2, скрипт выполнен (хотя и не сработал), мой вывод в облаке:
** Updating package lists...
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Reading package lists...
E: Could not get lock /var/lib/apt/lists/lock. It is held by process 700 (apt-get)
E: Unable to lock directory /var/lib/apt/lists/
** Installing dependencies...
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Reading package lists...
Building dependency tree...
Reading state information...
Package gnupg is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'gnupg' has no installation candidate
E: Unable to locate package software-properties-common
** Adding Docker GPG key...
E: gnupg, gnupg2 and gnupg1 do not seem to be installed, but one of them is required for this operation
(23) Failed writing body
** Adding Docker repository...
sudo: add-apt-repository: command not found
** Updating package lists again...
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Reading package lists...
E: Could not get lock /var/lib/apt/lists/lock. It is held by process 700 (apt-get)
E: Unable to lock directory /var/lib/apt/lists/
** Installing Docker...
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package docker-ce
** Docker installation complete!
Я довольно долго ждал, чтобы убедиться, но в следующий раз, когда я посмотрю этот журнал, я не знал об этом, я на самом деле искал, есть ли где-нибудь, где я могу найти ошибки, которые могли возникнуть в моих пользовательских данных сценарий
Меня заинтриговало, какой метод вы используете для развертывания этой виртуальной машины, учитывая ваше упоминание о текстовом поле.
Пользовательские данные могут указывать либо локальный файл, либо встроенный скрипт, заключенный в кавычки, при использовании Azure CLI. При передаче встроенного скрипта разрывы строк следует передавать с помощью \n
.
В обоих случаях вы также должны передать параметр --extensions customScript
.
az vm create \
--resource-group <resource_group_name> \
--name <vm_name> \
--image UbuntuLTS \
--admin-username <username> \
--admin-password <password> \
--custom-data myscript.sh \
--extensions customScript \
--no-wait
az vm create \
--resource-group <resource_group_name> \
--name <vm_name> \
--image UbuntuLTS \
--admin-username <username> \
--admin-password <password> \
--custom-data "#!/bin/bash\nsudo apt-get update\nsudo apt-get install -y docker.io" \
--extensions customScript \
--no-wait
Чтобы устранить неполадки сценария, попробуйте перенаправить вывод каждой команды в файл:
# /bin/bash
sudo apt-get install -y docker.io >> /tmp/customScript_stdout.txt
etc...
Сценарии можно запускать во время инициализации, используя поле «Пользовательские данные».
Развертывание виртуальной машины -> Дополнительно -> Пользовательские данные и инициализация облака -> Пользовательские данные
Вы должны написать или вставить сюда свой сценарий в виде обычного текста. Кодирование осуществляется Порталом автоматически.
Во всех случаях убедитесь, что любые команды, которые обычно требуют ввода данных пользователем, обрабатываются соответствующим образом, например, передача подтверждения в apt-get или yum с помощью переключателя -y
.
Я использовал веб-сайт portal.azure.com, нажмите «Создать ресурс», нажмите «ВМ», это что-то необычное? опытные разработчики этим не пользуются? (на aws есть флажок, позволяющий указать, закодированы ли эти пользовательские данные)
Портал в порядке. Я обновил свой ответ. Обычно вы можете найти логи вашего скрипта /var/log/cloud-init-output.log
ну, скрипт выполняется, он не работает, но он выполняется, я вижу это в выводе Cloud-Init-Output, как ни странно, те же самые команды работают, когда я ввожу их вручную
Если вы опубликуете новый вопрос вместе со своим сценарием, возможно, я или кто-то другой сможет помочь пролить на него свет.
Вы уверены, что сценарий еще не выполнялся, когда вы проверяли наличие Docker? «...cloud-init не ждет завершения настройки пользовательских данных, прежде чем сообщить платформе о готовности виртуальной машины». (См. Learn.microsoft.com/en-us/azure/virtual-machines/… ) Вы можете проверить /var/log/cloud-init.log, чтобы узнать, запустился ли он. (См. Learn.microsoft.com/en-us/azure/virtual-machines/linux/…).