Instalacja Linuksa przez sieć
22 grudnia 2007, michuk
Instalacja Linuksa to obecnie banał. Wystarczy ściągnąć obraz ISO, wypalić go na płycie CD/DVD i uruchomić ponownie komputer. Co jednak, jeśli… nasz komputer nie posiada napędu CD? Wtedy z pomocą przychodzi instalacja bezpośrednio przez sieć. W tym artykule pokażemy, jak to zrobić.
Autor: Borys Musielak
Problem — choć nie dotyczy większości — nie jest wzięty z kosmosu. Instalacja przez sieć (zakładając dobre łącze internetowe) jest po prostu szybsza niż standardowa (czynności ściągania plików i instalowania systemu wykonywane są równolegle), tańsza (nie trzeba wypalać płyty CD) i ozone-friendly
Zabieramy się więc do dzieła! Oto, czego będziemy potrzebować:
- komputer podłączony do Internetu (dalej: serwer) z zainstalowanym systemem Linux (w przykładach posłużyłem się Debianem),
- drugi komputer (dalej: klient), na którym chcemy zainstalować Linuksa, również podłączony do Internetu, w tej samej sieci, co serwer, którego BIOS umożliwia boot z sieci (opcja network boot, PXE, lub podobna),
- obraz instalacyjny typu netbootm,
- około godziny wolnego czasu,
- pizzę i colę.
Sciągamy netboot
Netboot to bardzo mały obraz instalacyjny, najczęściej w postaci jednego pliku, który służy tylko do załadowania podstawowych plików instalatora systemu i połączenia z Internetem, w celu dociągnięcia reszty plików instalacyjnych i pakietów. Jest on do ściągnięcia dla wszystkich sensownych dystrybucji, można go też znaleźć na tradycyjnej płytce instalacyjnej, najczęściej w katalogu netboot.
Netboot dla Ubuntu 7.10 możemy ściągnąć (na komputerze serwer) za pomocą komendy: wget http://archive.ubuntu.com/ubuntu/dists/gutsy/main/installer-i386/current/images/netboot/netboot.tar.gz. Następnie należy go rozpakować: tar zxf netboot.tar.gz i umieścić w dowolnym katalogu. W naszym przypadku jest to /home/jasio/netboot.
Procedura dla innych dystrybucji jest podobna, z tym że lokalizację netboota będziecie musieli poszukać za pomocą Google.
Przygotowujemy serwer TFTP
Najłatwiej udostępnić pliki instalacyjne za pomocą prostego serwera TFTP. Instalujemy więc pakiet tftpd-hpa oraz xinetd, który posłuży nam do uruchamiania serwera:
# apt-get install tftpd-hpa xinetd
Przechodzimy do konfiguracji serwera TFTP. Korzystając z ulubionego edytora, tworzymy plik /etc/xinetd.d/tftp i wypełniamy go następującą treścią:
service tftp
{
disable = no
socket_type = dgram
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -v -s /var/lib/tftpboot
only_from = 192.168.1. 127.0.0.1
}
Uwaga na ostatnią linijkę only_from. Tutaj powinny się znaleźć podsieci, dla których udostępnimy TFTP. W przykładzie udostępniamy go jedynie w sieci lokalnej (192.168.1.*) oraz lokalnej maszynie. Jeśli nie wiesz w jakiej jesteś sieci, z pomocą przyjdzie polecenie /sbin/ifconfig -a.
Ostatnia rzecz to udostępnienie przez TFTP plików instalacyjnych. Robimy to kopiując te pliki do katalogu serwera:
cp /home/jasio/netboot/* /var/lib/tftpboot/
Oczywiście jeśli nie ściągaliśmy samego netboota, ale mamy płytkę instalacyjną z Ubuntu, możemy skopiować pliki bezpośrednio z płyty:
cp /media/cdrom/install/netboot/* /var/lib/tftpboot/
Na koniec restartujemy serwer:
/etc/init.d/xinetd restart
Serwer TFTP mamy postawiony, pliki udostępnione, czas zabrać się za konfigurację DHCP, aby klient automatycznie namierzył serwer z plikami instalacyjnymi.
Ale wcześniej zjadamy pierwszy kawałek pizzy. Zimna… dziwne…
Stawiamy serwer DHCP
Serwer DHCP służy do automatycznego przydzielania komputerom adresów IP w danej sieci. W naszym przypadku posłuży również do naprowadzenia komputera klienta na odpowiedni plik netboot, dzięki któremu bez gadania zdecyduje się on zainstalować przez sieć Ubuntu.
Serwer DHCP instalujemy poleceniem:
# apt-get install dhcp3-server
To co może nam przysporzyć nieco kłopotów, to konfiguracja. Odbywa się ona całkowicie w pliku /etc/dhcp3/dhcpd.conf. Debian powinien nam stworzyć ten plik wypełniając go domyślnymi wartościami podczas instalacji. To co musimy zrobić to:
- określić uprawnienia (bazując na adresie IP czy MAC)
- ustawić poprawnie serwery DNS
- określić plik instalacyjny do ściągnięcia przez klienta
W moim przypadku istotny fragment pliku dhcpd.conf, jaki musiałem zmienić wygląda następująco:
# lokalizacja rutera
option routers 192.168.1.254;
# maska sieciowa
option subnet-mask 255.255.255.0;
# główny serwer DNS, z którego korzysta komputer serwer
option domain-name-servers 194.74.65.68;
# ustawiamy jeśli serwer DHCP ma być domyślny w sieci
authoritative;
# pozwalamy pingować
ping-check = 1;
# sugerowany plik instalacyjny
filename = "pxelinux.0";
# IP podsieci
subnet 192.168.1.0
# maska sieciowa i przedział adresów IP, które akceptujemy
netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.254;
}
Tyle wystarczyło, aby serwer DHCP zaczął działać, poprawnie przydzielił IP i umożliwił klientowi automatyczne pobranie pliku pxelinux.0, co umożliwiło sieciową instalację.
Jeśli u nas również wszystko w porządku, restartujemy serwer DNS:
/etc/init.d/dhcp3-server start
i przechodzimy do instalacji!
Instalacja przez sieć (PXE)
Na komputerze kliencie w BIOS (dostępny podczas uruchamiania komputera, najczęściej pod klawiszem F12 lub DEL) ustawiamy jako domyślną opcję bootowania przez sieć (PXE). Restartujemy komputer i… czekamy co się stanie.
Jeśli wszystko jest w porządku, powinniśmy być poinformowani o poprawnym połączeniu z serwerem DHCP, przydzieleniem adresu IP i pobraniem z serwera TFTP pliku instalacyjnego. Po kilku sekundach powinniśmy mieć już na ekranie standardowy interfejs instalatora Ubuntu (lub, jeśli poszliśmy pod prąd, innej dystrybucji Linuksa). Zakładam, że od tej pory poradzicie sobie sami. W przeciwnym wypadku, zapraszam na forum i IRCa.
Co jeśli nic się dzieje? No cóż — to oznacza że wystąpił błąd…
Zjadamy drugi kawałek pizzy, popijamy colą.
Radzimy sobie z błędami
Jeśli wystąpił błąd (czytaj: instalator się nie załadował), po pierwsze należy zbadać przyczyny błędu. Do tego służą logi. Zerkamy szybko okiem na plik syslog na komputerze serwerze:
# less /var/log/syslog
i czytamy ze zrozumieniem. Problem mógł wystąpić w kilku miejscach: przy uzyskiwaniu adresu DHCP, przy pobieraniu pliku przez TFTP, czy też — już podczas instalacji — przy pobieraniu pakietów (problem z DNS).
Przetestować TFTP jest najprościej. Próbujemy połączyć się lokalnie z serwerem TFTP używając dowolnego klienta, np. tftp localhost. Jeśli się połączyliśmy, próbujemy pobrać plik instalacyjny: > get pxelinux.0. Jeśli po wyjściu z klienta (> bye mamy na dysku ściągnięty plik to oznacza, że serwer działa. Przynajmniej lokalnie.
DHCP możemy przetestować z innej maszyny (również wirtualnej) wydając polecenie: dhclient eth0. Jeśli udało nam się połączyć, znaczy to że DHCP działa poprawnie. Jeśli możemy “spingować” dowolny adres w sieci: ping jakilinux.org, to znaczy że i DNS działa poprawnie. Ale wtedy wszystko działa, więc nie powinniśmy mieć problemów z instalacją
Wszystkich możliwych problemów nie da się przewidzieć. W moim przypadku cała procedura poszła bezproblemowo (zapomniałem jedynie dodać informację o DNS w konfiguracji DHCP). Najważniejsze, żeby w przypadku błędów nie panikować, tylko próbować rozwiązać problem wykluczając kolejne możliwe błędy. Powodzenia!
Inne możliwości
W artykule celowo pominąłem inne możliwości wykonania tego samego zadania. Oczywiście jednak (korzystamy w końcu z Linuksa!) możemy dokładnie to samo zrobić na kilkanaście innych sposobów. Przykładowo:
- zamiast kombinacji xinetd+tftp użyć inetd lub też uruchamiać serwer tftp bezpośrednio, jako demon,
- użyć innego serwera TFTP — na przykład atftpd…
- oczywiście użyć innego systemu na serwerze lub zainstalować inną dystrybucję Linuksa,
- zamiast coli użyć sprite lub mirindę,
- etc.
Celem głównym była jednak po prostu instalacja Linuksa na komputerze bez napędu CD i mam nadzieję, że to zadanie udało nam się wykonać bezbłędnie.
Bibliografia
- Alternative Installation Methods for Gutsy z Softpedii
- Installation/QuickNetboot z dokumentacji Ubuntu
- Ubuntu PXE Install z wiki.koeln.ccc.de
Korekta: oZz, t_ziel
Komentarze (RSS) | Trackback (URI)
Liczba komentarzy: 35
W komentarzach możesz używać prostych znaczników HTML. Przykłady:
- Link: <a href="jaklinux.org">Linux dla każdego</a>,
- Wytłuszczenie: <strong>tekst pogrubiony</strong>,
- Kursywa: <em>tekst pochylony</em>,
- Przekreślenie: <strike>
tekst przekreślony</strike>, - Kod: <code>
printf("blok kodu");</code>, - Cytat: <blockquote>cytat</blockquote>




“Najłatwiej udostępnić pliki instalacyjne za pomocą prostego serwera FTP” i “Przechodzimy do konfiguracji serwera FTP.”
Nie FTP tylko TFTP. To są dwa różne protokoły (fakt służące z grubsza do tego samego).
Słuszna uwaga. Zaktualizowałem artykuł i dodałem link do Wikipedii.
Autor myli usługę tftp z ftp, a są to całkowicie odrębne i niezgodne ze sobą protokoły! Tftp jest bardzo uproszczonym protokołem, tak, aby jego implementacja mogła być bardzo zwięzła i zmieściła się w pamięci ROM karty sieciowej. Od ftp różni się m.in. tym, że używa UDP (implementacja UDP jest duuużo prostsza niż TCP) oraz nie autoryzuje klientów. I nie można zamiast tftpd użyć innego serwera FTP, choć jest ich mnóstwo
Patrz komentarz 94466
Brzmi prosto, a jak jest w rzeczywistości?!
2 godziny przeszukiwania netu w celu znalazienia sposobu który działa, kilka prób i błędów i w końcu sukces. Mam nadzieję, że dzięki temu poradnikowi Wam będzie o wiele prościej.
wielokrotnie instalowalem tak system na lapach bez CD-romow lub na lapach gdzie ow cd jest uszkodzony (a jak wiemy lubia one padac naprawde szybko)
z ciekawostek dodam ze istnieja dyskietki emulujace pxe, do uzywania na komputerach ze starym biosem
Co do dyskietek to instalowałem kiedyś z dyskietki startowej Debiana i CentOS. W tym wypadku można podmontować obraz instalacyjny ISO po NFs, albo udostępnić po HTTP czy FTP (nie TFTP :P). To chyba zresztą “tradycyjny” sposób instalowania “przez sieć”. PXE jest jednak oczywiście nieco wygodniejsze, zwłaszcza jak nie posiada się napędu floppy
Kilkukrotnie instalowałem różne dystrybucje (debian, slack, kateos) na kompie bez cd. Używałem albo dyskietek startowych, albo mini-cd (z partycji lub pendrive). Zasadniczo najgorzej jest ustawić odpowiednie parametry serwera z którego pobierzesz oprogramowanie (http, ftp, nfs …) tzn sam nie stawiałem serwera, tylko wklepywałem ip serwera odpowiedniej dystrybucji.
Ja robię to po UNetbootinie (http://lubi.sf.net/unetbootin.html)
A tak mniej offtopicznie… Czy do bootowanie po PXE trzeba NAT-u?
Trzeba serwera DHCP na którym dostępny jest po TFTP plik instalacyjny. W jaki sposób dostępny będzie ten serwer DHCP to już sprawa drugorzędna. Może byc tak (i tak było w moim przypadku), że oba komputery: klient i serwer, połaczone były do rutera (serwer, który było o dziwo laptopem, bezprzewodowo, kliet, który był też laptopem, przewodowo, bo tryb PXE nie wykrywa karty wifi). Równie dobrze oczywiście mógłbyś się łaczyć bezpośrednio do komputera z DHCP, np przez drugą kartę sieciową — wtedy przydałby się NAT.
E… nie rozumiem. Mam taki układ: Oba kompy z publicznymi IP. Oba są w tej samej sieci - ZETO. Brama: 85.28.128.1, maska: 255.255.252.0. Pierwszy komp: 85.28.128.105, drugi: 85.28.131.187. Czy w takim układzie można zrobić instalkę po PXE? Oba kompy są podpięte do tego samego switcha.
A kto mi minusy daje za to, że czegoś nie rozumiem? :p
mozna tylko ze nie korzystasz wtedy z serwera dhcp a stawiasz serwer pxe i do niego sie odwołujesz bezposrednio
serwery tfpt (tftp-hpa) i serwer dhcp moga byc na zupelnie roznych maszynach (w dhcpd konfigurujesz wszystko), jesli chcesz miec pxe po wifi to trzeba troszke poczarowac z bridge-m po drodze
www.goodbye-microsoft.com
jeszcze łatwiej
Tak, tyle że to jest eksperymentalne ciągle i bałem się skorzystać z tego rozwiązania. Poza tym w ten sposób zainstalujesz tylko Debiana (albo Ubuntu, chyba jest do niego podobny projekt).
Lipa.
Nie działa na iMacu ani na MacBooku.
Spoko. Jak tylko MacOS X będzie natywnie obsługiwał programy windowsowe (o czym była mowa w newsie jakiś czas temu), to zadziała.
A tak na serio, to zainstaluj sobie Debiana z płyty i nie szukaj dziury w całym.
ciekawe, ostatnio postawiłem gentoo x86_64 przez ssh na maszynie pracującej pod slackware 10.2, fajnie było i system dalej działa, nie trzeba nic tylko chroota
Jak, jak?
przykładowo tak
http://pl.docs.pld-linux.org/instalacja_chroot_wstep.html
No jeszcze żeby distra miałby od ręki obsługętakich kart siecowych jak Attansic L2 (tylko *buntu od 7.10) i wifi Broadcom 3945 (tylko Pardus 2007.3) to byłoby już genialnie.
Popisałem się piramidalną bzdurą, nie Broadcom 3945 (skąd ja wziąłem taki numer?) tylko 4311.
Numer zapewne Ci się wziął z ipw3945.
Calkiem sympatyczny artykul, tym bardziej, ze ostatnio sam przetrzasalem siec w poszukiwaniu takiego rozwiazania. Od siebie moge podpowiedziec, ze niepotrzebny jest komp z Linuksem (tak sie sklada, ze w domu tylko ja uzywam), a calkiem sprawnie mozna poradzic sobie przy pomocy np. tftpd32 - tftp + dhcp dla okienek - tutaj jak widze wiekszosc artykulu to stawianie serwera, chociaz musze przyznac, ze jeszcze nfs i mamy o wiele bardziej uniwersalne narzedzie.
Jesli ktos potrzebowalby kiedys na szybko malej dystrybucji, ktora mozna zaladowac majac tylko serwer dhcp i tftp to polecam wpisac w google dsl i pxe.
PS. Ten komentarz wlasnie pisze z lapka pozbawionego napedow (w tym HDD).
Co to za sprzęcik?
Dell D430 czy XT?
Aż zamarzył mi się serwer, który spełniałby równocześnie funkcję instalatora i repozytorium pakietów do aktualizacji systemów
W artykule nie powinno być czasem: #apt-get install tftp-hpa xinetd
zamiast/oraz/: #apt-get install tftpd-hpa xinetd??
Robiłem wszystko wg. wskazówek z artykulu i klient z serwerem DHCP pięknie sie połączył, natomiast serwer TFTP wyświetlał time=out’y.
Przy próbie połączenia lokalnie z serwera pojawiał się komunikat, żebym sprawdził czym mam zainstalowane pakiety: tftpd-hpa, tfpd komenda nieznana.
Dopiero komenda: #apt-get install tftp-hpa xinetd pomogła.
Jestem średnio zielony w Linuxie, więc może się mylę.
Ps. Poza tym świetny artykuł:-).
Dostał mi sie ostatnio w rączki laptop: Dell PP01L (1Ghz, 128 SDRAM, 10 GB HD) z uszkodzonym CD-Rom’em, na którym ślimaczył się Win98, więc niepozstawało nic innego jak zainstalować na nim Xubuntu przez sieć:).
A po co mi pizza i cola? Udało mi się bez tego.
To jest doprawdy bardzo dobre rozwiazanie, osobiscie uzywam tego od ponad roku dodatkowo mam na serverze zainstalowany apt-cache. Instalacje odbywaja sie o niebo szybciej niz z CD/DVD. PXE server doskonale sie sprawdza w moim domowym laboratorium na 8 komputerow. Chcialem jeszcze dodac ze pod adresem http://www.howtoforge.com/ubuntu_pxe_install_server znajduje sie opis jak zainstalowac jeden PXE server dla wielu roznych dystrybucji. To jest wlasnie dla mnie wyjatkowo przydatne kiedy experymentuje z roznymi dystrybycjami.
Instacja przez www.googbye-microsoft.com to jest właśnie to
tutaj wiecej o bootowaniu przez PXE po sieci, oraz przykład krok po kroku jak można szybko postawić instalacje.
http://pld-users.org/pl/przewodniki/pxe
wszelkie poprawki, rozszerzenia, rozwiniecia mile widziane (to wiki)
Witam. Ja mam pytanie z innej beczki: skąd instalator weźmie pliki instalacyjne systemu? w katalogu /var/lib/tftpboot są tylko pliki z netboot. A reszta? Ja będę walczył z suse 10.3 więc chciałbym wiedzieć.