Вопрос или проблема
Я пытаюсь создать пользовательский образ Ubuntu с помощью autoinstall, используя образ ISO Ubuntu сервер 20.04 LTS AMD64. Как мне нужно настроить user-data
, чтобы выполнить минимальную установку?
Как показывают сопоставления /var/log/installer/autoinstall-user-data
между автоматически установленными и вручную установленными серверами 22.04, такой выбор не представлен. Похоже, это внутренний параметр установщика.
Установленный размер все равно составляет 2.3 ГБ по сравнению с обычными 2.7 ГБ, так что «минимум» это относительное понятие. Например, snap
по-прежнему присутствует в минимальной версии, но less
был удален, так что это отнюдь не только необходимые пакеты.
Стоит помнить, что ядро и сопутствующие компоненты занимают около 1.5 ГБ. Минимальный вариант действительно сильно влияет на контейнеры и ВМ с маленькими ядрами.
Старый пост, но это первый, который появляется при поиске в Google вопроса о том, как выполнить минимальную установку с помощью autoinstall (user-data). Поэтому я размещаю его здесь.
Я думаю, что выяснил, как это можно сделать. Протестировано на 22.04 LTS. Как тестировал? Полная установка устанавливает ‘nano’, минимальная — нет. Честно говоря, минимальная версия даже не имеет ‘ping’. Да, не научный подход, но для меня этого достаточно.
autoinstall:
source:
id: ubuntu-server-minimal
Извините, это не ответ (пожалуйста, ответьте, если у вас есть), но ужасное решение — использовать late-command в пользовательских данных autoinstall, чтобы удалить как можно больше после установки для уменьшения размера. В документации, похоже, нет ничего об этом, и только одно упоминание в исходниках, в примере файла, который я не могу расшифровать: https://github.com/canonical/subiquity/blob/206b7ae678bc1993e1eef46c74efb12f30dbbb43/examples/install-sources.yaml
Я бы использовал что-то подобное.
user-data:
#cloud-config
autoinstall:
instance-id: iid-auto-default
version: 1
refresh-installer:
update: yes
channel: edge
early-commands:
- ping -c1 8.8.8.8
- ip -br -4 -c addr show | head -n 3
- systemctl stop ssh # иначе packer пытается подключиться и превышает максимальное количество попыток
apt:
geoip: true
preserve_sources_list: false
primary:
- arches:
- amd64
uri: 'http://nl.archive.ubuntu.com/ubuntu'
- arches:
- default
uri: 'http://ports.ubuntu.com/ubuntu-ports'
identity:
hostname: ubuntu
password: >-
$6$h.zoLndLImptklKU$RQVTwlPvXno7Zw0f1NpTkoRemOZckpHx3TkMZDc5hC5pZJQoDFwUZPsJnm5bbhxTqmhwu6oDuP.bLH0qDtXON/
realname: ubuntu
username: ubuntu
user-data:
disable_root: false
keyboard:
layout: us
toggle: null
variant: ''
locale: en_US
ssh:
allow-pw: true
authorized-keys: []
install-server: false
packages:
- ubuntu-desktop-minimal # если вы хотите UI для рабочего стола
late-commands:
- cp /cdrom/nocloud/post_install.sh /target/opt/
- curtin in-target --target=/target -- /opt/post_install.sh
updates: security
storage:
config:
- id: disk-sda
type: disk
ptable: gpt
match:
size: largest
wipe: superblock
preserve: false
name: ''
grub_device: false
- id: partition-0
type: partition
device: disk-sda
size: 512M
wipe: superblock
flag: boot
number: 1
preserve: false
grub_device: true
- id: format-0
type: format
fstype: fat32
volume: partition-0
preserve: false
- id: partition-1
type: partition
device: disk-sda
size: 1G
wipe: superblock
flag: ''
number: 2
preserve: false
grub_device: false
- id: format-1
type: format
fstype: ext4
volume: partition-1
preserve: false
- id: partition-2
type: partition
device: disk-sda
size: -1
wipe: superblock
flag: ''
number: 3
preserve: false
grub_device: false
- id: dm_crypt-0
type: dm_crypt
volume: partition-2
key: ThisIsASecretKey
preserve: false
- id: lvm_volgroup-0
type: lvm_volgroup
name: ubuntu-vg
devices:
- dm_crypt-0
preserve: false
- id: lvm_partition-0
type: lvm_partition
name: ubuntu-lv
volgroup: lvm_volgroup-0
size: -1
preserve: false
- id: format-2
type: format
fstype: ext4
volume: lvm_partition-0
preserve: false
- id: mount-2
type: mount
device: format-2
path: /
- id: mount-1
type: mount
device: format-1
path: /boot
- id: mount-0
type: mount
device: format-0
path: /boot/efi
system_upgrade:
enabled: False
error-commands:
- tail -n 500 /var/log/syslog | grep -E 'subiquity/Error' -B 100
К вашему сведению: сейчас я разрабатываю универсальный user-data с несколькими разными профилями/вариациями. Прямо сейчас у меня есть проблемы с постоянными переменными окружения и late-command.
Вот пример моих поздних команд. Я просто создал расширенную конфигурацию при первом запуске после установки с payloaded post_install.sh, который, безусловно, удаляет строку в rc.local после запуска. Папка /addfiles была ранее добавлена в ISO.
late-commands:
- echo 'admin* ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/admin
- cp /cdrom/server/addfiles/post-install.sh /target/root/
- cp /cdrom/server/addfiles/z.tar /target/root/
- curtin in-target --target=/target -- chmod +x /root/post-install.sh
- curtin in-target --target=/target -- echo -e "#!/bin/bash -e\n/bin/bash /root/post-install.sh\nexit 0" > /target/etc/rc.local
- curtin in-target --target=/target -- chmod 700 /etc/rc.local
Ответ или решение
Чтобы создать минимальную установку Ubuntu с помощью автоматической установки (autoinstall), вам нужно правильно настроить файл user-data
. Для Ubuntu Server 20.04 LTS вы можете использовать определенные параметры, чтобы добиться минимальной инсталляции. Следующий пример конфигурации user-data
поможет вам в этом.
Пример конфигурации user-data
#cloud-config
autoinstall:
version: 1
identity:
hostname: ubuntu
username: ubuntu
password: >
$6$h.zoLndLImptklKU$RQVTwlPvXno7Zw0f1NpTkoRemOZckpHx3TkMZDc5hC5pZJQoDFwUZPsJnm5bbhxTqmhwu6oDuP.bLH0qDtXON/
keyboard:
layout: us
locale: en_US.UTF-8
# Минимальная установка пакетов
packages:
- ubuntu-server-minimal
# Установка источника обновлений
apt:
preserve_sources_list: false
primary:
- arches:
- amd64
uri: 'http://nl.archive.ubuntu.com/ubuntu'
# Настройка диска и разделов
storage:
config:
- id: disk-sda
type: disk
wipe: superblock
ptable: gpt
match:
size: largest
- id: partition-0
type: partition
device: disk-sda
size: 512M
flag: boot
- id: format-0
type: format
fstype: ext4
volume: partition-0
- id: partition-1
type: partition
device: disk-sda
size: -1
- id: format-1
type: format
fstype: ext4
volume: partition-1
- id: mount-0
type: mount
device: format-0
path: /boot
- id: mount-1
type: mount
device: format-1
path: /
# Команды после установки для минимизации
late-commands:
- apt remove --purge -y snapd nano
- apt autoremove -y
# Обновления безопасности
updates:
security: true
Объяснение основных параметров
-
packages: Мы указываем установку
ubuntu-server-minimal
, чтобы включить только необходимое для минимальной работы системы. -
apt: Устанавливаем основной сервер обновлений и отключаем хранение списка источников.
-
storage: Настраиваем таблицу разметки и разделы на жестком диске. В данном примере используется GPT и два раздела: один для
/boot
и один для корневой системы/
. -
late-commands: Используем команду для удаления дополнительных пакетов, таких как
snapd
, которые могут не понадобиться в минимальной установке. Здесь также вызывается командаapt autoremove
, чтобы удалить неиспользуемые зависимости.
Завершение
С помощью данной конфигурации вы можете создать минимальную версию Ubuntu, которая будет содержать только необходимые для работы компоненты. Помните, что минимальная установка может варьироваться в зависимости от специфических нужд вашего проекта.
Этот пример послужит отправной точкой для создания вашей кастомизированной инсталляции Ubuntu Server 20.04 LTS с использованием autoinstall.