====== Processo di avvio (soluzioni)====== ==== Soluzione Esercitazione 1==== La macchina si blocca sul prompt di GRUB2: Minimal BASH like line editing is supported. For the first word, TAB lists possible command completions. anywhere else TAB lists possible device or file completions. grub> Digitare il comando **ls** per visualizzare la lista dei dischi e delle relative partizioni grub> ls (hd0) (hd0,msdos5) (hd0,msdos3) (hd0,msdos2) (hd0,msdos1) La macchina ha un solo disco **(hd0)** e quattro partizioni MBR (hd0,**msdos**//n//). Eseguite un **ls** di ogni partizione e individuate la partizione di root e di boot del sistema. L'etichetta (**Label**) indicata puo' aiutarvi. Una volta individuata il root filesystem segnatevi l'etichetta indicata ed utilizzatela per come valore del parametro **root** del kernel. Sempre attraverso il comando **ls** cercate il percorso del kernel e dell'initramfs. Avviate il sistema utilizzando i comandi **kernel16** e **initrd16** di Grub2. Aiutatevi con il tasto TAB per completare i percorsi. grub> linux16 (hd0,msdos1)/vmlinuz-3.10.0-693.21.1.el7.x86_64 root=LABEL=root01 grub> initrd16 (hd0,msdos1)/initramfs-3.10.0-693.21.1.el7.x86_64.img grub> boot Se tutto e' stato eseguito alla lettera la macchina partira' normalmente... o quasi: nessun prompt di console viene visualizzato. Qualcosa ancora non va. Far ripartire la VM (Machine -> Reset dal menu della finestra VirtualBox) ed avviare il sistema in modalita' **rescue** grub> linux16 (hd0,msdos1)/vmlinuz-3.10.0-693.21.1.el7.x86_64 root=LABEL=root01 systemd.unit=rescue.target grub> initrd16 (hd0,msdos1)/initramfs-3.10.0-693.21.1.el7.x86_64.img grub> boot La macchina partira' e si blocchera su questo output: Give root password form maintenance: Purtroppo non conosciamo la password di root: dobbiamo sovrascriverla: **Bootstrap in modalita' rd.break** Tornare nuovamente alla prompt di grub riavviando la macchina. Far partire il kernel con il parametro **rd.break** grub> linux16 (hd0,msdos1)/vmlinuz-3.10.0-693.21.1.el7.x86_64 root=LABEL=root01 rd.break grub> initrd16 (hd0,msdos1)/initramfs-3.10.0-693.21.1.el7.x86_64.img grub> boot L'avvio si blocca durante l'esecuzione dell'initramfs, prima dello switch sul filesystem di root (pivot). switch_root:/# Ora e' necessario che rimontiate il root filesystem (''/sysroot'') in scrittura ed eseguiate un ''chroot'' sulla directory switch_root:/# mount -o remount,rw /sysroot switch_root:/# chroot /sysroot sh-4.2# A questo punto potete eseguire un semplice ''passwd'' per modificare la pasword di root Bene, ora riavviate in **rescue.mode** ed inserite la password di root, siete ad un passo dal successo. Rimane da capire perche' la console non mostrasse il prompt di login. Controllate ad esempio lo stato del servizio di virtual terminal (getty): [root@localhost ~]# systemctl status getty@tty1 ● getty@tty1.service - Getty on tty1 Loaded: loaded (/usr/lib/systemd/system/getty@.service; disable; vendor preset: enabled) Active: inactive (dead) Docs: man:agetty(8) man:systemd-getty-generator(8) http://0pointer.de/blog/projects/serial-console.html Trovato! La console e' disabilitata! E' sufficiente abilitarla: [root@localhost ~]# systemctl enable getty@tty1 Rimane da capire perche' la macchina non mostri il menu di GRUB2 all'avvio. Verificate il file di configurazione ''/boot/grub2/grub.cfg'': [root@localhost ~]# ls /boot/grub2/grub.cfg ls: cannot access /boot/grub2/grub.cfg: No such file or directory Perfetto, il file non e' presente. Per crearlo eseguite: [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg Riavviate la macchina. Eseguite il login. L'umanita' e' salva. . . . . . . . . . ==== Soluzione Esercitazione 2 ==== I moduli di Dracut si trovano nella directory ''/usr/lib/dracut/modules.d/''. Create una directory in /usr/lib/dracut/modules.d/ [root@localhost ~]# mkdir /usr/lib/dracut/modules.d/99banner/ Create lo script di inizializzazione del modulo ''/usr/lib/dracut/modules.d/99banner/module-setup.sh'': #!/bin/bash check() { require_binaries /usr/bin/figlet } depends() { return 0 } install() { # # Include figlet banner creator and a font file # inst /bin/figlet inst /usr/share/figlet/big.flf inst_hook pre-pivot 99 "${moddir}/banner.sh" } Create lo script che effettivamente sara' eseguito ''/usr/lib/dracut/modules.d/99banner/banner.sh'': #!/bin/sh # Parses the infnbanner commandline options # #Bootparameters: #infnbanner=string custom banner type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh infnbanner=$(getarg infnbanner) [ -n "$infnbanner" ] && /usr/bin/figlet -f /usr/share/figlet/big.flf "$infnbanner" > /dev/console sleep 2 A questo punto, se tutto e' stato eseguito correttamente, il modulo **banner** sara' incluso tra quelli disponibili: [root@localhost ~]# dracut --list-modules|grep banner banner Create ora un initram fs che includa il modulo banner: [root@localhost ~]# dracut --add banner -f /boot/initramfs-infnbanner.img Verificate che nell'initramfs siano presenti i file necessari: [root@localhost ~]# lsinitrd /boot/initramfs-infnbanner.img |grep -e usr/bin/figlet -e usr/share/figlet/big.flf -e 99-banner.sh -rwxr-xr-x 1 root root 45064 Apr 11 09:55 usr/bin/figlet -rwxr-xr-x 1 root root 412 Apr 11 08:12 usr/lib/dracut/hooks/pre-pivot/99-banner.sh -rw-r--r-- 1 root root 26384 Dec 11 2015 usr/share/figlet/big.flf Configurate il menu di GRUB2 aggiungendo il parametro del kernel ''infnbanner=QUELLOCHEVOLETE'' e rimuovendo ''rhgb'' e ''quiet'' [root@localhost ~]# grubby --args=infnbanner=QUELLOCHEVOLETE --remove-args="rhgb quiet" --update-kernel=ALL Ora testate la configurazione riavviando la macchina. **ATTENZIONE**: e' necessario modificare il menu di avvio "on the fly" in modo da caricare l'initramfs creato in precedenza. Se tutto funziona e' giunto il momento di rendere persistene la modifica, creando una sezione //menuentry// che includa l'initramfs ''initramfs-infnbanner.img'' ed il parametro del kernel ''infnbanner'' [root@localhost ~]# cat << EOF >> /etc/grub.d/40_custom menuentry 'CentOS INFN Banner' --class rhel fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'CentOS-INFN-Banner' { load_video set gfxpayload=keep insmod gzio insmod part_msdos insmod ext2 set root='hd0,msdos1' if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' d1af0011-5f50-4ff7-9b13-8924e42be36e else search --no-floppy --fs-uuid --set=root d1af0011-5f50-4ff7-9b13-8924e42be36e fi linux16 /vmlinuz-3.10.0-693.21.1.el7.x86_64 root=UUID=f67e9992-dc45-4a53-899e-c09afb6a546d ro crashkernel=auto infnbanner=CentOS-INFN initrd16 /initramfs-infnbanner.img } EOF Create ora il fiel di configurazione di GRUB2: [root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.save [root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg Verificate che tutto sia andato a buon fine riavviando la VM e selezionando la voce di menu 'CentOS INFN Banner'