Я пытаюсь подготовить Ubuntu 20.04 через упаковщик, и я пытаюсь использовать http-сервер упаковщика для предоставления конфигурации cloud-init. В Ubuntu 18.04 я мог бы сделать это, указав ip с помощью di (debian-installer), который за это время, кажется, устарел, но я не знаю, как я могу сделать то же самое с Ubuntu 20. Что касается Я так понимаю, Ubuntu 20.04 может использовать dhcp, но меня интересует назначение статического IP-адреса, чтобы виртуальная машина могла подключаться к http-серверу. Есть идеи, как я могу этого добиться? Или подход может быть неправильным?
Это то, что упаковщик запускает во время процесса загрузки (перед фактическим установщиком):
"/casper/vmlinuz/ ",
"initrd=/casper/initrd debug= ",
"autoinstall ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ ",
"--- <enter>"
ОС зависает на целевом объекте «Поиск имени хоста и сети» (непосредственно перед запуском cloud-init загружен / инициализирован). Это содержимое cloud-init:
#cloud-config
autoinstall:
version: 1
locale: en_US
keyboard:
layout: fr
ssh:
install-server: true
allow-pw: true
packages:
- qemu-guest-agent
storage:
layout:
name: direct
swap:
size: 0
user-data:
package_upgrade: true
timezone: Europe/Paris
users:
- name: username
passwd: $6$xyz$1D0kz5pThgRWqxWw6JaZy.6FdkUCSRndc/PMtDr7hMK5mSw7ysChRdlbhkX83PBbNBpqXqef3sBkqGw3Rahs..
groups: [adm, cdrom, dip, plugdev, lxd, sudo]
lock-passwd: false
sudo: ALL=(ALL) NOPASSWD:ALL
shell: /bin/bash
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJEXrziuUOCpWPvwOsGuF4K+aq1ufToGMi4ra/1omOZb
(хэш пароля находится в открытом доступе в Интернете, пожалуйста, не обсуждайте это :))
Это не строго связано упаковщику, собственно говоря. Я просто хотел бы знать, как я могу убедиться, что установка Ubuntu 20.04 может удаленно подключаться к веб-серверу для получения конфигурации cloud-init. Вот и все :)
Спасибо! Моя установка - это proxmox 6.4-9, packer 1.7.4 (работает на apple m1) и Ubuntu 20.04.3
После этого я добавил это в Ядро cli:
ip=10.88.88.159:10.88.88.126:255.255.255.0::eth0:off autoinstall ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/
Я использую eth0
, потому что это, кажется, имя интерфейса перед изменением на ens18
. Однако установщик продолжает жаловаться, что не распознает устройство. Конечно, я безрезультатно пробовал оба имени.
Мне удалось решить эту проблему, добавив директиву ip =
в командную строку ядра.
Вот как теперь выглядит boot_command
:
"boot_command": [
"<esc><enter><f6><esc><wait> ",
"<bs><bs><bs><bs><bs>",
"ip={{ user `vm_ip` }}::{{ user `vm_gateway` }}:{{ user `vm_netmask` }}::::{{ user `vm_dns` }} ",
"autoinstall ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/ ",
"--- <enter>"
]
Это это синтаксис:
client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>:
<dns0-ip>:<dns1-ip>:<ntp0-ip>:...
Ссылка: https://git.kernel.org/pub/scm/libs/klibc/klibc.git/tree/usr/kinit/ipconfig/README.ipconfig
Поэтому я пропустил server-ip (который предназначен для nfs - не нужен), затем имя хоста, устройство (которое является сетевым интерфейсом - не нужно, это только привело к еще большей путанице с моей стороны) и autoconf, и я добавил dns0 после сетевой маски. Например:
ip=192.168.0.20::192.168.0.1:255.255.255.0::::8.8.8.8
Таким образом, для всех, кто интересуется, полная команда будет (фиктивные IP-адреса):
initrd=/casper/initrd quiet ip=192.168.0.20::192.168.0.1:255.255.255.0::::8.8.8.8 autoinstall ds=nocloud-net;s=http://192.168.0.50:80 ---
---
важны в том, что записывается впоследствии, сохраняется в строке команд процесса ( / proc / cmdline
), поэтому это означает, что он будет запускаться снова и снова во время загрузки. Вероятно, вы не захотите делать это с помощью автоматической установки и конфигурации сети (которая в любом случае будет автоматически скопирована в cloud-init, так что она все равно сохраняется).
Может быть, это кому-то поможет. Мне еще многое нужно понять самому :)