製作基於debian的linux live啟動u盤(UEFI)

elight2發表於2024-09-18

參考

  • 從零開始製作一個linux iso映象 _
  • 詳解:把 Linux 系統做成 Livecd
  • 從零製作 Ubuntu 20.04 LiveCD
  • LiveCDCustomization(ubuntu官方文件)
  • 從零開始製作 Ubuntu 22.04 Live CD
  • Create a Custom Debian Live Environment (CD or USB)

方法一: live-build

這是debian官方的live映象構建工具,此方法相對第二種更簡單

  1. 安裝:apt install live-build
  2. 新建一個空資料夾,比如liveb,cd進去
  3. 進行配置:lb config --mirror-binary https://mirrors.ustc.edu.cn/debian/ \ --mirror-binary-security https://mirrors.ustc.edu.cn/debian-security/ \ --mirror-bootstrap https://mirrors.ustc.edu.cn/debian/ \ --mirror-chroot-security https://mirrors.ustc.edu.cn/debian-security/ \ --distribution bookworm
    這裡的lb就是live-build的簡寫,這個命令使用了中科大的映象,不使用映象會很慢(此處映象是一會使用lb build下載檔案時的映象),--distribution指定了debian的版本,也可以選擇bullseye等別的版本,我選了debian12
  4. 此時可以自定義軟體包,在liveb/config/package-lists/下面新建檔案:[隨便命名].list.chroot裡面寫上要裝的軟體包,比如:
vim
network-manager
htop
  • 此方法構建的liveb/chroot目錄,直接chroot進去會不能聯網,要手動配置/etc/resolv.conf,所以這裡我直接在配置檔案裡寫好要安裝的軟體包
  1. liveb中執行lb build(需要root),一般十幾分鍾就會完成構建,成功的話有綠色提示,在liveb根目錄下有生成的iso檔案,liveb/binary下面有iso檔案的內容
  2. 按照方法二第11步的方法新建分割槽,然後把binary下面的東西複製進去,就可以啟動live系統了

方法二: 手動構建

此方法全程sudo su執行即可,很多命令都要root許可權

  1. apt安裝debootstrap squashfs-tools,中間有其他需要的軟體包我忘了是什麼了,提示找不到命令自己安裝一下即可
  2. 使用debootstrap構建基本根目錄:
mkdir rootfs
debootstrap bookworm rootfs https://mirrors.ustc.edu.cn/debian/

此處的第一個引數是發行版,我仍然選擇bookworm,第二個引數是資料夾,第三個是使用的映象;大概需要10分鐘下載完成,根目錄約300MB
3. chroot rootfs,這會切換根目錄
ubuntu官方文件裡提到了要mount一下裝置檔案,然後再chroot,但是我測試發現不mount也沒問題,命令如下:

mount --bind /sys ./rootfs/sys
mount --bind /proc ./rootfs/proc
mount --bind /dev/pts ./rootfs/dev/pts

解除安裝(離開chroot之後再解除安裝):

umount ./rootfs/sys
umount ./rootfs/proc
umount ./rootfs/dev/pts
  1. 為live系統安裝核心,有很多方法,最簡單的方法是直接apt install linux-image-6.1.0-25-amd64,但是我對核心有特殊要求,所以自己編譯了,方法:debian核心編譯手冊,然後dpkg -i安裝編譯好的檔案
  2. 安裝必要軟體包:live-boot live-boot-initramfs-tools這兩個軟體包是必須的!沒有將會無法啟動live系統
  3. 自定義系統,自己想怎麼搞都行,我的指令碼:
apt update
echo -e "deb http://mirrors.ustc.edu.cn/debian bookworm main contrib non-free non-free-firmware\ndeb http://mirrors.ustc.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware\ndeb http://mirrors.ustc.edu.cn/debian bookworm-backports main contrib non-free non-free-firmware\ndeb http://mirrors.ustc.edu.cn/debian-security/ bookworm-security main contrib non-free non-free-firmware" > /etc/apt/sources.list
apt install -y lightdm
apt install -y lxqt-core
apt install -y firefox-esr
apt install -y bash-completion vim sudo htop network-manager gparted mpv nm-tray firmware-linux firmware-iwlwifi rfkill pciutils
sed -i '/# enable bash completion in interactive shells/{n;N;N;N;N;N;N;s/^#//gm}' /etc/bash.bashrc
passwd -d root
apt upgrade -y
apt autoclean

我這裡用了lxqt的桌面,有幾個坑:

  • lxqt-core軟體包很小,但是不會自動安裝顯示管理器,所以要先裝一個lightdm
  • debootstrap構建的根目錄很小,很多韌體都沒有,要聯網需要安裝network-manager nm-tray firmware-iwlwifi rfkill
  1. 更新initrd:update-initramfs -c -k all必須執行,否則initrd會無法啟動
  2. exit命令退出chroot
  3. 構建uefi引導:
dd if=/dev/zero of=vefi.img bs=1M count=32 # 建立虛擬硬碟
mkfs.vfat vefi.img # 在虛擬硬碟新建fat32檔案系統
mkdir vefi-mnt
mount vefi.img vefi-mnt #掛載虛擬硬碟
mkdir vefi-mnt/boot
grub-install --boot-directory=vefi-mnt/boot --efi-directory=vefi-mnt --removable vefi.img #生成grub的bootx64.efi載入程式和grub.cfg
sed -i 's/^/# /' vefi-mnt/EFI/BOOT/grub.cfg
echo -e "menuentry \"Live system (amd64)\" {\n	linux	/live/vmlinuz boot=live\n	initrd	/live/initrd.img\n}" >> vefi-mnt/EFI/BOOT/grub.cfg # 配置grub
umount vefi.img # 解除安裝

grub-install這個命令預設選擇本機的efi和boot目錄,不要無引數執行,否則會更新本機的grub
10. 構建squashfs:mksquashfs rootfs/ filesystem.squashfs這會在執行目錄下生成filesystem.squashfs檔案,live環境一般有manifest檔案,但是我沒加也成功了,具體怎麼生成可以參考開頭那幾個連結
11. 建立啟動u盤:確定自己的u盤已經是gpt分割槽表,不是的改一下,新建一個fat32分割槽,我的帶lxqt桌面的live系統只有1.1g,分割槽新建4g應該是夠的,這幾步用windows的diskgenius操作就行,具體操作百度即可
12. 複製檔案:我的u盤目錄結構(注意是剛才新建的fat32分割槽),initrd.img和vmlinuz是rootfs/boot下面的兩個檔案重新命名複製來的(分別是初始檔案系統和核心映象):

main@n960kp:/media/main/linux-live$ ls -R
.:
EFI  live

./EFI:
BOOT

./EFI/BOOT:
BOOTX64.CSV  BOOTX64.EFI  grub.cfg  grubx64.efi  mmx64.efi

./live:
filesystem.squashfs  initrd.img  vmlinuz
  • EFI和boot資料夾在vefi.img虛擬硬碟裡,掛載之後再複製到u盤裡,不掛載看不到資料夾
  • live這個資料夾名稱不固定,但是要和grub.cfg裡寫的對應
  1. 完成,進入電腦bios啟動吧

後記

  • ubuntu那邊有一個叫cubic的軟體,應該比這種手動方法方便,但是debian好像沒有
  • 關於啟動u盤,我只會做uefi啟動的,bios啟動的u盤製作應該更復雜;很多教程都要求燒寫u盤,其實這對於uefi啟動u盤不必要(bios啟動有要求),新建分割槽把引導檔案放進去即可,這樣還可以製作多個啟動選項的u盤
  • vefi-mnt/boot/grub下面有x86_64-efi i386-efi兩個資料夾,下面檔案很多,我也不知道有什麼用,反正沒複製他也能啟動,u盤速度慢的可以不復制
  • live-boot live-boot-initramfs-tools兩個軟體包會修改initrd.img,使他可以在live環境中正常啟動

相關文章