Hey,
ich hab unter Ubuntu 12.10 an meinem normalen Rechner ein kleines Script geschrieben, bei dem eine eigene, virtuelle HDD angelegt wird und in diese dann Grub installiert wird, Kernel reinkopiert und das initramfs. Funktioniert eigentlich auch. Allerdings ist das jetzt schon 2 Monate her.
Aktuell sitze ich gerade an einem Rechner mit 12.04 und brauche die Funktionalität des Scripts. Nunja, es geht nicht mehr
Problem ist, das /dev/mapper/loop1p1 irgendwie fehlt, ich hab gerade keine Erinnerung mehr dran obs da schon bei meinem eigentlichen Rechner Probleme gab.
Hier mal das Script:
ich hab unter Ubuntu 12.10 an meinem normalen Rechner ein kleines Script geschrieben, bei dem eine eigene, virtuelle HDD angelegt wird und in diese dann Grub installiert wird, Kernel reinkopiert und das initramfs. Funktioniert eigentlich auch. Allerdings ist das jetzt schon 2 Monate her.
Aktuell sitze ich gerade an einem Rechner mit 12.04 und brauche die Funktionalität des Scripts. Nunja, es geht nicht mehr
Problem ist, das /dev/mapper/loop1p1 irgendwie fehlt, ich hab gerade keine Erinnerung mehr dran obs da schon bei meinem eigentlichen Rechner Probleme gab.
Hier mal das Script:
Code:
#!/bin/bash
# $1 hdd groesse
# $2 pfad + name des kernels z.B. /home/dev/linux1247/arch/x86/boot/bzImage
# $4 pfad zum initramfs. sollte als initramfs.igz gespeichert sein
# $3 welche VM software gestartet werden soll
# user is root?
if (( $(id -u) != 0 ))
then
echo "ERROR: This script must be run as root" 1>&2
exit 1
fi
# create disk
dd if=/dev/zero of=lfs.img bs=1024 count=$1
losetup /dev/loop1 lfs.img
# fdisk /dev/loop1
cat <<EOF | fdisk /dev/loop1
n
p
1
w
EOF
# partitionstabelle neu einlesen
kpartx -v -a /dev/loop1
# formatieren als ext2
mke2fs /dev/mapper/loop1p1
# mouten
mount /dev/mapper/loop1p1 /mnt
#grub installieren
echo 'install grub...'
grub-install --root-directory=/mnt /dev/loop1
echo 'DONE!'
umount /mnt
losetup -d /dev/mapper/loop1p1
# neu erstellte HDD unter /mnt mounten
losetup /dev/loop1 lfs.img
echo 'Mount Image to /mnt'
mount /dev/mapper/loop1p1 /mnt
echo 'Done!'
#copy kernel to /mnt/bzImage
cp $2 /mnt/bzImage
# initramfs erstellen
mkdir rootfs
cd rootfs
mkdir dev
mkdir bin
mknod dev/console c 5 1
mknod dev/tty2 c 4 2
mknod dev/tty3 c 4 3
mknod dev/tty4 c 4 4
cp /bin/busybox bin/busybox
ln -s bin/busybox init
cd bin
ln -s busybox sh
cd ..
find . | cpio -o -H newc | gzip > ../initramfs.cpio.gz
# copy initramfs to VM-HDD
cp ../initramfs.cpio.gz /mnt/initramfs.cpio.gz
cd ..
rm -r rootfs
rm initramfs.cpio.gz
# gedit /mnt/boot/grub/grub.cfg
# grub menu erstellen
touch /mnt/boot/grub/grub.cfg
echo "menuentry \"Linux\" {" >> /mnt/boot/grub/grub.cfg
echo "insmod ext2" >> /mnt/boot/grub/grub.cfg
echo "set root=(hd0,1)" >> /mnt/boot/grub/grub.cfg
echo "linux /bzImage root=/dev/hda1 ro" >> /mnt/boot/grub/grub.cfg
echo "initrd /initramfs.cpio.gz" >> /mnt/boot/grub/grub.cfg
echo "}" >> /mnt/boot/grub/grub.cfg
# HDD wieder aushaengen
umount /mnt
losetup -d /dev/mapper/loop1p1
if [ $3 = "qemu" ];
then
# qemu starten
qemu-system-i386 lfs.img
else
if [ $3 = "vmware" ];
then
echo "VMWare should be executet!"
else
if [ $3 = "vbox" ];
then
# pruefen ob lfs.vdi schon existiert und ggf loeschen
if [ -f "lfs.vdi" ];
then
rm lfs.vdi
# evtl so besser zu loeschen?
# VBoxManage unregistervm lfs --delete
rm -r /root/.VirtualBox/lfs
fi
# convert img to vdi
VBoxManage convertfromraw lfs.img lfs.vdi
# create vbox
VBoxManage createvm --name lfs --ostype Linux26 --register --basefolder .
# add lfs.vdi to vbox "lfs"
echo "Add HDD"
VBoxManage storagectl "lfs" --name "IDE Controller" --add ide --controller PIIX4
VBoxManage storageattach "lfs" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium "lfs.vdi"
echo "DONE!"
VirtualBox --startvm lfs
fi
fi
fi