summaryrefslogtreecommitdiff
path: root/share/customize-autologin.sh
blob: c0b4d287f15532660473f62d8bbc610485f6781f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/sh
# Copyright 2022-2023 Helmut Grohne <helmut@subdivi.de>
# SPDX-License-Identifier: MIT
#
# This is a mmdebstrap customize hook that configures automatic root login on a
# serial console. It also parses the TERM kernel cmdline and passes it as
# TERM to agetty.

set -eu

TARGET=$1

if test "$(dpkg-query --root "$TARGET" -f '${db:Status-Status}' -W systemd-sysv 2>/dev/null)" = installed; then
	UNIT=serial-getty@.service

	mkdir "$TARGET/etc/systemd/system/$UNIT.d"

	(
		echo '[Service]'
		printf '%s\n' 'ExecStartPre=/bin/sed -n -e "s/^\\(.* \\)\\?\\(TERM=[^ ]*\\).*/\\2/w/run/debvmterm" /proc/cmdline'
		echo 'EnvironmentFile=-/run/debvmterm'
		echo 'ExecStart='
		sed -n 's,^ExecStart=-/sbin/agetty ,&-a root ,p' "$TARGET/lib/systemd/system/$UNIT"
	) > "$TARGET/etc/systemd/system/$UNIT.d/autologin.conf"

	exit 0
fi

if test "$(dpkg-query --root "$TARGET" -f '${db:Status-Status}' -W sysvinit-core 2>/dev/null)" = installed; then
	# shellcheck disable=SC2016  # intentional non-expansion
	echo 'C0:2345:respawn:/sbin/getty -8 --noclear --keep-baud -a root console 115200,38400,9600 $TERM' >> "$TARGET/etc/inittab"
	# delete tty1, which could be /dev/console
	sed -i -e '/^1:/d' "$TARGET/etc/inittab"

	exit 0
fi

echo "failed: init system not recognized by autologin customization" 1>&2
exit 1