Generowanie obrzó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świetla zakodowane obecne hasło w macierzystym systemie Cento S:
   # rep ^root /etc/Shadow | cyt -d: -d2

   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 kleić, 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 od 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 centos6-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 obezu 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 uzytkownika na nacierzystym systemie
  to katalog domy użytkownika na macierzystym systemie stanie się katalogiem domowym na systemie zabootowanym po sieci z wygenerowanego obrzu.

  TFTP
  ----
  Jeżli wcześniej serwis ten chodyił to jest skonfigurowany.

  DHCP
  ----
    W /etc/dhcp/dhcpd.conf:
    
  	## 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, aktualizacujemy, 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 /


