Multitool PXE berdasarkan Raspberry Pi



Insinyur pusat data sering dihadapkan pada tugas konfigurasi server awal. Selain itu, paling sering perlu untuk mengkonfigurasi bukan hanya satu atau dua peralatan, tetapi beberapa puluh atau bahkan ratusan. Setiap kali peralatan baru datang kepada kita, kita tidak hanya harus memeriksanya secara menyeluruh sebelum mengoperasikannya, tetapi juga mengkonfigurasinya dengan benar untuk bekerja dengan sistem internal kita.



Sebelum melanjutkan dengan prosedur yang agak sepele untuk mengatur BIOS dan IPMI, kita harus memastikan bahwa setiap komponen server memiliki versi firmware yang diperlukan. Dalam kebanyakan kasus, dengan pengecualian yang jarang terjadi, versi terbaru diperlukan, tersedia di situs web produsen komponen tertentu. Hari ini kami akan memberitahu Anda bagaimana kami mendapatkan ide untuk menggunakan "raspberry" yang sekarang populer untuk mempercepat prosesnya.



Apa kesulitannya



Tampaknya tugas itu sangat sederhana. Nah, mari kita ambil beberapa distribusi Linux langsung, luncurkan ke USB flash drive dan boot dari itu dan lakukan prosedur yang diperlukan. Tapi itu tidak ada.



Masalahnya adalah setiap vendor memiliki metode dan utilitasnya sendiri untuk memperbarui firmware. Selain itu, tidak semuanya mampu bekerja dengan baik di Linux. Beberapa komponen, misalnya, BIOS untuk server SuperMicro, diinginkan untuk menjahit dari bawah MS-DOS. Untuk beberapa komponen, misalnya, kartu jaringan Mellanox, dalam beberapa kasus Anda perlu menggunakan Windows, dan beberapa mendukung firmware langsung dari Linux.



Jadi, kita perlu mengumpulkan gambar multiboot dan menuliskannya ke beberapa lusin flash drive, lalu mem-boot dari mereka untuk waktu yang lama dan terus-menerus, atau menghasilkan sesuatu yang lebih menarik dan cepat. Dan di sinilah penggunaan kartu jaringan server dengan dukungan untuk PXE (Preboot eXecution Environment, dibaca pixie) muncul dalam pikiran.



Kami mengambil "raspberry", menyebarkan DHCP dan server TFTP di sana, siapkan gambar yang diperlukan untuk dimuat. Untuk memuat beberapa lusin server secara besar-besaran, kami hanya sementara menggunakan sakelar gigabit 48-port yang tidak dikelola dan voila. Secara default, sebagian besar server mengizinkan boot PXE tanpa konfigurasi tambahan, jadi ini sangat ideal.



Saya mengambil artikel yang bagus sebagai dasar. dari Romanenko_Eugene, tetapi dengan koreksi untuk fitur Raspberry Pi dan tugas sedang diselesaikan. Ayo mulai!



Selai rasberi



Pertama kali saya melakukan ini, versi Raspberry Pi yang paling canggih adalah yang ketiga dengan kartu jaringan 100 Mbps. Sejujurnya ini tidak cukup untuk distribusi massal gambar yang berat, jadi saya sangat menyarankan untuk menggunakan Raspberry Pi 4 yang saat ini tersedia dengan port 1 Gb / s. Rekomendasi lainnya adalah menggunakan kartu memori yang cepat dan besar jika memungkinkan.



Sekarang tentang pengaturan awal. Antarmuka grafis untuk hal semacam itu sama sekali tidak diperlukan, sehingga Anda dapat mengunduh versi Lite yang paling sederhana dari sistem operasi Raspberry Pi OS. Kami membongkar gambar dan mengunggah gambar ke kartu MicroSD dengan cara apa pun yang nyaman, misalnya, menggunakan dd:



sudo dd if=<_> of=/dev/mmcblk0 bs=1M
      
      





Selama proses konfigurasi, Anda dapat mengonfigurasi dengan cara tradisional dengan menghubungkan keyboard dan monitor, atau melalui SSH. Agar layanan SSH berfungsi saat startup, buat file kosong bernama ssh di bagian / boot .



Karena port jaringan akan digunakan untuk operasi DHCP, Anda dapat menggunakan koneksi Wi-Fi untuk mengakses Internet, atau menghubungkan kartu jaringan lain ke Malinka melalui USB. Ini salah satunya, misalnya:





Sekarang kami meluncurkan Raspberry Pi, menghubungkannya ke Internet dan memperbarui repositori dan paket perangkat lunak:



sudo apt update
      
      





sudo apt upgrade
      
      





Karena saya menggunakan kartu jaringan lain, kartu bawaan harus disetel ke alamat IP statis. Buka konfigurasi:



sudo nano /etc/dhcpcd.conf
      
      





Tambahkan baris berikut:



interface eth0
static ip_address=192.168.50.1/24
      
      





Di sini eth0 adalah kartu jaringan onboard Raspberry Pi. Dengan bantuannya distribusi alamat IP dan pemuatan jaringan akan dilakukan. Sekarang instal server tftp:



sudo apt install tftpd-hpa
      
      





Setelah instalasi, buka file konfigurasi:



sudo nano /etc/default/tftpd-hpa
      
      





Kami membawa garis ke formulir berikut:



TFTP_OPTIONS="--secure -l -v -r blksize"
      
      





Secara umum, seseorang dapat membiarkan semuanya apa adanya, tetapi menguji setiap kali pada mesin terpisah terkadang sangat tidak nyaman. Opsi -l -v -r blksize memungkinkan Anda menguji semua ini di VM VirtualBox tanpa masalah, memperbaiki beberapa masalah kompatibilitas. Sekarang kami menginstal server DHCP untuk mendistribusikan alamat IP:



sudo apt install isc-dhcp-server
      
      





Buka file konfigurasi pertama isc-dhcp-server:



sudo nano /etc/default/isc-dhcp-server
      
      





Kami secara eksplisit menunjukkan antarmuka tempat server DHCP seharusnya bekerja:



INTERFACESv4="eth0"
      
      





Sekarang buka konfigurasi kedua dhcpd.conf :



sudo nano /etc/dhcp/dhcpd.conf
      
      





Kami mengatur parameter server yang diperlukan, subnet yang akan didistribusikan, dan juga meneruskan nama file loader:



default-lease-time 600;
max-lease-time 7200;
ddns-update-style none;
authoritative;

subnet 192.168.50.0 netmask 255.255.255.0 {
        range 192.168.50.2 192.168.50.250;
        option broadcast-address 192.168.50.255;
        option routers 192.168.50.1;
        filename "pxelinux.0";
}

      
      





Kami menyimpan file dan sekarang kami harus benar-benar mengunduh bootloader, modul yang diperlukan, dan membentuk menu PXE. Mari kita mulai dengan mengunduh satu set pemuat Syslinux, dalam kasus saya versi 5.01 adalah yang paling nyaman:



wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-5.01.zip
      
      





Membuka kemasan:



unzip syslinux-5.01.zip
      
      





Sekarang kita perlu mencari dan mengekstrak modul memdisk , yang dapat memuat seluruh image ISO ke dalam RAM, loader pxelinux.0 dan modul comboot lainnya . Kami secara berurutan menjalankan perintah yang akan menemukan dan menyalin semua yang ditemukan di direktori / srv / tftp:



find ./ -name "memdisk" -type f|xargs -I {} sudo cp '{}' /srv/tftp/
      
      





find ./ -name "pxelinux.0"|xargs -I {} sudo cp '{}' /srv/tftp/
      
      





find ./ -name "*.c32"|xargs -I {} sudo cp '{}' /srv/tftp/
      
      





Setelah operasi ini, kita perlu membuat file konfigurasi secara langsung untuk menu yang ditampilkan di layar PXE. Buka direktori kami:



cd /srv/tftp
      
      





Buat direktori bernama pxelinux.cfg dan arahkan ke sana:



sudo mkdir pxelinux.cfg
      
      





cd pxelinux.cfg
      
      





Kami membuat file konfigurasi:



sudo nano default
      
      





Sebagai contoh, mari kita ambil distribusi GRML langsung yang sangat baik dan unduh melalui PXE. Di bawah ini adalah contoh konfigurasi yang sudah selesai:



UI vesamenu.c32                  
PROMPT 0
MENU TITLE Raspberry Pi PXE Server
MENU BACKGROUND bg.png
LABEL bootlocal
   menu label Boot from HDD
   kernel chain.c32
   append hd0 0
   timeout 0
TEXT HELP
Boot from first HDD in your system
ENDTEXT
LABEL grml
   menu label GRML Linux
KERNEL grml/boot/grml32full/vmlinuz
APPEND root=/dev/nfs rw nfsroot=192.168.50.1:/srv/tftp/grml/ live-media-path=/live/grml32-full boot=live lang=us nomce apm=power-off noprompt noeject initrd=grml/boot/grml32full/initrd.img vga=791
LABEL reboot
    menu label Reboot
    kernel reboot.c32
TEXT HELP
Reboot server
ENDTEXT

      
      





Mungkin ada baiknya berhenti sedikit di sini dan mencari tahu apa yang dilakukan setiap baris:



  • UI vesamenu.c32 - gunakan modul vesamenu.c32 untuk menampilkan menu;
  • PROMPT 0 - sorot item menu nol;
  • MENU TITLE Raspberry Pi PXE Server - mengatur nama umum menu;
  • LATAR BELAKANG MENU bg.png - elemen desain, gunakan bg.png sebagai gambar latar belakang.


Gambar latar bisa dibuat terlebih dahulu. Secara default, gambar berukuran 640x480 dengan kedalaman warna tidak lebih dari 24 bit, dalam format PNG atau JPG, sudah sesuai. Ini harus disalin ke / srv / tftp terlebih dahulu . Sekarang mari kita lihat setiap bagian. Bagian pertama telah diperkenalkan untuk kenyamanan. Jika Anda perlu mem-boot dari hard drive pertama, maka kami mendaftar:



  • LABEL bootlocal - nama bagian internal;
  • label menu Boot dari HDD - bagaimana menu pengguna akan ditampilkan;
  • kernel chain.c32 - kami menggunakan modul chain.c32, yang dapat melakukan booting dari berbagai media;
  • tambahkan hd0 0 - secara eksplisit menunjukkan bahwa memuat harus dari partisi pertama dari hard disk pertama;
  • timeout 0 - di sini Anda dapat menyetel waktu tunggu dalam hitungan detik, setelah itu pengunduhan akan dimulai secara otomatis, atau dengan menentukan 0 untuk menghapus pengatur waktu.
  • BANTUAN TEKS - menunjukkan awal teks bantuan untuk pengguna;
  • Boot dari HDD pertama di sistem Anda - teks petunjuk;
  • ENDTEXT - menunjukkan akhir teks petunjuk.


Dengan cara yang kurang lebih sama, kami membentuk bagian untuk memuat ulang. Satu-satunya perbedaan adalah panggilan ke modul reboot.c32, yang sebenarnya mengirim mobil untuk reboot. Sebelum memeriksa apa yang dilakukan bagian ketiga, yang memuat distribusi GRML, mari kita bicara tentang apa yang sebenarnya akan dimuat dan bagaimana caranya.



Semuanya adalah file



Citra ISO itu sendiri tersedia di situs web distribusi langsung ini. Unduh dan ganti namanya untuk kenyamanan, dalam contoh kami akan mengambil versi 32-bit:



wget https://download.grml.org/grml32-full_2020.06.iso
      
      





mv grml32-full_2020.06.iso grml.iso
      
      





Sekarang kita perlu memaksa gambar ini untuk boot. Di satu sisi, Anda dapat menggunakan modul memdisk dan memaksanya untuk terlebih dahulu memuat semua konten "mentah" gambar langsung ke RAM dan kemudian mentransfer kontrol atas boot. Tetapi metode ini hanya bagus untuk gambar yang sangat kecil, misalnya, akan lebih mudah untuk mem-boot MS-DOS dengan cara ini. Gambar besar membutuhkan waktu lama untuk dimuat ke dalam memori dan tidak selalu berfungsi dengan baik.



Oleh karena itu, Anda masih harus "membuang" image dan hanya mentransfer kernel dan livefs untuk boot. Tetapi file lebih lanjut dari disk dapat diberikan ke sistem atas permintaan menggunakan server NFS. Pendekatan ini bekerja lebih cepat dan lebih memadai, tetapi membutuhkan gerakan tambahan, seperti menginstal server NFS.



Ini dilakukan dengan cara dasar:



sudo apt install nfs-kernel-server
      
      





Agar file tidak berantakan, buat direktori terpisah untuk grml:



sudo mkdir /srv/tftp/grml
      
      





Kami perlu memasang ISO, jadi kami akan mengurus titik pemasangan sementara:



sudo mkdir /tmp/iso
      
      





Kami memasang gambar. Sistem akan memperingatkan Anda bahwa gambar dipasang dalam mode Hanya-Baca:



sudo mount -o loop grml.iso /tmp/iso
      
      





Salin konten gambar secara rekursif ke direktori terpisah kami:



sudo cp -R /tmp/iso/* /srv/tftp/grml
      
      





Untuk menghindari masalah dengan hak akses, kami mengubah pemilik dan secara rekursif menetapkan hak direktori ini dari rangkaian "Rumah gratis, hidup siapa pun yang Anda inginkan":



sudo chown -R nobody:nogroup /srv/tftp/grml/
      
      





sudo chmod -R 755 /srv/tftp/grml/
      
      





Sekarang mudah untuk memberi tahu server NFS bahwa ia harus menyediakan direktori / srv / tftp / grml ke alamat IP mana pun dari subnet kami:



sudo nano /etc/exports
      
      





Kami mendaftarkan baris:



/srv/tftp/grml 192.168.50.0/24(rw,sync,no_subtree_check)
      
      





Perbarui daftar dan mulai ulang server NFS:



sudo exportfs -a
      
      





sudo systemctl restart nfs-kernel-server
      
      





Sekarang kami akhirnya memiliki kesempatan untuk membagi proses pengunduhan dengan benar menjadi dua tahap bersyarat. Langkah pertama adalah memuat kernel dan sistem file live. Tahap kedua adalah menarik semua file lain melalui NFS. Saatnya untuk melihat bagian yang tersisa:



  • LABEL grml - nama bagian;
  • label menu GRML Linux - tampilan di menu;
  • KERNEL grml / boot / grml32full / vmlinuz - tentukan jalur ke kernel, relatif terhadap root / srv / tftp ;
  • TAMBAH root = / dev / nfs rw nfsroot = 192.168.50.1: / srv / tftp / grml / live-media-path = / live / grml32-full boot = live lang = us nomce apm = power-off noprompt noeject initrd = grml /boot/grml32full/initrd.img vga = 791 - di sini kita mengatakan bahwa kita menggunakan NFS, tulis jalur ke root bersyarat, setel beberapa parameter tambahan yang direkomendasikan dalam dokumentasi dan tunjukkan jalur relatif ke initrd.


Sekarang yang tersisa hanyalah menjalankan server TFTP dan DHCP secara berurutan dan Anda dapat mencoba untuk boot ke PXE. Jika semuanya dilakukan dengan benar, maka Anda akan melihat menu yang dibuat:





Memilih item GRML Linux, tekan Enter dan lihat bahwa kami memiliki proses pemuatan gambar yang berhasil:





Dengan demikian, kami mendapat kemampuan untuk mem-boot jaringan distribusi GRML, yang populer di kalangan administrator sistem. Tetapi bagaimana dengan MS-DOS yang sama dan bagaimana Anda dapat secara mandiri menyiapkan gambar untuk mem-flash BIOS. Mari kita bicarakan ini lebih lanjut.



Di DOS Kami Percaya



Apakah sistem operasi dari tahun 80-an milenium terakhir masih digunakan di abad ke-21? Tidak peduli betapa aneh kelihatannya, tetapi untuk beberapa tugas tertentu MS-DOS masih relevan dan cukup berguna untuk dirinya sendiri. Salah satu tugas ini adalah memperbarui firmware BIOS di server.



Mari kita ambil beberapa motherboard sebagai contoh, misalnya, Supemicro X11SSL-F dan unduh pembaruan BIOS dari situs resminya. Di dalamnya kita melihat satu set file serupa:



user@linux:~//X11SSLF0_B26> ls -l
 16592
-rw-r--r-- 1 user users   169120   1  2015 AFUDOSU.SMC
-rw-r--r-- 1 user users     5219  20  2003 CHOICE.SMC
-rw-r--r-- 1 user users    22092  27  2014 FDT.smc
-rw-r--r-- 1 user users     3799  15  2016 FLASH.BAT
-rw-r--r-- 1 user users     3739  22  2019 Readme for UP X11 AMI  BIOS.txt
-rw-r--r-- 1 user users 16777216  25 23:48 X11SSLF0.B26

      
      





Kami melihat bahwa kami sudah memiliki file BAT siap pakai yang memungkinkan kami untuk mem-flash BIOS. Tetapi untuk melakukan ini, Anda harus memiliki server yang sudah dimuat ke MS-DOS. Sekarang kami akan menunjukkan kepada Anda bagaimana melakukan ini.



Pertama-tama, kita perlu menyiapkan gambar mentah kecil dari hard disk dengan sistem operasi. Buat mesin virtual baru melalui Oracle VM VirtualBox dengan disk 32 megabyte kecil. Kami memilih format QCOW, setelah semua manipulasi dapat dengan mudah diubah menjadi mentah.



Tentunya Anda semua tahu di mana Anda bisa mendapatkan gambar floppy disk dengan MS-DOS, jadi pasang di dalam mesin virtual dan jalankan instalasi:





Kami mengubah gambar floppy di drive virtual dua kali dan setelah benar-benar 20 detik kami memiliki gambar qcow dengan OS MS-DOS 6.22 yang baru:





Cara termudah sekarang untuk menyalin file ke disk ini adalah dengan memasangnya ke mesin virtual lain yang menjalankan Windows atau Linux. Setelah operasi ini, kami memasang ulang disk ke mesin virtual MS-DOS dan memeriksa apakah file terlihat:





Jika mau, Anda bahkan dapat mengkonfigurasi autoload untuk menjalankan file BAT sehingga BIOS di-flash secara otomatis. Tetapi ingat bahwa ini adalah operasi yang berpotensi berbahaya dan Anda melakukannya dengan risiko dan risiko Anda sendiri. Sekarang matikan mesin virtual dan ubah menjadi gambar mentah menggunakan qemu-img.



qemu-img convert -f qcow -O raw DOS.qcow dos.img
      
      





Salin gambar IMG yang dihasilkan ke direktori terpisah dari server TFTP kami:



sudo mkdir /srv/tftp/dos
      
      





sudo cp dos.img /srv/tftp/dos
      
      





Sekarang buka konfigurasi /srv/tftp/pxelinux.cfg/default untuk mengedit dan tambahkan satu item lagi ke menu:



LABEL DOS
        kernel memdisk
        initrd dos/dos.img
        append raw

      
      





Kami menyimpan konfigurasi dan sekarang kami memiliki item menu baru di menu PXE, dengan memilih yang kami memuat gambar yang dibuat:





Dengan cara yang sama, Anda dapat membuat gambar yang berisi utilitas utilitas dan untuk bersenang-senang dengan game DOS lama.



Di Windows Veritas



Sekarang mari kita coba untuk mem-boot image Live dari WinPE (Windows Preinstallation Environment). Mengunduh versi lengkap seringkali tidak diperlukan, hanya sejumlah fungsi yang cukup. Hal ini menemukan kegunaan nyata saat mem-flash beberapa perangkat.



Mellanox yang sama, diserap oleh Nvidia setahun yang lalu, merilis utilitas Mellanox Firmware Tools untuk mem-flash kartu jaringannya dalam versi berbeda untuk WinPE. Tentu saja, sekarang sudah ada berbagai opsi MFT yang tersedia, tetapi beberapa kali kami dihadapkan pada kebutuhan untuk menjahit melalui versi WinPE.



Membuat gambar WinPE Anda sendiri dan mengintegrasikan perangkat lunak yang diperlukan bukanlah tugas yang terlalu sulit, tetapi penjelasannya berada di luar cakupan artikel ini. Untuk menguasai proses ini secara detail, Anda dapat mengunjungi winpe.ru sumber daya yang sangat baik . Sebagai contoh, kami akan mengambil perakitan yang sudah jadi untuk mendemonstrasikan proses peluncuran.



Seringkali rakitan semacam itu berupa gambar iso atau arsip rar dengan gambar iso. Sebelum memilih gambar seperti itu, kita perlu mendapatkan bootloader yang sesuai.



wimboot adalah bootloader yang cukup sederhana yang mampu memuat gambar dalam format wim (Windows Imaging Format). Ini dapat digunakan baik dalam hubungannya dengan syslinux, atau dengan saudaranya yang lebih mahir, iPXE... Buat direktori terpisah di / srv / tftp :



sudo mkdir wimboot
      
      





cd wimboot
      
      





Unduh bootloader itu sendiri:



wget https://github.com/ipxe/wimboot/releases/latest/download/wimboot
      
      





Sekarang saatnya memasang gambar. Buat direktori sementara di / tmp :



sudo mkdir winpe
      
      





Buka direktori dengan gambar perakitan ISO yang diunduh dan jalankan:



sudo mount -o loop <_> /tmp/winpe
      
      





Buat direktori di / srv / tftp , di mana kita akan meletakkan file yang kita butuhkan:



sudo mkdir /srv/tftp/winpe
      
      





Sekarang kami mencari di majelis dan menyalin 4 file:



sudo cp BOOTMGR /srv/tftp/winpe
      
      





sudo cp bcd /srv/tftp/winpe
      
      





sudo cp boot.sdi /srv/tftp/winpe
      
      





sudo cp boot.wim /srv/tftp/winpe
      
      





Masalahnya kecil - tambahkan bagian berikut ke file konfigurasi /srv/tftp/pxelinux.cfg/default :



LABEL WinPE
        menu label WinPE
        com32 linux.c32 wimboot/wimboot
        append initrdfile=winpe/BOOTMGR,winpe/bcd,winpe/boot.sdi,winpe/boot.wim

      
      





Faktanya, kami menggunakan modul linux.c32 untuk memuat bootloader, tautologi yang sangat baik , dan kami meneruskan parameter ke dalamnya dalam format yang biasa untuk wimboot. Jadi, wimboot dimuat terlebih dahulu, kemudian file yang diperlukan dibongkar dan dijalankan secara berurutan.





Penting untuk diperhatikan bahwa file diunggah melalui TFTP, yang tidak terlalu cepat dan nyaman. Secara umum, Anda dapat sedikit mengubah konfigurasi dan meregangkannya dengan cara yang berbeda. Tetapi untuk tugas-tugas utilitarian sederhana ini sudah cukup.





Alih-alih sebuah kesimpulan



Tidak ada pengetahuan dalam artikel ini, tetapi ketika diperlukan, Raspberry Pi melakukan pekerjaan dengan baik. Dia tidak perlu mencari stopkontak tambahan, port USB dari server gratis terdekat sudah sempurna. Tidak ada masalah tambahan dengan menemukan tempat di rak yang dijejali bola mata. Ia bekerja persis sebagaimana mestinya, dan dimensinya yang kecil memungkinkan Anda untuk selalu memilikinya.



Sebenarnya ada banyak tutorial di internet untuk mengatur netboot. Satu-satunya masalah adalah bahwa cara yang berbeda dan pendekatan yang berbeda digunakan untuk gambar yang berbeda. Memilih pendekatan yang tepat terkadang memakan banyak waktu, dan saya sangat berharap materi ini akan membantu banyak orang menghemat waktu ketika menyelesaikan berbagai tugas terkait kebutuhan untuk menerapkan PXE dengan cepat di komputer papan tunggal Raspberry Pi.






All Articles