Table of Contents
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,msdosn).
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'