Własne LiveCD z GNU/Linux Debian
Czasami może zadarzyć się taka sytuacja, że będziemy korzystać z wielu różnych maszyn co jakiś czas. Jak pewnie zdajemy sobie sprawę z tego ile czasu trzeba poświęcić na zainstalowanie systemu i przygotowanie go do pracy, to w tym przypadku najlepiej jest przygotować LiveCD z niezbędnymi programami oraz lekkim środowiskiem graficznym, aby można było korzystać z niego nawet na starym sprzęcie. Jeśli chodzi o dane, to najlepiej użyć SSHFS.
Wszystkie polecenia tutaj są wykonywane z poziomu użytkownika root oraz w jego katalogu domowym, bezpośrednio z terminala docelowego komputera. Jeśli mamy zamiar tworzyć obraz z na serwerze to należy pamiętać aby robić to bezpośredio przez SSH i nie używać programów typu tmux oraz GNU Screen, ponieważ mogą wystąpić problemy podczas pobierania obrazu dystrybucji z repozytorium.
Tworzenie LiveCD rozpoczniemy od zainstalowania odpowiedniego oprogramowania.
# apt install debootstrap squashfs-tools xorriso isolinux syslinux-efi grub-pc-bin grub-efi-amd64-bin grub-efi-ia32-bin mtools
Po zainstalowaniu oprogramowania tworzymy katalog dla zachowania porządku.
# mkdir debianCustomLiveCD
Teraz możemy pobrać obraz dystrybucji, dla zredukowania wielkości należy wybrać wariant minbase.
# /sbin/debootstrap --arch=amd64 --variant=minbase bullseye /root/debianCustomLiveCD/chroot http://ftp.icm.edu.pl/debian
Następnie dokonujemy zmian na obrazie, nie które zmiany są niezbędny do prawidłowego funkcjonowania systemu, inne są opcjonalne. Aby dokonać zmian należy zmienić katalog główny na katalog obrazu.
# chroot /root/debianCustomLiveCD/chroot /bin/bash
W tym momencie wszystkie czynności będą wykonywane wewnątrz obrazu nie na prawdziwym systemie, dlatego też warto zaznaczyć sobie, że pracujemy na zmienionym katalogu głównym.
# export PS1="(chroot) ${PS1}"
Odświerzamy listy pakietów na obrazie.
(chroot) # apt update
Instalujemy jądro, proces systemd oraz pakiet live-boot
(chroot) # apt install -y --no-install-recommends linux-image-amd64 live-boot systemd-sysv
Instalujemy wszystkie potrzebne nam programy. W tym podpunkcie zapisze tylko te, które raczej powinny znaleźć się na obrazie aby można było normalnie z niego korzystać.
(chroot) # apt install -y network-manager net-tools wireless-tools wpagui wget openssh-client blackbox xserver-xorg-core xserver-xorg xinit xterm vim
Po instalacji oprogramowania usuwamy pobrane pakiety, przez co obraz będzie lżejszy.
# apt-get clean
Jak widać na powyższym przykładzie instalowany będzie menedżer okien BlackBox, jednak nic nie stoi na przeszkodzie by zainstalować dowolny inny. Po instalacji pakietów pozostanie jeszcze zmiana hasła dla użytkownika root, aby można było się na jakiegoś użytkownika zalogować.
(chroot) # passwd
Pozostałe konfiguracje są opcjonalne. Mają za zadanie jedynie ustawienie polskiej lokalizacji. Nie będę opisywać każdej konfiguracji krok po kroku, potrzebne opcję są dobrze opisane i łatwo jest się w nich połapać.
(chroot) # dpkg-reconfigure tzdata (chroot) # apt install locales (chroot) # dpkg-reconfigure locales (chroot) # apt install keyboard-configration console-setup
Opuszczamy obraz.
(chroot) # exit
Tworzymy strukturę katalogową, która będzie potrzebna do utworzenia obrazu. W zależności od tego dla jakiego systemu EFI (64 czy 32-bitowe) będziemy tworzyć obraz wydajemy odpowiednie polecenie:
64-bit EFI
# mkdir -p /root/customDebianLiveCD/{staging/{EFI/boot,boot/grub/x86_64-efi,isolinux,live},tmp}
32-bit EFI
# mkdir -p /root/customDebianLiveCD/{staging/{EFI/boot,boot/grub/i386-efi,isolinux,live},tmp}
Na obrazach LiveCD, główny system plików znajduje się w pliku squashfs i taki teraz utworzymy. Tworzenie pliku trochę trwa w zależności od mocy obliczniowej maszyny.
# mksquashfs /root/customDebianLiveCD/chroot /root/customDebianLiveCD/staging/live/filesystem.squashfs -e boot
Do uruchomienia systemu potrzebne będzie jądro oraz plik ramdysku. Możemy je przekopiować z pobranego wcześniej obrazu dystrybucji.
# cp /root/customDebianLiveCD/chroot/boot/vmlinuz-* /root/customDebianLiveCD/staging/live/vmlinuz # cp /root/customDebianLiveCD/chroot/boot/initrd.img-* /root/customDebianLiveCD/staging/live/initrd
System do bootowania w trybie BIOS, bedzie wykorzystywać program isolinux, teraz stworzymy dla niego plik konfiguracyjny isolinux.cfg. Plik zapisujemy w katalogu /root/customDebianLiveCD/staging/isolinux.
UI vesamenu.c32 MENU TITLE Boot Menu DEFAULT linux TIMEOUT 600 MENU RESOLUTION 640 480 MENU COLOR border 30;44 #40ffffff #a0000000 std MENU COLOR title 1;36;44 #9033ccff #a0000000 std MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all MENU COLOR unsel 37;44 #50ffffff #a0000000 std MENU COLOR help 37;40 #c0ffffff #a0000000 std MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std MENU COLOR msg07 37;40 #90ffffff #a0000000 std MENU COLOR tabmsg 31;40 #30ffffff #00000000 std LABEL linux MENU LABEL Custom Debian Live [BIOS/ISOLINUX] MENU DEFAULT KERNEL /live/vmlinuz APPEND initrd=/live/initrd boot=live LABEL linux MENU LABEL Custom Debian Live [BIOS/ISOLINUX] (nomodeset) MENU DEFAULT KERNEL /live/vmlinuz APPEND initrd=/live/initrd boot=live nomodeset
Program ładującym dla EFI jest GRUB, poniżej znajduje się jego plik konfiguracyjny grub.cfg. Plik zapisujemy w katalogu /root/customDebianLiveCD/staging/boot/grub. Aby GRUB prawidłowo wyświetlał komunikaty jądra podczas ładowania systemu potrzebny jest jeszcze jeden plik (font.pf2), który umieszczamy w tym samym katalogu. Plik możemy wyodrębnić z płyty LiveCD Debiana lub z archiwum dostępnego pod tym linkiem: https://github.com/xf0r3m/greenOS/icewm-era/blob/main/greenOS_boot-cfg.tgz
if loadfont $prefix/font.pf2 ; then set gfxmode=800x600 set gfxpayload=keep insmod efi_gop insmod efi_uga insmod video_bochs insmod video_cirrcus insmod gfxterm terminal_output gfxterm fi search --set=root --file /DEBIAN_CUSTOM set default="0" set timeout=30 menuentry "Debian Live [EFI/GRUB]" { linux ($root)/live/vmlinuz boot=live initrd ($root)/live/initrd } menuentry "Debian Live [EFI/GRUB] (nomodeset)" { linux ($root)/live/vmlinuz boot=live nomodeset initrd ($root)/live/initrd }
Podczas instalacji GRUB-a, program instalujący będzie potrzebował pliku, w którym zawarte są informacje o prefiksie wykorzystywanym przez plik konfiguracji oraz o położeniu pliku konfiguracyjnego. Plik grub-standalone.cfg zapisujemy w katalogu /root/customDebianLiveCD/tmp.
search --set=root --file /DEBIAN_CUSTOM set prefix=($root)/boot/grub/ configfile /boot/grub/grub.cfg
Następnym krokiem jest utworzenie pliku, po którym GRUB uzna ten dysk jako główny (root) dla ładowania tego systemu.
# touch /root/customDebianLiveCD/staging/DEBIAN_CUSTOM
Po utworzeniu pliku, należy przekopiować resztę plików isolinux.
# cp /usr/lib/ISOLINUX/isolinux.bin /root/customDebianLiveCD/staging/isolinux # cp /usr/lib/syslinux/modules/bios/* /root/greenOS/staging/isolinux
Pozostałe pliku GRUB, również należy przekopiować do katalogów obrazu.
64-bit EFI
# cp -r /usr/lib/grub/x86_64-efi/* /root/customDebianLiveCD/staging/boot/grub/x86_64-efi
32-bit EFI
# cp -r /usr/lib/grub/i386-efi/* /root/customDebianLiveCD/staging/boot/grub/i386-efi
Aby komputer wykorzystujący tryb UEFI mogł zbootować nasz obraz potrzebny jest plik binarny programu ładującego, który teraz utworzymy
64-bit EFI
# grub-mkstandalone --format=x86_64-efi --output=/root/customDebianLiveCD/staging/EFI/boot/bootx64.efi --locales="" --fonts="" \ "/boot/grub/boot.cfg=/root/customDebianLiveCD/tmp/grub-standalone.cfg"
32-bit EFI
# grub-mkstandalone --format=i386-efi --output=/root/customDebianLiveCD/staging/EFI/boot/bootia32.efi --locales="" --fonts="" \ "/boot/grub/boot.cfg=/root/customDebianLiveCD/tmp/grub-standalone.cfg"
Wszystkie bootowalne obrazy LiveCD obsługujące UEFI posiadają dodatkową partycję, to właśnie wniej będzie znajdować się utworzony wcześniej plik bootloadera, i to jej będzie poszukiwać oprogramowanie układowe podczas uruchamiania komputera z obrazu. Utworzenie i skopiowanie danych będzie wymagać kilku czynności.
64-bit EFI
# cd /root/customDebianLiveCD/staging/boot/grub/ # dd if=/dev/zero of=efiboot.img bs=1M count=20 # mkfs.vfat efiboot.img # mmd -i efiboot.img efi efi/boot # mcopy -vi efiboot.img /root/customDebianLiveCD/staging/EFI/boot/bootx64.efi ::efi/boot
32-bit EFI
# cd /root/customDebianLiveCD/staging/boot/grub/ # dd if=/dev/zero of=efiboot.img bs=1M count=20 # mkfs.vfat efiboot.img # mmd -i efiboot.img efi efi/boot # mcopy -vi efiboot.img /root/customDebianLiveCD/staging/EFI/boot/bootia32.efi ::efi/boot
Kiedy mamy już utworzoną partycję. Przyszedł czas na wygenerowanie właściwego obrazu płyty. W tym poleceniu będzie zawarte użycie isolinux, użycie alternatywnego bootloadera dla trybu EFI, dołączona zostanie również partycja EFI.
# xorriso -as mkisofs -iso-level 3 -o "custom_debian.iso" -full-iso9660-filenames -volid "CUSTOM_DEBIAN" \ -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -eltorito-boot isolinux/isolinux.bin -no-emul-boot \ -boot-load-size 4 -boot-info-table --eltorito-catalog isolinux/isolinux.cat-eltorito-alt-boot -e /boot/grub/efiboot.img -no-emul-boot \ -isohybrid-gpt-basdat -append_partition 2 0xef /root/customDebianLiveCD/staging/boot/grub/efiboot.img "/root/customDebianLiveCD/staging"
Tak wygenerowany obraz możemy śmiało załadować na pendrive-a lub wypalić na płycie i uruchomić na dowolnym (64-bitowym) komputerze. Mimo iż przedstawiono tutaj wsparcie dla 32-bitowego EFI, to obraz jest będzie 64-bitowy. 32-bitowy obraz należało by wykonać na 32-bitowym systemie operacyjnym, podczas pobierania obrazu trzeba by wybrać architekturę 32-bitową (i386), oraz podczas konfiguracji obrazu wybrać odpowiedni pakiet jądra (linux-image-686).
Źródło:
https://willhaley.com/blog/custom-debian-live-environment/
~xf0r3m