Wnioski

Wnioski

PXE (Preboot Execution Environment) to środowisko klientów, które umożliwia uruchamianie i instalowanie systemów operacyjnych bez potrzeby mediów fizycznych. Podstawowa idea jest dość prosta: na bardzo wczesnym etapie klient otrzymuje adres IP z serwera DHCP i pobiera pliki potrzebne do wykonania procesu rozruchu za pośrednictwem TFTP protokół (trywialny FTP). W tym samouczku użyjemy DNSMASQ Aplikacja: może być używany jako główny serwer DHCP lub w Proxy DHCP tryb, jeśli w sieci istnieje inny serwer DHCP; Zapewnia również usługę TFTP używaną do przesyłania plików.

W tym samouczku się nauczysz:

  • Jak skonfigurować pxelinux i utworzyć menu rozruchowe
  • Jak wyodrębnić pliki z ISO i skonfigurować odpowiednią strukturę pliku
  • Jak skonfigurować DNSMASQ jako standardowy lub serwer DHCP proxy
  • Jak skonfigurować serwer TFTP osadzony w DNSMASQ
  • Jak pozwolić na ruch przez potrzebne porty za pomocą UFW
Raspberry Pi jako serwer rozruchowy PXE

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Raspberry Pi OS (wcześniej znany jako Raspbian)
Oprogramowanie DNSMASQ, PXELINUX, SYSLILUX-EFI
Inny Uprawnienia korzeniowe
Konwencje # - Wymaga, aby podane Linux -commands były wykonywane z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$-wymaga wykonania Linux-commands jako zwykłego niewidzianego użytkownika

Instalowanie pakietów

Pierwszą rzeczą, którą musimy zrobić, jest zainstalowanie niektórych niezbędnych pakietów:

  • DNSMASQ
  • Pxelinux
  • Syslinux-efi

DNSMASQ zapewnia zarówno DHCP, jak i TFTP usługi; Pxelinux jest członkiem bootloader Syslinux rodzina i jest specjalnie zaprojektowana dla środowiska PXE; Pakiet Syslinux-EFI_ zawiera biblioteki potrzebne do obsługi Efi klienci. Aby zainstalować pakiety w systemie OS Raspberry Pi, możemy uruchomić:

$ sudo apt-get aktualizacja && sudo apt-get instaluj dnsmasq pxelinux syslinux-efi 

Struktura pliku

Po zainstalowaniu potrzebnych pakietów możemy kontynuować i skonfigurować strukturę pliku. Ze względu na ten samouczek, korzeniem całej konfiguracji będzie /mnt/data/netboot katalog, który będzie również używany jako TFTP root (zdefiniowany w pliku konfiguracyjnym DNSMASQ); Wszystkie potrzebne pliki zostaną w nim przechowywane.

Pliki i moduły Syslinux

Chcemy być w stanie obsługiwać rozruch klientów BIOS I Efi Dlatego pierwszą rzeczą, którą musimy zrobić, jest stworzenie dwóch katalogów nazwanych na cześć tych architektur w środku /mnt/data/netboot:

$ mkdir/mnt/data/netboot/bios, efi64 


Każda architektura potrzebuje do pracy określonych bibliotek Syslinux. Kopiujemy je w odpowiednich katalogach:

$ cp \/usr/lib/syslinux/module/bios/ldlinux, vesamenu, libcom32, libutil.C32 \/usr/lib/pxelinux/pxelinux.0 \/mnt/data/netboot/bios $ cp \/usr/lib/syslinux/modules/efi64/ldlinux.e64 \/usr/lib/syslinux/module/efi64/vesamenu, libcom32, libutil.c32 \/usr/lib/syslinux.Efi/efi64/syslinux.efi \/mnt/data/netboot/efi64 

Pliki dystrybucji

W tym momencie musimy utworzyć katalog, który będzie prowadzić dystrybucje, które chcemy udostępnić w naszym menu rozruchowym. Nazwijmy to uruchomić:

$ mkdir/mnt/data/netboot/boot 

W tym samouczku, podobnie jak przykład, będziemy pracować z obrazem Debian Netinstall. Dla wygody przypuszczam, że wcześniej zweryfikowane ISO (spójrz na nasz artykuł na temat sprawdzania integralności i podpisu obrazu dystrybucji z GPG, jeśli chcesz wiedzieć, jak zweryfikować integralność i podpis obrazu dystrybucji), aby być dostępne na systemie plików RPI w /MNT/Data/ISOS informator.

Tworzymy odpowiednią ścieżkę w środku /mnt/data/netboot/boot, Nazywanie katalogów po architekturze, nazwie i wersji systemu, który chcemy podać w naszym menu (w tym przypadku AMD64 - Debian 10):

$ mkdir -p/mnt/data/netboot/boot/amd64/debian/10 

Ten wybór ścieżki jest arbitralny, więc możesz stworzyć własny. W tym momencie musimy zamontować ISO dystrybucji i skopiować pliki do katalogu docelowego. Aby zamontować ISO, prowadzimy:

$ sudo Mount -o Loop -t ISO9660/MNT/Data/ISOS/Debian -10.4.0-AMD64-NETINST.ISO /Media 

Po zamontowaniu ISO jego pliki będą dostępne pod /głoska bezdźwięczna. Lubię używać rsync Aby je skopiować:

$ sudo rsync -Av/media//mnt/data/netboot/boot/amd64/debian/10 

Po skopiowaniu plików możemy zdjąć ISO:

$ sudo umount /media 

W następnym kroku zobaczymy, jak utworzyć menu rozruchowe za pomocą składni Syslinux.

Tworzenie menu rozruchowego

Teraz, gdy mamy na miejscu pliki dystrybucji, możemy utworzyć menu rozruchu. wewnątrz naszego Korzeń TFTP, (/mnt/data/netboot W naszym przypadku) tworzymy Pxelinux.CFG informator:

$ mkdir/mnt/data/netboot/pxelinux.CFG 

W środku Pxelinux.CFG katalog tworzymy plik o nazwie domyślny i wklej następującą konfigurację w nim:

Tytuł menu PXE BOOT Menu Domyślnie Vesamenu.C32 etykieta Lokalna etykieta Lokalna Z napędu Lokalne BOOT 0xffff Menu Rozpocznij menu AMD64 Menu Menu AMD64 Menu Rozpocznij menu debian tytuł etykieta instalacji menu instalacja etykieta menu menu ^Graficzne instalacja jądro :: boot/amd64/debian/10/instaluj.AMD/vmlinuz append vga = 788 initrd = :: boot/amd64/debian/10/instaluj.AMD/GTK/initrd.GZ --- etykieta instalacji etykiety cichej etykiety ^instaluj jądro :: boot/amd64/debian/10/instaluj.AMD/vmlinuz append vga = 788 initrd = :: boot/amd64/debian/10/instaluj.AMD/initrd.GZ --- Ciche menu koniec menu 

Powyższa konfiguracja wygeneruje zagnieżdżone menu zbudowane zgodnie ze ścieżką katalogu, którą utworzyliśmy w środku uruchomić informator. Znowu powyższe jest tylko przykładem. Możesz tworzyć i ustrukturyzować menu, jak chcesz; Wszystko, co musisz zrobić, to użyć odpowiedniej składni, jak wyjaśniono na dedykowanej stronie wiki Syslinux.

Menu zawiera wpis, który umożliwia uruchomienie użytkownika z lokalnego dysku twardego, podmenu z AMD64 etykieta i dwa wpisy do dystrybucji Debian, instaltGui I zainstalować. Ten pierwszy uruchamia instalator dystrybucji w trybie graficznym, drugi w trybie tekstowym, który wydaje się używać ncurses biblioteki.

Skąd możemy znać dokładne parametry do użycia w JĄDRO I DODAĆ linie? Możemy spojrzeć na konfigurację menu, która istnieje w zawartości dystrybucji wyodrębnionej z ISO. Na przykład w naszym przypadku, /mnt/data/netboot/boot/amd64/debian/10/aSolinux/menu.CFG. Niestety nie wszystkie rozkłady używają tej samej składni, dlatego musimy zwrócić uwagę i dostosować konfigurację w razie potrzeby.

Jedną rzeczą, którą musieliśmy dostosować z oryginalnej konfiguracji, jest ścieżka vmlinuz I initrd.GZ akta. Pamiętaj, że uzyskujemy dostęp do tych plików za pośrednictwem TFTP!

Zwykle ścieżka plików jest interpretowana jako względny do katalogu głównego TFTP, ale w powyższej konfiguracji, jak można obserwować, użyliśmy :: Składnia (na przykład napisaliśmy :: boot/amd64/debian/10/instalacja.AMD/VMlinuz Aby odwoływać się do obrazu jądra). Dlaczego to zrobiliśmy?

Ponieważ stworzyliśmy dwa katalogi, które utrzymują biblioteki zapewniające wsparcie dla bios I EFI64 tryb i chcemy użyć tej samej konfiguracji menu dla obu, musimy połączyć Pxelinux.CFG katalog w obu z nich, dlatego musimy odnieść się do TFTP root w sposób „absolutny”. :: Symbol pozwala nam dokładnie to zrobić: jest to sposób na odniesienie bezwzględnej ścieżki do korzenia TFTP.

Przypuśćmy, że nasz obecny katalog roboczy to /mnt/data/netboot, Aby połączyć konfigurację menu w wyżej wymienionych katalogach, możemy wydać następujące polecenie:

$ ln -rs pxelinux.CFG BIOS && ln -rs pxelinux.CFG EFI64 


Tutaj użyliśmy -R opcja Ln polecenie tworzenia względny symboliczne linki. W tym momencie nasze drzewo katalogowe powinno wyglądać tak:

/MNT/Data/Netboot ├── BIOS │ ├── ldlinux.C32 │ ├── Libcom32.c32 │ ├── libuutil.C32 │ ├── Pxelinux.0 │ ├wiąt pxelinux.CFG ->… /PXELINUX.cfg │ └── vesamenu.C32 ├── BOOT │t └-- AMD64 │ └── Debian │ └└ 10 ├─wią Efi64 │ ├── Ldlinux.E64 │ ├── Libcom32.c32 │ ├── libuutil.C32 │ ├── Pxelinux.CFG ->… /PXELINUX.CFG │ ├── Syslinux.efi │ └── vesamenu.C32 └� Pxelinux.CFG └── Domyślnie 

Możemy teraz skonfigurować DNSMASQ.

Skonfiguruj DNSMASQ

Plik konfiguracyjny DNSMASQ to /etc/dnsmasq.conf. Niektóre parametry, które można w nim ustawić, są komentowane; Więcej informacji na ich temat można znaleźć w konsultacji DNSMASQ podręcznik. Rozważymy tylko te niezbędne do naszej konfiguracji.

Wyłączanie funkcjonalności DNS

Pierwszą rzeczą, którą chcemy zrobić, jest wyłączenie usługi DNS osadzonej w DNSMASQ: Potrzebujemy tylko funkcji DHCP i TFTP oferowanych przez aplikację. Aby osiągnąć nasz cel, możemy użyć Port Opcja: Służy do określenia, jakiego portu należy użyć dla DNS; ustawianie jego wartości 0 wyłącza usługę. Możemy dołączyć instrukcję na końcu pliku konfiguracyjnego.

port = 0 

Podaj interfejs sieciowy dla żądań DHCP

Drugą rzeczą, którą chcemy zrobić, jest określenie interfejsu sieciowego, który zostanie użyty do słuchania żądań DHCP. W naszym przypadku powiedziano, że interfejs jest ETH0, Więc piszemy:

interfejs = ETH0 

Jeśli nie chcemy używać określonego interfejsu, możemy określić adres IP, za pomocą Słuchaj Zamiast tego.

Określenie zakresu IP/trybu proxy

Ten etap konfiguracji jest bardzo ważny i zmienia się w zależności od konfiguracji sieci.

Jeśli usługa DHCP świadczona przez DNSMASQ jest jedyny W sieci, na tym etapie musimy po prostu skonfigurować zakres adresów IP, które zostaną przypisane do klientów, i opcjonalnie czas wynajmu Na przykład:

DHCP Range = 192.168.0.100 192.168.0.200,12H 

W powyższym wierszu zakres dostępnych adresów IP jest zdefiniowany przez oddzielenie niższych i wyższych granic przez przecinek. W tym przypadku zdefiniowaliśmy zakres, który wychodzi z 192.168.0.100 Do 192.168.200; Ustawiliśmy również czas wynajmu z 12h.

Drugi przypadek jest prawdopodobnie najczęstszy w konfiguracji standardowej/domowej, w której zwykle usługa DHCP jest świadczona przez router. W takim przypadku DNSMASQ należy ustawić w trybie proxy, aby uniknąć konfliktów. W takich przypadkach możemy napisać:

DHCP Range = 192.168.0.0, proxy 

Weszliśmy dwa elementy oddzielone przecinkiem: pierwszy to Adres podsieci (192.168.0.0), drugi to słowo kluczowe „proxy”.

Włączanie serwera TFTP

W tym momencie musimy włączyć DNSMASQ Wbudowany serwer TFTP: użyjemy go do obsługi plików potrzebnych dla klientów do uruchomienia. Wszystko, co musimy zrobić, aby wykonać to zadanie, to dołączyć następujący wiersz do pliku konfiguracyjnego:

Włącz Tftp 

Musimy również ustawić katalog, który powinien być używany jako Korzeń TFTP. Ten katalog, jak już omówiliśmy, będzie hostował udostępnione pliki. W naszym przypadku my, ten katalog jest /mnt/data/netboot (Domyślnie jest /var/ftpd):

tftp-root =/mnt/data/netboot 

Ustaw plik rozruchowy na podstawie architektury klienta

Pxelinux Bootloader jest w stanie działać zarówno w trybie EFI, jak i BIOS, więc musimy znaleźć sposób obsługi odpowiedniego pliku w zależności od trybu używanego przez klienta. Pytanie brzmi: w jaki sposób klient przekazuje takie informacje?

DHCP korzysta z serii opcji do wymiany informacji: opcja 93 (Klient-Arch) służy do przekazywania informacji o architekturze klienta. Poniższa tabela wyświetla wartości numeryczne i łańcuchowe oraz architektury, które odwołują:

Wartość opcji Wartość ciągu Architektura
0 x86pc Intel x86pc
1 PC98 NEC/PC98
2 IA64_EFI Efi itanium
3 Alfa DEC Alpha
4 ARC_X86 ARC x86
5 Intel_lean_client Intel Lean Client
6 IA32_EFI EFI IA32
7 BC_EFI EFI BC
8 Xscale_efi Efi xscale
9 X86-64_efi EFI X86-64

Aby określić, jaki plik należy podać dla odpowiedniego trybu używanego przez klienta, możemy użyć PXE-SERVICE opcja. Dla x86pc Możemy wprowadzić następujący wiersz:

pxe-service = x86pc, „pxelinux (bios)”, bios/pxelinux 


Podaliśmy trzy wartości oddzielone przecinkiem do opcji: pierwszy to typ systemu klienta (x86pc), drugi to tekst menu a trzeci to plik, który zostanie pobrany przez klienta w celu wykonania rozruchu. Ścieżka pliku jest w stosunku do korzenia TFTP. W takim przypadku znajduje się w środku bios katalog, który stworzyliśmy wcześniej i nazywa się Pxelinux.0: Nazwa musi być zgłoszona bez .0 rozszerzenie, jak widać powyżej.

Dla EFI X86-64 Tryb, zamiast tego dodajemy:

pxe-service = x86-64_efi, „pxelinux (efi)”, efi64/syslinux.Efi 

Logowanie konfiguracji

Inną rzeczą, która jest przydatna do włączenia, jest DNSMASQ Logowanie, aby śledzić aktywność DHCP i TFTP. Aby wykonać to zadanie, dodajemy zapytania dziennikowe instrukcja do naszej konfiguracji i ustaw plik, który powinien być używany do przechowywania wiadomości za pomocą logarytmizm instrukcja:

Log-pytale logarytmiczne =/var/log/dnsmasq.dziennik 

Zapisz konfigurację i ponowne uruchomienie usług

W tym momencie nasza konfiguracja powinna wyglądać tak:

Port = 0 interfejs = ETH0 DHCP-Range = 192.168.0.0, Proxy Enable-TFTP TFTP-root =/mnt/data/netboot pxe-service = x86pc, „pxelinux (bios)”, bios/pxelinux pxe-service = x86-64_efi, „pxelinux (efi)”, efi64/syslinux.EFI Log-Ceries Log-Facility =/var/log/dnsmasq.dziennik 

Możemy zapisać zmiany, które wprowadziliśmy w /etc/dnsmasq.conf plik i wreszcie uruchom ponownie DNSMASQ praca:

$ sudo systemctl restart dnsmasq 

Konfiguracja zapory ogniowej

Aby nasza konfiguracja działała prawidłowo, musimy również pozwolić na ruch przychodzący przez naszą zaporę za pośrednictw. W tym samouczku założę użycie UFW frontend. Porty, na które musimy pozwolić na przychodzący ruch, to:

  • 67/UDP
  • 69/UDP
  • 4011/UDP

Aby umożliwić ruch, możemy uruchomić następujące polecenie:

$ sudo ufw zezwolić 67/udp $ sudo ufw zezwolić 69/udp $ sudo ufw zezwolić na 4011/udp 

Uruchamianie

W tym momencie, jeśli maszyna kliencka jest podłączona do sieci za pośrednictwem Ethernet, a opcja rozruchu PXE jest wybierana jako „źródło” (upewnij się, że funkcjonalność jest włączona!), powinniśmy być w stanie zobaczyć menu rozruchowe PXE:

Menu rozruchowe PXE

Po wybraniu AMD64 -> Debian -> Instalacja graficzna Odpowiednie pliki zostaną pobrane i powinien pojawić się instalator Debian:

Debian Graphical Installer

Teraz można kontynuować instalację.

Wnioski

W tym samouczku widzieliśmy, jak wykonać kroki potrzebne do obrócenia Raspberry Pi na serwerze rozruchowym PXE: widzieliśmy, jak zainstalować i skonfigurować DNSMASQ i PXELINUX BOOTLOADER; Nauczyliśmy się również, jak tworzyć menu Syslinux i odpowiednią strukturę pliku; Wreszcie, widzieliśmy, jakie porty otworzyły dla konfiguracji do pracy. Wątpienie? pytania? Zapraszam do komentowania i poproś o pomoc!

Powiązane samouczki Linux:

  • Jak połączyć się z serwerem FTP za pomocą Pythona
  • Skonfiguruj serwer FTP w systemie Linux
  • Lista klientów FTP i instalacja na Ubuntu 22.04 Linux…
  • Lista klientów FTP i instalacja na Ubuntu 20.04 Linux…
  • Jak skonfigurować serwer FTP/SFTP i klient na Almalinux
  • OpenLitespeed jako odwrotny proxy
  • Samouczek konfiguracji proxy Squid na Linux
  • Jak uruchomić Raspberry Pi OS w wirtualnej maszynie z…
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Zainstaluj proxy TOR na Ubuntu 20.04 Linux