2012. március 29., csütörtök

Ubuntu 12.04 telepítése hálózatról, preseeding használatával

A múltkor ott hagytam abba, hogy a telepítendő kliens PXE-segítségével kap egy Ubuntu-telepítőt, ami a szükséges fájlokat egy helyi szerverről húzza le. A helyi szerverünkön megvan a saját Ubuntu-tükrünk, amit apt-mirror segítségével készítettünk el.
Az volt a gondunk, hogy túl sokat kérdezősködik a telepítő, ami sok gép telepítésénél mondjuk nem pihentető. Ezen segítünk ma.
A telepítő elhallgattatására bevetjük a preseedinget - a Debian-alapú rendszereken, így az Ubuntun is ez a módszer használatos a telepítő által feltett kérdések automata megválaszolására.

Mikor először szórakoztam ilyesmivel - lassan két éve -, az egyik nagy gondom az volt, hogy minden telepítéskor újra meg újra formázni kellett a lemezt, és akármit próbáltam, nem tudtam megoldani, hogy a létező partíciókat használhassam. Azóta fejlődtem annyit, hogy ezzel már nem is fogok próbálkozni, ugyanis a preseeding egyszerűen képtelen a már meglévő partíciók használatára - amint az a hivatalos dokumentáció legelső oldaláról kiderül:)

A preseeding elég erős eszköz - rengeteg cucc beállítható vele, és mi most csak képességeinek töredékét fogjuk kihasználni. Kezdjük azzal, hogy elkészítjük a válaszokat tartalmazó fájlt. Lássuk, mi kerül a mienkbe:

d-i debian-installer/locale string hu_HU
d-i localechooser/supported-locales en_US.UTF-8, de_DE.UTF-8
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/layoutcode string hu
A fenti első sor a rendszerünk alapnyelve lesz. A másik a még telepített locale-ok (azaz idő-szám-dátum-miegymás formátuma). A harmadik megmondja, hogy a telepítő ne akarja kitalálni a billentyűzetem nyelvét, a negyedik megmondja, hogy magyar billentyűzetem van.

d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
A fenti első sor megmondja, hogy nem akarunk gondolkodni azon, hogy melyik hálózati kártyáról telepedjen a rendszer. Azért vagyok ilyen bátor, mert a klienseimben csak egy kártya szokott lenni.
A második kettő a gép nevét és az IP-tartományát kérdezteti meg. A tartományt én a DHCP-szerverrel megadom, azt nem is kérdi. A gép nevét meg szeretném, ha megkérdené, az jó így.

d-i mirror/country string manual
d-i mirror/http/hostname string 192.168.56.101
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string
Ez a négy sor a telepítéshez használt tükör helyével foglalkozik. Az első sor azt mondja, hogy kézzel adjuk meg, a maradék három pedig megadja a tükör helyét.

d-i clock-setup/utc boolean true
d-i time/zone string Europe/Budapest
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp.ubuntu.com
Ez a négy sor az időzónával és az időszerverrel foglalkozik. Ha már van időszerver a hálózatunkban, akkor ne feledjük azt beállítani.

d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman/default_filesystem string ext4
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
Ez a pár sorocska azért felel, hogy ne kelljen törődnünk a merevlemez partícionálásával és formázásával. Kiválasztjuk, hogy melyik eszközről legyen szó (1. sor), megmondjuk, hogy nem kell sem LVM, sem RAID (2. sor), az egész fájlrendszert egy partícióra tesszük, kivéve a swap-ot (3. sor), ext4-re formázunk (4. sor), és ezt tutira így akarjuk (a maradék).

d-i passwd/user-fullname string Rendszergazda
d-i passwd/username string rendszergazda
d-i passwd/user-password-crypted password $1$u4YffOBM$QFUPCVeJ4yhauyXjIRkdO1
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
Jó Ubuntus szokás szerint nem lesz root felhasználónk, de lesz olyan, aki tud majd sudo-zni. Itt adjuk meg a nevét és a jelszavát, ez utóbbit MD5-hash formájában. Elkészítése:
echo "jelszo" | mkpasswd -s -H MD5

tasksel tasksel/first multiselect ubuntu-desktop
Azaz telepítsünk egy szokásos Ubuntu asztali rendszert (mi majd ehhez adjuk hozzá, ami kell még, és elvesszük belőle azt, ami nem kell).

d-i pkgsel/language-packs multiselect hu, en, de
A programjainkat (és az operációs rendszert) ilyen nyelveken szeretnénk használni. Minden felhasználó egyénileg beállíthatja, hogy milyen nyelven beszéljen a rendszer, ha ő jelentkezik be.

d-i pkgsel/update-policy select unattended-upgrades
Az unattended-upgrades csomag dolgozzon.

popularity-contest popularity-contest/participate boolean true
Részt akarunk venni az anonim statisztikákban: hátha jobban odafigyelnek majd azokra a programokra, amit mi használunk.

d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
Hadd települjön a GRUB2, ahogy neki tetszik.

d-i finish-install/reboot_in_progress note
Ne kelljen a gépet kézzel újraindítani a telepítés végeztével.

#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh
Ezt meg itt hagyjuk, mert még fog kelleni: a mai alkalommal csak annyi volt a cél, hogy felügyelet nélkül települjön egy Ubuntu 12.04 asztali rendszer, de a testreszabás még messze van - és ez ahhoz jön majd jól.

Még egyszer a teljes fájl:
d-i debian-installer/locale string hu_HU
d-i localechooser/supported-locales en_US.UTF-8, de_DE.UTF-8
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/layoutcode string hu
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string unassigned-hostname
d-i netcfg/get_domain string unassigned-domain
d-i mirror/country string manual
d-i mirror/http/hostname string 192.168.56.101
d-i mirror/http/directory string /ubuntu
d-i mirror/http/proxy string
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Budapest
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp.ubuntu.com
d-i partman-auto/disk string /dev/sda
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman/default_filesystem string ext4
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i passwd/user-fullname string Rendszergazda
d-i passwd/username string rendszergazda
d-i passwd/user-password-crypted password $1$u4YffOBM$QFUPCVeJ4yhauyXjIRkdO1
d-i user-setup/allow-password-weak boolean true
d-i user-setup/encrypt-home boolean false
tasksel tasksel/first multiselect ubuntu-desktop
d-i pkgsel/language-packs multiselect hu, en, de
d-i pkgsel/update-policy select unattended-upgrades
popularity-contest popularity-contest/participate boolean true
d-i grub-installer/only_debian boolean true
d-i grub-installer/with_other_os boolean true
d-i finish-install/reboot_in_progress note
#d-i preseed/late_command string apt-install zsh; in-target chsh -s /bin/zsh

Ezt a fájlt kell eltennünk egy webszerverre - és így ugye érthető, hogy miért kellett MD5-hash-sel megadni benne a jelszót:)

A következő feladat rávenni a PXE-boot rendszerünket, hogy a telepítés során használja fel ezt a fájlt. A /var/lib/tftpboot/ubuntu-installer/i386/boot-screens/txt.cfg fájlt szerkesztjük át (vastaggal az újdonság) (és persze, ha amd64, akkor nem i386):

default install
label install
        menu label ^Install
        menu default
        kernel ubuntu-installer/i386/linux
        append vga=788 initrd=ubuntu-installer/i386/initrd.gz -- quiet

label preseed
        menu label ^Preseed
        kernel ubuntu-installer/i386/linux
        append vga=normal auto=true url=http://192.168.56.101/preseed/precise-ubuntu-desktop.txt initrd=ubuntu-installer/i386/initrd.gz -- quiet

label cli
        menu label ^Command-line install
        kernel ubuntu-installer/i386/linux
        append tasks=standard pkgsel/language-pack-patterns= pkgsel/install-language-support=false vga=788 initrd=ubuntu-installer/i386/initrd.gz -- quiet

Na lássuk: az auto=true azért kell, hogy a nyelvre és a billentyűzetre vonatkozó kérdésekkel várjon már egy keveset. A preseeding alapesetben ugyanis a következő logikát követi:

  1. beállítjuk a nyelvet és a billentyűzetet (hiszen esetleg enélkül semmi mást sem tudunk megadni)
  2. beállítjuk a hálózatot (mert ugye enélkül meg hogy szednénk preseed-fájlt?)
  3. és jöhet a fájl, és mehet a telepítés 

De így a rendszerünk megpróbálkozik az alapértelmezett hálózati beállításokkal, és mert gondos rendszergazdák vagyunk, megtalálja az url= részben megadott fájlját. És abban benne lesz minden válasz.

Ha mindent jól csináltunk, az Ubuntu 12.04 anélkül telepedik, hogy a gép nevén kívül bármit is megkérdezne (van lehetőség arra is, hogy a gép nevét se kérdezze, és DHCP-vel mondjuk meg, de én azt nem szeretem). A kész rendszer egyetlen dologban más, mintha CD-ről telepítettük volna: az /etc/apt/sources.list-ben a szerverek mások.

Amit nem tudtam megoldani preseeddel:
  • nem tudom kivenni a deb-src sorokat az /etc/apt/sources.list-ből
  • nem tudtam megadni a partner csomagokat tároló szervert (a bekapcsolás ment a d-i apt-setup/partner boolean true beállítás megadásával, és a security csomagok szervere is megadható a d-i apt-setup/security_host string 192.168.56.101, vagy a  d-i apt-setup/security_host string 192.168.56.101/mappa módon)
No sebaj - a közeljövőben telepítünk a gépeinkre egy puppet nevű programocskát, és azzal elvégezzük a telepített rendszer testreszabását.

Nincsenek megjegyzések: