Masz do zainstalowania wiele maszyn z Ubuntu 24.04 i nie chcesz każdej instalować ręcznie? Chcesz zautomatyzować proces i stworzyć gotowe ISO, które samo się instaluje? Ten przewodnik pokaże Ci krok po kroku, jak to zrobić – od konfiguracji autoinstall.yaml po modyfikację obrazu ISO.
Poradnik jest przeznaczony dla Ubuntu 24.04 oraz nowszych.
Starsze wersje Ubuntu (do 20.04) korzystają z mechanizmu preseed,
który nadal działa poprawnie i nie jest omawiany w tym dokumencie.
Wyróżnię trzy najpopularniejsze metody wykorzystania pliku autoinstall jego pobrania i uruchomienia przez instalator.
Na początku omówmy, czym jest plik autoinstall.
Autoinstall to zestaw komend przekazywanych do instalatora, który pozwala na pełną lub częściową automatyzację instalacji.
Odnosi się to do tworzenia użytkowników, sposobu partycjonowania dysku, instalacji pakietów czy szyfrowania instalacji.
Jest połączony z mechanizmem cloud-init
, który wykorzystywany jest w środowiskach serwerowych.
Pełny opis znajdziesz na oficjalnej stronie. Pamiętaj, że Canonical stale rozwija autoinstall.yaml
, dlatego przed wdrożeniem sprawdź aktualną dokumentację:
https://canonical-subiquity.readthedocs-hosted.com/en/latest/reference/autoinstall-reference.html
Na potrzeby tego poradnika wykorzystamy następujący plik autoinstall.yaml:
#cloud-config
autoinstall:
version: 1
storage:
layout:
name: lvm
sizing-policy: all
keyboard:
layout: pl
toggle: null
variant: ''
locale: pl_PL
identity:
realname: 'John Doe'
hostname: macpro
username: john
password: $y$j9T$SB516meRbmpCmIEK86UeC1$7bqarQ6Q1BQneUA/osert66GP8NqwN6BXaNEPKIss/4
updates: all
codecs:
install: true
drivers:
install: true
snaps:
- name: code
channel: stable
classic: true
packages:
- vim
- wget
- preload
- btop
- gnome-sushi
timezone: "Europe/Warsaw"
shutdown: reboot
late-commands:
- curtin in-target -- sh -c "yes | apt install $(check-language-support -l pl)"
- curtin in-target -- sh -c "update-locale LANG=pl_PL.UTF-8"
- curtin in-target -- sh -c "sed -i 's/\(GRUB_CMDLINE_LINUX_DEFAULT=\"[^\"]*\)/\1 pci=nomsi/' /etc/default/grub"
- curtin in-target -- sh -c "update-grub"
- curtin in-target -- sh -c "wget -qO /tmp/google-key.pub https://dl.google.com/linux/linux_signing_key.pub"
- curtin in-target -- sh -c "cat /tmp/google-key.pub | gpg --dearmor > /usr/share/keyrings/google-chrome-keyring.gpg"
- curtin in-target -- sh -c "echo 'deb [signed-by=/usr/share/keyrings/google-chrome-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main' > /etc/apt/sources.list.d/google-chrome.list"
- curtin in-target -- sh -c "apt update && apt install -y google-chrome-stable"
Hasło użytkownika to: pass
Wygenerowane poleceniem: mkpasswd z pakietu whois
sudo apt install whois
Ten przykładowy plik jest przygotowany do instalacji Ubuntu na komputerze MacBook Pro 2011, rozwiązując ewentualne problemy użytkownika takie jak:
- instalacja sterowników karty wifi
- pełna aktualizacja podczas instalacji
- dodanie parametrów do kernela w celu usprawnienia obsługi karty sieciowej
- instalacja dodatkowych pakietów
- instalacja Google Chrome
- instalacja języka Polskiego
Plik ten możemy podać do instalatora podczas instalacji, poprzez link do zewnętrznego serwera dla przykładu:
http://horoszkiewicz.eu/cdn/ubuntu/autoinstall.yaml
To rozwiązanie jest uniwersalne, jeśli nie mamy personalizowanego obrazu iso. Pobieramy go bezpośrednio ze strony www:
https://ubuntu.com/download/desktop
Metoda nie sprawdza się w przypadku instalacji nienadzorowanych, gdy musimy wdrożyć wiele komputerów. Może znacząco wydłużyć czas wdrażania i wymaga dodatkowej pracy zespołu IT.
W takim wypadku, lepszym rozwiązaniem będzie edycja pliku iso i przygotowanie obrazu personalizowanego w którym:
-> Podamy plik lokalnie, modyfikując wpisy w programie uruchomieniowym grub
-> Podamy zdalny adres pod którym instalator będzie szukał plików konfiguracyjnych
W przypadku tej drugiej opcji struktura trochę się różni na zdalnym serwerze:
https://horoszkiewicz.eu/cdn/ubuntu/
Muszą znajdować się dwa pliki:
ubuntuauto
├── meta-data # Plik może być pusty, dla instalacji takiej jak w przykładzie.
└── user-data # powinien zawierać tylko `autoinstall.yaml`, jeśli celem jest automatyczna instalacja.
Ważne: W przypadku wykorzystania tych plików z mechanizmem cloud-init zawartość tych plików może być inna. Dlatego możesz znaleźć inne informacje na ich temat w sieci.
Przygotowanie ISO
Pobranie plików z ISO
W tym przykładzie zakładam, że znajdujemy się w katalogu:
/home/user/work/ubuntuiso
Tutaj pobieramy najnowsze dostępne ISO Ubuntu Desktop. Musimy jeszcze utworzyć katalog src, w którym zamieścimy pliki, które umieścimy w naszym iso.
mkdir src
Następnie instalujemy potrzebne oprogramowanie do edycji ISO:
sudo apt install xorriso genisoimage vim
edytor vim możesz zmienić na swój ulubiony :)
Teraz potrzebujemy pobrać z obecnego iso dwa pliki
/boot/grub/grub.cfg
md5sum.txt
isoinfo -i ubuntu-24.04.2-desktop-amd64.iso -x "/BOOT/GRUB/GRUB.CFG;1" > src\boot\grub\grub.cfg
isoinfo -i ubuntu-24.04.2-desktop-amd64.iso -x "/MD5SUM.TXT;1" > src\md5sum.txt
Listowanie zawartości ISO uzyskasz komendą:
isoinfo -i ubuntu-24.04.2-desktop-amd64.iso -l
Edycja grub.cfg
Do pliku grub.cfg dodajemy potrzebne dla nas konfiguracje:
Duplikujemy wpis (tyle razy ile potrzebujemy opcji wyboru instalacji):
menuentry "Try or Install Ubuntu" {
set gfxpayload=keep
linux /casper/vmlinuz --- quiet splash
initrd /casper/initrd
}
Nowy wpis edytujemy dla lokalnego pliku autoinstall.yaml:
menuentry "Install Ubuntu from autoinstall.yaml" {
set gfxpayload=keep
linux /casper/vmlinuz autoinstall subiquity.autoinstallpath=/cdrom/autoinstall/autoinstall.yaml --- quiet splash
initrd /casper/initrd
}
autoinstall subiquity.autoinstallpath=/cdrom/autoinstall/autoinstall.yaml
oznacza, że Ubuntu pobierze plik z naszego ISO.
lub dla plików ze zdalnego serwera wwww:
menuentry "Install Ubuntu from remote" {
set gfxpayload=keep
linux /casper/vmlinuz autoinstall ds=nocloud-net\;s=https://horoszkiewicz.eu/ubuntuauto/ --- quiet splash
initrd /casper/initrd
}
autoinstall ds=nocloud-net;s=URL
– oznacza, że Ubuntu użyje cloud-init
, aby pobrać pliki user-data
i meta-data
z podanego URL.
WAŻNE!!!
Zwróć uwagę na literówki, jeśli popełnisz błąd w składni instalator nie wykryje poprawnie Twoich plików.
Teraz musimy umieścić te pliki w naszym nowym ISO. Upewnij się, że w katalogu “src” znajdują się wymagane oraz odpowiednio przygotowane pliki:
src
├── autoinstall
│ └── autoinstall.yaml
├── grub
│ └── grub.cfg
└── md5sum.txt
Naprawa sum kontrolnych
ISO Ubuntu zawiera plik md5sum.txt
, który przechowuje sumy kontrolne plików. Jeśli zmodyfikujesz grub.cfg
lub dodasz plik autoinstall.yaml
, musisz zaktualizować sumy kontrolne, aby instalator nie zgłaszał błędu.
Tutaj znajduje się przykładowy skrypt, który wykona to za Ciebie:
Zapisz go jako md5fix.sh wydaj polecenie:
chmod +x md5fix.sh
./md5fix.sh
#!/bin/bash
cd src || exit 1
# Sprawdzenie, czy istnieje md5sum.txt
if [[ ! -f md5sum.txt ]]; then
echo "Brak pliku md5sum.txt. Utwórz go przed uruchomieniem skryptu."
exit 1
fi
# Tymczasowy plik do przechowywania nowych sum kontrolnych
tmpfile=$(mktemp)
# Oblicz MD5 dla wszystkich plików poza md5sum.txt i zapisz do tymczasowego pliku
find . -type f ! -name 'md5sum.txt' -exec md5sum {} \; > "$tmpfile"
# Aktualizacja istniejących wpisów w md5sum.txt
cat md5sum.txt "$tmpfile" | awk '
{
sum[$2] = $1 # Przechowujemy sumy kontrolne dla każdej ścieżki pliku
}
END {
for (file in sum)
print sum[file], file
}' > md5sum.txt.tmp
mv md5sum.txt.tmp md5sum.txt
rm -f "$tmpfile"
Przygotowanie finalnego ISO
Komenda generowania nowego ISO:
xorriso \
-indev "ubuntu-24.04.2-desktop-amd64.iso" \
-outdev "ubuntu2404_autoinstall.iso" \
-volid "ubuntu_autoinstall" \
-map "src/autoinstall/autoinstall.yaml" "/autoinstall/autoinstall.yaml" \
-map "src/boot/grub/grub.cfg" "/boot/grub/grub.cfg" \
-map "src/md5sum.txt" "/md5sum.txt" \
-boot_image any replay
Weryfikacja poprawności ISO
To polecenie wygeneruje nowe ISO, musimy jeszcze sprawić by nie miało błędów z GPT.
fdisk -l ubuntu2404_autoinstall.iso
sgdisk --move-second-header ubuntu2404_autoinstall.iso
fdisk -l ubuntu2404_autoinstall.iso
Powinno końcowo zwrócić:
Dysk ubuntu2404_autoinstall.iso: 5,91 GiB, bajtów: 6342377472, sektorów: 12387456
Jednostki: sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Typ etykiety dysku: gpt
Identyfikator dysku: 6E354C03-737C-42ED-AFBF-6D3A77445469
Urządzenie Początek Koniec Sektory Rozmiar Typ
mavops_ubuntu2404_autoinstall.iso1 64 12376631 12376568 5,9G Microsoft - dane podstawowe
mavops_ubuntu2404_autoinstall.iso2 12376632 12386775 10144 5M System EFI
Teraz wszystko jest gotowe. Wypal iso na dysk USB przy użyciu swojej ulubionej metody, np. balena etcher i sprawdź jak działa automatyzacja.
Ewentualne problemy:
Nazwy plików
Nazwa pliku autoinstall.yaml może być dowolna, we wskazanym przez Ciebie katalogu możesz mieć różne pliki np:
macbookpro.yaml
szyfrowanainstalacja.yaml
Ważne, aby wpisy w w grub.cfg
poprawnie wskazywały te pliki. Jeśli instalator z jakiegoś powodu nie działa automatycznie to właśnie przez błąd w ich wskazaniu.
Weryfikacja składni
Pamiętaj, że plik autoinstall.yaml to plik YAML, jego składnia ma ogromne znaczenie. Błąd w formatowaniu sprawi, że automatyzacja nie będzie działać.
Możesz użyć narzędzi takich jak yamllint lub cloud-init schema w celu sprawdzenia czy składnia jest prawidłowa.
Możesz też zrobić to tak:
python3 -c "import yaml, sys; yaml.safe_load(open('autoinstall.yaml'))"
Jeśli nie zwróci błędu formatowanie powinno być dobre. Wcześniej wspomniane narzędzia są bardziej dokładne, ale ich rady nie są zawsze trafne w przypadku tego pliku konfiguracyjnego.
W sieci znajdziesz narzędzie online takie jak:
https://www.yamllint.com/
XORRISO
xorriso musi być w możliwie najnowszej wersji dostępnej z repozytorium.
Wspierane wersje
Oraz ostatnia ważna kwestia, przygotowanie automatyzacji z mojego doświadczenia najlepiej robić na tej samej wersji systemu, którą będziemy automatyzować. To znacznie zmniejszy nam ewentualne problemy z debugowaniem komend i zależności pakietów. Dlatego jak szykujesz Ubuntu 24.04 zrób to na Ubuntu 24.04 a nie na 18.10. Nie twierdzę, że nie będzie to działać, ale może sprawić problemy. Poradnik jest dla Ubuntu 24.04 i nowszych.