назначаю ip для ubuntu 20.04 во время установки (packer / cloud-init context)

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

1
задан 29 August 2021 в 16:12

1 ответ

Мне удалось решить эту проблему, добавив директиву 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, так что она все равно сохраняется).

Может быть, это кому-то поможет. Мне еще многое нужно понять самому :)

2
ответ дан 4 September 2021 в 09:26

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

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