aboutsummarylogtreecommitdiffstats
path: root/sd-tailscale
blob: c17922712d7b2f3c9af764e42be9acf9029ba66a (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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env bash

build() {
	if ! pacman -Qi tailscale >/dev/null 2>&1; then
		error "Package tailscale not installed"
		return 1
	fi

	local setupdir="/etc/initcpio/tailscale"
	for fn in tailscaled.state default.env; do
		if ! [[ -r "${setupdir}/${fn}" && -s "${setupdir}/${fn}" ]]; then
			error "Missing configuration file at ${setupdir}/${fn}. Have you run setup-initcpio-tailscale yet?"
			return 1
		fi
	done
	add_file ${setupdir}/default.env /etc/default/tailscaled
	add_file ${setupdir}/tailscaled.state /var/lib/tailscale/tailscaled.state

	# tailscale requirements
	add_module tun
	add_full_dir /usr/lib/xtables
	add_all_modules netfilter
	map add_binary iptables ip6tables tailscale tailscaled

	# systemd service unit
	add_systemd_unit tailscaled.service
	add_systemd_drop_in tailscaled.service override <<-EOU
	[Unit]
	DefaultDependencies=no
	After=network-online.target
	Wants=network-online.target
	EOU
	add_symlink /etc/systemd/system/sysinit.target.wants/tailscaled.service \
							/usr/lib/systemd/system/tailscaled.service
}

help() {
	cat <<-__EOF_HELP__
	This hook enables tailscale service within systemd initramfs.

	It copies all required files and binaries to initramfs and enables
	tailscaled.service. Configuration is copied into the initramfs from:
	
		* /etc/initcpio/tailscale/tailscaled.state to /var/lib/tailscale/tailscaled.state
		* /etc/initcpio/tailscale/default.env to /etc/default/tailscaled

	Run setup-initcpio-tailscale to initialize /etc/initcpio/tailscale/ configuration files.
	
	It is not required but highly recommended to configure the network and add a ssh server
	using the hooks provided by mkinitcpio-systemd-extras package.
	__EOF_HELP__
}

# vim: noexpandtab