UEFI + BIOS önyüklenebilir canlı Debian streç amd64 kalıcılığı ile


20

Şu anda bu konuda bulduğum tüm bilgiler benim zevkime göre yetersiz. Eski, yanıltıcı veya hatta yanlış, aşırı karmaşık görünüyor veya bu özel soruyu kapsamıyor.

Hedefler:

  • önyüklenebilir USB sürücü (hem UEFI hem de eski BIOS desteklenir)
  • (Debi) canlı Debian 9 (uzatma)
  • Kalıcılık (varsayılan olarak ve hem UEFI hem de eski BIOS için)
  • Varsayılan olarak Almanca klavye düzeni
  • diğer GNU / Linux sistemlerinde sorun gidermeye uygun

Nedenleri:

  • her kullanımda klavye düzenini ayarlamak zorunda kalmak gerçek bir baş ağrısıdır
  • Varsayılan Debian canlı görüntülerinde cryptsetup ve efibootmgr eksik
  • gnome terminali varsayılan olarak bu can sıkıcı beyaz arka plana sahiptir

Çözüm yok:

  • (de) özel debian canlı görüntü oluşturmak (henüz denemedim, ancak sıkıcı görünüyor)
  • unetbootin (debian streç başlarken bilinmeyen bir şifre ister ve ben zaten UEFI desteklemiyor düşünüyorum)
  • ne olduğunu göremediğim bazı yabancı otomatik süreçler

Debian canlı ve kurulum görüntüleri izohibrittir ve kullanarak cihazları engellemek için rahatlıkla yazılabilir dd. Ve böyle USB sürücülerden çalışıyorlar, bu çok güzel! Bununla birlikte, canlı ISO görüntüsünün çok okunabilir ISO9660 dosya sistemine dahil edilen grub ve isolinux config'i düzenlemeden, varsayılan olarak İngilizce olmayan bir klavye düzeniyle başlamanın hiçbir kalıcılığı ve yolu yoktur. Dolayısıyla, canlı ISO'yu bir USB sürücüsüne yazdıktan sonra bile, bu parametreler hala değiştirilemez.

Yanıtlar:


30

İşte kalıcı bir Debian canlı USB sürücü oluşturmanın bir yolu. Bundan sonra kalıcılığı kullanarak her canlı önyüklemede kullanılabilecek eksik paketleri yüklemeye izin verecektir. Canlı ISO görüntüsü dosya sistemi içeriğini okuma yazma özellikli bir dosya sisteminde yeniden oluşturduğumuzdan, kalıcılığı etkinleştirmek ve önyükleme sırasında klavye düzenini ayarlamak için önyükleyici yapılandırmalarını değiştirebiliriz.

Burada açıklanan adımlar, Debian streç canlı görüntüsü oluşturmak için Debian streç ve buster üzerinde çalışmak üzere test edildi.

Çok fazla adım var, ancak bu yöntemin hala oldukça verimli olduğu görülüyor.

Yasal Uyarı: Hedef USB sürücüsündeki verileri kaybedeceksiniz ve aşağıdaki komutları karıştırırsanız daha sonra çok üzülebilirsiniz. Yaptıklarından ben sorumlu değilim.

Şanslı hissetmek

Bugün özellikle şanslı hissediyorsanız , işlemi sizin için otomatik hale getiren bir bash betiğini deneyebilirsiniz . İlk parametre olarak ISO görüntü yolunuzu ve ikinci parametre olarak USB sürücü engelleme cihazınızın adını verin. Bu komut dosyasının delicesine tehlikeli olduğunu ve önce okumadan ve anlamadan çalıştırmamanız gerektiğini unutmayın.

TL; DR

Debian canlı ISO görüntüsünü alın, ardından aşağıdakileri yapın:

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

Ayrıntılı ve bazı açıklamalar ile

Aşağıdaki komutların çoğunu yükseltilmiş ayrıcalıklarla, yani sudoçoğu GNU / Linux sisteminde kullanarak yürütmeniz gerekecektir .

İndir

Seçtiğiniz pencere yöneticisiyle bir Debian canlı ISO görüntüsü indirin:

https://cdimage.debian.org/debian-cd/current-live/amd64/iso-hybrid/

İndirilen ISO imajını "live.iso" olarak adlandıracağız.

Hedef sürücüyü belirleme

USB sürücünüzün kullanıldığı aygıtı bulun lsblk. Bunu arayacağız /dev/sdX.

Unmount

Sürücünüzdeki mevcut bölümleri kullanarak bağlantısını kesin umount /dev/sdX*

Bölüm oluşturma

UEFI PC'lerin USB sürücüden önyükleme yapabilmesi için bir EFI önyükleme bölümüne ihtiyacımız var. O zaman orijinal canlı ISO dosya sistemi görüntü içeriğini tutmak için yeterince büyük bir bölüme ihtiyacımız var. Bu bölümün legacy_bootbayrağı ayarlanmış olmalıdır . Ardından, USB sürücüsünün kalan tüm alanını kullanarak kalıcılık bölümünü ekliyoruz. Bunu herhangi bir GPT özellikli bölümleme aracıyla yapabilirsiniz ( legacy_bootbayrağa dikkat edin). İşte bir örnek 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

Bu, bir GPT bölüm tablosu ve koruyucu bir MBR bölüm tablosu oluşturur.

Dosya Sistemleri Oluşturun

EFI ve canlı bölümlerde FAT istiyoruz ext4ve kalıcılık bölümünü istiyoruz persistenceve kalıcılık özelliğinin çalışması için etikete ihtiyacımız var .

mkfs.vfat -n EFI /dev/sdX1
mkfs.vfat -n LIVE /dev/sdX2
mkfs.ext4 -F -L persistence /dev/sdX3

Kaynakların birleştirilmesi

Kaynak ISO ve hedef bölümleri geçici bağlama noktalarına monte etmemiz gerekecek.

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

Canlı sistemi yükle

Canlı ISO dosya sistemi içeriğini LIVE bölümüne kopyalayın.

cp -ar /tmp/live-iso/* /tmp/usb-live

persistence.conf

Kalıcılık dosya sistemini gerekli yapılandırma dosyasıyla hazırlayın. Kalıcılık özelliği bu dosya olmadan çalışmaz.

echo "/ union" > /tmp/usb-persistence/persistence.conf

UEFI desteği için Grub

UEFI önyükleme desteği için grub2'yi yükleyin (bu grub-efi-amd64-binDebian üzerinde paket gerektirir ). Biz zorlamak grub-installiçin değil UEFI görünüşte ile çalışmıyor güvenli çizme, kullanma --removableseçeneği.

grub-install --no-uefi-secure-boot --removable --target=x86_64-efi --boot-directory=/tmp/usb-live/boot/ --efi-directory=/tmp/usb-efi /dev/sdX

Eski BIOS desteği için Syslinux

Syslinux gptmbr.binbootloader'ı sürücüye kurun (syslinux'u indirin veya paketi kurun syslinux-common). Ardından syslinux'u canlı bölüme kurun.

dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/mbr/gptmbr.bin of=/dev/sdX
syslinux --install /dev/sdX2

Isolinux onarımı

Sislinux ile çalışmak için orijinal canlı ISO'nun izolinux yapılandırmasını yeniden kullanın.

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

Çekirdek parametreleri

Canlı sistem dosyalarını gerçek bir okuma-yazma dosya sistemine kopyaladığımıza göre grub ve syslinux yapılandırmasını değiştirebiliriz.

Kalıcılık çekirdeği parametresini menu.cfgve öğelerine ekleyin grub.cfg. Her iki dosyada da anahtar kelimeyi persistenceiçindeki ilk satırın sonuna ekleyin boot=live.

sed --in-place '0,/boot=live/{s/\(boot=live .*\)$/\1 persistence/}' /tmp/usb-live/boot/grub/grub.cfg /tmp/usb-live/syslinux/menu.cfg

Klavye düzeni çekirdek parametresini ayarlayın. Her iki dosyada da, anahtar kelimeleri içindeki ilk satırın sonuna ekleyin boot=live.

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 sıçrama

Grub splash görüntüsünü düzeltin (isteğe bağlı; başka bir dizine taşıdık).

sed --in-place 's#isolinux/splash#syslinux/splash#' /tmp/usb-live/boot/grub/grub.cfg

Sökme ve Temizleme

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

Bu neden hem UEFI hem de BIOS için çalışmalı?

UEFI modunda başlatıldığında, PC, GPT bölüm tablosunda tanımladığımız FAT bölümlerini tarar. İlk FAT bölümü, çıkarılabilir sürücüler için UEFI tarafından belirtilen yolda bulunduğu için bulunan UEFI grub önyükleyicisini taşır (bunu yapma --removableanahtarı grub-install). Bunun için UEFI önyükleme girişi gerekmez, sadece bilgisayarın USB sürücüden önyüklemeye çalışmasını sağlamamız gerekir. Bu grub, oradan almak üzere yapılandırılmıştır (grub.cfg'yi yükleyin, menüyü gösterin, vb.).

BIOS modunda başlatılırken ve USB sürücüden önyükleme yapmayı seçerken, PC gptmbr.bin, USB sürücünün koruyucu MBR'sine yazdığımız önyükleyici kodunu yürütür . Bu bootloader legacy_boot, bu bölümden flag ve chainload syslinux ile işaretlenmiş GPT bölümünü arar . Syslinux daha sonra devreye girer (load menu.cfg, menüyü göster vb.).

Şifreli Kalıcılık

Kalıcılık bölümünde düz ext4 kullanmak yerine, önce kalıcılık bölümünü LUKS (kullanarak cryptsetup) şifreleyebilir , sonra bunu ext4 ile biçimlendirebilir (uygun etiketi kullanarak). Ancak, belgelerin söylediği gibi, canlı sistem cryptsetuppaketi içermelidir . Aksi takdirde, şifrelenen bölümün şifresi canlı sistem tarafından çözülemez. Bu, kişinin önce özel bir canlı ISO oluşturması gerektiği anlamına gelir. Ancak bu, bu cevabın kapsamı dışındadır.

Tarih

--no-uefi-secure-bootSeçenek, daha önce yapılan çağrı bir parçası değildi grub-install. Sopa benim için iyi çalıştı, ancak makinemde güvenli önyükleme hala devre dışı bırakılsa da Debian buster ile durdu.


1
Burada size bunun için teşekkür etmek üzere bir hesap oluşturdum. Mükemmel manuel. Küçük öneri - kalıcılık bölümünün şifrelenmesi iyi olurdu.
Petr Havlicek

1
@PetrHavlicek Doğru. Bunu yapmak yeterince kolay olduğunu düşünüyorum, ancak boş zamanımı bu soru ve cevapları diğer konularla oluşturduğumdan beri geçirdim, bu yüzden hala bu fikri tekrar gözden geçirmeliyim (ve takdiriniz için teşekkürler :).
schlimmchen

Harika çalışıyor! Yine de bazı ekstra açıklamalar iyi olurdu. (Her şeyi adam sayfalarında görebilirsiniz, ancak örneğin mktable, mklable ile aynı olsa da, gerçekten böyle belgelenmemiştir, vb.)
mikuszefski

FAT formatlı USB çubuğunda kalıcı ses seviyesini içeren bir dosya olması mümkün müdür? Dosyanın döngü montajı ile mümkün olmalıdır. Ancak Debians initrd'e bölüm yerine dosya almasını nasıl söyleyebilirim?
ceving

Bunun için debian-live.alioth.debian.org/live-manual/stable/manual/html/… adresine bakın . Kısaca: Herhangi bir dosya sisteminin kök dizininde bir görüntü (seyrek) dosyası oluşturun, bu dosyaya 'kalıcılık' adını verin ve formatlayın, örneğin ext4 ile.
schlimmchen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.