# -*- mode: sh -*- # Find kernel flavour and release KVER= for flavour in $SUPPORTED_FLAVOURS; do KVER="$(dpkg-query -Wf '${Depends}' "linux-image-${flavour}" 2>/dev/null | tr ',' '\n' | sed -n 's/^ *linux-image-\([-a-z0-9+.]*\).*/\1/p')" if [ "$KVER" ]; then break fi done if [ -z "$KVER" ]; then echo >&2 "E: Test must set SUPPORTED_FLAVOURS and depend on those flavours" exit 2 fi case "$(dpkg --print-architecture)" in arm64) # The Ubuntu arm64 autopkgtest runs rarely into the 1200 seconds timeout. QEMU_TIMEOUT=1800 ;; armhf) # qemu-busybox on Ubuntu armhf runs into the 300 seconds timeout. QEMU_TIMEOUT=600 ;; ppc64el) # Slowest execution seen in Ubuntu ppc64el autopkgtest: 230 seconds QEMU_TIMEOUT=600 ;; *) QEMU_TIMEOUT=120 esac if [ -n "${AUTOPKGTEST_TMP-}" ]; then export TMPDIR="${AUTOPKGTEST_TMP}" fi BASEDIR="$(mktemp -d -t initramfs-test.XXXXXXXXXX)" # Skeleton configuration directory CONFDIR="${BASEDIR}/config" mkdir -p "${CONFDIR}" cp conf/initramfs.conf "${CONFDIR}/initramfs.conf" echo "RESUME=none" >>"${CONFDIR}/initramfs.conf" mkdir "${CONFDIR}/hooks" touch "${CONFDIR}/modules" mkdir "${CONFDIR}/scripts" # initramfs image file INITRAMFS="${BASEDIR}/initrd.img" # root disk image file ROOTDISK="${BASEDIR}/rootdisk.raw" # root disk interface type (for qemu) and device name (for Linux) test -n "${ROOTDISK_QEMU_IF}" || ROOTDISK_QEMU_IF=virtio test -n "${ROOTDISK_LINUX_NAME}" || ROOTDISK_LINUX_NAME=vda # Create a root fs with a trivial userspace ROOTDIR="${BASEDIR}/rootdir" INIT_MESSAGE='root fs init system started successfully' for subdir in "" dev proc run sys usr usr/bin usr/lib usr/lib64 usr/sbin; do mkdir "${ROOTDIR}/${subdir}" done for subdir in bin lib lib64 sbin; do ln -s "usr/$subdir" "${ROOTDIR}/${subdir}" done cat >"${ROOTDIR}/sbin/init" <"${root_dir}/usr/sbin/init" <&1 -b "${blocks}" -N "${inodes}" -U -d "${dir}" "${disk}" } build_rootfs_ext2() { build_fs_ext2 "${ROOTDIR}" "${ROOTDISK}" } _run_qemu() { local extra_params="$*" echo "I: Running qemu (with a timeout of $QEMU_TIMEOUT seconds)..." timeout --foreground "$QEMU_TIMEOUT" \ debian/tests/run-qemu /boot/vmlinu*-"${KVER}" "${INITRAMFS}" \ "root=/dev/${ROOTDISK_LINUX_NAME} ${extra_params}" -nographic \ -drive "file=${ROOTDISK},if=${ROOTDISK_QEMU_IF},media=disk,format=raw" \ ${USRDISK:+-drive "file=${USRDISK},if=${USRDISK_QEMU_IF},media=disk,format=raw"} \ -device "virtio-net-pci,netdev=lan0,mac=52:54:00:65:43:21" \ -netdev "user,id=lan0,net=10.0.3.0/24,ipv6-net=fec7::/48,hostname=pizza,dnssearch=test,domainname=example.com,bootfile=/path/to/bootfile2" \ -device "virtio-net-pci,netdev=lan1,mac=52:54:00:12:34:56" \ -netdev "user,id=lan1,hostname=goulash,dnssearch=example,dnssearch=example.net,domainname=test,bootfile=/path/to/bootfile" \ -chardev stdio,id=char0 -serial chardev:char0 | tee "${OUTPUT}" } run_qemu_nocheck() { # hide error messages from autopkgtest _run_qemu 2>&1 "$@" } run_qemu() { _run_qemu "panic=-1 $*" grep -qF "${INIT_MESSAGE}" "${OUTPUT}" } check_no_output() { local msg="$1" if grep -qF "${msg}" "${OUTPUT}"; then echo >&2 "E: Message '${msg}' found in log output '${OUTPUT}." exit 1 fi } check_output() { local msg="$1" if ! grep -qF "${msg}" "${OUTPUT}"; then echo >&2 "E: Message '${msg}' not found in log output '${OUTPUT}." exit 1 fi } check_no_network_configuration() { check_no_output "Waiting up to 180 secs for" }