main
1#!/sbin/openrc-run
2description="Decrypt age-encrypted secrets at boot"
3
4depend() {
5 after localmount
6 before named mosquitto
7}
8
9start() {
10 if [ ! -d /etc/secrets ] || [ -z "$(ls /etc/secrets/*.age 2>/dev/null)" ]; then
11 einfo "No secrets to decrypt"
12 return 0
13 fi
14
15 ebegin "Decrypting secrets"
16 mkdir -p /run/secrets
17 chmod 711 /run/secrets
18
19 local key="/persist/ssh/ssh_host_ed25519_key"
20 if [ ! -f "$key" ]; then
21 ewarn "Host key not found at $key (no persist partition?)"
22 ewarn "Secrets will not be decrypted"
23 eend 0
24 return 0
25 fi
26
27 local failed=0
28 for secret in /etc/secrets/*.age; do
29 [ -f "$secret" ] || continue
30 local name
31 name=$(basename "$secret" .age)
32 if age -d -i "$key" "$secret" > "/run/secrets/$name" 2>/dev/null; then
33 if [ -f "/etc/secrets/${name}.meta" ]; then
34 . "/etc/secrets/${name}.meta"
35 chown "${OWNER:-root}:${GROUP:-root}" "/run/secrets/$name"
36 chmod "${MODE:-400}" "/run/secrets/$name"
37 else
38 chmod 400 "/run/secrets/$name"
39 fi
40 else
41 ewarn "Failed to decrypt: $name"
42 failed=1
43 fi
44 done
45 eend $failed
46}