diff --git a/hooks.zerotier.sh b/hooks.zerotier.sh new file mode 100644 index 0000000..9682fc0 --- /dev/null +++ b/hooks.zerotier.sh @@ -0,0 +1,33 @@ +#!/bin/sh + +# This hook copies host zerotier into initramfs + +set -e + +case "${1:-}" in + prereqs) echo ""; exit 0;; +esac + +ZT_APP=/usr/sbin/zerotier-one +ZT_CLI=/usr/sbin/zerotier-cli +ZT_ID=/usr/sbin/zerotier-idtool +ZTCFG=/var/lib/zerotier-one/ + +# if ZT not on machine, exit +if [ ! -f ${ZT_APP} ]; then + exit 0 +fi + +[ -r /usr/share/initramfs-tools/hook-functions ] || exit 0 +. /usr/share/initramfs-tools/hook-functions + + +copy_exec ${ZT_APP} ${ZT_APP} +copy_exec ${ZT_CLI} ${ZT_CLI} +copy_exec ${ZT_ID} ${ZT_ID} +copy_exec ${ZT_APP} ${ZT_APP} +mkdir -p ${DESTDIR}/var/lib +mkdir -p ${DESTDIR}/var/log +cp -rfpL ${ZTCFG} ${DESTDIR}/${ZTCFG} + +manual_add_modules tun diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..d6dc2ec --- /dev/null +++ b/install.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# copy script into initramfs-tools dirs +echo "Copying files" +cp hooks.zerotier.sh /usr/share/initramfs-tools/hooks/zerotier +cp scripts.init-bottom.zerotier.sh /usr/share/initramfs-tools/scripts/init-bottom/zerotier +cp scripts.init-premount.0zerotier.sh /usr/share/initramfs-tools/scripts/init-premount/0zerotier + +# update initramfs to now include our scripts +echo "Updating initramfs" +update-initramfs -u diff --git a/scripts.init-bottom.zerotier.sh b/scripts.init-bottom.zerotier.sh new file mode 100644 index 0000000..5dc81ed --- /dev/null +++ b/scripts.init-bottom.zerotier.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +PREREQ="" + +prereqs() { + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +. /scripts/functions +EXE="$(readlink -f /sbin/dropbear)" && [ -f "$EXE" ] || exit 1 + + +ZT_APP=/usr/sbin/zerotier-one + +# if ZT not on machine, exit +if [ ! -f ${ZT_APP} ]; then + exit 0 +fi + +log_msg_begin "Removing loopback device" +# shutdown lo +ifconfig lo down +log_end_msg + +log_msg_begin "Removing tun device" +# remove created tun device +rm /dev/net/tun +log_end_msg + +log_msg_begin "Stopping ZeroTier" +kill -TERM $(cat /run/zerotier-one.pid) +log_end_msg \ No newline at end of file diff --git a/scripts.init-premount.0zerotier.sh b/scripts.init-premount.0zerotier.sh new file mode 100644 index 0000000..828fd61 --- /dev/null +++ b/scripts.init-premount.0zerotier.sh @@ -0,0 +1,38 @@ +#!/bin/sh + +PREREQ="udev" + +prereqs() { + echo "$PREREQ" +} + +case "$1" in + prereqs) + prereqs + exit 0 + ;; +esac + +. /scripts/functions + +ZT_APP=/usr/sbin/zerotier-one + +# if ZT not on machine, exit +if [ ! -f ${ZT_APP} ]; then + exit 0 +fi + +# start zerotier if it exists +[ "$BOOT" != nfs ] || configure_networking + +# create tun device file +mkdir /dev/net +mknod /dev/net/tun c 10 200 + +# set up local loopback +/sbin/ifconfig lo 127.0.0.1 + +# run zerotier-one +${ZT_APP} &> /var/log/zerotier.log & + +echo $! >/run/zerotier-one.pid