Dell OptiPlex 3050 Micro: Instalacija Libreboot-a
Imao sam priliku da kupim polovni Dell OptiPlex 3050 Micro koji je uzet zarad postizanja dva cilja:
- Libreboot instalacije
- FreeBSD migracije
U ovom članku ću se pozabaviti procesom instalacije Libreboot sistema za Linux korisnike na tom računaru. Napominjem da postoji više metoda flešovanja i ne podržava svaki uređaj sve no 3050 Micro podržava flešovanje kroz operativni sistem (razlog zašto je i uzet). Takođe, ne podržava svaki sistem isti Libreboot ROM.
Šta je Libreboot?
Libreboot je distribucija otvorenog softvera (eng. open source) koja zamenjuje vlasnički (eng. proprietary) BIOS/UEFI firmver. Glavna filozofija projekta je sloboda korisnika, ali u praksi to donosi tri konkretne prednosti za ovaj računar:
- Brzina: Inicijalizacija hardvera je drastično brža, što znači da se sistem podiže brže
- Sigurnost i privatnost: Libreboot na ovoj platformi neutrališe Intel Management Engine (ME), kontroverznu komponentu koja radi nezavisno od operativnog sistema i teoretski može služiti kao skriveni ulaz (eng. backdoor)
- Jednostavnost: Uklanja komplikovane UEFI menije i Secure Boot restrikcije, omogućavajući lako pokretanje bilo kog Linux/BSD sistema
OptiPlex 3050 Micro konfiguracija
Sam OptiPlex 3050 Micro je mašina skromnijih mogućnosti za današnje standarde no ja sam zadovoljan radom i performansama u FreeBSD sistemu. Pošto sam sklapao taj računar iz delova, neke komponente nisu baš uklopljene:
- Procesor: Intel i5-7500T - 35W, 6MB L3, Kaby Lake, 14nm, Intel® HD Graphics 630, SSE4.1/SSE4.2/AVX2/VT-x/EPT
- Matična: Intel B250, Winbond flash chip "W25Q128.V" (16384 kB), fabrički softver
v1.2.0 - Radne memorije: 32GB - 1x Samsung 16GB DDR4-2133 SO-DIMM (M471A2K43BB1-CPB) + 1x Micron DDR4 SDRAM 16GB 260SODIMM Micron 16GB DDR4-2400MHz SO-DIMM (MTA16ATF2G64HZ-2G3E1)
- Disk: Samsung SSD 990 PRO with Heatsink 2TB
Primetićete da je disk previše moćan za ovakvu mašinu i da imam mnogo više radne memorije nego što bi nekom trebalo međutim za kućnu laboratoriju je korisno. Disk nisam hteo da menjam sa prethodnog računara, uloženo je previše u njega :)
Libreboot dokumentacija
Zvanična Libreboot dokumentacija za OptiPlex 3050 Micro nudi dva rešenja za flešovanje ovog računara:
- interno
- eksterno, upotrebom programatora
Ja sam koristio interno flešovanje tako da ću se baviti dokumentovanjem tih prostijih koraka.
Operativni sistem koji sam koristio
Sav posao pravljenja i flešovanja Libreboota je obavljen na samom Dell OptiPlex 3050 Micro uređaju pod Fedora Workstation distribucijom, trenutnom stabilnom verzijom 43.
Dell servisni režim
Da biste mogli da flešujete sistem neophodno je da nađete mali kratkospojnik (eng. jumper) plave boje na matičnoj ploči, desno od CMOS baterije odmah iznad SATA_HDD obeležja na ploči. Njega treba da postavite u servisnu poziciju. Imate 3 moguće pozicije gledano sa prednje strane kućišta (Dell logo i mrežica sa prednje strane kućišta su okrenuti ka vama). Podrazumevana pozicija kratkospojnika je u sredini. Vi treba da prebacite na dno, da bude bliže vama.
Nakon ovog koraka možete da nastavite dalje da izvezete UEFI fabrički softver.
Sigurnost pre svega: izvoz trenutnog fabričkog softvera
Za izvoz trenutnog fabričkog softvera sam koristio flashrom. Takođe napominjem da postoji i flashprog koji Libreboot projekat preporučuje ali on mora da se prevodi iz izvornog koda.
Za izvoz pravimo 2 kopije UEFI fabričkog softvera:
sudo flashrom -p internal -r dell3050_v1.2.0_factory_backup.rom
sudo flashrom -p internal -r dell3050_v1.2.0_factory_backup2.rom
Ja sam koristio dell3050_v1.2.0_factory_backup.rom i dell3050_v1.2.0_factory_backup2.rom, vi možete da ih zovete kako god želite.
Nakon izvoza je bitno da uradite diff da vidite da li izvoz funkcioniše i da li su oba izvezena UEFI ROM-a identična:
diff dell3050_v1.2.0_factory_backup.rom dell3050_v1.2.0_factory_backup2.rom
Izvezen UEFI ROM mora biti 16777216 bajtova! Ukoliko diff izbaci bilo kakav rezultat, nije dobro. Izvezite ponovo.
Prevođenje Libreboota iz izvornog koda
Postoje 2 načina da napravite Libreboot ROM za vaš računar, sam ROM koji ćete da flešujete kasnije:
- pravljenjem iz izvornog koda
- preuzimanjem unapred napravljenih Libreboot školjki u koju treba da umetnete deo vlasničkog softvera iz UEFI ROM-a koji ste izvezli, koji stiže uz računar fabrički ili da preuzmete sa interneta
Sa obzirom da druga metoda ima previše zvanično dokumentovanih koraka i sam proces ubacivanja (eng. inject, često ćete videti taj termin u dokumentaciji) fabričkih Intel IME komponenti u Libreboot nije lako izvršiti pouzdano, ja sam napravio sve prevođenjem izvornog koda. Skripte koje su Libreboot programeri pravili su odlične i kompilovanje koda će obaviti sve za vas i napraviti sve ROM datoteke bez imalo muke!
Otvorite terminal i pustite git da klonira lbmk riznicu gde vi želite:
git clone https://codeberg.org/libreboot/lbmk
Imajte u vidu da težite ka tome da flešujete SeaBIOS txtmode ROM za FreeBSD dok je GRUB corebootfb za Linux distribucije (probao sam Fedori Workstation 43). Naravno, moguće je mešanje ali neće svaki sistem raditi.
Postavljanje broja jezgara za prevođenje
export XBMK_THREADS=4
Ovom dokumentovanom promenljivom postavljate broj fizičkih niti za prevođenje tj. kompilovanje na maksimum, sa obzirom da Intel i5-7500T ima 4 fizička jezgra i 0 virtuelnih niti. Ukoliko ne postavite ovu promenljivu, lbmk proces prevođenja koda će biti izvršen samo na jednom jezgru tako da će raditi ali značajno sporije!
Instalacija zavisnosti za Fedora Workstation
Otvorite lbmk direktorijum i pokrenite mk, deo GNU make paketa, sa sledećim parametrima
./mk dependencies fedora43
Instaliraće pakete poput acpica-tools, gdb, cmake i sl. U mom slučaju prevođenje nije prolazilo u početku zato što mi je nedostajao libtool paket u Fedori Workstation 43 stoga sam taj paket ručno instalirao (prijavio sam lbmk grešku 396).
Prevođenje flashprog alata
Kao što rekoh, možete da koristite i flashrom za ovu operaciju no Libreboot nudi i flashprog alat koji možete da koristite. Ja sam ih kombinovao:
flashromza izvoz postojećeg UEFI ROM-aflashprogza flešovanje Libreboot-a
Dakle, otvorite lbmk direktorijum koji ste klonirali uz pomoć git alata i onda u terminalu pustite:
./mk -b flashprog
Nakon što se prevođenje završi, napraviće binarnu flashprog datoteku unutar ./elf/flashprog
Prevođenje Libreboot ROM-a
Bitno je da znate da će prevođenje Libreboot-a napraviti mnogo ROM datoteka u lbmk/bin/dell3050microvfsp16mb/*.rom. Ovde morate napraviti izbor zavisno od operativnog sistema koji planirate:
- Linux: Koristite
libgfxinit_corebootfb(visoka rezolucija) - FreeBSD/BSD: Obavezno koristite
libgfxinit_txtmode. Grafički mod (corebootfb) često sprečava prikaz tekstualnog instalacionog programa na BSD sistemima. Samo ću da napomenem da sam ja nakon flešovanja prvog Libreboot ROM-a na Fedori morao da flešujemseabios_dell3050micro_vfsp_16mb_libgfxinit_txtmode.romponovo kako bi FreeBSD instalacija bila moguća
Izvršite prevođenje:
./mk -b coreboot dell3050micro_vfsp_16mb
Nakon 40 minuta će sistem završiti i napraviti bin/dell3050microvfsp16mb/*.rom datoteke. Primer jedne datoteke je seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb.rom
Provera prevedenog koda pre flešovanja
Ja sam izabrao da flešujem ./bin/dell3050micro_vfsp_16mb/seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb.rom prvi put. Provera se svodi na proveru sadržaja same ROM datoteke korišćenjem hexdump alata:
hexdump -C seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb.rom
I onda internog Libreboot alata cbfstool.
Kliknite da vidite detaljan izlaz `cbfstool` komande
bob@fedora:~/lbmk$ ./elf/coreboot/default/cbfstool ./bin/dell3050micro_vfsp_16mb/seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb print
FMAP REGION: COREBOOT
Name Offset Type Size Comp
cbfs_master_header 0x0 cbfs header 32 none
cpu_microcode_blob.bin 0x80 microcode 643072 none
intel_fit 0x9d0c0 intel_fit 176 none
fallback/romstage 0x9d1c0 stage 64304 none
fallback/ramstage 0xacd80 stage 131493 LZMA (287364 decompressed)
config 0xccf80 raw 4084 LZMA (14432 decompressed)
revision 0xcdfc0 raw 780 none
build_info 0xce300 raw 118 none
fallback/dsdt.aml 0xce3c0 raw 10658 none
cmos.default 0xd0dc0 cmos_default 256 none
etc/ps2-keyboard-spinup 0xd0f00 raw 8 none
etc/pci-optionrom-exec 0xd0f40 raw 8 none
etc/optionroms-checksum 0xd0f80 raw 8 none
fspm.bin 0xd0fc0 fsp 405504 none
fsps.bin 0x134000 fsp 188416 none
vbt.bin 0x162040 raw 1155 LZMA (4300 decompressed)
cmos_layout.bin 0x162500 cmos_layout 696 none
fallback/postcar 0x162800 stage 25140 none
img/u-boot 0x168a80 simple elf 388515 none
fallback/payload 0x1c7880 simple elf 71899 none
vgaroms/seavgabios.bin 0x1d91c0 raw 28160 none
img/memtest 0x1e0000 simple elf 143307 none
img/grub2 0x203000 simple elf 607022 none
scan.cfg 0x297380 raw 31 none
background.png 0x297400 raw 3451 none
(empty) 0x2981c0 null 12783076 none
bootblock 0xec8fc0 bootblock 24576 none
Za kraj, uporedite početak fabričkog ROM-a koji ste izvezli i novog Libreboot ROM-a koji ste napravili:
Proveravamo rezervnu kopiju fabričkog ROM-a dell3050_v1.2.0_factory_backup.rom
bob@fedora:~/lbmk$ hexdump -C dell3050_v1.2.0_factory_backup.rom | head -n 2
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
00000010 5a a5 f0 0f 03 00 04 00 08 02 10 5a 30 03 31 00 |Z..........Z0.1.|
Uporedite sa seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb.rom koji sam ja izabrao da flešujem:
bob@fedora:~/lbmk$ hexdump -C seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb.rom | head -n 2
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
00000010 5a a5 f0 0f 03 00 04 00 08 02 10 5a 30 03 31 00 |Z..........Z0.1.|
Ako su identični, možete da pređete na flešovanje :-)
Dodatna provera za Intel Flash Descriptor (IFD)
Možete da proverite i Intel Flash Descriptor (IFD). Vrednost 5a a5 f0 0f je Flash Valid Signature (FLVALSIG) koji je definisan u Intel Platform Controller Hub (PCH) za B250 platformu:
Serial Peripheral Interface for Flash/TPM (SPI0) The Flash signature selects Descriptor Mode as well as verifies if the flash is programmed and functioning. The data at the bottom of the flash (offset 10h) must be 0FF0A55Ah in order to be in Descriptor mode
Bez ovog potpisa, matična možda neće raditi. Nisam video dokumentovane primere no zgodno je znati!
Tako da proveravamo rezervnu kopiju fabričkog ROM-a
bob@fedora:~/lbmk$ hexdump -C dell3050_v1.2.0_factory_backup.rom | grep "5a a5 f0 0f"
00000010 5a a5 f0 0f 03 00 04 00 08 02 10 5a 30 03 31 00 |Z..........Z0.1.|
I upoređujemo sa seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb.rom koji sam ja izabrao da flešujem:
bob@fedora:~/lbmk$ hexdump -C seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb.rom | grep "5a a5 f0 0f"
00000010 5a a5 f0 0f 03 00 04 00 08 02 10 5a 30 03 31 00 |Z..........Z0.1.|
_Više detalja možete potražiti pretragom 200-series-chipset-pch-datasheet-vol-1.pdf na internetu._
Flešovanje Libreboot-a
Izbrani Libreboot ROM seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb.rom za korišćenje sa Linux sistemima flešujemo sa
bob@fedora:~/lbmk/elf/flashprog$ sudo ./flashprog -p internal -w ../../bin/dell3050micro_vfsp_16mb/seagrub_dell3050micro_vfsp_16mb_libgfxinit_corebootfb.rom
flashprog p1.4-27-g92b2e50 on Linux 6.17.1-300.fc43.x86_64 (x86_64)
flashprog is free software, get the source code at https://flashprog.org
Using clock_gettime for delay loops (clk_id: 1, resolution: 1ns).
Found chipset "Intel B250".
This chipset is marked as untested. If you are using an up-to-date version
of flashprog *and* were (not) able to successfully update your firmware with it,
then please email a report to flashprog@flashprog.org including a
verbose (-V) log.
Thank you!
Enabling flash write... SPI Configuration is locked down.
The Flash Descriptor Override Strap-Pin is set. Restrictions implied by
the Master Section of the flash descriptor are NOT in effect. Please note
that Protected Range (PR) restrictions still apply.
Enabling hardware sequencing because some important opcode is locked.
OK.
Found Programmer flash chip "Opaque flash chip" (16384 kB, Programmer-specific) on internal.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
Ako vidite Verifying flash... VERIFIED. to je to.
Poslednji korak je da izvučete kabl iz struje da biste pokrenuli Libreboot po prvi put.