In diesem Artikel erhalten Sie grundlegende Informationen zum Erstellen eines bootfähigen Ubuntu Live-benutzerdefinierten Isohybrid-Images, damit Sie mit Ihrem eigenen Ubuntu-Distro-Spin-off beginnen können. Das Ausgabe-Image ist ein amd64-angepasstes Ubuntu-Live-Image, das in allen drei Boot-Modi booten kann:Legacy Bios, UEFI und SecureBoot.
Der Artikel wird nicht sehr detailliert darauf eingehen, wie die eigentliche Anpassung des squashfs-Systems durchgeführt wird. Stattdessen konzentriert es sich jedoch auf alle Schritte zum Entpacken des offiziellen Ubuntu Iso und zum Zusammensetzen aller Teile, um ein bootfähiges Isohybrid-Image zu erstellen, das die Modi Legacy Bios, UEFI und SecureBoot unterstützt.
Voraussetzungen
Wie immer beginnen wir mit den Voraussetzungen und der optionalen Paketinstallation:
$ sudo apt-get install dumpet xorriso squashfs-tools gddrescue
Ubuntu-ISO-Image herunterladen
Der erste Teil der Erstellung Ihrer eigenen angepassten Linux-Distribution basierend auf Ubuntu Linux besteht darin, das offizielle Ubuntu-ISO-Image herunterzuladen. Erstellen Sie ein neues Verzeichnis custom-ubuntu
um alle für dieses Projekt erforderlichen Dateien zu speichern. EFI und seine SecureBoot-Funktion werden auf der i386-Architektur nicht unterstützt, laden Sie also eine beliebige amd64-Version des Ubuntu-ISO-Images herunter und speichern Sie sie in custom-ubuntu
Verzeichnis:
$ mkdir custom-ubuntu $ cd custom-ubuntu/ $ wget http://url/to/ubuntu/image.iso
ISO-Inhalt extrahieren
In diesem Stadium müssen wir alle Inhalte aus dem offiziellen Ubuntu-ISO-Image mounten und extrahieren. Dafür verwenden wir xorriso
Befehl. Das folgende xorriso
Der Befehl extrahiert alle Dateien aus dem ursprünglichen ISO-Image in custom-iso
Verzeichnis. Bsp.:
$ xorriso -osirrox on -indev ubuntu-16.04-desktop-amd64.iso -extract / custom-iso
Anpassungsprozess
Führen Sie in diesem Stadium eine Anpassung innerhalb von custom-iso
durch Verzeichnis. Wie bereits erwähnt, liegt es an Ihnen, wie Sie Ihr Bild anpassen. Nachfolgend finden Sie einige Tipps für den Einstieg:
- EFI-Bootloader-Menü:
custom-iso/boot/grub/grub.cfg
- Legacy-Startmenü ohne EFI:
custom-iso/isolinux/txt.cfg
- squashfs-Dateisystem:
custom-iso/casper/filesystem.squashfs
- EFI-Bootloader-Menü:
Um das squashfs-Dateisystem anzupassen, dekomprimieren Sie zuerst filesystem.squashfs:
$ sudo unsquashfs custom-iso/casper/filesystem.squashfs Parallel unsquashfs: Using 8 processors 180141 inodes (192876 blocks) to write [======================/] 192876/192876 100% created 138452 files created 18797 directories created 41566 symlinks created 81 devices created 0 fifos
Geben Sie squashfs mit chroot
ein Befehl, Änderungen vornehmen und beenden:
$ sudo chroot squashfs-root/ # mount none -t proc /proc; mount none -t sysfs /sys; mount none -t devpts /dev/pts
Dieser Punkt Sie innerhalb der Chroot-Umgebung Ihres neuen Systems. Nehmen Sie Änderungen wie die Paketinstallation vor und beenden Sie Chroot:
# exit exit $ sudo umount -f squashfs-root/proc squashfs-root/sys squashfs-root/dev/pts
Neue squashfs komprimieren:
$ sudo mksquashfs squashfs-root/ custom-iso/casper/filesystem.squashfs
Erstellen eines bootfähigen Isohybrid-ISO-Images
Besorgen Sie sich den Isohybrid-MBR isohdpfx.bin
aus dem ursprünglichen Ubuntu-ISO-Image mit dd
Befehl :
$ sudo dd if=ubuntu-16.04-desktop-amd64.iso bs=512 count=1 of=custom-iso/isolinux/isohdpfx.bin
Erstellen Sie ein neues Isohybrid-ISO-Image innerhalb von custom-iso
Verzeichnis mit xorriso
Befehl. Beachten Sie das "." am Ende des xorriso
Befehl:
$ cd custom-iso/ $ sudo xorriso -as mkisofs -isohybrid-mbr isolinux/isohdpfx.bin \ -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 \ -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot \ -isohybrid-gpt-basdat -o ../custom-ubuntu.iso . xorriso 1.3.2 : RockRidge filesystem manipulator, libburnia project. Drive current: -outdev 'stdio:../custom-ubuntu.iso' Media current: stdio file, overwriteable Media status : is blank Media summary: 0 sessions, 0 data blocks, 0 data, 1444g free Added to ISO image: directory '/'='/home/lubos/custom-ubuntu/custom-iso' xorriso : UPDATE : 549 files added in 1 seconds xorriso : UPDATE : 549 files added in 1 seconds xorriso : NOTE : Copying to System Area: 512 bytes from file '/home/lubos/custom-ubuntu/custom-iso/isolinux/isohdpfx.bin' libisofs: NOTE : Automatically adjusted MBR geometry to 1017/89/32 libisofs: NOTE : Aligned image size to cylinder size by 367 blocks xorriso : UPDATE : 100.00% done ISO image produced: 724104 sectors Written to medium : 724104 sectors at LBA 0 Writing to 'stdio:../custom-ubuntu.iso' completed successfully.
Der obige Befehl führt zu einer neuen ../custom-ubuntu.iso
isohybrides Bild.
Beziehen von Bildinformationen
Wenn alles gut gegangen ist unser custom-ubuntu
Verzeichnis sollte nun ein neues Isohybrid-Image custom-ubuntu.iso
enthalten :
$ ls custom-iso custom-ubuntu.iso orig-iso squashfs-root ubuntu-16.04-desktop-amd64.iso
Partitionstabelle:
$ sudo fdisk -lu custom-ubuntu.iso Disk custom-ubuntu.iso: 1.4 GiB, 1482964992 bytes, 2896416 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x751e87f5 Device Boot Start End Sectors Size Id Type custom-ubuntu.iso1 * 0 2896415 2896416 1.4G 0 Empty custom-ubuntu.iso2 540 5083 4544 2.2M ef EFI (FAT-12/16/32)
Kopf- und Kataloginformationen:
$ sudo dumpet -i custom-ubuntu.iso Validation Entry: Header Indicator: 0x01 (Validation Entry) PlatformId: 0x00 (80x86) ID: "" Checksum: 0x55aa Key bytes: 0x55aa Boot Catalog Default Entry: Entry is bootable Boot Media emulation type: no emulation Media load segment: 0x0 (0000:7c00) System type: 0 (0x00) Load Sectors: 4 (0x0004) Load LBA: 701876 (0x000ab5b4) Section Header Entry: Header Indicator: 0x91 (Final Section Header Entry) PlatformId: 0xef (EFI) Section Entries: 1 ID: "" Boot Catalog Section Entry: Entry is bootable Boot Media emulation type: no emulation Media load address: 0 (0x0000) System type: 0 (0x00) Load Sectors: 4544 (0x11c0) Load LBA: 135 (0x00000087)
Eltorito-Validierungsheader:
$ isoinfo -d -i custom-ubuntu.iso CD-ROM is in ISO 9660 format System id: Volume id: ISOIMAGE Volume set id: Publisher id: Data preparer id: XORRISO-1.3.2 2013.08.07.110001, LIBISOBURN-1.3.2, LIBISOFS-1.3.2, LIBBURN-1.3.2 Application id: Copyright File id: Abstract File id: Bibliographic File id: Volume set size is: 1 Volume set sequence number is: 1 Logical block size is: 2048 Volume size is: 724104 El Torito VD version 1 found, boot catalog is in sector 117 NO Joliet present Rock Ridge signatures version 1 found Eltorito validation header: Hid 1 Arch 0 (x86) ID '' Key 55 AA Eltorito defaultboot header: Bootid 88 (bootable) Boot media 0 (No Emulation Boot) Load segment 0 Sys type 0 Nsect 4 Bootoff AB5B4 701876
Boot-Katalog und relevante Bildpfade:
# xorriso -indev custom-ubuntu.iso -toc -pvd_info xorriso 1.3.2 : RockRidge filesystem manipulator, libburnia project. xorriso : NOTE : Loading ISO image tree from LBA 0 xorriso : UPDATE : 549 nodes read in 1 seconds xorriso : NOTE : Detected El-Torito boot information which currently is set to be discarded Drive current: -indev 'custom-ubuntu.iso' Media current: stdio file, overwriteable Media status : is written , is appendable Boot record : El Torito , ISOLINUX isohybrid MBR pointing to boot image Media summary: 1 session, 724104 data blocks, 1414m data, 1442g free Volume id : 'ISOIMAGE' Drive current: -indev 'custom-ubuntu.iso' Drive type : vendor 'YOYODYNE' product 'WARP DRIVE' revision 'FX01' Media current: stdio file, overwriteable Media status : is written , is appendable Media blocks : 724104 readable , 755967444 writable , 756691572 overall Boot record : El Torito , ISOLINUX isohybrid MBR pointing to boot image Boot catalog : '/isolinux/boot.cat' Boot image : '/isolinux/isolinux.bin' , boot_info_table=on Boot image : '/boot/grub/efi.img' , platform_id=0xEF TOC layout : Idx , sbsector , Size , Volume Id ISO session : 1 , 0 , 724104s , ISOIMAGE Media summary: 1 session, 724104 data blocks, 1414m data, 1442g free Media nwa : 724128s Drive current: -indev 'custom-ubuntu.iso' PVD address : 16s Volume Id : ISOIMAGE Volume Set Id: Publisher Id : Preparer Id : XORRISO-1.3.2 2013.08.07.110001, LIBISOBURN-1.3.2, LIBISOFS-1.3.2, LIBBURN-1.3.2 App Id : System Id : CopyrightFile: Abstract File: Biblio File : Creation Time: 2016020823095700 Modif. Time : 2016020823095700 Expir. Time : 0000000000000000 Eff. Time : 0000000000000000
Booten eines neuen benutzerdefinierten Ubuntu-Images
Bitte beachten Sie, dass das neu erstellte benutzerdefinierte Ubuntu-Image in allen drei Modi booten soll, d. h. Legacy-BIOS, nur UEFI sowie UEFI mit aktivierter SecureBoot-Option. Dies ist jedoch nicht garantiert und es können Probleme aufgrund von Hardware-Firmware-Fehlern usw. auftreten.
Um Ihr neues benutzerdefiniertes Ubuntu-Image zu booten, brennen Sie entweder die resultierende ISO auf CD oder verwenden Sie ddrescue
Befehl zum Klonen auf Ihren USB-Stick:
$ sudo ddrescue custom-ubuntu.iso /dev/sdX --force -D
Ihr USB-Stick enthält jetzt ein angepasstes Ubuntu-Live-System. Alles sollte jetzt bereit sein, von Ihrem USB-Stick zu booten.