Вопрос или проблема
Я создал файлы конфигурации
echo 'password: asd' > userdata
echo 'local-hostname: localhost' > metadata
Затем создал ISO из них
genisoimage -output geniso.iso -volid cidata -joliet -rock userdata metadata
И создал образ QEMU
virt-install --connect qemu:///system virt-type qemu --name mymachine --memory 4096 --vcpus=2 --os-type linux --os-variant ubuntu18.04 --disk path=ubuntu-18.04-server-cloudimg-amd64.img,format=qcow2 --disk geniso.iso,device=cdrom --import --network network=default --noautoconsole
На скриншоте ниже показано, что машина была изменена на localhost
, но пароль не сработал.
Формат конфигурации cloud-init немного более структурирован, чем тот, который вы использовали. И минимальное изменение в вашем случае — это учесть, что ведущий #cloud-init
не является необязательным.
Ваш вопрос довольно близок к этому или этому примеру, поэтому я рекомендую получить оставшиеся детали, если это необходимо, там.
Ответ или решение
Теория
Загрузка Ubuntu Cloud Image с использованием QEMU включает несколько ключевых шагов. Первоначально необходимо создать конфигурационные файлы для cloud-init
, которые будут использоваться при первом запуске виртуальной машины для её настройки. cloud-init
— это универсальный инструмент, который отвечает за настройку платформы при первом запуске. В вашем случае его использование включает установку пароля пользователя и изменение имени хоста.
Создание файлов игральных карт, таких как userdata
и metadata
, является важным шагом. userdata
управляет настройками пользователя, такими как пароль, SSH-ключи и региональные настройки. metadata
используется для определения данных метаинформации, таких как имя хоста или идентификатор экземпляра.
Для правильного понимания cloud-init
, каждый файл конфигурации должен начинаться с #cloud-config
, который идентифицирует документ для cloud-init
как файл настроек.
Далее, вы создаете ISO с этими файлами, чтобы процесс инициализации мог их использовать. После этого необходим запуск виртуальной машины с помощью QEMU, где процесс установки будет использовать предоставленную информацию для настройки системы.
Пример
В исходном подходе в вашем описании наблюдаются определенные отклонения от общей структуры, которые могут вызвать ошибки в пароле. Вот пример более корректной конфигурации:
-
Создайте
userdata
файл со следующей структурой:#cloud-config password: asd chpasswd: { expire: False } ssh_pwauth: True
-
Создайте метаданные (metadata) файл как вы уже делали:
echo 'local-hostname: localhost' > metadata
-
Создайте ISO файл:
genisoimage -output geniso.iso -volid cidata -joliet -rock userdata metadata
-
Воспользуйтесь командой
virt-install
для создания и запуска виртуальной машины:virt-install --connect qemu:///system virt-type qemu --name mymachine --memory 4096 --vcpus=2 --os-type linux --os-variant ubuntu18.04 --disk path=ubuntu-18.04-server-cloudimg-amd64.img,format=qcow2 --disk geniso.iso,device=cdrom --import --network network=default --noautoconsole
Применение
Если следовать вышеуказанным шагам, вы сможете запустить Ubuntu Cloud Image с задействованием корректных настроек cloud-init
. Вот несколько рекомендаций для успешного достижения желаемого результата:
-
Убедитесь, что файл
userdata
начинается с#cloud-config
. Это важно, так как без этой строкиcloud-init
не распознает файл как конфигурационный. -
Используйте команду
chpasswd: { expire: False }
, чтобы избежать автоматического требования смены пароля при первом входе. -
Убедитесь в том, что
ssh_pwauth
установлен в True, если вам нужно разрешить аутентификацию по паролю через SSH. -
Для проверки корректности созданного образа ISO можно использовать утилиты вроде
mount
в Linux, чтобы убедиться в наличии всех требуемых файлов. -
После успешной загрузки убедитесь, что изменения в системе соответствуют ожидаемым — например, проверьте имя хоста и возможность входа с помощью установленного пароля.
Следование этим инструкциям обеспечит успех в конфигурации и использовании Ubuntu Cloud Image с QEMU. Помните, что при работе с виртуальными машинами и облачными образами важно вести учет всех изменений и сохранять конфиденциальность данных, особенно в производственной среде.