1 # This bash script is sourced by the various tools to set the
2 # adt_... variables and some other useful ones.
7 #---------- useful general functions ----------
10 echo >&2 "xenlvm: ${0##*/}: error: $*"
14 x () { echo "x $*"; "$@"; }
16 case "$BASH_VERSION" in
17 '') fail 'scripts using adtxenlvm readconfig must be bash scripts' ;;
21 #---------- default values for simple settings ----------
29 adt_playbase=/var/lib/autopkgtest/xenlvm
32 adt_vm_reduce_retries=10
35 adt_debootstrap_components='*'
36 adt_debootstrap_include=libc6-xen,openssh-server,ed
37 adt_debootstrap_includemore=
38 adt_debootstrap_mirrors=''
39 adt_debootstrap_script=''
41 adt_fw_localmirrors=''
42 adt_fw_prohibnets='192.168.0.0/24 172.16.0.0/12 10.0.0.0/8'
43 adt_fw_allowglobalports='80'
45 adt_guest_macaddr=00:16:3e:7c:aa:7f
46 adt_net_vifscript=/etc/xen/scripts/vif-route-adt
47 adt_normaluser=adtxenu
49 #---------- arguments and config file ----------
52 while [ $# -gt 0 ]; do
61 *-*) var="$(printf "%s" "$var" | tr -- - _)" ;;
67 *) fail "unknown configuration variable \`$var'" ;;
70 eval "$var=\"\$value\""
74 -*) fail "unknown option \`$arg'" ;;
82 : "${adt_config:=/etc/autopkgtest/xenlvm_${adt_nominum}_config}"
83 test ! -e "${adt_config}" || . "${adt_config}"
86 #---------- calculated defaults for complex settings ----------
90 printf "searching for default volume group ... "
91 vgdisplay_out=`vgdisplay -c 10>&-`
92 case "$vgdisplay_out" in
93 "") fail 'no volume groups found';;
95 "*) fail 'several volume groups, config must specify which';;
97 adt_lvm_vg=${vgdisplay_out%%:*}
99 *[^\ ]\ *) fail "volume group name \`$adt_lvm_vg' has spaces!";;
101 adt_lvm_vg=${adt_lvm_vg##* }
102 echo "using system's only volume group: $adt_lvm_vg"
106 case "$adt_kernel" in
108 printf "searching for kernel ... "
109 for f in /boot/xen*"`uname -r`"; do
110 test -e "$f" || continue
111 test "x$adt_kernel" = x || \
112 fail 'several kernels, config must specify which'
115 echo "using currently booted kernel: $adt_kernel"
119 case "$adt_ramdisk" in
120 none) echo "ramdisk \`none' specified, using static kernel"
122 '') adt_ramdisk="$adt_kernel.initrd.img"
123 echo "using default ramdisk <kernel>.initrd.img: $adt_ramdisk" ;;
127 case "$adt_modules" in
128 '') adt_modules="/lib/modules/`uname -r`" ;;
132 case "$adt_distro" in
134 printf "considering which distro to use ... "
135 test -e /etc/lsb-release || \
136 fail 'no /etc/lsb-version, config must specify adt_distro'
138 adt_distro=$DISTRIB_CODENAME
139 echo "using same distro as host: $adt_distro"
143 hostname_from_ipaddr () {
145 if [ x"$adt_'$1'_hostname" = x ] && \
146 [ x"$adt_'$1'_ipaddr" != x ]; then
147 printf "%s" "finding '$1' hostname from IP address $adt_'$1'_ipaddr: "
148 adt_'$1'_hostname=`adnshost -t ptr +Do +Dt +Dc -i $adt_'$1'_ipaddr`
149 printf "%s\n" "${adt_'$1'_hostname}"
154 hostname_from_ipaddr guest
155 hostname_from_ipaddr host
157 if [ x"$adt_host_hostname" = x ]; then
158 printf "finding host hostname, supposely our own FQDN: "
159 adt_host_hostname=`hostname -f`
160 printf "%s\n" "$adt_host_hostname"
163 if [ x"$adt_guest_hostname" = x ]; then
164 case "$adt_guests_domain" in
165 '') printf "guessing guest hostname from host hostname: "
166 adt_guest_hostname=$adt_distro.$adt_nominum.${adt_host_hostname#*.} ;;
167 .*) printf "setting guest hostname using distro and nominum: "
168 adt_guest_hostname=$adt_distro.$adt_nominum$adt_guests_domain ;;
169 *) printf "setting guest hostname using distro and domain: "
170 adt_guest_hostname=$adt_distro.$adt_guests_domain ;;
172 printf "%s\n" "$adt_guest_hostname"
175 ipaddr_from_hostname () {
177 if [ x"$adt_'$1'_ipaddr" = x ] && \
178 [ x"$adt_'$1'_hostname" != x ]; then
179 printf "%s" "finding '$1' IP address from hostname $adt_'$1'_hostname: "
180 adt_'$1'_ipaddr=`adnshost -t a +Do +Dt +Dc - "$adt_'$1'_hostname"`
181 echo "${adt_'$1'_ipaddr}"
186 ipaddr_from_hostname guest
187 ipaddr_from_hostname host
191 printf "looking for '$2' hook ... "
192 case "$adt_'$1'_hook" in
194 case "$adt_config" in
196 adt_'$1'_hook=${adt_config%_config}_'$3'
197 if test -e "$adt_'$1'_hook"; then
198 echo "default exists: $adt_'$1'_hook"
200 echo "default $adt_'$1'_hook is not a file, so: none"
205 echo "not specified, not computable from config, so: none"
211 if test -e "$adt_'$1'_hook"; then
212 echo "exists: $adt_'$1'_hook"
214 echo "specified as $adt_'$1'_hook, but not a file, so: none"
222 search_hook fw firewall fwhook
223 search_hook setup setup setuphook
227 case "${adt_'$1'}" in
228 y*|Y*|1*|t*) adt_'$1'=true ;;
229 n*|N*|0*|f*) adt_'$1'=false ;;
231 *) fail "unknown boolean value \`$1'\'' for adt_'$1'" ;;
237 : ${adt_ssh_privkey:=/root/.ssh/id_${adt_ssh_keytype}_${adt_nominum}}
238 : ${adt_ssh_pubkey:=${adt_ssh_privkey}.pub}
239 : ${adt_ssh_keyident_args:=-i ${adt_ssh_privkey}}
240 : ${adt_ssh_keygen_args:=-t ${adt_ssh_keytype}}
243 : ${adt_xmname:=${adt_nominum}_${adt_distro}}
245 # In-host-file-system playground
246 : ${adt_play:=${adt_playbase}/${adt_nominum}_${adt_distro}}
247 : ${adt_xmconfig:=${adt_play}/xmconfig}
248 : ${adt_lock:=${adt_play}/lock}
251 boolean_config lvm_erasebase true
252 : ${adt_lvm_baselv:=${adt_nominum}_${adt_distro}_base}
253 : ${adt_lvm_cowdatalv:=${adt_nominum}_${adt_distro}_cowdata}
254 : ${adt_devmapper_cowdev:=${adt_nominum}_${adt_distro}_snap}
256 : ${adt_fslink_dir:=adt-xenlvm}
257 : ${adt_fslink_name:=${adt_nominum}_${adt_distro}_fs}
260 : ${adt_fw_testbedclients:=${adt_host_ipaddr}}
262 lvm_baselv_namerhs=${adt_lvm_vg}/${adt_lvm_baselv}
263 lvm_baselv_namepath=/dev/${lvm_baselv_namerhs}
265 lvm_cowdata_namerhs=${adt_lvm_vg}/${adt_lvm_cowdatalv}
266 lvm_cowdata_namepath=/dev/${lvm_cowdata_namerhs}
268 lvm_snapdev=/dev/mapper/${adt_devmapper_cowdev}
270 lvm_fslink_ptrrhs=${adt_fslink_dir}/${adt_fslink_name}
271 lvm_fslink_dirpath=/dev/${adt_fslink_dir}
272 lvm_fslink_ptr=/dev/${adt_fslink_dir}/${adt_fslink_name}
274 echo "adtxenlvm: configuration for read for nominum=${adt_nominum}"