Ubuntu 20.04/21.10
Теперь пришло время самого сложного - установка Ubuntu через cloud-init. Читать это конечно легко, но разобраться было непросто.
Подготовка
Для автоустановки понадобится 2 файла - meta-data
и user-data
. Все действо происходит в user-data
, а в meta-data
указываются метаданные установщика, но они нам не пригодятся, так как мы не в облаке. Только спустя долгие мучения понял, что нужно существование обоих файлов, даже учитывая, что у нас не облако.
В meta-data
записываем следующую строку:
instance-id: test
Можно указать любое значение.
Настраиваем загрузчик
В /iso
монтируем образ и указываем до него путь (url=
), указываем путь до папки (s=
) с cloud-init скриптами (meta-data/user-data)
label 6
menu label ^Install Ubuntu
kernel http://10.0.1.1/iso/casper/vmlinuz
initrd http://10.0.1.1/iso/casper/initrd
append url=http://10.0.1.1/ubuntu-21.10-live-server-amd64.iso autoinstall ds=nocloud-net;s=http://10.0.1.1/ cloud-config-url=/dev/null ip=:::::eth1:dhcp fsck.mode=skip net.ifnames=0 biosdevname=0 ---
Настраиваем автоматическую установку
$ cat user-data
#cloud-config
autoinstall:
apt:
geoip: true
preserve_sources_list: false
primary:
- arches: [amd64, i386]
uri: http://archive.ubuntu.com/ubuntu
identity: {hostname: server, password: CRYPTED_PASS,
realname: ubuntu, username: ubuntu}
keyboard: {layout: us, toggle: null, variant: ''}
locale: en_US.UTF-8
network:
ethernets:
eth0:
critical: true
addresses: [192.168.100.99/24]
gateway4: 192.168.100.1
nameservers:
addresses: [8.8.8.8]
eth1: {dhcp-identifier: mac, dhcp4: false}
version: 2
ssh:
allow-pw: true
authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3b.....
install-server: true
storage:
config:
- {ptable: gpt, path: /dev/sda, wipe: superblock-recursive,
preserve: false, name: '', grub_device: true, type: disk, id: disk-sda}
- {ptable: gpt, path: /dev/sdb, wipe: superblock-recursive,
preserve: false, name: '', grub_device: false, type: disk, id: disk-sdb}
- {device: disk-sda, size: 1048576, flag: bios_grub, number: 1, preserve: false,
grub_device: false, type: partition, id: partition-sda-0}
- {device: disk-sdb, size: 1048576, flag: bios_grub, number: 1, preserve: false,
grub_device: false, type: partition, id: partition-sdb-0}
- {device: disk-sda, size: 536870912, wipe: superblock, flag: '', number: 2, preserve: false,
grub_device: false, type: partition, id: partition-sda-1}
- {fstype: ext4, volume: partition-sda-1, preserve: false, type: format, id: format-sda-0}
- {device: disk-sdb, size: 536870912, wipe: superblock, flag: '', number: 2, preserve: false,
grub_device: false, type: partition, id: partition-sdb-1}
- {fstype: ext4, volume: partition-sdb-1, preserve: false, type: format, id: format-sdb-0}
- {device: disk-sda, size: -1, wipe: superblock, flag: '', number: 3,
preserve: false, grub_device: false, type: partition, id: partition-sda-2}
- {device: disk-sdb, size: -1, wipe: superblock, flag: '', number: 3,
preserve: false, grub_device: false, type: partition, id: partition-sdb-2}
- name: md0
raidlevel: raid1
devices: [partition-sda-2, partition-sdb-2]
spare_devices: []
preserve: false
wipe: superblock-recursive
ptable: gpt
type: raid
id: raid-0
- {device: raid-0, size: -1, wipe: superblock, flag: '', number: 1, preserve: false,
grub_device: false, type: partition, id: partition-root-md}
- {fstype: ext4, volume: partition-root-md, preserve: false, type: format, id: format-1}
- {path: /, device: format-1, type: mount, id: mount-1}
- {path: /boot, device: format-sda-0, type: mount, id: mount-0}
version: 1
late-commands:
- echo 'ubuntu ALL=(ALL) NOPASSWD:ALL' > /target/etc/sudoers.d/ubuntu
- sed -ie 's/GRUB_CMDLINE_LINUX=.*/GRUB_CMDLINE_LINUX="net.ifnames=0 ipv6.disable=1 biosdevname=0"/' /target/etc/default/grub
- curtin in-target --target /target update-grub2
Разметка должна быть именно такой. Т.е. чтобы RAID root был создан как 2 отдельных отдела, т.е. sda2 и sdb2. Если /dev/sda и /dev/sdb использовать как RAID устройства, то установка не пройдет. Если на одном диске создать /boot и рейд из раздела и диска, то работать не будет.
Additional
Логи лежат по пути /var/log/installer
У скрипта автоустановки есть интересная опция phone_home
- запрос по URL по окончанию установки. Можно сделать своеобразный хук. Также cloud-init умеет в chef/puppet.
SRC
Autoinstall - https://ubuntu.com/server/docs/install/autoinstall
PXE Boot - https://www.golinuxcloud.com/pxe-boot-server-cloud-init-ubuntu-20-04/#Step-4_Configure_PXE_Boot_Server
No Comments