1
+ #! /bin/bash
2
+
3
+ echo " Move binaries (@ ${SECONDS} seconds)"
4
+ mv " ${target} /libexec/docker/bin/dockerd" " ${target} /bin"
5
+ mv " ${target} /libexec/docker/bin/docker" " ${target} /bin"
6
+ mv " ${target} /libexec/docker/bin/docker-proxy" " ${target} /bin"
7
+
8
+ echo " Move rootless scripts (@ ${SECONDS} seconds)"
9
+ mv " ${target} /libexec/docker/bin/dockerd-rootless.sh" " ${target} /bin"
10
+ mv " ${target} /libexec/docker/bin/dockerd-rootless-setuptool.sh" " ${target} /bin"
11
+ echo " Binaries installed after ${SECONDS} seconds."
12
+
13
+ echo " Patch paths in systemd unit files (@ ${SECONDS} seconds)"
14
+ sed -i " /^\[Service\]/a Environment=PATH=${relative_target} /libexec/docker/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin" " ${prefix} /etc/systemd/system/docker.service"
15
+ sed -i -E " s|/usr/bin/dockerd|${relative_target} /bin/dockerd|" " ${prefix} /etc/systemd/system/docker.service"
16
+
17
+ echo " Patch paths in init scripts (@ ${SECONDS} seconds)"
18
+ sed -i -E " s|^(export PATH=)|\1${relative_target} /libexec/docker/bin:|" " ${docker_setup_contrib} /${tool} /sysvinit/debian/docker"
19
+ sed -i -E " s|^DOCKERD=/usr/bin/dockerd|DOCKERD=${relative_target} /bin/dockerd|" " ${docker_setup_contrib} /${tool} /sysvinit/debian/docker"
20
+ chmod +x " ${docker_setup_contrib} /${tool} /sysvinit/debian/docker"
21
+ sed -i -E " s|(^prog=)|export PATH=" ${relative_target} /libexec/docker/bin:${relative_target} /sbin:${relative_target} /bin:\$ {PATH}" \n\n\1|" " ${docker_setup_contrib} /${tool} /sysvinit/redhat/docker"
22
+ sed -i -E " s|/usr/bin/dockerd|${relative_target} /bin/dockerd|" " ${docker_setup_contrib} /${tool} /sysvinit/redhat/docker"
23
+ chmod +x " ${docker_setup_contrib} /${tool} /sysvinit/redhat/docker"
24
+ sed -i -E " s|^(command=)|export PATH=" ${relative_target} /libexec/docker/bin:\$ {PATH}" \n\n\1|" " ${docker_setup_contrib} /${tool} /openrc/docker.initd"
25
+ sed -i " s|/usr/bin/dockerd|${relative_target} /bin/dockerd|" " ${docker_setup_contrib} /${tool} /openrc/docker.initd"
26
+ sed -i " s|/usr/bin/dockerd|${relative_target} /bin/dockerd|" " ${docker_setup_contrib} /${tool} /openrc/docker.confd"
27
+ chmod +x " ${docker_setup_contrib} /${tool} /openrc/docker.initd"
28
+
29
+ if test -f " ${prefix} /etc/group" ; then
30
+ echo " Create group (@ ${SECONDS} seconds)"
31
+ groupadd --prefix " ${prefix} " --system --force docker
32
+ fi
33
+
34
+ echo " Configure daemon (@ ${SECONDS} seconds)"
35
+ mkdir -p " ${prefix} /etc/docker"
36
+ if ! test -f " ${prefix} /etc/docker/daemon.json" ; then
37
+ echo " Initialize dockerd configuration"
38
+ echo " {}" > " ${prefix} /etc/docker/daemon.json"
39
+ fi
40
+
41
+ if test -f " ${prefix} /etc/fstab" ; then
42
+ root_fs=" $( cat " ${prefix} /etc/fstab" | tr -s ' ' | grep " / " | cut -d' ' -f3) "
43
+ if test -z " ${root_fs} " ; then
44
+ root_fs=" $( mount | grep " on / " | cut -d' ' -f5) "
45
+ fi
46
+ echo " Found ${root_fs} on /"
47
+
48
+ if test " ${root_fs} " == " overlay" ; then
49
+
50
+ if has_tool " fuse-overlayfs" || tool_will_be_installed " fuse-overlayfs" ; then
51
+ info " Waiting for fuse-overlayfs to be installed"
52
+ wait_for_tool " fuse-overlayfs"
53
+
54
+ echo " Configuring storage driver for DinD"
55
+ # shellcheck disable=SC2094
56
+ cat <<< " $(jq '. * {" storage-driver" : " fuse-overlayfs" }' " ${prefix} /etc/docker/daemon.json" )" > " ${prefix} /etc/docker/daemon.json"
57
+
58
+ else
59
+ warning " fuse-overlayfs should be planned for installation."
60
+ fi
61
+ touch " ${docker_setup_cache} /docker_restart"
62
+ fi
63
+ fi
64
+
65
+ if ! test " $( jq ' ."exec-opts" // [] | any(. | startswith("native.cgroupdriver="))' " ${prefix} /etc/docker/daemon.json" ) " == " true" ; then
66
+ echo " Configuring native cgroup driver"
67
+ # shellcheck disable=SC2094
68
+ cat <<< " $(jq '." exec-opts" += [" native.cgroupdriver=cgroupfs" ]' " ${prefix} /etc/docker/daemon.json" )" > " ${prefix} /etc/docker/daemon.json"
69
+ touch " ${docker_setup_cache} /docker_restart"
70
+ fi
71
+ if ! test " $( jq ' . | keys | any(. == "default-runtime")' " ${prefix} /etc/docker/daemon.json" ) " == true ; then
72
+ echo " Set default runtime"
73
+ # shellcheck disable=SC2094
74
+ cat <<< " $(jq '. * {" default-runtime" : " runc" }' " ${prefix} /etc/docker/daemon.json" )" > " ${prefix} /etc/docker/daemon.json"
75
+ touch " ${docker_setup_cache} /docker_restart"
76
+ fi
77
+ # shellcheck disable=SC2016
78
+ if test -n " ${docker_address_base} " && test -n " ${docker_address_size} " && ! test " $( jq --arg base " ${docker_address_base} " --arg size " ${docker_address_size} " ' ."default-address-pool" | any(.base == $base and .size == $size)' " ${prefix} /etc/docker/daemon.json" ) " == " true" ; then
79
+ echo " Add address pool with base ${docker_address_base} and size ${docker_address_size} "
80
+ # shellcheck disable=SC2094
81
+ cat <<< " $(jq --args base " ${docker_address_base} " --arg size " ${docker_address_size} " '." default-address-pool" += {" base" : $base , " size" : $size }' " ${prefix} /etc/docker/daemon.json" )" > " ${prefix} /etc/docker/daemon.json"
82
+ touch " ${docker_setup_cache} /docker_restart"
83
+ fi
84
+ # shellcheck disable=SC2016
85
+ if test -n " ${docker_hub_mirror} " && ! test " $( jq --arg mirror " ${docker_hub_mirror} " ' ."registry-mirrors" // [] | any(. == $mirror)' " ${prefix} /etc/docker/daemon.json" ) " == " true" ; then
86
+ echo " Add registry mirror ${docker_hub_mirror} "
87
+ # shellcheck disable=SC2094
88
+ # shellcheck disable=SC2016
89
+ cat <<< " $(jq --args mirror " ${docker_hub_mirror} " '." registry-mirrors" += [" \( $mirror )" ]' " ${prefix} /etc/docker/daemon.json" )" > " ${prefix} /etc/docker/daemon.json"
90
+ touch " ${docker_setup_cache} /docker_restart"
91
+ fi
92
+ if ! test " $( jq --raw-output ' .features.buildkit // false' " ${prefix} /etc/docker/daemon.json" ) " == true ; then
93
+ echo " Enable BuildKit"
94
+ # shellcheck disable=SC2094
95
+ cat <<< " $(jq '. * {" features" :{" buildkit" :true}}' " ${prefix} /etc/docker/daemon.json" )" > " ${prefix} /etc/docker/daemon.json"
96
+ touch " ${docker_setup_cache} /docker_restart"
97
+ fi
98
+ echo " Check if daemon.json is valid JSON (@ ${SECONDS} seconds)"
99
+ if ! jq --exit-status ' .' " ${prefix} /etc/docker/daemon.json" > /dev/null 2>&1 ; then
100
+ error " ${prefix} /etc/docker/daemon.json is not valid JSON."
101
+ exit 1
102
+ fi
103
+
104
+ if docker_is_running; then
105
+ touch " ${docker_setup_cache} /docker_already_present"
106
+ echo " Found that Docker is already present after ${SECONDS} seconds."
107
+ warning " Docker is already running. Skipping init script and daemon configuration."
108
+
109
+ else
110
+ if is_debian || is_clearlinux; then
111
+ echo " Install init script for debian"
112
+ mkdir -p " ${prefix} /etc/default" " ${prefix} /etc/init.d"
113
+ cp " ${docker_setup_contrib} /${tool} /sysvinit/debian/docker.default" " ${prefix} /etc/default/docker"
114
+ cp " ${docker_setup_contrib} /${tool} /sysvinit/debian/docker" " ${prefix} /etc/init.d/docker"
115
+
116
+ elif is_redhat; then
117
+ echo " Install init script for redhat"
118
+ mkdir -p " ${prefix} /etc/sysconfig" " ${prefix} /etc/init.d"
119
+ cp " ${docker_setup_contrib} /${tool} /sysvinit/redhat/docker.sysconfig" " ${prefix} /etc/sysconfig/docker"
120
+ cp " ${docker_setup_contrib} /${tool} /sysvinit/redhat/docker" " ${prefix} /etc/init.d/docker"
121
+
122
+ elif is_alpine; then
123
+ echo " Install openrc script for alpine"
124
+ mkdir -p " ${prefix} /etc/conf.d" " ${prefix} /etc/init.d"
125
+ cp " ${docker_setup_contrib} /${tool} /openrc/docker.confd" " ${prefix} /etc/conf.d/docker"
126
+ cp " ${docker_setup_contrib} /${tool} /openrc/docker.initd" " ${prefix} /etc/init.d/docker"
127
+ openrc
128
+ else
129
+ warning " Unable to install init script because the distributon is unknown."
130
+ fi
131
+
132
+ if test -z " ${prefix} " ; then
133
+ if has_systemd; then
134
+ echo " Reload systemd (@ ${SECONDS} seconds)"
135
+ systemctl daemon-reload
136
+ if ! systemctl is-active --quiet docker; then
137
+ echo " Start dockerd (@ ${SECONDS} seconds)"
138
+ systemctl enable docker
139
+ systemctl start docker
140
+ touch " ${docker_setup_cache} /docker_restart_allowed"
141
+ fi
142
+ else
143
+ if ! docker_is_running; then
144
+ echo " Start dockerd (@ ${SECONDS} seconds)"
145
+ " ${prefix} /etc/init.d/docker" start
146
+ touch " ${docker_setup_cache} /docker_restart_allowed"
147
+ fi
148
+ warning " Init script was installed but you must enable Docker yourself."
149
+ fi
150
+ fi
151
+ echo " Wait for Docker daemon to start (@ ${SECONDS} seconds)"
152
+
153
+ wait_for_docker
154
+ if ! docker_is_running; then
155
+ error " Failed to start Docker."
156
+ exit 1
157
+ fi
158
+ echo " Finished starting Docker after ${SECONDS} seconds."
159
+ fi
160
+ echo " Finished after ${SECONDS} seconds."
0 commit comments