Kesimpulan

Kesimpulan

PXE (Persekitaran Pelaksanaan Preboot) adalah persekitaran pelayan pelanggan yang memungkinkan untuk boot dan memasang sistem operasi tanpa memerlukan media fizikal. Idea teras agak mudah: pada peringkat awal, pelanggan mendapat alamat IP dari pelayan DHCP dan memuat turun fail yang diperlukan untuk melaksanakan proses boot melalui tftp Protokol (Trivial FTP). Dalam tutorial ini kita akan menggunakan dnsmasq Permohonan: Ia boleh digunakan sebagai pelayan DHCP utama atau di Proksi DHCP mod jika pelayan DHCP lain wujud dalam rangkaian; Ia juga menyediakan perkhidmatan TFTP yang digunakan untuk memindahkan fail.

Dalam tutorial ini anda akan belajar:

  • Cara Mengkonfigurasi Pxelinux dan Buat Menu Boot
  • Cara Mengekstrak Fail dari ISO dan menyediakan struktur fail yang sesuai
  • Cara Mengkonfigurasi DNSMASQ sebagai pelayan DHCP standard atau proksi
  • Cara mengkonfigurasi pelayan TFTP yang dibenamkan dalam dnsmasq
  • Cara membenarkan lalu lintas melalui port yang diperlukan menggunakan UFW
Raspberry Pi sebagai pelayan boot pxe

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Raspberry Pi OS (sebelum ini dikenali sebagai Raspbian)
Perisian Dnsmasq, Pxelinux, Syslinux-EFI
Yang lain Keizinan akar
Konvensyen # - Memerlukan komando linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$-memerlukan komando Linux yang diberikan sebagai pengguna yang tidak berkadar biasa

Memasang pakej

Perkara pertama yang perlu kita lakukan ialah memasang beberapa pakej penting:

  • dnsmasq
  • pxelinux
  • Syslinux-Efi

Dnsmasq menyediakan kedua -dua DHCP dan tftp perkhidmatan; pxelinux adalah ahli bootloader dari Syslinux keluarga, dan direka khusus untuk persekitaran PXE; Pakej Syslinux-EFI_ mengandungi perpustakaan yang diperlukan untuk menyokong Efi pelanggan. Untuk memasang pakej pada Raspberry Pi OS, kita boleh menjalankan:

$ sudo apt-get update & & sudo apt-get install dnsmasq pxelinux syslinux-efi 

Struktur fail

Sebaik sahaja pakej yang diperlukan dipasang, kami boleh meneruskan dan menyediakan struktur fail. Demi tutorial ini, akar keseluruhan persediaan akan menjadi /MNT/data/netboot direktori, yang juga akan digunakan sebagai tftp akar (ditakrifkan di dalam fail konfigurasi DNSMASQ); Semua fail yang diperlukan akan disimpan di dalamnya.

Fail dan Modul Syslinux

Kami mahu dapat menyokong boot pelanggan di BIOS dan Efi Mod, oleh itu perkara pertama yang perlu kita lakukan ialah membuat dua direktori yang dinamakan sempena seni bina di dalamnya /MNT/data/netboot:

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


Setiap seni bina memerlukan beberapa perpustakaan syslinux tertentu untuk berfungsi. Kami menyalinnya dalam direktori yang sesuai:

$ cp \/usr/lib/syslinux/modul/bios/ldlinux, vesamenu, libcom32, libutil.C32 \/usr/lib/pxelinux/pxelinux.0 \/mnt/data/netboot/bios $ cp \/usr/lib/syslinux/modul/efi64/ldlinux.e64 \/usr/lib/syslinux/modul/efi64/vesamenu, libcom32, libutil.C32 \/usr/lib/syslinux.EFI/EFI64/SYSLINUX.efi \/mnt/data/netboot/efi64 

Fail pengedaran

Pada ketika ini kita perlu membuat direktori yang akan menjadi tuan rumah pengagihan yang ingin kami sediakan di menu boot kami. Mari kita sebut boot:

$ mkdir/mnt/data/netboot/boot 

Dalam tutorial ini, sebagai contoh, kami akan bekerjasama dengan imej netinstall Debian. Untuk kemudahan, saya akan menganggap ISO yang telah disahkan sebelum ini (lihat artikel kami tentang memeriksa integriti dan tandatangan imej pengedaran dengan GPG jika anda ingin mengetahui cara mengesahkan integriti dan tandatangan imej pengedaran) di sistem fail RPI di /MNT/Data/ISOS direktori.

Kami mewujudkan jalan yang sesuai di dalamnya /MNT/data/netboot/boot, Menamakan direktori selepas seni bina, nama dan versi sistem yang ingin kami sediakan dalam menu kami (dalam kes ini AMD64 - Debian 10):

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

Pilihan jalan ini sewenang -wenangnya, jadi jangan ragu untuk mencipta sendiri. Pada ketika ini kita mesti memasang ISO pengedaran dan menyalin fail ke dalam direktori destinasi. Untuk memasang ISO yang kami jalankan:

$ sudo mount -o loop -t iso9660/mnt/data/isos/debian -10.4.0-AMD64-Netinst.ISO /Media 

Setelah ISO dipasang, failnya boleh diakses di bawah /media. Saya suka menggunakan rsync Untuk menyalinnya:

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

Sebaik sahaja fail disalin, kita boleh menyahtewar ISO:

$ sudo umount /media 

Dalam langkah seterusnya kita akan melihat cara membuat menu boot menggunakan sintaks Syslinux.

Membuat Menu Boot

Sekarang kita mempunyai fail pengedaran di tempat, kita boleh membuat menu boot. di dalam kita akar TFTP, (/MNT/data/netboot dalam kes kita), kita mencipta pxelinux.cfg Direktori:

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

Di dalam pxelinux.cfg direktori kami membuat fail yang dipanggil lalai dan tampal konfigurasi berikut di dalamnya:

Menu Tajuk PXE Boot Menu Default Vesamenu.C32 Label Label Lokal Label Boot dari Pemacu Tempatan LocalBoot 0xffff Menu Mula AMD64 Tajuk Menu AMD64 Menu Mula Debian Menu Title Debian Label InstallGui Label ^Graphical Install Kernel :: Boot/AMD64/Debian/10/Pasang.AMD/VMLINUZ MELAKUKAN VGA = 788 INITRD = :: Boot/AMD64/Debian/10/Pasang.AMD/GTK/INITRD.GZ --- Label pemasangan label yang tenang ^Pasang kernel :: boot/amd64/debian/10/Pasang.AMD/VMLINUZ MELAKUKAN VGA = 788 INITRD = :: Boot/AMD64/Debian/10/Pasang.AMD/INITRD.GZ --- menu akhir menu yang tenang 

Konfigurasi di atas akan menghasilkan menu bersarang yang dibina berikutan laluan direktori yang kami buat di dalamnya boot direktori. Sekali lagi, yang di atas hanyalah contoh. Anda boleh membuat dan menyusun menu yang anda mahukan; Yang perlu anda lakukan ialah menggunakan sintaks yang sesuai, seperti yang dijelaskan dalam halaman wiki syslinux khusus.

Menu ini mengandungi entri untuk membiarkan pengguna boot dari cakera keras tempatan, submenu dengan AMD64 label, dan dua penyertaan untuk pengedaran debian, InstallGui dan Pasang. Yang pertama melancarkan pemasang pengedaran dalam mod grafik, yang terakhir dalam mod teks yang nampaknya digunakan ncurses perpustakaan.

Bagaimana kita dapat mengetahui parameter yang tepat untuk digunakan di Kernel dan Tambah garis? Kita dapat melihat konfigurasi menu yang ada di dalam kandungan pengedaran yang kita ekstrak dari ISO. Dalam kes kita, sebagai contoh, /MNT/Data/Netboot/Boot/AMD64/Debian/10/Isolinux/Menu.cfg. Malangnya tidak semua pengagihan menggunakan sintaks yang sama, oleh itu kita mesti memberi perhatian dan menyesuaikan konfigurasi seperti yang diperlukan.

Satu perkara yang kita harus menyesuaikan diri dari konfigurasi asal, adalah jalan Vmlinuz dan initrd.Gz fail. Ingat bahawa kami mengakses fail tersebut melalui tftp!

Biasanya, laluan fail ditafsirkan sebagai relatif ke direktori akar TFTP, tetapi dalam konfigurasi di atas, seperti yang anda dapat perhatikan, kami menggunakan :: Sintaks (contohnya kami menulis :: Boot/AMD64/Debian/10/Pasang.AMD/VMLINUZ untuk merujuk imej kernel). Mengapa kita melakukan ini?

Oleh kerana kami membuat dua direktori yang memegang perpustakaan yang memberikan sokongan untuk BIOS dan EFI64 mod dan kami mahu menggunakan konfigurasi menu yang sama untuk kedua -duanya, kami perlu menghubungkannya pxelinux.cfg direktori di kedua -dua mereka, oleh itu kita perlu merujuk tftp akar dengan cara "mutlak". The :: simbol membolehkan kita melakukan ini: Ini adalah cara untuk merujuk jalan mutlak ke akar TFTP.

Menganggap direktori kerja semasa kami adalah /MNT/data/netboot, Untuk menghubungkan konfigurasi menu dalam direktori yang disebutkan di atas, kita boleh mengeluarkan arahan berikut:

$ ln -rs pxelinux.cfg bios & ln -rs pxelinux.CFG EFI64 


Di sini kami menggunakan -r Pilihan Ln perintah untuk membuat relatif pautan simbolik. Pada ketika ini, pokok direktori kita sepatutnya kelihatan seperti itu:

/mnt/data/netboot ├── BIOS │ ├── ldlinux.c32 │ ├── libcom32.c32 │ ├── libutil.C32 │ ├── Pxelinux.0 │ ├── Pxelinux.CFG -> ... /pxelinux.CFG │ └── Vesamenu.C32 ├── boot │ └── AMD64 │ └── Debian │ └── 10 ├── efi64 │ ├ ├── ldlinux.e64 │ ├── libcom32.c32 │ ├── libutil.C32 │ ├── Pxelinux.CFG -> ... /pxelinux.CFG │ ├── SYSLINUX.efi │ └── vesamenu.C32 └── Pxelinux.CFG └── lalai 

Sekarang kita boleh mengkonfigurasi dnsmasq.

Konfigurasikan DNSMASQ

Fail konfigurasi dnsmasq adalah /etc/dnsmasq.Conf. Beberapa parameter yang boleh ditetapkan di dalamnya dikomentari; maklumat lanjut mengenai mereka boleh didapati berunding dnsmasq manual. Kami hanya akan mempertimbangkan yang diperlukan untuk persediaan kami.

Melumpuhkan fungsi DNS

Perkara pertama yang ingin kami lakukan ialah melumpuhkan perkhidmatan DNS yang tertanam dalam DNSMASQ: kami hanya memerlukan fungsi DHCP dan TFTP yang ditawarkan oleh aplikasi. Untuk mencapai matlamat kami, kami dapat menggunakannya pelabuhan Pilihan: Ia digunakan untuk menentukan pelabuhan apa yang harus digunakan untuk DNS; menetapkan nilainya kepada 0 melumpuhkan perkhidmatan. Kami boleh menambahkan arahan pada akhir fail konfigurasi.

port = 0 

Tentukan antara muka rangkaian untuk permintaan DHCP

Perkara kedua yang ingin kami lakukan ialah menentukan antara muka rangkaian yang akan digunakan untuk mendengar permintaan DHCP. Dalam kes kami, antara muka adalah ETH0, Jadi kita menulis:

antara muka = ​​ETH0 

Sekiranya kita tidak mahu menggunakan antara muka tertentu, kita boleh menentukan alamat IP, menggunakan Dengarkan-alamat pilihan sebaliknya.

Menentukan julat IP/mod proksi

Langkah konfigurasi ini sangat penting dan perubahan bergantung pada konfigurasi rangkaian kami.

Sekiranya perkhidmatan DHCP disediakan oleh DNSMASQ adalah hanya satu Dalam rangkaian, dalam langkah ini kita hanya perlu mengkonfigurasi julat alamat IP yang akan diberikan kepada pelanggan, dan secara pilihan a masa pajakan sebagai contoh:

DHCP-range = 192.168.0.100,192.168.0.200,12h 

Dalam baris di atas, julat alamat IP yang tersedia ditakrifkan dengan memisahkan sempadan yang lebih rendah dan lebih tinggi dengan koma. Dalam kes ini kita menentukan julat yang berlaku 192.168.0.100 ke 192.168.200; Kami juga menetapkan a masa pajakan dari 12h.

Kes kedua mungkin yang paling biasa dalam persediaan standard/rumah, di mana biasanya perkhidmatan DHCP disediakan oleh penghala. Sekiranya ini berlaku, dnsmasq harus ditetapkan untuk dijalankan dalam mod proksi untuk mengelakkan konflik. Dalam kes tersebut, kita boleh menulis:

DHCP-range = 192.168.0.0, proksi 

Kami memasuki dua elemen yang dipisahkan oleh koma: yang pertama adalah alamat subnet (192.168.0.0), yang kedua adalah kata kunci "proksi".

Membolehkan pelayan TFTP

Pada ketika ini kita perlu membolehkan dnsmasq Pelayan TFTP Terbenam: Kami akan menggunakannya untuk menyampaikan fail yang diperlukan untuk pelanggan boot. Apa yang perlu kita lakukan untuk menyelesaikan tugas ini adalah untuk menambahkan baris berikut ke fail konfigurasi:

Enable-tftp 

Kita juga mesti menetapkan direktori yang harus digunakan sebagai akar TFTP. Direktori ini, seperti yang telah kita bincangkan, akan menjadi tuan rumah fail yang dikongsi. Dalam kes kita, kita direktori ini /MNT/data/netboot (yang lalai adalah /var/ftpd):

tftp-root =/mnt/data/netboot 

Tetapkan fail boot berdasarkan seni bina pelanggan

The pxelinux BootLoader dapat berfungsi dalam mod EFI dan BIOS, jadi kami perlu mencari cara untuk melayani fail yang sesuai bergantung pada mod yang digunakan oleh pelanggan. Persoalannya, bagaimana pelanggan menyampaikan maklumat tersebut?

DHCP menggunakan siri pilihan untuk pertukaran maklumat: pilihan 93 (Client-Arch) digunakan untuk menyampaikan maklumat mengenai seni bina pelanggan. Jadual di bawah memaparkan pilihan angka dan nilai rentetan dan seni bina yang mereka rujuk:

Nilai pilihan Nilai rentetan Seni bina
0 x86pc Intel x86pc
1 PC98 NEC/PC98
2 Ia64_efi Efi Itanium
3 Alpha Dec Alpha
4 ARC_X86 Arc x86
5 Intel_lean_client Pelanggan Intel Lean
6 IA32_EFI EFI IA32
7 Bc_efi EFI BC
8 Xscale_efi EFI XSCALE
9 X86-64_efi EFI X86-64

Untuk menentukan fail apa yang harus disediakan untuk mod yang sesuai yang digunakan oleh pelanggan, kami boleh menggunakannya PXE-SERVICE pilihan. Untuk x86pc Kita boleh memasukkan baris berikut:

PXE-service = x86pc, "pxelinux (bios)", bios/pxelinux 


Kami memberikan tiga nilai yang dipisahkan oleh koma kepada pilihan: yang pertama adalah Jenis Sistem Pelanggan (x86pc), yang kedua adalah teks menu Dan yang ketiga adalah fail yang akan dimuat turun oleh pelanggan untuk melaksanakan boot. Jalan fail adalah berbanding dengan akar TFTP. Dalam kes ini terdapat di dalam BIOS direktori yang kami buat sebelum dan dipanggil pxelinux.0: namanya mesti dilaporkan tanpa .0 lanjutan, seperti yang anda lihat di atas.

Untuk EFI X86-64 mod, sebaliknya, kita tambah:

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

Pembalakan persediaan

Perkara lain yang berguna untuk membolehkan adalah dnsmasq Pembalakan, untuk menjejaki aktiviti DHCP dan TFTP. Untuk melaksanakan tugas ini, kami menambah Log-Queries Arahan ke konfigurasi kami, dan tetapkan fail yang harus digunakan untuk menyimpan mesej dengan kemudahan log Arahan:

Log-Queries Log-Facility =/Var/Log/Dnsmasq.log 

Simpan konfigurasi dan mulakan semula perkhidmatan

Pada ketika ini konfigurasi kita sepatutnya kelihatan seperti ini:

port = 0 antara muka = ​​ETH0 DHCP-range = 192.168.0.0, proksi Enable-TFTP TFTP-root =/mnt/data/netboot pxe-service = x86pc, "pxelinux (bios)", bios/pxelinux pxe-service = x86-64_efi, ".EFI Log-Queries Log-Facility =/Var/Log/Dnsmasq.log 

Kita dapat menyelamatkan perubahan yang kita buat ke /etc/dnsmasq.Conf fail, dan akhirnya memulakan semula dnsmasq perkhidmatan:

$ sudo systemctl mulakan semula dnsmasq 

Persediaan Firewall

Agar persediaan kami berfungsi dengan betul, kami juga mesti membenarkan trafik masuk melalui firewall kami melalui beberapa pelabuhan tertentu. Dalam tutorial ini saya akan menganggap penggunaan ufw Frontend. Pelabuhan yang kita mesti membenarkan trafik masuk adalah:

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

Untuk membenarkan lalu lintas kita boleh menjalankan arahan berikut:

$ sudo ufw membenarkan 67/udp $ sudo ufw membenarkan 69/udp $ sudo ufw membenarkan 4011/udp 

Boot

Pada ketika ini, jika mesin klien disambungkan ke rangkaian melalui Ethernet dan pilihan boot PXE dipilih sebagai "sumber" boot (pastikan fungsi diaktifkan!), kita sepatutnya dapat melihat menu boot PXE:

Menu boot pxe

Sebaik sahaja kita pilih AMD64 -> Debian -> Pemasangan Grafik Fail yang sesuai akan dimuat turun dan pemasang Debian sepatutnya muncul:

Pemasang grafik Debian

Sekarang mungkin untuk meneruskan pemasangan.

Kesimpulan

Dalam tutorial ini, kita melihat bagaimana untuk melaksanakan langkah -langkah yang diperlukan untuk menjadikan Raspberry Pi dalam pelayan boot PXE: kami melihat cara memasang dan mengkonfigurasi DNSMASQ dan pxelinux bootloader; Kami juga belajar bagaimana untuk membuat menu syslinux dan struktur fail yang sesuai; Akhirnya, kami melihat pelabuhan apa yang akan dibuka untuk persediaan untuk berfungsi. Keraguan? Soalan? Jangan ragu untuk memberi komen dan meminta pertolongan!

Tutorial Linux Berkaitan:

  • Cara menyambung ke pelayan FTP menggunakan python
  • Setup Server FTP di Linux
  • Senarai dan Pemasangan Pelanggan FTP di Ubuntu 22.04 Linux ..
  • Senarai dan Pemasangan Pelanggan FTP di Ubuntu 20.04 Linux ..
  • Cara Menyiapkan Pelayan dan Pelayan FTP/SFTP di Almalinux
  • OpenLitespeed sebagai proksi terbalik
  • Tutorial Konfigurasi Proksi Squid di Linux
  • Cara menjalankan Raspberry Pi OS dalam mesin maya dengan…
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Pasang proksi tor di ubuntu 20.04 Linux