Skip to content

Commit 52adce2

Browse files
cmhejan-kiszka
authored andcommitted
rename kas-docker to kas-container, leave symlink in place
Signed-off-by: Claudius Heine <[email protected]> Signed-off-by: Jan Kiszka <[email protected]>
1 parent 0f779e6 commit 52adce2

File tree

4 files changed

+342
-341
lines changed

4 files changed

+342
-341
lines changed

kas-container

+338
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,338 @@
1+
#!/bin/sh
2+
#
3+
# kas - setup tool for bitbake based projects
4+
#
5+
# Copyright (c) Siemens AG, 2018-2019
6+
#
7+
# Authors:
8+
# Jan Kiszka <[email protected]>
9+
#
10+
# Permission is hereby granted, free of charge, to any person obtaining a copy
11+
# of this software and associated documentation files (the "Software"), to deal
12+
# in the Software without restriction, including without limitation the rights
13+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14+
# copies of the Software, and to permit persons to whom the Software is
15+
# furnished to do so, subject to the following conditions:
16+
#
17+
# The above copyright notice and this permission notice shall be
18+
# included in all copies or substantial portions of the Software.
19+
#
20+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26+
# SOFTWARE.
27+
28+
set -e
29+
30+
usage()
31+
{
32+
printf "%b" "Usage: $0 [OPTIONS] { build | shell } [KASOPTIONS] KASFILE\n"
33+
printf "%b" " $0 [OPTIONS] clean\n"
34+
printf "%b" "\nPositional arguments:\n"
35+
printf "%b" "build\t\t\tCheck out repositories and build target.\n"
36+
printf "%b" "shell\t\t\tRun a shell in the build environment.\n"
37+
printf "%b" "clean\t\t\tClean build artifacts, keep downloads.\n"
38+
printf "%b" "\nOptional arguments:\n"
39+
printf "%b" "--isar\t\t\tUse kas-isar container to build Isar image.\n"
40+
printf "%b" "--with-loop-dev Pass a loop device to the " \
41+
"container. Only required if\n"
42+
printf "%b" "\t\t\tloop-mounting is used by recipes.\n"
43+
printf "%b" "--docker-args\t\tAdditional arguments to pass to docker " \
44+
"for running the\n"
45+
printf "%b" "\t\t\tbuild.\n"
46+
printf "%b" "-v\t\t\tPrint operations.\n"
47+
printf "%b" "--ssh-dir\t\tDirectory containing SSH configurations.\n"
48+
printf "%b" "\t\t\tAvoid \$HOME/.ssh unless you fully trust the " \
49+
"container.\n"
50+
printf "%b" "--aws-dir\t\tDirectory containing AWScli configuration.\n"
51+
printf "%b" "--no-proxy-from-env\tDo not inherit proxy settings from " \
52+
"environment.\n"
53+
printf "%b" "\n"
54+
printf "%b" "You can force the use of podman over docker using " \
55+
"KAS_DOCKER_ENGINE=podman.\n"
56+
exit 1
57+
}
58+
59+
trace()
60+
{
61+
[ -n "${VERBOSE}" ] && echo "+ $*"
62+
"$@"
63+
}
64+
65+
if [ -z "${KAS_IMAGE_VERSION}" ]; then
66+
KAS_IMAGE_VERSION="2.2"
67+
fi
68+
69+
DOCKER_IMAGE=ghcr.io/siemens/kas/kas:${KAS_IMAGE_VERSION}
70+
71+
if [ -n "${KAS_WORK_DIR}" ]; then
72+
KAS_WORK_DIR=$(readlink -f "${KAS_WORK_DIR}")
73+
else
74+
KAS_WORK_DIR="$(pwd)"
75+
fi
76+
77+
if [ -z "${KAS_DOCKER_ENGINE}" ]; then
78+
# Try to auto-detect a docker engine
79+
if command -v docker >/dev/null; then
80+
KAS_DOCKER_ENGINE=docker
81+
elif command -v podman >/dev/null; then
82+
KAS_DOCKER_ENGINE=podman
83+
else
84+
echo "$0: no docker engine found, need docker or podman" >&2
85+
exit 1
86+
fi
87+
fi
88+
89+
case "${KAS_DOCKER_ENGINE}" in
90+
docker)
91+
DOCKER_COMMAND="docker"
92+
;;
93+
podman)
94+
DOCKER_COMMAND="podman"
95+
DOCKER_IMAGE="docker://${DOCKER_IMAGE}"
96+
ENGINE_ARGS="--userns=keep-id --security-opt label=disable"
97+
;;
98+
*)
99+
echo "$0: unknown docker engine '${KAS_DOCKER_ENGINE}'" >&2
100+
exit 1
101+
;;
102+
esac
103+
104+
# parse kas-docker options
105+
while [ $# -gt 0 ]; do
106+
case "$1" in
107+
--isar)
108+
DOCKER_IMAGE="$(echo "${DOCKER_IMAGE}" | sed 's|ghcr.io/siemens/kas/kas|ghcr.io/siemens/kas/kas-isar|g')"
109+
ISAR_ARGS="--privileged"
110+
111+
case "${KAS_DOCKER_ENGINE}" in
112+
docker)
113+
ISAR_ARGS="${ISAR_ARGS} --cap-add=SYS_ADMIN"
114+
ISAR_ARGS="${ISAR_ARGS} --cap-add=MKNOD"
115+
;;
116+
podman)
117+
# sudo is needed for a privileged podman container
118+
DOCKER_COMMAND="sudo ${DOCKER_COMMAND}"
119+
ISAR_ARGS="${ISAR_ARGS} --pid=host"
120+
;;
121+
esac
122+
123+
shift 1
124+
;;
125+
--with-loop-dev)
126+
if ! LOOP_DEV=$(/sbin/losetup -f 2>/dev/null); then
127+
if [ "$(id -u)" -eq 0 ]; then
128+
echo "Error: loop device not available!"
129+
exit 1
130+
fi
131+
sudo_command="/sbin/losetup -f"
132+
sudo_message="[sudo] enter password to setup loop"
133+
sudo_message="$sudo_message devices by calling"
134+
sudo_message="$sudo_message '$sudo_command': "
135+
if ! LOOP_DEV=$(sudo -p "$sudo_message" $sudo_command \
136+
2>/dev/null); then
137+
echo "Error: loop device setup unsuccessful!"
138+
echo "try calling '$sudo_command' with root" \
139+
"permissions manually."
140+
exit 1
141+
fi
142+
fi
143+
WITH_LOOP_DEV="--device ${LOOP_DEV}"
144+
shift 1
145+
;;
146+
--docker-args)
147+
[ $# -gt 0 ] || usage
148+
ENGINE_ARGS="${ENGINE_ARGS} $2"
149+
shift 2
150+
;;
151+
--ssh-dir)
152+
[ $# -gt 2 ] || usage
153+
SSH_DIR="$2"
154+
shift 2
155+
;;
156+
--aws-dir)
157+
[ $# -gt 2 ] || usage
158+
AWS_DIR="$2"
159+
shift 2
160+
;;
161+
--no-proxy-from-env)
162+
NO_PROXY_FROM_ENV=1
163+
shift 1
164+
;;
165+
-v)
166+
VERBOSE=1
167+
shift 1
168+
;;
169+
--*)
170+
usage
171+
;;
172+
clean)
173+
[ $# -eq 1 ] || usage
174+
CLEAN_DIR=build/tmp
175+
if [ -n "${ISAR_ARGS}" ]; then
176+
trace ${DOCKER_COMMAND} run -v "${KAS_WORK_DIR}":/work:rw \
177+
--workdir=/work --rm ${ISAR_ARGS} \
178+
${DOCKER_IMAGE} \
179+
sudo rm -rf ${CLEAN_DIR}
180+
else
181+
trace rm -rf "${KAS_WORK_DIR}/${CLEAN_DIR}"
182+
fi
183+
exit 0
184+
;;
185+
build|shell)
186+
CMD=$1
187+
shift 1
188+
break
189+
;;
190+
*)
191+
usage
192+
;;
193+
esac
194+
done
195+
196+
[ -n "${CMD}" ] || usage
197+
198+
KAS_EXTRA_BITBAKE_ARGS=0
199+
200+
# parse kas sub-command (build or shell) options
201+
while [ $# -gt 0 ] && [ $KAS_EXTRA_BITBAKE_ARGS -eq 0 ]; do
202+
case "$1" in
203+
-h|--help)
204+
trace ${DOCKER_COMMAND} run ${DOCKER_IMAGE} ${CMD} --help
205+
exit 0
206+
;;
207+
--skip|--target|--task|-c|--cmd|--command)
208+
KAS_OPTIONS="${KAS_OPTIONS} $1 $2"
209+
shift 2
210+
;;
211+
--)
212+
KAS_EXTRA_BITBAKE_ARGS=$#
213+
;;
214+
-*)
215+
KAS_OPTIONS="${KAS_OPTIONS} $1"
216+
shift 1
217+
;;
218+
*)
219+
KAS_FILES=
220+
for FILE in $(IFS=':'; echo $1); do
221+
if ! REAL_FILE="$(realpath -qe "$FILE")"; then
222+
echo "Error: configuration file '${FILE}' not found"
223+
exit 1
224+
fi
225+
if [ -z "${KAS_FILES}" ]; then
226+
FIRST_KAS_FILE="${REAL_FILE}"
227+
KAS_FILES="${REAL_FILE}"
228+
else
229+
KAS_FILES="${KAS_FILES}:${REAL_FILE}"
230+
fi
231+
done
232+
shift 1
233+
;;
234+
esac
235+
done
236+
237+
[ -n "${FIRST_KAS_FILE}" ] || usage
238+
239+
KAS_FILE_DIR="$(dirname "${FIRST_KAS_FILE}")"
240+
241+
REPO_DIR=$(git -C "${KAS_FILE_DIR}" rev-parse --show-toplevel 2>/dev/null) \
242+
|| REPO_DIR=$(hg --cwd "${KAS_FILE_DIR}" root 2>/dev/null) \
243+
|| REPO_DIR=${KAS_FILE_DIR}
244+
245+
KAS_FILES=/repo/"$(echo "${KAS_FILES}" | sed 's|'"${REPO_DIR}"'/||g;s|:|:/repo/|g')"
246+
247+
trace mkdir -p "${KAS_WORK_DIR}"
248+
249+
if [ "$(id -u)" -eq 0 ] && [ "${KAS_ALLOW_ROOT}" != "yes" ] ; then
250+
echo "Error: Running as root - may break certain recipes."
251+
echo "Better give a regular user docker access. Set" \
252+
"KAS_ALLOW_ROOT=yes to override."
253+
exit 1
254+
fi
255+
256+
set -- "$@" -v "${REPO_DIR}":/repo:ro \
257+
-v "${KAS_WORK_DIR}":/work:rw --workdir=/work \
258+
-e USER_ID="$(id -u)" -e GROUP_ID="$(id -g)" --rm
259+
260+
if [ -n "${SSH_DIR}" ] ; then
261+
if [ ! -d "${SSH_DIR}" ]; then
262+
echo "Passed SSH_DIR '${SSH_DIR}' is not a directory"
263+
exit 1
264+
fi
265+
set -- "$@" -v "$(readlink -f "${SSH_DIR}")":/etc/skel/.ssh:ro
266+
fi
267+
268+
if [ -n "${AWS_DIR}" ] ; then
269+
if [ ! -d "${AWS_DIR}" ]; then
270+
echo "Passed AWS_DIR '${AWS_DIR}' is not a directory"
271+
exit 1
272+
fi
273+
set -- "$@" -v "$(readlink -f "${AWS_DIR}")":/etc/skel/.aws:ro \
274+
-e AWS_CONFIG_FILE="${AWS_CONFIG_FILE:-/etc/skel/.aws/config}" \
275+
-e AWS_SHARED_CREDENTIALS_FILE="${AWS_SHARED_CREDENTIALS_FILE:-/etc/skel/.aws/credentials}"
276+
fi
277+
278+
if [ -t 1 ]; then
279+
set -- "$@" -t -i
280+
fi
281+
282+
if [ -n "${DL_DIR}" ]; then
283+
trace mkdir -p "${DL_DIR}"
284+
set -- "$@" \
285+
-v "$(readlink -f "${DL_DIR}")":/downloads:rw \
286+
-e DL_DIR=/downloads
287+
fi
288+
289+
if [ -n "${SSTATE_DIR}" ]; then
290+
trace mkdir -p "${SSTATE_DIR}"
291+
set -- "$@" \
292+
-v "$(readlink -f "${SSTATE_DIR}")":/sstate:rw \
293+
-e SSTATE_DIR=/sstate
294+
fi
295+
296+
if [ -n "${KAS_REPO_REF_DIR}" ]; then
297+
set -- "$@" \
298+
-v "$(readlink -f "${KAS_REPO_REF_DIR}")":/repo-ref:ro \
299+
-e KAS_REPO_REF_DIR="${KAS_REPO_REF_DIR}"
300+
fi
301+
302+
for var in TERM KAS_DISTRO KAS_MACHINE KAS_TARGET KAS_TASK \
303+
KAS_PREMIRRORS; do
304+
if [ -n "$(eval echo \$${var})" ]; then
305+
set -- "$@" -e "${var}=$(eval echo \"\$${var}\")"
306+
fi
307+
done
308+
309+
# propagate only supported SHELL settings
310+
case "$SHELL" in
311+
/bin/sh|/bin/bash|/bin/dash)
312+
set -- "$@" -e "SHELL=$SHELL"
313+
;;
314+
*)
315+
set -- "$@" -e "SHELL=/bin/bash"
316+
;;
317+
esac
318+
319+
if [ -z "${NO_PROXY_FROM_ENV+x}" ]; then
320+
for var in http_proxy https_proxy ftp_proxy no_proxy NO_PROXY; do
321+
if [ -n "$(eval echo \$${var})" ]; then
322+
set -- "$@" -e "${var}=$(eval echo \$${var})"
323+
fi
324+
done
325+
fi
326+
327+
set -- "$@" ${ISAR_ARGS} ${WITH_LOOP_DEV} ${ENGINE_ARGS} \
328+
${DOCKER_IMAGE} ${CMD} ${KAS_OPTIONS} ${KAS_FILES}
329+
330+
# rotate any extra bitbake args from the front to the end of the argument list
331+
while [ $KAS_EXTRA_BITBAKE_ARGS -gt 0 ]; do
332+
arg="$1"
333+
shift 1
334+
set -- "$@" "$arg"
335+
KAS_EXTRA_BITBAKE_ARGS=$((KAS_EXTRA_BITBAKE_ARGS - 1))
336+
done
337+
338+
trace ${DOCKER_COMMAND} run "$@"

0 commit comments

Comments
 (0)