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 /