create-ie-vbox
#!/bin/bash
exe_file=$1
[ -z "$exe_file" ] && die "Usage: $0 <MS .exe file>"
ie_ver=`echo $exe_file | perl -ne'/(IE\d)/ && print $1'`
if [ -e $exe_file ] ; then
exe_file=`echo $exe_file | perl -MFile::Spec -e'print File::Spec->rel2abs(<>)'`
[ -e $exe_file ] || die "Rel2Abs didn't work"
fi
name="WinXP $ie_ver v2"
vbox_dir="$HOME/.VirtualBox"
log="/tmp/ie-vbox-create.log"
function die() {
echo $@
exit 1
}
echo "Woring on $exe_file ($ie_ver)"
# Find the vhd file
vhd_file=`unrar l $exe_file | perl -ne'/(\w[\s\w-]*\.vhd)/ && print $1'`
[ -z "$vhd_file" ] && die "Couldn't find the vhd file ($vhd_file)"
echo "Found vhd file: $vhd_file"
# Create the drive dir
vhd_dst="$vbox_dir/HardDisks/ie"
echo "mkdir $vhd_dst"
[ -d $vhd_dst ] || mkdir $vhd_dst || die "Couldn't create $vhd_dst"
vhd="$vhd_dst/$vhd_file"
echo "vhd: $vhd"
# Unzip the disk image
echo "Changing to $vhd_dst"
cd $vhd_dst || die "Couldn't cd to $vhd_dst"
if [ -e "$vhd_file" ] ; then
echo "VHD already extracted: $vhd_file"
else
echo "Extracting..."
nice unrar e "$exe_file" "$vhd_file" >> $log 2>&1 \
|| die "Couldn't extract $vhd_file from $exe_file"
echo "done"
fi
vdi="`echo $vhd | sed -e 's/\.vhd$/.vdi/'`"
vmdk="`echo $vhd | sed -e 's/\.vhd$/.vmdk/'`"
raw="`echo $vhd | sed -e 's/\.vhd$/.raw/'`"
# Create the vbox vm
echo "--- Create vm"
VBoxManage createvm -name "$name" -register || die "Error creating vm"
# All the IE images have the same UUID so need to fix before registering
# This would be the easiest, but it doesn't work. Knows bug in VBox
# echo "--- Change uuid"
# VBoxManage internalcommands setvdiuuid "$vhd" || die "Error changing UUID"
# VBoxManage internalcommands sethduuid "$vhd" || die "Error changing UUID"
# Tried to clonevdi, but get the same UUID error, so convert->convert->convert
echo "--- Convert to raw"
nice qemu-img convert -O raw -f vpc "$vhd" "$raw" || die "Error converting to raw"
echo "--- Convert to vdi"
nice VBoxManage convertdd "$raw" "$vdi" || die "Error converting to vdi"
echo "--- Registerimage"
## VBoxManage registerimage disk "$vdi" || die "Error registering disk"
# could use "--type writethrough" then it reverts back each time rebooted
echo "--- Update vm"
VBoxManage modifyvm "$name" --ostype "WindowsXP" \
--memory 192 --vram 8 --hwvirtex on --nic1 nat \
--hda "$vdi" || die "Error modifying vm"
echo "--- Cleanup"
rm "$vhd" "$raw"
echo "---------"
echo "Remember to boot into safe mode F8 then in dos command:"
echo " cd \WINDOWS\system32\drivers"
echo " ren processr.sys processr.old"
echo
echo "Once rebooted install vboxadditions then run"
echo " D:\VBoxWindowsAdditions-x86.exe /extract /D=C:\Drivers"
echo
echo "To avoid popups:"
echo " * Start > Administrative Tools > Computer Management"
echo " * Select Device Manager."
echo " * Select Batteries, Unknown Device -> Disable"
echo " * Select Network Adapters, Ethernet Controller -> Update Driver"
echo " * Select Yes, now and every time, click Next"
echo " * Select Install from a list or specific location, click Next"
echo " * Enter location 'C:\Drivers\x86\Network\AMD'"
echo " * Click Finish"