sobota, 26 kwietnia 2014

Cobbler i automatyczna instalacja Debiana


  Na początek warto wspomnieć, że Cobbler posiada dosyć dobrą dokumentacje - być może nie jest bardzo szczegółowa, ale opisuje wszystko to co chcemy wiedzieć w przystępny sposób. Samego procesu instalacji pod Debianem, nie będę tutaj opisywać. Dzięki tym zmianom i cytowanej wyżej dokumentacji, nie powinna ona stwarzać nikomu wielkich problemów. Moim zdaniem najlepsza metoda instalacji pod Debianem na tą chwile, to ściągniecie źródeł najnowszego stabilnego wydania z github-a i zbudowanie debianowych paczek. Dla naprawdę leniwych, podaję link do testowych pakietów - nie polecam. Jeżeli coś nie działa proszę zgłoście to na odpowiednią mail listę.



  Do rzeczy. Proces instalacji Linuksa możemy zautomatyzować na kilka sposobów, ale zazwyczaj polega to na utworzeniu pliku zawierającego po prostu odpowiedzi na pytania które zadaje nam instalator. Dzięki temu plikowi, instalator zna już odpowiedź na pytanie, więc nie wyświetla monitu tylko wykonuje swoją pracę dalej. Pod systemami z rodziny RedHat, instalatorem zazwyczaj jest Anaconda która korzysta z mechanizmu kickstart. Debian i systemy od niego pochodzące używa za to narzędzia o nazwie DebianInstaller, oraz mechanizmu preseed. O tym jak działa preseed możemy poczytać tutaj, natomiast gotowy przykład dla Wheezy-ego (najnowsze stabilne wydanie Debiana) znajdziemy tu.

  Nie chciałbym się specjalnie zagłębiać w składnie plików preseed, wszystko to można bez problemu wyczytać z dokumentacji Debiana, a cytowany wyżej przykład jest zaopatrzony w sporą liczbę komentarzy. Naszym zadaniem, jest przystosowanie pliku preseed do użycia z Cobbler-em - sprawa mocno indywidualna. Dla ciekawych i leniwych załączam podstawowy szablon z którego korzystam. Pamiętajcie, że to jest szablon który Cobbler trawi z pomocą silnika Cheetah, a co za tym idzie nie wszystko co zaczyna się od znaczka # to komentarz ;)

  Po utworzeniu pliku preseed w odpowiednim katalogu, importujemy dystrybucję do Cobblera (korzystamy z wersji netinstall):

# cd /tmp
# wget http://ftp.acc.umu.se/debian-cd/7.4.0/amd64/iso-cd/debian-7.4.0-amd64-netinst.iso
# mount -o loop /tmp/debian-7.4.0-amd64-netinst.iso /mnt
# cobbler import --breed debian --os-version wheezy --name debian-7-x86_64 --arch x86_64 --path /mnt
# umount /mnt

  Niestety nośniki instalacyjne Debian-a, w przeciwieństwie do RedHat-ów, nie zawierają pliku .treeinfo. To właśnie dzięki niemu, narzędzie koan orientuje się w skąd pobrać jądro systemu oraz obraz initrd. Jesteśmy więc zmuszeni utworzyć go ręcznie w katalogu gdzie Cobbler zaimportował nasz obraz iso, np:

# cat > /srv/www/cobbler/links/debian-7-x86_64/.treeinfo
[general]
family = Debian
timestamp = 1385732530.12
variant =
totaldiscs = 1
version = 7.0
discnum = 1
packagedir =
arch = x86_64

[images-x86_64]
kernel = linux
initrd = initrd.gz
boot.iso = boot/grub/boot.iso

^C

Katalog debian-7-x86_64 jest nazwą profilu utworzonego podczas importu dystrybucji. Kolejny ważny krok to edycja naszego profilu, czyli przede wszystkim wskazanie właściwego pliku preseed np:

# cobbler profile edit --name=debian-7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/debian-7-wheezy.seed

Jeżeli nie chcemy by instalacja systemu startowała z użyciem serwera DHCP, podajemy jeszcze jądru Linuksa odpowiedni parametr :

# cobbler profile edit --name=debian-7-x86_64 --kopts="netcfg/disable_dhcp=true"

  Przy okazji jedna ważna uwaga. Dokumentacja Debiana Wheezy mówi nam, że opcja disable_dhcp jest przestarzała i należy zamiast niej użyć netcfg/disable_autoconfig - nie próbujcie, dokumentacja zawiera błąd :) Jeżeli podobny błąd popełnimy w pliku preseed, to system albo wstanie bez skonfigurowanej karty sieciowej, albo użyje auto-konfiguracji z DHCP! Prawdopodobnie dopiero następna wersja systemu (Debian Jessie), będzie zawierać implementacje zgodną z dokumentacją.

  Ostatnia rzecz jaka nam została to dodanie definicji nowego systemu. Przed wykonaniem tego kroku, trzeba pamiętać o skonfigurowaniu odpowiedniego wpisu w DNS. Chodzi o to by pełna nazwa systemu (FQDN) była rozwiązywana przez DNS i podawała odpowiedni adres ip. Cobbler potrafi wykonać ten krok automatycznie, jednak w tym momencie pominę szczegóły takiej konfiguracji. To dobry temat na następny wpis ;)

# cobbler system add --name=test.local --hostname=test.local --profile=debian-7-x86_64 --ip-address=192.168.5.222 --subnet=255.255.255.0 --gateway=192.168.5.1 --name-servers=192.168.5.1 --mac=random --static=true --interface=eth0 --server=cobbler.local --management=true --virt-type=kvm --virt-file-size=10 --virt-path=vg01 --virt-ram=2048 --virt-cpus=2

Jak pewnie zauważyliście, preferuje ustawienie statycznego adresu ip. Jeden z kluczowych parametrów to "--management=true", mówiący że ten interfejs (w tym przypadku eth0) należy użyć podczas instalacji systemu. Reszta parametrów jest dosyć dobrze opisana w dokumentacji i nie ma sensu jej tutaj powtarzać.

Nie pozostaje nam nic innego jak zalogować się na fizyczną maszyne i zainstalować system przy użyciu koan, np:

# koan --virt --system=test.local --static-interface=eth0 --server=cobbler.local

Gdy koan skończy pracę, a nowa maszyna wirtualna wystartuje, możemy sprawdzić na jakim porcie uruchomiła serwer VNC, a potem połączyć się przez klienta VNC by obserwować czy instalacja przebiega prawidłowo :

# virsh vncdisplay test.local

Oczywiście serwer VNC zostanie uruchomiony, gdy skonfigurowaliśmy opcje vnc_listen i vnc_password w pliku /etc/libvirt/qemu.conf. Ponieważ protokół VNC jest obsługiwany przez praktycznie wszystkie systemy operacyjne (w przeciwieństwie do virt-viewer), włączenie serwer-a VNC nie jest najgorszym pomysłem ;)

Na koniec dodam, że to co tutaj opisałem to minimalny zestaw kroków, koniecznych do skonfigurowania automatycznej instalacji Debiana z serwera Cobbler. Prawdziwa zabawa zaczyna się gdy chcemy by nowo instalowane maszyny były od razu skonfigurowane według naszych lub firmowych standardów.