summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Cady <d@jerkface.net>2016-05-01 03:30:20 -0400
committerAndrew Cady <d@jerkface.net>2016-05-01 03:30:20 -0400
commit38e2aaaa634eb731c9221bee522958334b4fc7e9 (patch)
tree5ae29976ec1b82947dc29bea46e7ec24a7fa412f /src
parent06dc6f6c4b662f798d4f4221fd110b33e768d3ce (diff)
Download gnupghome.tar when net-booting
This contains a keyring that is generated on the server for each client that netboots.
Diffstat (limited to 'src')
-rw-r--r--src/dnsmasq-dhcp-script.sh64
-rwxr-xr-xsrc/keygen.sh8
2 files changed, 71 insertions, 1 deletions
diff --git a/src/dnsmasq-dhcp-script.sh b/src/dnsmasq-dhcp-script.sh
new file mode 100644
index 0000000..167d229
--- /dev/null
+++ b/src/dnsmasq-dhcp-script.sh
@@ -0,0 +1,64 @@
1#!/bin/sh
2. samizdat-paths.sh
3TFTP_ROOT=${samizdat_isolinux_dir}
4[ "$1 $4" = "tftp ${TFTP_ROOT}/linux/vmlinuz" ] || exit
5# $2 is the length of the file
6CLIENT_IP=$3
7
8# dnsmasq clears the environment. kiki needs at least $HOME
9export USER=root
10export MAIL=/var/mail/root
11export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
12export LANG=en_US.UTF-8
13export HOME=/root
14export LANGUAGE=en_US:en
15export LOGNAME=root
16
17debug()
18{
19 LOGDIR=/var/log/dnsmasq-dhcp-script
20 mkdir -p "$LOGDIR"
21 exec > "$LOGDIR/$$.log" 2>&1
22 set -x
23}
24
25new_child()
26{
27 child_dir=$samizdat_child_dir/child.$$
28 if [ -d "$child_dir" ]; then
29 rmdir "$child_dir" || exit 1
30 fi
31
32 sh -x "$(which keygen.sh)" "$child_dir" || return
33 tar --exclude '*~' -zcf "$child_dir"/gnupghome.tar -C "$child_dir"/root/.gnupg . || return
34
35 tftp_dir="${TFTP_ROOT}"/"$CLIENT_IP"
36 if [ ! -d "$tftp_dir" ]; then
37 ATOMIC=y
38 dest_dir="$tftp_dir"~
39
40 # DNSMASQ DOCUMENTATION IS WRONG OMFG
41 # Otherwise this symlink farm would be unnecessary
42
43 mkdir -p "$dest_dir"
44 (cd "$dest_dir" && ln -sf ../* . && rm "$CLIENT_IP"~) || return
45 else
46 dest_dir="$tftp_dir"
47 fi
48
49 chown dnsmasq "$child_dir" "$child_dir"/gnupghome.tar
50 ln -sf "$child_dir"/gnupghome.tar "$dest_dir"/
51
52 if [ "$ATOMIC" ]; then
53 mv -T "$dest_dir" "$tftp_dir"
54 fi
55}
56
57cleanup_after_fail()
58{
59 umount "$child_dir"
60 rmdir "$child_dir"
61}
62
63debug
64(new_child || cleanup_after_fail) &
diff --git a/src/keygen.sh b/src/keygen.sh
index 4c13e67..5b48512 100755
--- a/src/keygen.sh
+++ b/src/keygen.sh
@@ -60,13 +60,19 @@ doublecheck()
60 60
61silent() 61silent()
62{ 62{
63 case "$-" in
64 *x*) return ;;
65 esac
66 SILENT=y
63 exec 3>&1 4>&2 67 exec 3>&1 4>&2
64 exec >/dev/null 2>&1 68 exec >/dev/null 2>&1
65} 69}
66 70
67noisy() 71noisy()
68{ 72{
69 exec >&3 2>&1 73 if [ "$SILENT" ]; then
74 exec >&3 2>&1
75 fi
70} 76}
71 77
72new_child() 78new_child()