was mir bei Mageia schon länger fehlt, ist die Möglichkeit, das Live-Iso auf eine(n) Platte/Stick zu kopieren, einen entspr. Boot-Eintrag zu erstellen und dann das neue Live-Medium zu testen. Mit grub2 ist das bei anderen Distris schon länger möglich, bei Mageia fehlte mir das noch, also habe ich mich mal daran gemacht, das zu ermöglichen. Für mich selbst hatte ich das schon länger gelöst, aber ich wollte das ganz gerne etwas allgemeiner gestalten, damit alle Mageia-Nutzer etwas davon haben, also Ihr seid alle aufgefordert, das auszuprobieren, zu kommentieren, zu verbessern ...
Hier jetzt also die Anleitung (etwas länger), aber möglicherweiser kommt ja etwas dabei heraus, was später in die Distribution übernommen wird, zumal im int. Forum das auch schon öfter mal Thema war.
Voraussetzungen:
- Mageia-4-alpha2-LiveDVD-KDE4-x86_64-DVD.iso vorhanden und geprüft mit md5sum, o.ä.
grub2 installiert
isomaster installiert
kpartx installiert
qemu installiert
ca. 5GB Plattenplatz (gerne auch mehr)
root-shell
- Laden wichtiger Module für die benutzten Tools
Anlegen des Arbeits-Verzeichnisses mit Unterverzeichnissen
Anlegen eines ca. 2GB-Platten-Images, partionieren, anlegen des Dateisystems
Installation von grub2 in das Platten-Image, grub.cfg anlegen
initrd vom Live-Iso auspacken, anpassen, wieder zusammenpacken
Austausch der initrd im Live-Iso und Speichern des neuen Isos
Testen
- Code: Alles auswählen
#~ laden von loop und dm_mod
modprobe -v loop
modprobe -v dm_mod
#~ Kontrolle mit
lsmod | grep -e loop -e dm
#~ dm_mirror 21976 0
#~ dm_region_hash 20849 1 dm_mirror
#~ dm_log 18529 2 dm_region_hash,dm_mirror
#~ dm_mod 88398 2 dm_log,dm_mirror
#~ loop 27979 1
#~ --
#~ cwd ist bei mir /data2
mkdir -p liveiso/{tempmount,initrd/inittest,isomount}
cd liveiso
#~ --
#~ Anlegen der Image-Datei, nennt sich sparse-file
dd if=/dev/zero of=mgatest.img bs=1 count=0 seek=2GB
#~ 0+0 Datensätze ein
#~ 0+0 Datensätze aus
#~ 0 Bytes (0 B) kopiert, 0,00979479 s, 0,0 kB/s
# Partitionstabelle anlegen
fdisk mgatest.img
n<Return>
<Return>
<Return>
<Return>
<Return>
w<Return>
# Kontrolle mit
fdisk -l mgatest.img
#~ Disk mgatest.img: 2000 MB, 2000000000 bytes, 3906250 sectors
#~ Units = Sektoren of 1 * 512 = 512 bytes
#~ Sector size (logical/physical): 512 bytes / 512 bytes
#~ I/O size (minimum/optimal): 512 bytes / 512 bytes
#~ Disk identifier: 0x3fc757c3
#~ Gerät boot. Anfang Ende Blöcke Id System
#~ mgatest.img1 2048 3906249 1952101 83 Linux
#~ --
#~ Mit kpartx verbinden und Dateisystem anlegen
kpartx -av mgatest.img
#~ add map loop0p1 (252:0): 0 3904202 linear /dev/loop0 2048
#~ Wichtig hierbei: loop0p1
mkfs.ext2 /dev/mapper/loop0p1
#~ mke2fs 1.42.7 (21-Jan-2013)
#~ Blöcke des Gerätes werden verworfen: erledigt
#~ Dateisystem-Label=
#~ OS-Typ: Linux
#~ Blockgröße=4096 (log=2)
#~ Fragmentgröße=4096 (log=2)
#~ Stride=0 Blöcke, Stripebreite=0 Blöcke
#~ 122160 Inodes, 488025 Blöcke
#~ 24401 Blöcke (5.00%) reserviert für den Superuser
#~ Erster Datenblock=0
#~ Maximale Dateisystem-Blöcke=503316480
#~ 15 Blockgruppen
#~ 32768 Blöcke pro Gruppe, 32768 Fragmente pro Gruppe
#~ 8144 Inodes pro Gruppe
#~ Superblock-Sicherungskopien gespeichert in den Blöcken:
#~ 32768, 98304, 163840, 229376, 294912
#~ Platz für Gruppentabellen wird angefordert: erledigt
#~ Inode-Tabellen werden geschrieben: erledigt
#~ Schreibe Superblöcke und Dateisystem-Accountinginformationen: erledigt
#~ --
#~ mounten der Partition, Grub2 installieren
mount /dev/mapper/loop0p1 tempmount/
#~ Kontrolle mit
df -h | grep tempmount
#~ /dev/mapper/loop0p1 1,9G 2,9M 1,8G 1% /data2/liveiso/tempmount
grub2-install --boot-directory=/data2/liveiso/tempmount /dev/loop0
#~ jede menge
#~ device-mapper: table ioctl on failed: Kein passendes Gerät bzw. keine passende Adresse gefunden
#~ ...
#~ installation beendet. Keine Fehler aufgetreten.
# also testen
umount tempmount
kpartx -dv mgatest.img
#~ del devmap : loop0p1
#~ loop deleted : /dev/loop0
# -m Hauptspeicher in MB -hda 1. Platte -vga GraKa -monitor in der aufruf. shell
qemu-system-x86_64 -m 1024 -hda mgatest.img -vga std -monitor stdio
#~ sollte einen grub-prompt liefern, wie im screenshot
- Code: Alles auswählen
#~ wieder einhängen
kpartx -av mgatest.img
mount /dev/mapper/loop0p1 tempmount/
# Anlegen der grub.cfg im Image
cat << EOF > tempmount/grub2/grub.cfg
set timeout=-1
set default=0
menuentry 'Mageia-4-alpha2-LiveDVD-KDE4-x86_64-DVD.iso isofrom' {
set isofile="/Mageia-4-alpha2-LiveDVD-KDE4-x86_64-DVD.iso"
loopback loop \$isofile
linux (loop)/boot/vmlinuz root=mgalive:LABEL=Mageia-4-KDE4-LiveDVD ro rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 lang=de isofrom=/dev/sda1:\$isofile 3 vga=788
initrd (loop)/boot/cdrom/initrd.gz
}
menuentry 'Mageia-4-alpha2-LiveDVD-KDE4-x86_64-DVD.iso isofrom rd.break=initqueue' {
set isofile="/Mageia-4-alpha2-LiveDVD-KDE4-x86_64-DVD.iso"
loopback loop \$isofile
linux (loop)/boot/vmlinuz root=mgalive:LABEL=Mageia-4-KDE4-LiveDVD ro rd.luks=0 rd.lvm=0 rd.md=0 rd.dm=0 lang=de isofrom=/dev/sda1:\$isofile 3 vga=788 rd.break=initqueue
initrd (loop)/boot/cdrom/initrd.gz
}
EOF
# Kontrolle mit
cat tempmount/grub2/grub.cfg
# und wieder aushängen, testen
umount tempmount
kpartx -dv mgatest.img
qemu-system-x86_64 -m 1024 -hda mgatest.img -vga std -monitor stdio
#~ Menü wie in
- Code: Alles auswählen
#~ --
# mounten der original-Iso und entpacken der initrd
# nicht wundern, bei mir heißt die Mageia-4-alpha2-LiveDVD-KDE4-x86_64-DVD.iso.orig
mount Mageia-4-alpha2-LiveDVD-KDE4-x86_64-DVD.iso.orig isomount
#entpacken der initrd
cat isomount/boot/cdrom/initrd.gz | xz -d > initrd/initrd
# iso wieder weghängen
umount isomount/
cd initrd/inittest/
# auspacken des cpios
cpio -div --no-absolute-filenames < ../initrd
# Anlegen einer neuen Datei liveiso.sh, da passiert eigentlich alles um vom Iso zu booten
cat << EOF > usr/lib/dracut/hooks/initqueue/liveiso.sh
#!/bin/sh
type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
# isofrom="/dev/sda1:/m4.iso"
if [ -n "\$isofrom" ]; then
isomount="/live/isomount"
isodev=\$(echo "\$isofrom" | sed 's,:.*\$,,g')
isofile=\$(echo "\$isofrom" | sed 's,^.*:,,g')
if [ ! -z "\$isodev" -a ! -z "\$isofile" ]; then
mkdir -m 0755 -p "\$isomount"
else
emergency_shell -n isofrom "Break in liveiso, check isodev and isofrom "
fi
isodevfs=\$(blkid -s TYPE -o value "\$isodev")
grep -q "\$isomount" /proc/mounts || mount -n -r -t "\$isodevfs" "\$isodev" "\$isomount" > /dev/null 2>&1 || emergency_shell -n isofrom "Break in liveiso, mounting failed"
if [ -e "\${isomount}\${isofile}" ]; then
losetup -a | grep -q "\${isomount}\${isofile}"
if [ \$? -ne 0 ]; then
losetup \$(losetup -f) "\${isomount}\${isofile}" || emergency_shell -n isofrom "Break in liveiso, losetup failed"
fi
else
emergency_shell -n isofrom "Break in liveiso, isofile does not exist"
fi
fi
EOF
#~ Kontrolle mit
cat usr/lib/dracut/hooks/initqueue/liveiso.sh
# ausführbar machen
chmod +x usr/lib/dracut/hooks/initqueue/liveiso.sh
#~ Kontrolle mit
ls -l usr/lib/dracut/hooks/initqueue/liveiso.sh
#~ immer schön auf die x-bits achten
#~ wieder zusammenpacken, generiert die neue initrd
find | cpio -coV | xz --check=crc32 --lzma2=dict=1MiB > ../initrd.gz
#~ --
#~ neues Iso erstellen
cd ../../
#~ Testplatte wieder einhängen
kpartx -av mgatest.img
mount /dev/mapper/loop0p1 tempmount/
# original-iso mit isomaster öffnen
isomaster Mageia-4-alpha2-LiveDVD-KDE4-x86_64-DVD.iso.orig
# Pfade entspr. einstellen, unten in /boot/cdrom initrd.gz auswählen und "Entfernen" drücken