Zdalna Instalacja

wtorek, 20 lipca 2010

Sieciowa Instalacja

Prawie dwa lata temu kupiłem tablet bez napędu optycznego. Próba uruchomienia z USB, zakończyła się fiaskiem, w efekcie musiałem nauczyć się korzystać z mechanizmu zwanego PXE.

Okazało się że jest to znacznie wygodniejsze i szybsze niż ceremoniał wypalania płytek.

Niedawno zaczęła mi chodzić po głowie pewna myśl: Czy można posunąć się dalej? Czy możliwa jest zdalna instalacja systemu operacyjnego, nie mając kontaktu z maszyną?

Innymi słowy: czy możliwa jest instalacja poprzez ssh?

Postanowiłem, by przy najbliższej okazji, sprawdzić na ile to jest możliwe.

BIOS

Pewnych ograniczeń nie da się przeskoczyć. Drogie serwery mają możliwość zdalnego włączenia/wyłączenia, oraz przekierowanie konsoli, ale i tak ktoś musi podłączyć te wszystkie kabelki.

W przypadku typowego sprzętu, na czas instalacji, trzeba włączyć opcję Network Boot.

Slackware Linux

Systemem, który instalowałem to Slackware Linux 13.1 (jak zwykle)

Zazwyczaj instalacja polega na włożeniu płytki, naciskaniu przycisku Next do skutku i odpowiadaniu na mniej lub bardziej sensowne pytania.

Slackware odbiega od tego schematu. Po włączeniu, pojawią się komunikaty diagnostyczne, a następnie zapytanie Login:, żywcem przypominające systemy z lat '80.

Ów login to mały żart (proponuję zerknąć na skrypty startowe). Setup nie uruchami się automatycznie po zalogowaniu. Trzeba uprzednio ręcznie podzielić dyski. Wszystko to może wydawać się niesamowicie archaicznie, ale ma głęboki sens.

Slackware to współczesny system, praca na nim nie różni się niczym od innych dystrybucji Linuksa. Jednak administracja, wymaga znajomości linii poleceń i edycji plików w katalogu /etc, jeśli ktoś nie potrafi poradzić sobie z czytaniem komunikatów i wpisaniem kilku poleceń, to nie jest to system dla niego.

PXE

Na początek opiszę uruchomienie instalatora sieciowego

Obszerny opis można znaleść na płycie w katalogu usb-and-pxe-installers. W skrócie wygląda następująco

Najwygodniej jest użyć dnsmasq. Jest to swoisty serwerowy scyzoryk szwajcarski. Wszystkie parametry można zmieścić w przydługiej linii poleceń, ale wygodniejsze będzie stworzenie odpowiedniej konfiguracji:

/jakis/tam/katalog/dnsmasq.conf

interface=eth0
server=192.168.1.1
dhcp-range=192.168.1.10,192.168.1.20
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/jakis/tam/katalog/tftp

Uruchomienie

sudo dhcpcd -k eth0 # tak na wszelki wypadek
sudo ifconfig eth0 192.168.1.1/24 up
sudo dnsmasq -C /jakis/tam/katalog/dnsmasq.conf -d

Przygotowanie katalogu instalatora

TFTP=/jakis/tam/katalog/tftp
sudo mount -o loop \
/gdzie/ta/plyta/slackware-13.1-install-dvd.iso \
/media/cdrom

mkdir -p $TFTP/pxelinux.cfg
cp    /media/cdrom/usb-and-pxe-installers/pxelinux.cfg_default \
      $TFTP/pxelinux.cfg/default
cd $TFTP
ln -s /usr/share/syslinux/pxelinux.0
ln -s /media/cdrom/isolinux/initrd.img
ln -s /media/cdrom/kernels

pxelinux.0 to sieciowy odpowiednikiem programów Grub, czy Lilo. Jest dostępny wraz z pakietem syslinux. Konfiguracja jest przechowywana w katalogu pxelinux.cfg, w ten sposób można mieć różne pliki konfiguracyjne dla różnych maszyn (Wszystko wyjaśni się po pierwszym uruchomieniu). Sam plik, jest w miarę czytelny, zawiera opis menu startowego i wskazuje pliki z obrazem kernela, oraz initrd.

HTTP

Tak przygotowany instalator, będzie potrzebował dostępu do pakietów. Można mu wskazać istniejący serwer, lub uruchomić własny. Można to zrobić na dziesiątki sposobów, na przykład tak:

Konfiguracja: /jakis/tam/katalog/httpd.conf:

Listen          8080
DocumentRoot    /media/cdrom
ErrorLog        log
PidFile         pid

… i uruchomienie

httpd -X -d /jakis/tam/katalog -f httpd.conf

Później w trakcie instalacji wystarczy jako źródło podać adres http://192.168.1.1:8080

Aby się zbytnio nie rozpisywać, przyjąłem założenie że masz obraz iso płyty z systemem. Łatwo zgadnąć nie jest to konieczne.

SSH

Teraz najciekawsze.

Zaczynając, myślałem że będę musiał zmodyfikować initrd. Otóż nie, czytając CHANGES_AND_HINTS.TXT, trafiłem na następujący opis:

The Slackware installer now uses udev to initialize your hardware, including the network interface (…) the commandline for fully unattended configuration and startup of the dropbear SSH server has changed slightly (…) to auto-start the SSH daemon in the installer would become:
      hugesmp.s kbd=us nic=auto:eth0:dhcp

Wystarczy zatem włożyć płytę i pojawieniu się znaku zachęty boot:, wpisać powyższe parametry. To jest właśnie taki moment w którym zaczyna się lubić używane oprogramowanie.

Mając serwer instalacji, można to wszystko zautomatyzować, modyfikując nieznacznie
plik pxelinux.cfg/default:

default SSH
prompt 1
timeout 120
display message.txt
F1 message.txt
F2 f2.txt
label SSH
  kernel kernels/hugesmp.s/bzImage
  append initrd=initrd.img load_ramdisk=1 prompt_ramdisk=0 rw SLACK_KERNEL=hugesmp.s kbd=us nic=auto:eth0:dhcp

… i to by było na tyle.

Bezpieczeństwo

Jest kilka powodów dla których opisane powyżej rzeczy lepiej robić w odrębnej sieci

Podsumowanie

Typowy serwer hałaśliwe urządzenie i nikt nie chce go trzymać w pokoju, również przebywanie w serwerowni, nie należy do przyjemności. Nawet jeśli taki sprzęt to tylko cicha zabawka, to możliwość skopiowania poleceń/komunikatów, oraz stworzenia logu instalacji może okazać się bardzo pomocna.

Instalacja nie jest jedyną rzeczą, do której taki serwer może się przydać. Bardzo dobrym pomysłem jest na przykład dodanie do menu programu memtest, lub przerobienie instalatora na narzędzie diagnostyczne.

Linkownia

Etykiety: , , ,

Red 06:45

Komentarze

Prześlij komentarz

Archiwum

Subskrybuj

RSS / Atom