Wnioski
- 3361
- 740
- Maria Piwowarczyk
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
Zastosowane wymagania i konwencje oprogramowania
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 PXEPo wybraniu AMD64 -> Debian -> Instalacja graficzna
Odpowiednie pliki zostaną pobrane i powinien pojawić się instalator Debian:
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