USB-ről bootoló Debian Linux készítése

írta: hcl, 5 éve

Nemrég szükségem volt egy pendrive-ról bootoló Linuxra, ám sehogy nem sikerült normál disztrót pendrive-ra telepíteni (nem Live, hanem a pendrive-ra telepített normál OS kellett, ami fontos különbség). Másképpen sikerült megoldani, bár nem a legegyszerűbben -fapados, de működik, és elég kicsi a helyigénye is.


Forrás : https://debian.ee/

A legtöbbet ez a leírás segített : https://willhaley.com/blog/install-debian-usb/ ,
ez alapján készítettem egy parancsszintű itinert is, amivel könnyen kivitelezhető (kb. scriptelhető) a telepítés.
Az egész alapja a debootstrap csomag, amivel egy Debian imaget fogunk készíteni egy image file-ban levő filerendszerre. Később ezt az imaget felmountoljuk, chrootolunk bele, és testreszabjuk. A telepítést Debian Linux-on végeztem. Hasonló módszerrel amúgy Ubuntu is előálltható.

Nem biztos, hogy teljesen pontos a dolog, de én az összes felmerülő problémát meg tudtam oldani némi Google segítséggel, s nyilván némi alap Linux ismeret sem árt :) Különösen a plusz csomagoknál érdekes, mit teszünk fel, mert könnyen hiányozhat hálózat, stb. Persze az elkészült, futó rendszeren is tudunk majd telepíteni apt-vel, vagy ha teszünk fel, grafikus csomagkezelővel.

Alant a telepítés menete parancsokkal, és a #-al kezdődő sorokban a magyarázatuk

#A debootstrap telepítése, 4GB image file lefoglalása (az alap image csak 2GB, de úgyis kell még hozzárakni dolgokat),
#és az image particionálása.
sudo apt-get install debootstrap
fallocate -l 4G debian.img
echo -e "o\nn\np\n1\n\n\nw" | sudo fdisk debian.img
echo -e "a\nw\n" | sudo fdisk debian.img

#Az image-n levő partíciókon filerendszer létrehozása, a filerendszerek felcsatolása a loop eszközön át
sudo losetup --partscan --show --find debian.img
sudo mkfs.ext4 /dev/loop0p1
sudo mkdir -p /mnt/debian
sudo mount /dev/loop0p1 /mnt/debian

#A Debian Testing lehúzása (minimális alaprendszer) és "telepítése" az image-be
sudo debootstrap --arch=i386 --variant=minbase testing /mnt/debian http://ftp.us.debian.org/debian/

#Chroot-olás az image-be - átkerülünkaz image-be telepített Debianba, tehát ezután minden kiadott parancs
#azon az oprendszeren hajtódik végre, ami az imageben van, nem azon amin az imaget létrehoztuk!
sudo mount -t proc /proc /mnt/debian/proc
sudo mount -t sysfs /sys /mnt/debian/sys
sudo mount -o bind /dev /mnt/debian/dev
sudo chroot /mnt/debian

#Lefrissíteni az imaget, majd a megfelelő kernel telepítése
#A kernel elég érdekes dolog, másképp nem működik, tehát a telepített OS esetén
#sem lehet csak egy apt-get upgrade-el frissíteni, mert nem fog elindulni (tapasztalat...)
apt-get update && apt-get install --no-install-recommends linux-image-586 systemd-sysv grub2-common grub-pc

#Telepítjük a számunkra szükséges csomagokat - a lxde-desktop helyett más desktop összeállítást is megadhatunk.
# Ha nem adunk meg csomagokat, akkor a minbase Debian-t kapjuk, csak paranccsor, se hálózat, se semmi...
#A felsorolt csomagokra lehet, hogy panaszkodni fog, mert pl. hibásan adtam meg a nevet, vagy telepítve van - szóval lehet, hogy ezen a sorom módosítani kell
apt-get install lxde-desktop firefox vlc networkmanager synaptic gvfs gvfsd fuse linux-firmware wget gimp mc alsa alsamixergui lxterminal network-manager nm-applet ntfs-3g parted pcmanfm pavucontrol powermgmt-base rfkill smartmontools samba sudo unzip vdpau-driver-all wpasupplicant xfce4-power-manager firmware-linux-nonfree linux-firmware intel-microcode amd64-microcode iwldvm firmware-iwlwifi dhclient synaptic leafpad

#Fstab beállítás az USB eszközhöz
echo "LABEL=DEBUSB / ext4 defaults 0 1" > /etc/fstab

#Root jelszó beállítása
passwd root

#Grub bootloader telepítése
grub-install --target=i386-pc --boot-directory=/boot --force-file-id --skip-fs-probe --recheck /dev/loop0
exit

#A Grub konfig beállítása :
sudo nano /mnt/debian/boot/grub/grub.cfg


#Ez kerüljön a grub.cfg -be

#grub.cfg
set default="0"
set timeout=10

menuentry "Debian" {
linux /vmlinuz root=/dev/disk/by-label/DEBUSB quiet
initrd /initrd.img
}

#eddig tart a grub.cfg tartalma

#A megfelelő partíciónak a DEBUSB címkét adjuk, erről fog bootolni
sudo e2label /dev/loop0p1 DEBUSB

#A leendő hostnév megadása, ha ez fontos
echo "debian-usb" | sudo tee /mnt/debian/etc/hostname

#Az image lecsatolása, a chroot elhagyása
sudo umount /mnt/debian/{dev,sys,proc}
sudo umount /mnt/debian
sudo losetup -d /dev/loop0

#Az image a következő paranccsal írható pendrive-ra, ahol X a megfelelő betűjel a pendrive-hoz (vigyázat, a teljes pendrive-ot felülírja!)
dd if=debian.img of=/dev/sdX

Ezután már bootolható is a pendrive (ha minden jól ment - nekem elsőre sikerült).

Kikapcsolható az eszköz kímélése érdekében a filerendszer naplója, de ezzel gyak. ext2 lesz a filerendszer, nem várt leállás esetén adatvesztéssel :
tune2fs -O ^has_journal /dev/sdXY (sdXY a megfelelő eszköz megfelelő partíciója)

A telepített image - ablakkezelővel, stb. - szépen elfér egy 4GB-os pendrive-on, de egy 8GB-oson még hely is marad. És ez egy teljes rendszer.

Az egy bajom jelenleg az updatelése; a normál apt-get update&&apt-get upgrade hazavágja a Grub-ot, így másképpen kell a kernel frissítését megoldani (minden más frissül rendben, hiszen ez egy teljes Debian). Az outdated rendszer egy tesztelésre használt pendrive esetén nem érdekes, azonban ha már valami komolyabb célja van, nagyon fontos lehet a friss kernel - így ezt meg fogom oldani előbb-utóbb. (Legrosszabb esetben chrootolni kell az image-be, és feltenni egy friss kernelt, de ez a pendrive-on jár sok felesleges írással.)