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
- W każdej większej sieci, jest już działający serwer DHCP, który będzie nam skutecznie utrudniał instalację
- Jeśli mamy pecha, to dodatkowy serwer DHCP, może zakłócić działanie całej sieci.
- Możliwe że w trakcie instalacji, ktoś zrestartuje swój komputer, wystarczy włączona opcja Network Boot i taka maszyna będzie zdana na naszą łaskę. Teraz wystarczy pomylić maszyny.
- W trakcie instalacji, system nie jest w żaden sposób zabezpieczony, każdy ma w tym czasie swobodny dostęp do sprzętu.
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: hardware, linux, pxe, system
Red 06:45
Prześlij komentarz