DSL Tips and Tricks :: BuildVirtualHdFromDSLiso



I ve created a script allowing to build
a virtual_bootable_disk from livecd_iso.(A DSL_linux_image for qemu )
The requirements from your pc are very little:
presence of /lib/grub/i386-pc/stage*  grub stuffs, /mnt/test,
dsl-xx.iso  any xx  ,qemu
you run
1   mkdslvdsk  dslvdisk  200  
 (to create a virtual disk of 200Mb with grub installed,and inside it I store
an install_script "instvdsk"to be used in the follow)
2   invoke    
   qemu -m 256 -cdrom  dsl-xx.iso   -hdb dslvdisk
at boot:  prompt ,login console with user_dsl to preserve resource
    boot:  dsl 2
3 #mount /dev/hdb1 /mnt/hdb1  &&  /mnt/hdb1/instvdsk
this will install to virtual disk from livecd .at the end of the process (# prompt)
# umont  /mnt/hdb1
4 exit qemu instance,and launch now
  qemu dslvdisk    (you now start bootup dsl_on virtual disk !)
have fun
I check my script on 3 differents partitions(ubuntu-6,kanotix-9 and a homemade_scratchbox-toolkit,and it worked
but on another machine,I could not get a bootable vdsk !(damned fdisk,and geometry c-h-s stuffs !)

you need to run as root (because manipulations of virtual disk (dd,losetup,mount...)
The script is very short,self explanatory;I do not do anything on device,hdd....
mkdslvdsk.sh
-------------------------------cut-------
#!/bin/bash  
# excute: " mkdslvdsk vdsk 200 "    to create a virtual vdsk 200Mb bootable.
#this script creates a virtual bootble_disk,with an install script "instvdsk" in side the vdisk
#invoking "qemu -cdrom dsl-xx.iso -hdb vdsk" allows to install dsl_filesystem to vdsk by doing
#" qemu -m -cdrom dsl-xx.iso -hdb vdsk"  ;choose console boot: "dsl 2 " to get more resource  
#mount /dev/hdb1 /mnt/hdb1 && /mnt/hdb1/instvdsk  to install
#at the end,umount /mnt/hdb1 ;exit qemu instance
#On pc host now start another instance with virtual disk  :  qemu vdsk   !!!!
partit()
{
echo "create a vdisk size $2 Mbytes partition 1"
#qemu-img create $1 $2
cnt=`expr $2 \* 2000 `
dd if=/dev/zero of=$1 bs=512 count=$cnt

cy=`expr $cnt \/ 8258 `
#/usr/bin/expr ( $2 \/ 4 ) > cyl

echo "cyl= $cy"
fdisk -b512 -C $cy -H128 -S63 $1  << EOF  

n

p

1



a

1

w

EOF
}
fmtit()
{
echo " format ext2"
losetup -d /dev/loop0 2>&1 >/dev/null
losetup -o 32256 /dev/loop0  $1
mke2fs /dev/loop0
losetup -d /dev/loop0
}
grubit()
{
mount -oloop,offset=32256 $1 /mnt/test
mkdir /mnt/test/boot
mkdir /mnt/test/boot/grub

cp -a /lib/grub/i386-pc/stage*  /mnt/test/boot/grub

cat > /mnt/test/boot/grub/menu.lst << EOF
default 2
title DSL
kernel /boot/linux24 root=/dev/hda1 quiet vga=normal noacpi noapm nodma noscsi frugal
init=/etc/init
title DSL fb800x600
kernel /boot/linux24  root=/dev/hda1 quiet vga=788 noacpi noapm nodma noscsi frugal
init=/etc/init
title DSL fb1024x768
kernel /boot/linux24  root=/dev/hda1 quiet vga=791 noacpi noapm nodma noscsi frugal
init=/etc/init
title DSL fb1280x1024
kernel /boot/linux24  root=/dev/hda1 quiet vga=794 noacpi noapm nodma noscsi frugal
init=/etc/init

EOF
echo " (hd6)  $1" > devmap
grub --batch --no-floppy --device-map=devmap <<EOF  >log
root  (hd6,0)
setup  (hd6)
quit
EOF
umount /mnt/test
}
cr_isotohd()
{
mount -oloop,offset=32256 $1 /mnt/test
cat > /mnt/test/instvdsk << EOF
mv /mnt/hdb1/boot/grub/menu.lst /mnt/hdb1/boot/grub/menu.lst_org
cp -a /KNOPPIX/* /mnt/hdb1
cp -f /mnt/hdb1/boot/grub/menu.lst_org /mnt/hdb1/boot/grub/menu.lst
cp /KNOPPIX/.bash* /mnt/hdb1
cp /etc/fstab /mnt/hdb1/etc
echo  " x5:5:wait:/etc/init.d/xsession start" >> /mnt/hdb1/etc/inittab
sed s/cp/#cp/ /mnt/hdb1/etc/init.d/xsession > xsession0
mv -f xsession0 /mnt/hdb1/etc/init.d/xsession
chmod +x /mnt/hdb1/etc/init.d/xsession
cp /cdrom/boot/isolinux/linux24 /mnt/hdb1/boot
mkdir /mnt/hdb1/KNOPPIX
mkdir /mnt/hdb1/ramdisk
#this part was reminiscent of trying to keep as closely as possible to dsl-xx.iso
#meaning just modify the menu.lst from (iso)/KNOPPIX/boot/grub/
#cp /mnt/hdb1/boot/grub/menu.lst /mnt/hdb1/boot/grub/menu.lst_org
#sed s/hda2/hda1/g /mnt/hdb1/boot/grub/menu.lst > menuu
#sed s_initrd_init=/etc/init_g menuu > menuv
#sed s_/boot/minirt24.gz_ww_g menuv > menuw
#sed s/ww// menuw > menux
#cp -f menux /mnt/hdb1/boot/grub/menu.lst
cd /mnt/hdb1/KNOPPIX
ln -s ../bin bin
ln -s ../etc etc
EOF
chmod +x  /mnt/test/instvdsk
umount /mnt/test
}
#main
partit $1 $2
fmtit $1
grubit $1
cr_isotohd $1
exit


original here.