xref: /unit/pkg/docker/docker-entrypoint.sh (revision 2021:7255f494cf48)
1#!/usr/bin/env bash
2
3set -e
4
5curl_put()
6{
7    RET=`/usr/bin/curl -s -w '%{http_code}' -X PUT --data-binary @$1 --unix-socket /var/run/control.unit.sock http://localhost/$2`
8    RET_BODY=${RET::-3}
9    RET_STATUS=$(echo $RET | /usr/bin/tail -c 4)
10    if [ "$RET_STATUS" -ne "200" ]; then
11        echo "$0: Error: HTTP response status code is '$RET_STATUS'"
12        echo "$RET_BODY"
13        return 1
14    else
15        echo "$0: OK: HTTP response status code is '$RET_STATUS'"
16        echo "$RET_BODY"
17    fi
18    return 0
19}
20
21if [ "$1" = "unitd" -o "$1" = "unitd-debug" ]; then
22    if /usr/bin/find "/var/lib/unit/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
23        echo "$0: /var/lib/unit/ is not empty, skipping initial configuration..."
24    else
25        if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -print -quit 2>/dev/null | /bin/grep -q .; then
26            echo "$0: /docker-entrypoint.d/ is not empty, launching Unit daemon to perform initial configuration..."
27            /usr/sbin/$1 --control unix:/var/run/control.unit.sock
28
29            while [ ! -S /var/run/control.unit.sock ]; do echo "$0: Waiting for control socket to be created..."; /bin/sleep 0.1; done
30            # even when the control socket exists, it does not mean unit has finished initialisation
31            # this curl call will get a reply once unit is fully launched
32            /usr/bin/curl -s -X GET --unix-socket /var/run/control.unit.sock http://localhost/
33
34            echo "$0: Looking for certificate bundles in /docker-entrypoint.d/..."
35            for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.pem"); do
36                echo "$0: Uploading certificates bundle: $f"
37                curl_put $f "certificates/$(basename $f .pem)"
38            done
39
40            echo "$0: Looking for configuration snippets in /docker-entrypoint.d/..."
41            for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.json"); do
42                echo "$0: Applying configuration $f";
43                curl_put $f "config"
44            done
45
46            echo "$0: Looking for shell scripts in /docker-entrypoint.d/..."
47            for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -name "*.sh"); do
48                echo "$0: Launching $f";
49                "$f"
50            done
51
52            # warn on filetypes we don't know what to do with
53            for f in $(/usr/bin/find /docker-entrypoint.d/ -type f -not -name "*.sh" -not -name "*.json" -not -name "*.pem"); do
54                echo "$0: Ignoring $f";
55            done
56
57            echo "$0: Stopping Unit daemon after initial configuration..."
58            kill -TERM `/bin/cat /var/run/unit.pid`
59
60            while [ -S /var/run/control.unit.sock ]; do echo "$0: Waiting for control socket to be removed..."; /bin/sleep 0.1; done
61
62            echo
63            echo "$0: Unit initial configuration complete; ready for start up..."
64            echo
65        else
66            echo "$0: /docker-entrypoint.d/ is empty, skipping initial configuration..."
67        fi
68    fi
69fi
70
71exec "$@"
72