Автоматически запускать сценарий bash при запуске виртуальной машины Azure

в 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!

Вы уверены, что сценарий еще не выполнялся, когда вы проверяли наличие 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/…).

cdub 24.04.2024 22:18

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

buga 26.04.2024 20:56
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
2
228
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Меня заинтриговало, какой метод вы используете для развертывания этой виртуальной машины, учитывая ваше упоминание о текстовом поле.

Пользовательские данные могут указывать либо локальный файл, либо встроенный скрипт, заключенный в кавычки, при использовании 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 есть флажок, позволяющий указать, закодированы ли эти пользовательские данные)

buga 26.04.2024 20:40

Портал в порядке. Я обновил свой ответ. Обычно вы можете найти логи вашего скрипта /var/log/cloud-init-output.log

Architect Jamie 26.04.2024 21:20

ну, скрипт выполняется, он не работает, но он выполняется, я вижу это в выводе Cloud-Init-Output, как ни странно, те же самые команды работают, когда я ввожу их вручную

buga 26.04.2024 22:06

Если вы опубликуете новый вопрос вместе со своим сценарием, возможно, я или кто-то другой сможет помочь пролить на него свет.

Architect Jamie 27.04.2024 00:01
stackoverflow.com/q/78393852/11783857
buga 27.04.2024 06:57

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

Включите как назначенные системой, так и назначенные пользователем удостоверения для виртуальной машины Azure одновременно в одном вызове REST API
Свойство windowsConfiguration.patchSettings.patchMode недопустимо при создании azurerm_windows_virtual_machine_scale_set
Как отменить экспорт в Azure с помощью az cli?
Портал Azure: как настроить идентификатор клиента и секрет клиента
Виртуальная машина Azure — программный запуск и остановка машины
Как скопировать снимок виртуальной машины в учетную запись хранения в Azure?
Как использовать командлет Powershell New-AzConfigurationAssignment для динамической области для разных подписок — диспетчер обновлений Azure
Какой самый экономичный способ автоматического запуска виртуальной машины Azure?
Восстановление виртуальной машины Azure поколения 1 на новую виртуальную машину завершается с ошибкой CloudInternalError
Невозможно включить шифрование на узле для виртуальной машины Azure