Рейтинг:0

Использование Packer для развертывания Ubuntu 20.04 на Proxmox

флаг us

Проблема

TLDR: У меня есть это, выполняющее большую часть автоустановки (я думаю?), но оно продолжает вызывать установку с графическим интерфейсом после прохождения автоустановки. Ищите любой вклад в то, почему он продолжает поднимать графический интерфейс. /TLDR

Более длинная версия: Я пытаюсь выяснить, как развернуть Ubuntu (и, в конечном итоге, другие дистрибутивы) на Proxmox с помощью Hashicorp Packer. У меня настроена и работает большая часть конфигов... вроде? Он успешно «развертывается», но не может завершить первоначальную настройку, он продолжает выполнять автоматическую установку, но затем все еще вызывает установку с графическим интерфейсом. При переходе через графический интерфейс вручную после завершения части автоматической установки кажется, что все уже заполнено (за исключением части идентификации пользователя, т.е. FullName/Username/и т. д.). Кажется, даже не нужно искать IP-адрес, например, когда вы проходите только через графический интерфейс, поэтому я думаю, что DHCP работает нормально?

Я пытался рассмотреть несколько других подобных вопросов, но их решения мне не помогли (пока).

теории

У меня есть несколько теорий, но ни одна из них не работает, или я не знаю, как их проверить.

  1. Я что-то забыл в данные пользователя (yaml), и из-за этого он пытается вызвать графический интерфейс.
  2. Мне не хватает некоторых параметров конфигурации в .pkr.hcl файл, который необходим Proxmox для правильной настройки виртуальной машины?
  3. Что-то странное с версией Ubuntu, которую я использую, может быть, мне нужен другой ISO? Но материал, который я читал, просто говорит, что Облако-инициализация функция просто заменяет устаревшее preseed.cfg для данные пользователя (yaml), поэтому я сомневаюсь в этой теории.
  4. Мне нужно установить какую-то функцию ядра? Честно говоря, не знаю, с чего начать, я также уверен, что если бы это было так, я бы увидел что-нибудь об этом где-нибудь еще. Но эй, может быть, я просто искал не в том месте?
  5. данные пользователя файл не загружается в Ubuntu должным образом?

Обнадеживающие результаты

  1. Если вы знаете волшебный соус, пожалуйста, угостите меня им :)
  2. Если вы знаете, как заставить Ubuntu 20.04 перенаправлять некоторые из своих журналов во время установки, чтобы я мог посмотреть глубже, я был бы признателен! То же самое для лучшего логирования упаковщика (помимо -отлаживать, это я уже пробовал). я пытался /var/журнал/установщик, но я не думаю, что у меня есть четкое представление о том, что происходит. Но я не вижу никаких сбоев, кроме ошибки ключа SSH, и я не вижу никаких признаков данные пользователя загрузка или сбои загрузки.
  3. Если у вас есть какие-либо идеи о том, как проверить некоторые из моих теорий или любые другие теории, я буду рад их услышать!
  4. Если вы видите, что я делаю неправильно в приведенных ниже файлах конфигурации, пожалуйста, укажите на них! Я пытаюсь сделать это в БУНКЕ уже несколько дней и нахожусь у стены, я не знаю, как преодолеть

Обновления (продолжаются)

  1. найденный seed из http://192.168.0.144:80/user-data не поддерживается DataSourceNoCloud [seed=None][dsmode=net] в /var/log/cloud-init.log глядя на то, почему это вернулось, любые советы будут оценены :)
  2. Итак, я понял, почему произошла вышеуказанная ошибка, похоже, она была не в правильном формате YAML. Я просто загрузил файл в средство форматирования YAML, а затем скопировал его обратно в целевой файл.
  3. Теперь ошибка в том, что загруженный файл YAML пуст. /var/lib/cloud/seed/nocloud/пользовательские данные, опять же, буду признателен за любой совет :)

Намекать

Если вы достаточно круты, чтобы попытаться воспроизвести этот материал, или если вы наткнулись на это после того, как на него (надеюсь) был дан ответ, сделайте свою жизнь проще, используя пример.auto.pkrvars.hcl файл.

Версии

Проксмокс: Проксмокс VE 7.1-4
Окна: Windows 10 Про: 10.0.19043.0
Упаковщик: 1.7.10

Пример.pkr.hcl

упаковщик {
  обязательные_плагины {
    проксмокс = {
      версия = " >= 1.0.1"
      источник = "github.com/hashicorp/proxmox"
    }
  }
}

источник "proxmox-iso" "proxmox-ubuntu-20" {
  proxmox_url = "https://proxmox.lan:8006/api2/json"
  vm_name = "упаковщик-ubuntu-20"
  iso_url = "http://iso.repo.lan/ubuntu-20.04.3-live-server-amd64.iso"
  iso_checksum = "f8e3086f3cea0fb3fefb29937ab5ed9d19e767079633960ccb50e76153effc98"
  имя пользователя = "${var.pm_user}"
  пароль = "${var.pm_pass}"
  токен = "${var.pm_token}"
  узел = "проксмокс"
  iso_storage_pool = "локальный"

  ssh_username = "${var.ssh_user}"
  ssh_password = "${var.ssh_pass}"
  ssh_timeout = "20 минут"
  ssh_pty = правда
  ssh_handshake_attempts = 20

  boot_wait = "5s"
  http_directory = "http" # Запускает локальный http-сервер, обслуживает файл Preseed
  загрузочная_команда = [
    "<esc><wait><esc><wait><f6><wait><esc><wait>",
    "<bs><bs><bs><bs><bs>",
    "ip=${cidrhost("192.168.0.0/24", 9)}::${cidrhost("192.168.0.0/24", 1)}:${cidrnetmask("192.168.0.0/24")}: :::${cidrhost("192.168.0.0/24", 1)} ",
    "автоустановка ds=nocloud-net;s=http://{{ .HTTPIP }}:{{ .HTTPPort }}/",
    "--- <введите>"
  ]

  insecure_skip_tls_verify = истина

  имя_шаблона = "упаковщик-ubuntu-20"
  template_description = "сгенерированный упаковщиком ubuntu-20.04.3-server-amd64"
  размонтировать_iso = истина

  пул = "упаковщик"
  память = 4096
  ядра = 1
  розетки = 1
  ОС = "l26"
  qemu_agent = правда
  облако_инит = правда
  # scsi_controller = "virtio-scsi-pci"
  диски {
    тип = "SCSI"
    размер_диска = "30G"
    storage_pool = "локальный-lvm"
    storage_pool_type = "lvm"
    формат = "сырой"
  }
  сетевые адаптеры {
    мост = "vmbr0"
    модель = "virtio"
    брандмауэр = правда
    # vlan_tag = 1
  }
}

строить {
  источники = ["source.proxmox-iso.proxmox-ubuntu-20"]
  поставщик "оболочки" {
    встроенный = [
      "в то время как [ ! -f /var/lib/cloud/instance/boot-finished]; выполнить эхо "Ожидание облачной инициализации..."; заснуть 1; готово",
      "лс/"
    ]
  }
}

vars.pkr.hcl

переменная "pm_user" {
  тип = строка
  description = "Имя пользователя Proxmox"
  по умолчанию = "packer@pam!<тег API>"
}
переменная "pm_pass" {
  тип = строка
  description = "Пароль пользователя Proxmox"
  по умолчанию = "упаковщик"
}
переменная "pm_token" {
  тип = строка
  description = "Токен API Proxmox"
}
переменная "ssh_user" {
  тип = строка
  description = "Пользователь SSH"
  по умолчанию = "упаковщик"
}
переменная "ssh_pass" {
  тип = строка
  описание = "Пароль SSH"
  по умолчанию = "упаковщик"
}
переменная "vm_name" {
  тип = строка
  описание = "Имя ВМ"
  по умолчанию = "packer_hostname"
}

http/пользовательские данные

автоустановка:
  версия: 1
  локаль: en_US.UTF-8
  клавиатура:
    макет: en
    вариант: мы
  личность:
    имя хоста: упаковщик-ubuntu-20
    пароль: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0" #ubuntu
    имя пользователя: убунту
    настоящее имя: убунту
  установщик обновлений: 
    обновление: ложь
  СШ:
    сервер установки: да
    разрешить-pw: да
  пакеты:
    - qemu-гостевой агент
  место хранения:
    макет:
      название: прямой
    менять:
      размер: 0

Источники

https://www.aerialls.eu/posts/ubuntu-server-2004-image-packer-subiquity-for-proxmox/
https://ubuntu.com/server/docs/install/autoinstall-reference
https://cloudinit.readthedocs.io/en/latest/topics/datasources/nocloud.html
https://cloudinit.readthedocs.io/en/latest/topics/modules.html#write-files
https://cloudalbania.com/posts/2022-01-homelab-with-proxmox-and-packer/

Рейтинг:0
флаг us

Отвечать

Как назло, я искал в совершенно ошибочном направлении SMH.
Дело в том, что я не читал Облако-инициализация Часто задаваемые вопросы достаточно близко. Все, что мне нужно было сделать, это добавить #cloud-config как первая строка в моем данные пользователя файл.

Приведенные ниже конфиги будут работать для всех, кто заинтересован.

Я помещаю полные документы здесь. Не стесняйтесь просматривать, если интересно https://github.com/aRustyDev/упаковщик

Пример.pkr.hcl

упаковщик {
  обязательные_плагины {
    проксмокс = {
      версия = " >= 1.0.1"
      источник = "github.com/hashicorp/proxmox"
    }
  }
}

источник "proxmox-iso" "proxmox-ubuntu-20" {
  proxmox_url = "https://proxmox.lan:8006/api2/json"
  vm_name = "упаковщик-ubuntu-20"
  iso_url = "http://iso.repo.lan/ubuntu-20.04.3-live-server-amd64.iso"
  iso_checksum = "f8e3086f3cea0fb3fefb29937ab5ed9d19e767079633960ccb50e76153effc98"
  имя пользователя = "${var.pm_user}"
  пароль = "${var.pm_pass}"
  токен = "${var.pm_token}"
  узел = "проксмокс"
  iso_storage_pool = "локальный"

  ssh_username = "${var.ssh_user}"
  ssh_password = "${var.ssh_pass}"
  ssh_timeout = "20 минут"
  ssh_pty = правда
  ssh_handshake_attempts = 20

  boot_wait = "5s"
  http_directory = "http" # Запускает локальный http-сервер, обслуживает файл Preseed
  загрузочная_команда = [
    "<esc><wait><esc><wait><f6><wait><esc><wait>",
    "<bs><bs><bs><bs><bs>",
    "ip=${cidrhost("192.168.0.0/24", 9)}::${cidrhost("192.168.0.0/24", 1)}:${cidrnetmask("192.168.0.0/24")}: :::${cidrhost("192.168.0.0/24", 1)} ",
    "автоустановка ds=nocloud-net;s=http://httpd.proxmox.local:80/preseed/ubuntu-20/",
    "--- <введите>"
  ]

  insecure_skip_tls_verify = истина

  имя_шаблона = "упаковщик-ubuntu-20"
  template_description = "сгенерированный упаковщиком ubuntu-20.04.3-server-amd64"
  размонтировать_исо = истина

  пул = "упаковщик"
  память = 4096
  ядра = 1
  розетки = 1
  ОС = "l26"
  qemu_agent = правда
  диски {
    тип = "SCSI"
    размер_диска = "30G"
    storage_pool = "локальный-lvm"
    storage_pool_type = "lvm"
    формат = "сырой"
  }
  сетевые адаптеры {
    мост = "vmbr0"
    модель = "virtio"
    брандмауэр = правда
  }
}

строить {
  источники = ["source.proxmox-iso.proxmox-ubuntu-20"]
  поставщик "оболочка" {
    встроенный = [
      "в то время как [ ! -f /var/lib/cloud/instance/boot-finished]; выполнить эхо "Ожидание облачной инициализации..."; заснуть 1; готово",
      "лс/"
    ]
  }
}

vars.pkr.hcl

переменная "pm_user" {
  тип = строка
  description = "Имя пользователя Proxmox"
  по умолчанию = "packer@pam!<тег API>"
}
переменная "pm_pass" {
  тип = строка
  description = "Пароль пользователя Proxmox"
  по умолчанию = "упаковщик"
}
переменная "pm_token" {
  тип = строка
  description = "Токен API Proxmox"
}
переменная "ssh_user" {
  тип = строка
  description = "Пользователь SSH"
  по умолчанию = "упаковщик"
}
переменная "ssh_pass" {
  тип = строка
  описание = "Пароль SSH"
  по умолчанию = "упаковщик"
}
переменная "vm_name" {
  тип = строка
  описание = "Имя ВМ"
  по умолчанию = "packer_hostname"
}

http/пользовательские данные

#cloud-config
автоустановка:
  версия: 1
  локаль: en_US.UTF-8
  клавиатура:
    макет: en
    вариант: мы
  личность:
    имя хоста: упаковщик-ubuntu-20
    пароль: "$6$exDY1mhS4KUYCE/2$zmn9ToZwTKLhCw.b4/b.ZRTIZM30JZ4QrOQ2aOXJ8yk96xpcCof0kxKwuX1kqLG/ygbJ1f8wxED22bTL4F46P0" #ubuntu
    имя пользователя: убунту
    настоящее имя: убунту
  установщик обновлений: 
    обновление: ложь
  СШ:
    сервер установки: да
    разрешить-pw: да
  пакеты:
    - qemu-гостевой агент
  место хранения:
    макет:
      название: прямой
    менять:
      размер: 0
David avatar
флаг cn
Ответы не содержат рекламы, пожалуйста, удалите.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.