--- /dev/null
+.cache
+.ccache
+.config
+.lesshst
+.local
+cert/
+etc/
+log/
+req/
+tmp/
+webroot/
--- /dev/null
+[submodule "letsencrypt"]
+ path = letsencrypt
+ url = https://github.com/letsencrypt/letsencrypt/
--- /dev/null
+#! /bin/sh
+set -e
+. "${0%/*}/../config.sh"
+. $home/lib/lib.sh
+
+run_as_user "$@"
+prepare_tmp le-user
+make_le_conf
+
+exec $home/letsencrypt/letsencrypt-auto -c "$tmp/le.conf" "$@"
--- /dev/null
+#! /bin/sh
+set -e
+. "${0%/*}/../config.sh"
+. "$home/lib/lib.sh"
+
+run_as_user "$@"
+
+## Pick out the certificate tag.
+case $# in 0) fail_usage ;; esac
+tag=$1; shift
+case $# in 0) ;; *) fail_usage ;; esac
+
+prepare_tmp $tag
+
+## Get started.
+cd $home/cert/$tag
+openssl req -in req -out $tmp/req.der -outform der
+sans=$(openssl req -in req -text -noout |
+ sed -n '
+ x
+ /^ *X509v3 Subject Alternative Name: $/ {
+ x
+ s/ *DNS://g
+ s/,/ /g
+ p
+ x
+ }')
+make_le_conf $sans
+
+cat "$tmp/le.conf"
--- /dev/null
+#! /bin/sh
+set -ex
+
+user=letsencrypt
+home=$(getent passwd $user | cut -d: -f6)
+cd $home
+
+while read d m u g; do
+ mkdir -p $d
+ chmod $m $d
+ chown $u:$g $d
+done <<EOF
+. 755 root root
+.cache 2775 root $user
+.config 2775 root $user
+.local 2775 root $user
+cert 2775 root $user
+etc 2770 root $user
+log 2775 root $user
+tmp 2770 root $user
+webroot 755 root root
+webroot/.well-known 755 root root
+webroot/.well-known/acme-challenge 2775 root $user
+EOF
--- /dev/null
+#! /bin/sh
+exec "$@"
--- /dev/null
+### -*-sh-*-
+user=letsencrypt
+home=$(getent passwd $user | cut -d: -f6)
--- /dev/null
+### -*-conf-*-
+
+email = mdw@distorted.org.uk
+text = true
+authenticator = webroot
+
+config-dir = /var/lib/letsencrypt/etc
+logs-dir = /var/lib/letsencrypt/log
--- /dev/null
+Subproject commit ce14851232c39aa1151ecd9c7b77ef910059d46c
--- /dev/null
+### -*-sh-*-
+
+prog=${0##*/}
+
+usage () { echo "usage: $prog $usage"; }
+fail () { echo >&2 "$prog: $*"; exit 1; }
+fail_usage () { usage >&2; exit 1; }
+
+run_as_user () {
+ case $(id -un) in
+ $user) ;;
+ *) exec sudo -u$user "$0" "$@" ;;
+ esac
+ HOME=$home; export HOME
+ PATH=$home/bin:/usr/local/bin:/bin:/usr/bin; export PATH
+}
+
+prepare_tmp () {
+ tag=$1
+
+ tmp=$home/tmp/$tag.$$
+ rm -rf $tmp
+ mkdir $tmp
+ trap 'cd $home; rm -rf $tmp' EXIT INT TERM
+}
+
+make_le_conf () {
+ { cat $home/le.conf.skel
+ echo "work-dir = $tmp"
+ echo
+ case $# in
+ 0) ;;
+ *)
+ map="webroot-map = {" sep=" "
+ for san in "$@"; do
+ map="$map$sep\"$san\": \"$home/webroot\"" sep=", "
+ done
+ map="$map }"
+ echo "$map"
+ ;;
+ esac
+ } >$tmp/le.conf
+}
\ No newline at end of file