Kesimpulan
- 1647
- 275
- Mr. Ramon Runolfsson
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
Keperluan perisian dan konvensyen yang digunakan
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 pxeSebaik sahaja kita pilih AMD64 -> Debian -> Pemasangan Grafik
Fail yang sesuai akan dimuat turun dan pemasang Debian sepatutnya muncul:
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