Berikut adalah cara untuk membuat drive USB live Debian dengan ketekunan. Ini akan memungkinkan untuk menginstal paket-paket yang hilang yang sejak saat itu akan tersedia pada setiap boot langsung menggunakan ketekunan. Karena kita membuat ulang isi sistem file ISO live image pada sistem file yang dapat membaca-menulis, kita dapat mengubah konfigurasi bootloader untuk mengaktifkan kegigihan dan mengatur tata letak keyboard saat boot.
Langkah-langkah yang dijelaskan di sini diuji untuk bekerja pada Debian stretch dan buster untuk membuat image live Debian stretch.
Ada banyak langkah yang terlibat, tetapi tampaknya metode ini masih cukup efisien.
Penafian: Anda akan kehilangan data pada drive USB target dan jika Anda mengacaukan perintah di bawah ini, Anda mungkin akan merasa sangat menyesal setelahnya. Saya tidak bertanggung jawab atas tindakan Anda.
Merasa beruntung
Jika Anda merasa sangat beruntung hari ini, Anda dapat mencoba skrip bash yang mengotomatiskan prosesnya untuk Anda. Berikan jalur gambar ISO Anda sebagai parameter pertama dan drive USB memblokir nama perangkat sebagai parameter kedua. Perhatikan bahwa skrip ini sangat berbahaya dan Anda tidak boleh menjalankannya tanpa membaca dan memahaminya terlebih dahulu.
TL; DR
Dapatkan image ISO live Debian, lalu lakukan hal berikut:
umount /dev/sdX*
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
cp -ar /tmp/live-iso/* /tmp/usb-live
echo "/ union" > /tmp/usb-persistence/persistence.conf
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
Secara rinci dan dengan beberapa penjelasan
Anda perlu menjalankan sebagian besar perintah berikut dengan hak istimewa yang ditinggikan, yaitu menggunakan sudo
pada kebanyakan sistem GNU / Linux.
Unduh
Unduh image ISO live Debian dengan window manager pilihan Anda:
https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/
Kami akan merujuk ke gambar ISO yang diunduh hanya sebagai "live.iso".
Tentukan drive target
Temukan perangkat yang menggunakan USB drive Anda lsblk
. Kami akan memanggil itu /dev/sdX
.
Lepas
Lepas partisi yang ada di drive Anda menggunakan umount /dev/sdX*
Buat partisi
Kami membutuhkan partisi boot EFI untuk UEFI PC untuk boot dari drive USB. Maka kita membutuhkan partisi yang cukup besar untuk menampung konten gambar sistem file ISO asli yang asli. Partisi itu harus memiliki legacy_boot
set bendera. Kemudian kami menambahkan partisi kegigihan, menggunakan semua sisa ruang drive USB. Anda dapat melakukannya dengan alat pemartisian yang mampu GPT (ingat legacy_boot
bendera). Berikut ini contoh menggunakan parted
:
parted /dev/sdX --script mktable gpt
parted /dev/sdX --script mkpart EFI fat16 1MiB 10MiB
parted /dev/sdX --script mkpart live fat16 10MiB 3GiB
parted /dev/sdX --script mkpart persistence ext4 3GiB 100%
parted /dev/sdX --script set 1 msftdata on
parted /dev/sdX --script set 2 legacy_boot on
parted /dev/sdX --script set 2 msftdata on
Ini menciptakan tabel partisi GPT dan tabel partisi MBR pelindung.
Buat Filesystem
Kami ingin FAT pada EFI dan partisi langsung dan kami ingin ext4
parisi kegigihan dan kami membutuhkan label persistence
agar fitur kegigihan berfungsi.
mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3
Memasang sumber daya
Kita perlu me-mount ISO sumber dan menargetkan partisi pada titik pemasangan sementara.
mkdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
mount /dev/sdX1 /tmp/usb-efi
mount /dev/sdX2 /tmp/usb-live
mount /dev/sdX3 /tmp/usb-persistence
mount -oro live.iso /tmp/live-iso
Instal sistem hidup
Salin konten sistem file ISO langsung ke partisi LIVE.
cp -ar /tmp/live-iso/* /tmp/usb-live
persistence.conf
Persiapkan sistem file persistensi dengan file konfigurasi yang diperlukan. Fitur kegigihan tidak akan berfungsi tanpa file ini.
echo "/ union" > /tmp/usb-persistence/persistence.conf
Grub untuk dukungan UEFI
Instal grub2 untuk dukungan booting UEFI (ini membutuhkan grub-efi-amd64-bin
paket di Debian). Kami memaksa grub-install
untuk tidak menggunakan boot aman UEFI, yang tampaknya tidak berfungsi dengan --removable
opsi.
grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX
Syslinux untuk dukungan BIOS lawas
Instal syslinux gptmbr.bin
bootloader ke drive (unduh syslinux atau instal paket syslinux-common
). Kemudian instal syslinux ke partisi langsung.
dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2
Perbaikan Isolinux
Gunakan kembali konfigurasi isolinux dari live ISO asli untuk bekerja dengan syslinux.
mv /tmp/usb-live/isolinux /tmp/usb-live/syslinux
mv /tmp/usb-live/syslinux/isolinux.bin /tmp/usb-live/syslinux/syslinux.bin
mv /tmp/usb-live/syslinux/isolinux.cfg /tmp/usb-live/syslinux/syslinux.cfg
Parameter kernel
Sekarang kita menyalin file sistem langsung ke sistem file read-write yang sebenarnya, kita dapat memanipulasi konfigurasi grub dan syslinux.
Tambahkan parameter kernel kegigihan ke menu.cfg
dan grub.cfg
. Di kedua file, tambahkan kata kunci persistence
di akhir baris pertama masing-masing dengan boot=live
di dalamnya.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Setel parameter kernel tata letak keyboard. Di kedua file, tambahkan kata kunci di akhir baris pertama masing-masing dengan boot=live
di dalamnya.
sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 keyboard-layouts=de locales=en_US.UTF-8,de_DE.UTF-8/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg
Grub splash
Perbaiki grub splash image (opsional; kami memindahkannya ke direktori lain).
sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg
Lepas dan Bersihkan
umount /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
rmdir /tmp/usb-efi /tmp/usb-live /tmp/usb-persistence /tmp/live-iso
Mengapa ini harus bekerja untuk UEFI dan BIOS
Saat memulai dalam mode UEFI, PC akan memindai partisi FAT yang kami tentukan dalam tabel partisi GPT. Partisi FAT pertama membawa bootloader grub UEFI, yang ditemukan karena terletak di jalur yang ditentukan oleh UEFI untuk drive yang dapat dilepas ( --removable
sakelar untuk grub-install
melakukan ini). Tidak diperlukan entri boot UEFI agar dapat berfungsi, kita hanya perlu membuat PC mencoba melakukan booting dari drive USB. Grub itu dikonfigurasi untuk mengambilnya dari sana (muat grub.cfg, tunjukkan menu, dll.).
Saat memulai dalam mode BIOS dan memilih untuk boot dari drive USB, PC akan mengeksekusi gptmbr.bin
kode bootloader yang telah kami tulis ke MBR pelindung drive USB. Bootloader itu mencari partisi GPT yang ditandai dengan legacy_boot
flag dan chainload syslinux dari partisi itu. Syslinux kemudian mengambil alih (memuat menu.cfg, tampilkan menu, dll.).
Ketekunan Terenkripsi
Alih-alih menggunakan plain ext4 pada partisi persistence, seseorang dapat pertama-tama mengenkripsi partisi persistence dengan LUKS (menggunakan cryptsetup
), kemudian memformatnya dengan ext4 (menggunakan label yang tepat). Namun, seperti yang dikatakan dalam dokumentasi , sistem live harus menyertakan cryptsetup
paket. Jika tidak, partisi terenkripsi tidak dapat didekripsi oleh sistem live. Ini berarti kita harus membangun ISO live kustom terlebih dahulu. Namun, itu di luar cakupan jawaban ini.
Sejarah
The --no-uefi-secure-boot
pilihan sebelumnya bukan bagian dari panggilan untuk grub-install
. Tongkat itu berfungsi dengan baik untuk saya, tetapi berhenti dengan buster Debian, meskipun boot yang aman masih dinonaktifkan pada mesin saya.