diff --git a/dev/iso-smoke.py b/dev/iso-smoke.py index dd03f8e..32c99f4 100644 --- a/dev/iso-smoke.py +++ b/dev/iso-smoke.py @@ -260,19 +260,43 @@ findmnt -n -o FSTYPE / | grep -qx overlay test -f /run/initramfs/live/LiveOS/squashfs.img sudo -n true for tool in hydra hydra-install qemu-system-x86_64 qemu-img virt-viewer foot labwc; do command -v "$tool"; done -systemctl is-active NetworkManager hydra-network hydra-dnsmasq +for service in NetworkManager hydra-network hydra-dnsmasq; do systemctl is-active "$service"; done ''' INSTALLED_CHECK = r'''set -eu +assert_no_match() { + if grep "$@"; then + printf 'Forbidden live configuration remains\n' >&2 + exit 1 + else + status=$? + [ "$status" -eq 1 ] || exit "$status" + fi +} [ "$(findmnt -n -o FSTYPE /)" = ext4 ] [ "$(readlink -f "$(findmnt -n -o SOURCE /)")" = /dev/vda2 ] -! grep -Eq 'root=live:|rd\.live' /proc/cmdline -! findmnt -n -o FSTYPE / | grep -Eq 'overlay|squashfs' +assert_no_match -Eq 'root=live:|rd\.live' /proc/cmdline test ! -e /etc/hydra/live-mode -! getent passwd hydra-live -! find /etc/systemd/system /etc/sudoers.d -name 90-hydra-live.conf -o -name 90-hydra-live | grep . +test ! -L /etc/hydra/live-mode +if getent passwd hydra-live; then + printf 'Live account remains\n' >&2 + exit 1 +else + status=$? + [ "$status" -eq 2 ] || exit "$status" +fi +remaining=$(find /etc/systemd/system /etc/sudoers.d \( -name 90-hydra-live.conf -o -name 90-hydra-live \) -print) +[ -z "$remaining" ] test ! -e /etc/greetd/live.toml -! grep -R -E -- '--autologin|NOPASSWD' /etc/systemd/system/getty@*.service.d /etc/systemd/system/serial-getty@*.service.d /etc/sudoers.d 2>/dev/null +test ! -L /etc/greetd/live.toml +for directory in /etc/systemd/system/getty@*.service.d /etc/systemd/system/serial-getty@*.service.d /etc/sudoers.d; do + if [ -d "$directory" ]; then + assert_no_match -R -E -- '--autologin|NOPASSWD' "$directory" + elif [ -e "$directory" ] || [ -L "$directory" ]; then + printf 'Unexpected non-directory configuration path\n' >&2 + exit 1 + fi +done getent shadow root | cut -d: -f2 | grep -Eq '^[!*]' getent shadow hydratest | cut -d: -f2 | grep -Eq '^\$' for service in NetworkManager greetd hydra-network hydra-dnsmasq; do systemctl is-active "$service"; done @@ -329,7 +353,7 @@ try: port = 43117 server_code = "import socket; s=socket.socket(); s.settimeout(15); s.bind(('10.203.0.250',43117)); s.listen(1); c,a=s.accept(); c.sendall(b'HYDRA_LAN_TO_VM_OK'); c.close(); s.close()" server = subprocess.Popen(['ip', 'netns', 'exec', guest, 'python3', '-c', server_code], stdout=subprocess.DEVNULL, stderr=subprocess.PIPE) - client_code = "import socket,time; deadline=time.monotonic()+10\nwhile True:\n try:\n s=socket.create_connection(('10.203.0.250',43117),1); break\n except OSError:\n if time.monotonic()>deadline: raise\n time.sleep(.1)\nassert s.recv(100)==b'HYDRA_LAN_TO_VM_OK'; s.close(); print('PASS: routed new LAN-to-VM TCP connection on arbitrary port 43117')" + client_code = "import socket,time; deadline=time.monotonic()+10\nwhile True:\n try:\n s=socket.create_connection(('10.203.0.250',43117),1); break\n except OSError:\n if time.monotonic()>deadline: raise\n time.sleep(.1)\nexpected=b'HYDRA_LAN_TO_VM_OK'; received=b''\nwhile len(received)