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 di_cd=$(readlink -f $PWD/../../../neurodebian-images/$iso)
11 di_host=head1.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 # Let's use OVA since 4.x
45 # vm_ovf="${dist_dir}/${vm_fprefix}.ovf"
46 vm_ova="${dist_dir}/${vm_fprefix}.ova"
47 product_name="${vendor} VirtualMachine (${vm_arch})"
54 # TODO: remove whenever done
55 VBoxManage storagectl "${vm_name}" \
56 --name "SATA Controller" --remove || :
57 VBoxManage storagectl "${vm_name}" \
58 --name "IDE Controller" --remove || :
60 VBoxManage closemedium disk "${vm_disk}" || :
61 VBoxManage unregistervm "${vm_name}" --delete || :
65 clean_buildvm # clean things up
68 # Check that no previous VM was left (can happen if previous failures
70 if VBoxManage list vms | grep -q "^\"${vm_name}\".*"; then
71 echo "VM $vm_name still exists -- something is wrong, Can't continue" >&2
75 _info Assure build directory
78 _info Create HardDisk for the VM
79 VBoxManage createhd --filename $vm_disk \
80 --size 40960 --format VDI
81 # documented but not implemented:
82 # --comment "Drive for NeuroDebian VM installer"
85 VBoxManage createvm --name "${vm_name}" --register \
86 --ostype "${vm_ostype}" --basefolder $build_dir
89 VBoxManage modifyvm "${vm_name}" \
91 --audiocontroller ac97 \
104 VBoxManage storagectl "${vm_name}" \
105 --name "IDE Controller" \
108 VBoxManage storageattach "${vm_name}" \
109 --storagectl "IDE Controller" \
115 VBoxManage storagectl "${vm_name}" \
116 --name "SATA Controller" \
118 --controller "IntelAHCI"
120 VBoxManage storageattach "${vm_name}" \
121 --storagectl "SATA Controller" \
125 --medium "${vm_disk}"
127 VBoxManage showvminfo "${vm_name}"
129 _info "Run Debian Installer"
130 # When boot menu appears you will have to
132 # type auto url=$di_host
135 VBoxManage startvm "${vm_name}"
137 sleep 5 # give some time to make sure we get to menu
138 # Send our sequence -- cruel way
139 #VBoxManage controlvm "${vm_name}" keyboardputscancode \
141 # 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 \
142 # 1c 9c # ESCAPE, auto url=hydra, ENTER
143 echo "typeGuest \"${vm_name}\" \"&ESC;Wauto url=${di_host}&ENTER;\"" | /usr/lib/virtualbox/vboxshell.py
146 oops -- asked either I want to store Partitioning on the disk...
151 # wait for it to finish! -- found no cleaner way :-/
153 while VBoxManage showvminfo "${vm_name}" | grep -q running; do
158 sudo ./nd_compactvdi "${vm_disk}"
160 _info Exporting the appliance
161 if [ -e "$vm_ova" ]; then
162 vm_ova_old=$vm_ova.`date +"20%y%m%d%H%M"`
163 _info Previous OVA image exists, renaming it to $vm_ova_old
164 mv "$vm_ova" "$vm_ova_old"
166 VBoxManage export "${vm_name}" -o "$vm_ova" \
168 --product "${product_name}" \
169 --producturl "${product_url}" \
170 --vendor "${vendor}" \
171 --vendorurl "http://neuro.debian.net" \
172 --version "$vm_version" \
175 _info Cleaning after ourselves
178 _info Testing import of the appliance
179 VBoxManage import "$vm_ova" --vsys 0 --eula accept
181 _info Starting imported machine
182 VBoxManage startvm "${vm_name}"