#!/usr/bin/expect -f # create a Debian/Ubuntu development VM based on a standard autopkgtest VM set timeout -1 set prompt "(%|#|\\$) $" set sshkey [read [open "~/.ssh/id_rsa.pub"]] set timeout 60 # Start the guest VM set img [lrange $argv 0 0] if { $img == "" } { set img "/srv/vm/autopkgtest-sid.img" } spawn vm $img -nographic -snapshot -cpu host -smp 3 \ -virtfs local,id=srv,path=/srv,security_model=none,mount_tag=srv,readonly \ -virtfs local,id=etcschroot,path=/etc/schroot,security_model=none,mount_tag=etcschroot,readonly # Login, and get root shell expect { # autopkgtest Debian machine only has a root login "Debian GNU" { set user "root"; set sudo ""; set getroot "" } "Ubuntu" { set user "ubuntu"; set password "ubuntu"; set getroot "sudo -n -i" } } expect "login: " send "$user\r" expect { "Password" { send "$password\r"; exp_continue } -re $prompt } send "export TERM=xterm; $getroot\r" expect -re $prompt # install wanted packages; openssh postinst does funny things to the terminal, so only give it pipes send "DEBIAN_FRONTEND=noninteractive apt-get install -o Dpkg::Options::=--force-confnew -y git-buildpackage libwww-perl less vim lintian debhelper manpages-dev git dput pristine-tar bash-completion libnss-myhostname lptools python-keyrings.alt wget gnupg2 ubuntu-dev-tools python3-debian qemu-kvm qemu-utils schroot sbuild locales openssh-server &1 | cat\r" expect -re $prompt # set up user send "deluser --remove-home test; adduser --disabled-password --gecos 'Martin Pitt' martin; echo 'martin:a' | chpasswd; adduser martin sbuild\r" expect -re $prompt send "echo 'martin ALL=(ALL) NOPASSWD:ALL' > /etc/sudoers.d/martin; update-locale LANG=C.UTF-8; touch /var/lib/sudo/lectured/martin\r" expect -re $prompt send "mkdir /home/martin/.ssh; echo '$sshkey' > /home/martin/.ssh/authorized_keys; chown -R martin:martin /home/martin/.ssh\r" expect -re $prompt # mount home, /srv, and schroot config from host; TODO: move to NFS? send "mkdir /home/martin/h; printf 'home /home/martin/h 9p trans=virtio,access=any,nofail,ro 0 0\nsrv /srv 9p trans=virtio,access=any,nofail,ro 0 0\netcschroot /etc/schroot 9p trans=virtio,access=any,nofail,ro 0 0\n' >> /etc/fstab; mount /home/martin/h; mount /srv; mount /etc/schroot\r" expect -re $prompt send "(cd /home/martin; ln -s h/.gbp.conf; ln -s h/.vimrc)\r" expect -re $prompt # ## set up lxd if available (on Ubuntu) send "(apt-get install -y lxd &1 | cat\r" expect -re $prompt interact