2 #emacs: -*- mode: shell-script; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil -*-
3 #ex: set sts=4 ts=4 sw=4 noet:
7 # TODO: arguments later on to become cmdline args
8 #iso=debian-squeeze-di-beta1-amd64-businesscard.iso
9 iso=debian-6.0.0-${ARCH:=amd64}-businesscard.iso
10 di_cd=$(readlink -f $PWD/../../../neurodebian-images/$iso)
11 di_host=hydra.dartmouth.edu # where to look for di preseed
18 vendor_url="http://neuro.debian.net"
19 product_url="${vendor_url}/vm.html"
22 eula="This virtual appliance contains Free and Open Source Software (FOSS) released under licenses compliant with the Debian Free Software Guidelines (DFSG, see http://www.debian.org/social_contract), such as, GPL, BSD, MIT, etc. Such software is free to be used or customized for any purpose.
24 However, by default this virtual machine is also enabled to install additional software from Debian and NeuroDebian repositories that is distributed under more restrictive licenses (e.g. closed-source, non-commercial, research-only). It is the user's responsibility to adhere to the terms and conditions of any particular software that is installed and used in this virtual machine. Copyright and license details for any installed PACKAGE are available in /usr/share/doc/PACKAGE/copyright inside the virtual machine."
30 # By default 32bit unless installer image has amd64
31 # TODO: might need to make more robust?
33 vm_arch_name=" (32bit)"
34 if file $di_cd | grep -q ' amd64 '; then
37 vm_arch_name=" (64bit)"
40 vm_fprefix="${vendor}_${vm_version}_${vm_arch}" # common prefix for files
41 #vm_disk="$build_dir/nd-${vm_version}_${vm_arch}.vdi"
42 vm_disk="$build_dir/${vm_fprefix}.vdi"
43 vm_name="${vendor} ${vm_version} ${vm_arch_name}"
44 vm_ovf="${dist_dir}/${vm_fprefix}.ovf"
45 product_name="${vendor} VirtualMachine (${vm_arch})"
52 # TODO: remove whenever done
53 VBoxManage storagectl "${vm_name}" \
54 --name "SATA Controller" --remove || :
55 VBoxManage storagectl "${vm_name}" \
56 --name "IDE Controller" --remove || :
58 VBoxManage closemedium disk "${vm_disk}" || :
59 VBoxManage unregistervm "${vm_name}" --delete || :
63 clean_buildvm # clean things up
66 # Check that no previous VM was left (can happen if previous failures
68 if VBoxManage list vms | grep -q "^\"${vm_name}\".*"; then
69 echo "VM $vm_name still exists -- something is wrong, Can't continue" >&2
73 _info Assure build directory
76 _info Create HardDisk for the VM
77 VBoxManage createhd --filename $vm_disk \
78 --size 20480 --format VDI
79 # documented but not implemented:
80 # --comment "Drive for NeuroDebian VM installer"
83 VBoxManage createvm --name "${vm_name}" --register \
84 --ostype "${vm_ostype}" --basefolder $build_dir
87 VBoxManage modifyvm "${vm_name}" \
89 --audiocontroller ac97 \
102 VBoxManage storagectl "${vm_name}" \
103 --name "IDE Controller" \
106 VBoxManage storageattach "${vm_name}" \
107 --storagectl "IDE Controller" \
113 VBoxManage storagectl "${vm_name}" \
114 --name "SATA Controller" \
116 --controller "IntelAHCI"
118 VBoxManage storageattach "${vm_name}" \
119 --storagectl "SATA Controller" \
123 --medium "${vm_disk}"
125 VBoxManage showvminfo "${vm_name}"
127 _info "Run Debian Installer"
128 # When boot menu appears you will have to
130 # type auto url=$di_host
133 VBoxManage startvm "${vm_name}"
135 sleep 5 # give some time to make sure we get to menu
136 # Send our sequence -- cruel way
137 #VBoxManage controlvm "${vm_name}" keyboardputscancode \
139 # 1e 9e 16 96 14 94 18 98 39 b9 16 96 13 93 26 a6 0d 8d 23 a3 15 95 20 a0 13 93 1e 9e \
140 # 1c 9c # ESCAPE, auto url=hydra, ENTER
141 echo "typeGuest \"${vm_name}\" \"&ESC;Wauto url=${di_host}&ENTER;\"" | /usr/lib/virtualbox/vboxshell.py
144 oops -- asked either I want to store Partitioning on the disk...
149 # wait for it to finish! -- found no cleaner way :-/
151 while VBoxManage showvminfo "${vm_name}" | grep -q running; do
156 sudo ./nd_compactvdi "${vm_disk}"
158 _info Exporting the appliance
160 VBoxManage export "${vm_name}" -o "$vm_ovf" \
162 --product "${product_name}" \
163 --producturl "${product_url}" \
164 --vendor "${vendor}" \
165 --vendorurl "http://neuro.debian.net" \
166 --version "$vm_version" \
169 _info Cleaning after ourselves
172 _info Testing import of the appliance
173 VBoxManage import "$vm_ovf" --vsys 0 --eula accept
175 _info Starting imported machine
176 VBoxManage startvm "${vm_name}"