Generowanie obrazów systemu Linux bootowanego po sieci.
CentOS 6
--------
1. Obraz generujemy w architekturze systemu, na którym przeprowadzana będzie generowanie. I tak obraz CentOS 6.7 x86_64 będzie generowany na zainstalowanym systemie CentOS 6.7 x86_64, a obraz CentOS 6.7 x86 będzie generowany na zainstalowanym systemie CentOS 6.7 x86.
2. Na zainstalowanym systemie:
# yum -y install dracut-network
# mkdir /opt/distroimages
# yum -y groupinstall "Base" "Server Platform" –releasever=6 \
--installroot=/opt/distroimages/centos-6-x86_64_base-01
W wyniku tych operacji mamy zainstalowany wygenerowany "surowy" obraz CentOS 6.7 w folderze /opt/distroimages/centos-6-x86_64_base-01. Obraz ten nie posiada środowiska X Window.
Aby skonfigurować ustawienia użytkownika root można:
# cp -f -R /etc/skel/. /opt/distroimages/centos-6-x86_64_base-01/root/
Użytkownik "root" nie ma ustawionego hasła. Możemy to zrobić w następujący sposób:
# chmod 600 /opt/distroimages/centos-6-x86_64_base-01/etc/shadow
Wyświetlany zakodowane obecne hasło w macierzystym systemie CentOS:
# grep ^root /etc/shadow | cut -d: -f2
Możemy też wygenerować nowe zakodowane hasło:
# python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(),
crypt.mksalt(crypt.METHOD_SHA512)))'
Password:
Wprowadzamy hasło i naciskamy Enter, pojawia się nam zakodowane hasło i je trzeba wkleić, jak poniżej.
# gedit /opt/distroimages/centos-6-x86_64_base-01/etc/shadow
W linii odpowiedniej dla użytkownika "root" podstawiamy wyświetlone komendą "grep..." hasło i wstawiamy w drugie pole (pola są oddzielone ":").
root:$6$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:14937:0:99999:7:::
Edytujemy /opt/distroimages/centos-6-x86_64_base-01/etc/fstab i wstawiamy do tego pliku następujące linie (ewentualne inne usunąć lub opatrzyć komentarzem "#" na początku linii).
none /tmp tmpfs defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
Teraz obsługa serwisu TFTP.
# mkdir /var/lib/tftpboot/distroimages
# mkdir /var/lib/tftpboot/distroimages/centos-6-x86_64_base-01
Na macierzystej maszynie generujemy interramfs bootujący po sieci. Pamiętać, aby nie nadpisał się ten obraz na już istniejący.
# cd /boot # na macierzystej maszynie.
# ls vmlinuz*
Wybieramy sobie jądro, które będziemy używać w obrazie (proponuję najnowsze), a następnie zadbać aby w /lib/modules numer wersji jądra, który chcemy wykorzystać było powiązane linkiem symbolicznym z nazwą:
vmlinuz-2.6.32-573.22.1.el6.x86_64
czyli
# ln -s /lib/module 2.6.32-573.22.1.el6.x86_64 \
/lib/modules/vmlinux-2.6.32-573.22.1.el6.x86_64
# dracut initramfs-vmlinuz-2.6.32-573.22.1.el6.x86_64.img \
vmlinuz-2.6.32-573.22.1.el6.x86_64
Teraz zarówno wybrane jądro, jak i wygenerowany do tego jądra interamfs przenosimy do wcześniej założonego folderu:
/var/lib/tftpboot/distroimages/centos-6-x86_64_base-01
# cp vmlinuz-2.6.32-573.el6.x86_64 \
/var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/
# mv initramfs-vmlinuz-2.6.32-573.22.1.el6.x86_64.img \
/var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/
# chmod 644 \
/var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/initramfs-vmlinuz-2.6.32-573.22.1.el6.x86_64.img
Dla ułatwienia możemy utworzyć krótsze linki symboliczne:
# ln -s /var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/vmlinuz-2.6.32-573.el6.x86_64 \
/var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/vmlinuz
# ln -s \ /var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/initramfs-vmlinuz-2.6.32-573.22.1.el6.x86_64.img /var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/initrd.img
Zakładamy folder:
# mkdir /var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/pxelinux.cfg
Zakładamy plik "default":
# touch /var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/pxelinux.cfg/default
# gedit /var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/pxelinux.cfg/default
W pliku default umieszczamy:
default centos-6
label centos-6
kernel vmlinuz
append initrd=initrd.img root=dhcp rw selinux=0 rd_NO_LUKS rd_no_LVM rd_NP_MD rd_NO_DM LANG=pl_PL.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=pl rhgb
Zamiast wpisu "root=dhcp" możemy użyć:
nfs:ip_serwera:/opt/distroimages/centos-6-x86_64_base-01
Wtedy musimy pamiętać o wyłączeniu w serwerze DHCP przydzielanie zasobu NFS dla maszyny bootoującej się po sieci tym obrazem.
Ściągamy plik "pxelinux.0”
# wget -O /var/lib/tftpboot/distroimages/centos-6-x86_64_base-01/pxelinux.0 \
http://www.bursztynowski.pl/ftp/linux/Dystrybucje/netboot-images/pxelinux.0
Dodajemy do obrazu plik /etc/resolv.conf
Pozostaje skonfigurowanie serwisów NFS, DHCP i TFTP.
NFS:
W /etc/exports wstawiamy wpis:
/opt/distroimages/ *(rw,no_root_squash,async,no_subtree_check)
Możemy dodać kolejny wpis:
/home *(rw,no_root_squash,async,no_subtree_check)
i restartujemy serwis NFS.
Dzięki temu drugiemu wpisowi możemy w /etc/rc.d/rc.local dodać wpis:
mount -t nfs4 -o rw,exec ip_serwera:/home /home
Jeżeli w systemie bootowanym po sieci z wygenerowanego obrazu będziemy dodawali użytkowników, których uid i gid będą zgodne z uid i gid tego użytkownika na macierzystym systemie to katalog domowy użytkownika na macierzystym systemie stanie się katalogiem domowym na systemie zabootowanym po sieci z wygenerowanego obrazu.
TFTP
Jeżeli wcześniej serwis ten chodyił to jest skonfigurowany.
DHCP
## Komputer NTT z SUSE Linux Enterprse Desktop pod projekt CRZL
host crzl {
option host-name "crzl";
hardware ethernet 90:1B:0E:12:B8:00;
fixed-address 192.168.1.57;
next-server 192.168.1.230;
# option root-path "192.168.1.230:/opt/distroimages/centos-6-x86_64_full-01";
# filename "centos-6-x86_64_full-01/pxelinux.0";
option root-path "192.168.1.230:/opt/distroimages/centos-6-x86_64_base-01";
filename "distroimages/centos-6-x86_64_base-01/pxelinux.0";
} # end of host "crzl"
W ten sposób jest wygenerowany podstawowy obraz CentOS 6.7 bez środowiska graficznego.
Tak wygenerowany obraz bootujemy na stacji, aktualizujemy, a następnie logujemy się jako root i dogrywamy X Window z GNOME.
# yum -y groupinstall "Desktop" "Desktop Platform" "X Window System" "Fonts"
Można jeszcze dodać:
# yum -y groupinstall "Graphical Administration Tools"
# yum -y groupinstall "Internet Browser"
# yum -y groupinstall "General Purpose Desktop"
# yum -y groupinstall "Office Suite and Productivity"
# yum -y groupinstall "Graphics Creation Tools"
Potem zamykamy system, a na macierzystej maszynie pakujemy obraz do kontenera tar:
# tar cf centos-6-x86_64_full-01.tar \
/var/lib/tftpboot/distroimages/centos-6-x86_64_full-01 \
/opt/distroimages/centos-6-x86_64_full-01
Rozpakowujemy:
# tar xf centos-6-x86_64_full-01.tar -C /