Make ISO acceptance probes fail on forbidden state
This commit is contained in:
+31
-7
@@ -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)<len(expected):\n remaining=deadline-time.monotonic()\n if remaining<=0: raise TimeoutError('TCP marker deadline exceeded')\n s.settimeout(remaining)\n part=s.recv(len(expected)-len(received))\n if not part: raise RuntimeError('Truncated TCP marker')\n received+=part\nassert received==expected; s.close(); print('PASS: routed new LAN-to-VM TCP connection on arbitrary port 43117')"
|
||||
print(run('ip', 'netns', 'exec', lan, 'python3', '-c', client_code), end='')
|
||||
assert server.wait(timeout=10) == 0
|
||||
finally:
|
||||
|
||||
Reference in New Issue
Block a user