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 /