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.3-${ARCH:=amd64}-businesscard.iso
10 iso=debian-wheezy-DI-a1-${ARCH:=amd64}-businesscard.iso
11 di_cd=$(readlink -f $PWD/../../../neurodebian-images/$iso)
12 di_host=head1.hydra.dartmouth.edu # where to look for di preseed
17 vm_version="6.999.20120716"
19 vendor_url="http://neuro.debian.net"
20 product_url="${vendor_url}/vm.html"
23 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.
25 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."
31 # By default 32bit unless installer image has amd64
32 # TODO: might need to make more robust?
34 vm_arch_name=" (32bit)"
35 if file $di_cd | grep -q ' amd64 '; then
38 vm_arch_name=" (64bit)"
41 vm_fprefix="${vendor}_${vm_version}_${vm_arch}" # common prefix for files
42 #vm_disk="$build_dir/nd-${vm_version}_${vm_arch}.vdi"
43 vm_disk="$build_dir/${vm_fprefix}.vdi"
44 vm_name="${vendor} ${vm_version} ${vm_arch_name}"
45 # Let's use OVA since 4.x
46 # vm_ovf="${dist_dir}/${vm_fprefix}.ovf"
47 vm_ova="${dist_dir}/${vm_fprefix}.ova"
48 product_name="${vendor} VirtualMachine (${vm_arch})"
55 # TODO: remove whenever done
56 VBoxManage storagectl "${vm_name}" \
57 --name "SATA Controller" --remove || :
58 VBoxManage storagectl "${vm_name}" \
59 --name "IDE Controller" --remove || :
61 VBoxManage closemedium disk "${vm_disk}" || :
62 VBoxManage unregistervm "${vm_name}" --delete || :
66 clean_buildvm # clean things up
69 # Check that no previous VM was left (can happen if previous failures
71 if VBoxManage list vms | grep -q "^\"${vm_name}\".*"; then
72 echo "VM $vm_name still exists -- something is wrong, Can't continue" >&2
76 _info Assure build directory
79 _info Create HardDisk for the VM
80 VBoxManage createhd --filename $vm_disk \
81 --size 40960 --format VDI
82 # documented but not implemented:
83 # --comment "Drive for NeuroDebian VM installer"
86 VBoxManage createvm --name "${vm_name}" --register \
87 --ostype "${vm_ostype}" --basefolder $build_dir
90 VBoxManage modifyvm "${vm_name}" \
92 --audiocontroller ac97 \
105 VBoxManage storagectl "${vm_name}" \
106 --name "IDE Controller" \
109 VBoxManage storageattach "${vm_name}" \
110 --storagectl "IDE Controller" \
116 VBoxManage storagectl "${vm_name}" \
117 --name "SATA Controller" \
119 --controller "IntelAHCI"
121 VBoxManage storageattach "${vm_name}" \
122 --storagectl "SATA Controller" \
126 --medium "${vm_disk}"
128 VBoxManage showvminfo "${vm_name}"
130 _info "Run Debian Installer"
131 # When boot menu appears you will have to
133 # type auto url=$di_host
136 VBoxManage startvm "${vm_name}"
138 sleep 5 # give some time to make sure we get to menu
139 # Send our sequence -- cruel way
140 #VBoxManage controlvm "${vm_name}" keyboardputscancode \
142 # 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 \
143 # 1c 9c # ESCAPE, auto url=hydra, ENTER
144 echo "typeGuest \"${vm_name}\" \"&ESC;Wauto url=${di_host}&ENTER;\"" | /usr/lib/virtualbox/vboxshell.py
147 oops -- asked either I want to store Partitioning on the disk...
152 # wait for it to finish! -- found no cleaner way :-/
154 while VBoxManage showvminfo "${vm_name}" | grep -q running; do
159 sudo ./nd_compactvdi "${vm_disk}"
161 _info Exporting the appliance
162 if [ -e "$vm_ova" ]; then
163 vm_ova_old=$vm_ova.`date +"20%y%m%d%H%M"`
164 _info Previous OVA image exists, renaming it to $vm_ova_old
165 mv "$vm_ova" "$vm_ova_old"
167 VBoxManage export "${vm_name}" -o "$vm_ova" \
169 --product "${product_name}" \
170 --producturl "${product_url}" \
171 --vendor "${vendor}" \
172 --vendorurl "http://neuro.debian.net" \
173 --version "$vm_version" \
176 _info Cleaning after ourselves
179 _info Testing import of the appliance
180 VBoxManage import "$vm_ova" --vsys 0 --eula accept
182 _info Starting imported machine
183 VBoxManage startvm "${vm_name}"