-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuildah.funcs
284 lines (226 loc) · 6.92 KB
/
buildah.funcs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
#!/bin/bash
source ${BB_SCRIPT_DIR}/framework.funcs
function bb_mv_build_target {
local FROM=$1
local TO=$2
if [ -z $FROM ]; then
echo "Error: expected a FROM buildah container id."
exit 1
fi
if [ -z $TO ]; then
echo "Error: expected a TO buildah container id."
exit 2
fi
shift; shift
local PKG_NAME=$1
local PKG_VERS=$(bb_resolve_vers ${PKG_NAME} ${2})
local PKG_ROOT_IT=${BB_PKG_ROOT_IT}
local PKG_ROOT_IMAGE
local PKG_ROOT_TAG
bb_sanitize_pkg_identifier $PKG_NAME $PKG_ROOT_IT $PKG_VERS $PKG_TAG
if ! bb_check_dir_structure $PKG_NAME $PKG_ROOT_IT $PKG_VERS; then
return 3
fi
if [ ! -e $BB_ROOT/$PKG_NAME/$PKG_VERS/$PKG_ROOT_IMAGE/$PKG_ROOT_TAG/injectin.to ]; then
echo "Script \"$BB_ROOT/$PKG_NAME/$PKG_VERS/$PKG_ROOT_IMAGE/$PKG_ROOT_TAG/injectin.to\" doesn't exist."
return 4
fi
if [ ! -x $BB_ROOT/$PKG_NAME/$PKG_VERS/$PKG_ROOT_IMAGE/$PKG_ROOT_TAG/injectin.to ]; then
echo "Script \"$BB_ROOT/$PKG_NAME/$PKG_VERS/$PKG_ROOT_IMAGE/$PKG_ROOT_TAG/injectin.to\" isn't executable."
return 5
fi
local BB_INJ_NAME=$PKG_NAME
local BB_INJ_VERS=$PKG_VERS
export BB_INJ_NAME
export BB_INJ_VERS
if ! $BB_ROOT/$PKG_NAME/$PKG_VERS/$PKG_ROOT_IMAGE/$PKG_ROOT_TAG/injectin.to $FROM $TO; then
return 6
fi
export -n BB_INJ_NAME
export -n BB_INJ_VERS
return 0
}
function bb_inject {
local TARG_NAME=$1
local TARG_VERS=$(bb_resolve_vers ${TARG_NAME} ${2})
local TO=$3
local REPONAME=$(bb_get_image_FQName ${TARG_NAME} ${BB_PKG_ROOT_IT} ${TARG_VERS})
local FROM=$(buildah from ${REPONAME})
bb_mv_build_target ${FROM} ${TO} ${TARG_NAME} ${TARG_VERS}
buildah rm ${FROM}
}
function bb_consume_target {
local TARG_NAME=$1
local TARG_VERS=$(bb_resolve_vers ${TARG_NAME} ${2})
local FROM=$3
local TO=$4
bb_mv_build_target ${FROM} ${TO} ${TARG_NAME} ${TARG_VERS}
buildah rm ${FROM}
}
function bb_cont_get_env {
local CONT=$1
local ENVNAME=$2
# Have to check if it is empty or it will print an error
if buildah run ${CONT} printenv ${ENVNAME} &> /dev/null; then
buildah run ${CONT} printenv ${ENVNAME}
fi
}
function bb_cont_set_env {
local CONT=$1
local ENVNAME=$2
local ENVVALUE=$3
if [[ $ENVNAME =~ "=" ]]; then
echo "Environment variable name (${ENVNAME}) passed to bb_cont_set_env contained an equals character, this is an invalid name. (Maybe you used bb_cont_set_env \${CONT} ENVNAME=ENVVAL? Should be bb_cont_set_env \${CONT} ENVNAME ENVVAL"
return 1
fi
buildah config --env ${ENVNAME}=${ENVVALUE} ${CONT}
}
function bb_copy_env {
local FROM=$1
local TO=$2
local ENVNAME=$3
if [[ $ENVNAME =~ "=" ]]; then
echo "Environment variable name (${ENVNAME}) passed to bb_cont_set_env contained an equals character, this is an invalid name. (Maybe you used bb_cont_set_env \${CONT} ENVNAME=ENVVAL? Should be bb_cont_set_env \${CONT} ENVNAME ENVVAL"
return 1
fi
local ENVVALUE=$(bb_cont_get_env ${FROM} ${ENVNAME})
bb_cont_set_env ${TO} ${ENVNAME} ${ENVVALUE}
}
function bb_add_to_path_env {
local CONT=$1
local ENVNAME=$2
local ENVVALUE=$3
if [[ $ENVNAME =~ "=" ]]; then
echo "Environment variable name (${ENVNAME}) passed to bb_cont_set_env contained an equals character, this is an invalid name. (Maybe you used bb_cont_set_env \${CONT} ENVNAME=ENVVAL? Should be bb_cont_set_env \${CONT} ENVNAME ENVVAL"
return 1
fi
CONTVAL=$(bb_cont_get_env ${CONT} ${ENVNAME})
bb_cont_set_env ${CONT} ${ENVNAME} "${ENVVALUE}:${CONTVAL}"
}
function bb_cont_set_psone {
local CONT=$1
local STR=$2
buildah run ${CONT} sed -i -e "\$a PS1=\"\\\\[\\\\033[01;31m\\\\]${STR}\\\\[\\\\033[00m\\\\]:\\\\[\\\\033[01;34m\\\\]\\\\w\\\\[\\\\033[00m\\\\]# \"" /root/.bashrc
}
function bb_cont_to_cont_copy {
local FROM=$1
local TO=$2
local SRC=$3
local DEST=$4
cat << EOF > /tmp/$$.copy
#!/bin/bash
FROM_MP=\$(buildah mount ${FROM})
buildah copy ${TO} \$FROM_MP$SRC $DEST &> /dev/null
buildah unmount ${FROM} &> /dev/null
EOF
chmod +x /tmp/$$.copy
buildah unshare /tmp/$$.copy
rm /tmp/$$.copy
}
function bb_cont_path_exists {
local CONT=$1
local CONT_PATH=$2
buildah run ${CONT} bash -c "if [ -e $CONT_PATH ]; then echo 0; else echo 1; fi"
}
function bb_cont_mv {
local CONT=$1
shift
local CMD="mv $@"
buildah run ${CONT} bash -c "${CMD}"
}
function bb_cont_cp {
local CONT=$1
shift
local CMD="cp $@"
buildah run ${CONT} bash -c "${CMD}"
}
function bb_add_from_pkg_dir {
local TO=$1
local SRC=$2
local DEST=$3
if [ ! -e ${BB_PKG_DIR}/${SRC} ]; then
echo "Requested buildah add ${TO} ${SRC} ${DEST} but cannot find: \"${BB_PKG_DIR}/${SRC}\""
return 1
fi
buildah add ${TO} ${BB_PKG_DIR}/${SRC} ${DEST}
}
function bb_get_devbox {
local BB_BUILD_TYPE=DEFAULT
bb_get_image_FQName devbox ${1}
}
function bb_get_buildbox {
local BB_BUILD_TYPE=DEFAULT
bb_get_image_FQName buildbox ${1}
}
function bb_get_runbox {
local BB_BUILD_TYPE=DEFAULT
bb_get_image_FQName runbox ${1}
}
function bb_get_runbox_min {
local BB_BUILD_TYPE=DEFAULT
bb_get_image_FQName runbox_min ${1}
}
function bb_get_basebox {
local BB_BUILD_TYPE=DEFAULT
bb_get_image_FQName runbox_min ${1}
}
function bb_cont_mkdir {
local CONT=${1}
shift
local LOCS="$@"
buildah run ${CONT} mkdir -p ${LOCS}
}
function bb_cont_cd {
local CONT=${1}
local LOC=${2}
buildah config --workingdir ${LOC} ${CONT}
}
function bb_cont_mkdir_cd {
local CONT=${1}
local LOC=${2}
bb_cont_mkdir ${CONT} ${LOC}
bb_cont_cd ${CONT} ${LOC}
}
function bb_commit {
local CONT=${1}
local IMAGE_FQNAME=${2}
if [ -z ${IMAGE_FQNAME} ]; then
IMAGE_FQNAME=${BB_PKG_IMAGE_FQNAME}
fi
# if we have a helper script, add it!
if [ ! -z "${BB_PKG_DIR}" ] && [ -e ${BB_PKG_DIR}/help.me ]; then
bb_add_from_pkg_dir ${CONT} help.me /usr/local/bin/
buildah run ${CONT} chmod +x /usr/local/bin/help.me
fi
buildah config --entrypoint "" ${CONT}
bb_cont_set_env ${CONT} container_name ${BB_PKG_NAME}_${BB_PKG_VERS}
bb_cont_set_psone ${CONT} ${BB_PKG_NAME}_${BB_PKG_VERS}
local ID=$(buildah commit ${CONT} ${IMAGE_FQNAME})
echo "[BB]: Committed ${CONT} -> ${IMAGE_FQNAME}"
local RMID=$(buildah rm ${CONT})
echo "[BB]: Removed ${CONT}"
}
function bb_from_devbox {
echo $(buildah from $(bb_get_devbox ${BB_PKG_ROOT_IT}))
}
function bb_from_buildbox {
echo $(buildah from $(bb_get_buildbox ${BB_PKG_ROOT_IT}))
}
function bb_from_runbox {
echo $(buildah from $(bb_get_runbox ${BB_PKG_ROOT_IT}))
}
function bb_from_runbox_min {
echo $(buildah from $(bb_get_runbox_min ${BB_PKG_ROOT_IT}))
}
function bb_from_base {
local PKG_NAME=$1
local PKG_VERS=$2
local DEFAULT_IMAGE=$3
local PKG_ROOT_IT=$BB_PKG_ROOT_IT
local BASE_IMAGE_NAME=$(bb_get_base_image_name ${PKG_NAME} ${PKG_VERS})
if [ -z ${BASE_IMAGE_NAME} ]; then
echo $(buildah from $DEFAULT_IMAGE)
else
echo $(buildah from $BASE_IMAGE_NAME)
fi
}