@@ -3,122 +3,38 @@ set -eo pipefail
3
3
[[ $DOKKU_TRACE ]] && set -x
4
4
export DOCKER_BIN=${DOCKER_BIN:= " docker" }
5
5
source " $PLUGIN_CORE_AVAILABLE_PATH /common/functions"
6
-
7
- fn-clean-extended-app-images () {
8
- declare APP=" $1 " IMAGE=" $2 "
9
- local images
10
-
11
- # remove dangling extended app images
12
- " $DOCKER_BIN " rmi $( " $DOCKER_BIN " images --format ' dangling=true' --format " label=com.dokku.app-name=sha-$APP " --quiet) & > /dev/null || true
13
-
14
- images=" $( " $DOCKER_BIN " images --filter " label=com.dokku.app-name=sha-$APP " --quiet) "
15
- for image in $images ; do
16
- if [[ " $( " $DOCKER_BIN " inspect --format ' {{(index .RepoTags 0)}}' " $image " 2> /dev/null) " != " $IMAGE " ]]; then
17
- " $DOCKER_BIN " rmi " $image " & > /dev/null || true
18
- fi
19
- done
20
- }
6
+ source " $PLUGIN_AVAILABLE_PATH /apt/internal-functions"
21
7
22
8
hook-apt-pre-build-buildpack () {
23
9
declare APP=" $1 " SOURCECODE_WORK_DIR=" $2 "
24
10
local IMAGE=" dokku/$APP " DIR=/app
25
- local COMMAND CONTENT CONTENT_SHA INJECT_PACKAGES
11
+ local CID COMMAND DOCKER_COMMIT_LABEL_ARGS
26
12
27
13
if [[ -n " $SOURCECODE_WORK_DIR " ]]; then
28
14
pushd " $SOURCECODE_WORK_DIR " > /dev/null
29
15
fi
30
16
31
- local APT_FILES=(' apt-env' ' apt-preferences' ' apt-sources-list' ' apt-repositories' ' apt-debconf' ' apt-packages' ' dpkg-packages' )
32
- for file in " ${APT_FILES[@]} " ; do
33
- if [[ -f " $file " ]]; then
34
- INJECT_PACKAGES=true
35
- local file_contents=$( < $file )
36
- CONTENT=" ${CONTENT} \n${file} \n${file_contents} "
37
- if [[ " $file " == " dpkg-packages" ]]; then
38
- CONTENT=" ${CONTENT} $( date +%s) "
39
- fi
40
- fi
41
- done
17
+ if [[ ! -f " dpkg-packages" ]]; then
18
+ return
19
+ fi
42
20
43
21
if [[ -n " $SOURCECODE_WORK_DIR " ]]; then
44
22
popd > /dev/null
45
23
fi
46
24
47
- if [[ " $INJECT_PACKAGES " != " true" ]]; then
48
- return
49
- fi
50
-
51
- COMMAND=$(
52
- cat << EOF
53
- # $APP $IMAGE
54
- sleep 2
55
- export DEBIAN_FRONTEND=noninteractive
56
- if [ -f $DIR /apt-env ]; then
57
- echo "-----> Sourcing apt env"
58
- source $DIR /apt-env
59
- fi
60
- if [ -d $DIR /apt-preferences ]; then
61
- echo "-----> Injecting apt preferences"
62
- mv -v $DIR /apt-preferences /etc/apt/preferences.d/90customizations
63
- fi
64
- if [ -f $DIR /apt-sources-list ]; then
65
- echo "-----> Using customized sources.list"
66
- mv -v $DIR /apt-sources-list /etc/apt/sources.list
67
- fi
68
- if [ -f $DIR /apt-repositories ]; then
69
- echo "-----> Updating package list"
70
- apt-get update >/dev/null
71
- echo "-----> Installing required apt transport packages"
72
- apt-get install -y software-properties-common apt-transport-https
73
- echo "-----> Installing custom apt repositories"
74
- cat "$DIR /apt-repositories" | while read repository; do
75
- if [ -n "\$ repository" ]; then
76
- add-apt-repository -y "\$ repository"
77
- fi
78
- done
79
- fi
80
- if [ -f $DIR /apt-debconf ]; then
81
- cat "$DIR /apt-debconf" | while read conf; do
82
- if [ -n "\$ conf" ]; then
83
- echo \$ conf | debconf-set-selections
84
- fi
85
- done
86
- fi
87
- if [ -f $DIR /apt-packages ]; then
88
- PACKAGES=\$ (cat "$DIR /apt-packages" | tr "\\ n" " ")
89
- echo "-----> Updating package list"
90
- apt-get update >/dev/null
91
- echo "-----> Injecting packages: \$ PACKAGES"
92
- apt-get install -y \$ PACKAGES
93
- fi
94
- if [ -d $DIR /dpkg-packages ]; then
95
- for pkg in $DIR /dpkg-packages/*.deb; do
96
- echo "-----> Injecting package: \$ pkg"
97
- dpkg -i \$ pkg
98
- done
99
- fi
100
- sleep 1 # wait so that docker run has not exited before docker attach
101
- EOF
102
- )
25
+ dokku_log_info1 " Creating extended app image with custom system packages"
26
+ COMMAND=" $( fn-apt-command " $APP " " $IMAGE " " $DIR " ) "
27
+ CID=$( docker run -d " $IMAGE " /bin/bash -e -c " $COMMAND " )
103
28
104
- CONTENT_SHA=" $( echo -n " $CONTENT " | sha256sum | cut -d " " -f 1) "
105
- if [[ " $( " $DOCKER_BIN " images --quiet " dokku/$APP :$CONTENT_SHA " 2> /dev/null) " != " " ]]; then
106
- dokku_log_info1 " Compatible extended app image found, skipping system package installation"
107
- " $DOCKER_BIN " tag " dokku/$APP :$CONTENT_SHA " " $IMAGE "
108
- fn-clean-extended-app-images " $APP " " dokku/$APP :$CONTENT_SHA "
109
- return
29
+ " $DOCKER_BIN " attach " $CID "
30
+ if test " $( " $DOCKER_BIN " wait " $CID " ) " -ne 0; then
31
+ dokku_log_warn " Failure installing system packages"
32
+ return 1
110
33
fi
111
34
112
- dokku_log_info1 " Extending app image with custom system packages"
113
- CID=$( " $DOCKER_BIN " run -d " $IMAGE " /bin/bash -e -c " $COMMAND " )
114
- local DOCKER_COMMIT_LABEL_ARGS=(" --change" " LABEL org.label-schema.schema-version=1.0" " --change" " LABEL org.label-schema.vendor=dokku" " --change" " LABEL com.dokku.app-name=sha-$APP " " --change" " LABEL $DOKKU_CONTAINER_LABEL =" )
115
-
116
- " $DOCKER_BIN " attach " $CID "
117
- test " $( " $DOCKER_BIN " wait " $CID " ) " -eq 0
35
+ DOCKER_COMMIT_LABEL_ARGS=(" --change" " LABEL org.label-schema.schema-version=1.0" " --change" " LABEL org.label-schema.vendor=dokku" " --change" " LABEL com.dokku.app-name=$APP " " --change" " LABEL $DOKKU_CONTAINER_LABEL =" )
118
36
" $DOCKER_BIN " commit " ${DOCKER_COMMIT_LABEL_ARGS[@]} " " $CID " " $IMAGE " > /dev/null
119
37
" $DOCKER_BIN " rm " $CID " & > /dev/null || true
120
- " $DOCKER_BIN " tag " $IMAGE " " dokku/$APP :$CONTENT_SHA "
121
- fn-clean-extended-app-images " $APP " " dokku/$APP :$CONTENT_SHA "
122
38
}
123
39
124
40
hook-apt-pre-build-buildpack " $@ "
0 commit comments