mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-07 13:06:59 +02:00
When the docker wrapper script for Podman is used, we need to explicitly create a root user container with "sudo podman". Podman also has its own bridge for root user containers which we need to detect, and it requires to explicitly say to use the Docker Hub Caddy image. Add a "$docker" variable that uses sudo podman as needed, and also check which bridge interface to use. The filter had to be changed because it didn't work with Podman. Use the Docker Hub Caddy image explicitly.
131 lines
4.7 KiB
Bash
Executable File
131 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2021 The Flatcar Maintainers.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
set -eu
|
|
|
|
cd $(dirname "$0")
|
|
source sdk_lib/sdk_container_common.sh
|
|
|
|
arch="all"
|
|
name=""
|
|
|
|
os_version="$(get_git_version)"
|
|
sdk_version="$(get_sdk_version_from_versionfile)"
|
|
custom_image=""
|
|
tty=""
|
|
cleanup=""
|
|
|
|
usage() {
|
|
echo " Usage:"
|
|
echo " $0 [-t] [-v <version>] [-V sdk version] [-a arch] [-n <name> ] [-x <script>] [-C custom-container] [-F] [container-command]"
|
|
echo " Start an SDK container of a given SDK release version."
|
|
echo " This will create the container if it does not exist, otherwise start the existing container."
|
|
echo " If the container is already running then it will exec into the container."
|
|
echo
|
|
echo " container-command - command to be run in the container instead of"
|
|
echo " an interactive shell."
|
|
echo " -t Attach docker to a TTY (docker -t)"
|
|
echo " -v <version> - Sourcetree (OS image) version to use."
|
|
echo " Defaults to '$os_version' (current git commit)."
|
|
echo " FLATCAR_VERSION[_ID] in '$sdk_container_common_versionfile'"
|
|
echo " will be updated accordingly (also see -F)."
|
|
echo " -V <SDK ver> - SDK version to use. Defaults to '${sdk_version}'"
|
|
echo " (FLATCAR_SDK_VERSION from '$sdk_container_common_versionfile')."
|
|
echo " -a <amd64|arm64|all> - Target architecture (board support) of the SDK."
|
|
echo " 'all' (the default) contains support for both amd64 and arm64."
|
|
echo " -n <name> - Custom name to use for the container."
|
|
echo " -x <script> - For each resource generated during build (container etc.)"
|
|
echo " add a cleanup line to <script> which, when run, will free"
|
|
echo " the resource. Useful for CI."
|
|
echo " -C - Use an entirely custom container image instead of the SDK's"
|
|
echo " $sdk_container_common_registry/flatcar-sdk-[ARCH]:[SDK VERSION]"
|
|
echo " Useful for CI."
|
|
echo " -h Print this help."
|
|
echo
|
|
}
|
|
# --
|
|
|
|
while [ 0 -lt $# ] ; do
|
|
case "$1" in
|
|
-h) usage; exit 0;;
|
|
-t) tty="-t"; shift;;
|
|
-v) os_version="$2"; shift; shift;;
|
|
-V) sdk_version="$2"; shift; shift;;
|
|
-a) arch="$2"; shift; shift;;
|
|
-n) name="$2"; shift; shift;;
|
|
-x) cleanup="$2"; shift; shift;;
|
|
-C) custom_image="$2"; shift; shift;;
|
|
*) break;;
|
|
esac
|
|
done
|
|
|
|
if [ -n "$custom_image" ] ; then
|
|
container_image_name="${custom_image}"
|
|
else
|
|
docker_sdk_vernum="$(vernum_to_docker_image_version "${sdk_version}")"
|
|
container_image_name="$sdk_container_common_registry/flatcar-sdk-${arch}:${docker_sdk_vernum}"
|
|
fi
|
|
|
|
create_versionfile "$sdk_version" "$os_version"
|
|
|
|
if [ -z "$name" ] ; then
|
|
docker_sdk_vernum="$(vernum_to_docker_image_version "${sdk_version}")"
|
|
docker_os_vernum="$(vernum_to_docker_image_version "${os_version}")"
|
|
name="flatcar-sdk-${arch}-${docker_sdk_vernum}_os-${docker_os_vernum}"
|
|
fi
|
|
|
|
filter="^/"
|
|
if "${is_podman}"; then
|
|
filter=""
|
|
fi
|
|
stat="$($docker ps --all --no-trunc --filter name="${filter}$name\$" --format '{{.Status}}'\
|
|
| cut -f1 -d' ')"
|
|
|
|
# pass SDK related environment variables and gcloud auth
|
|
# into container
|
|
setup_sdk_env
|
|
setup_gsutil
|
|
|
|
mkdir -p "__build__/images"
|
|
mkdir -p "sdk_container/.cache/sdks"
|
|
|
|
hostname="${name:0:63}"
|
|
hostname="${hostname//./_}"
|
|
|
|
if [ -n "$cleanup" ] ; then
|
|
echo "$docker container rm -f '${name}'" >> "$cleanup"
|
|
fi
|
|
|
|
if [ -z "$stat" ] ; then
|
|
yell "Creating a new container '$name'"
|
|
|
|
gpg_volumes=$(gnupg_ssh_gcloud_mount_opts)
|
|
|
|
$docker create $tty -i \
|
|
-v /dev:/dev \
|
|
-v "$(pwd)/sdk_container:/mnt/host/source/" \
|
|
-v "$(pwd)/sdk_container/git-override/.git-coreos-overlay:/mnt/host/source/src/third_party/coreos-overlay/.git" \
|
|
-v "$(pwd)/sdk_container/git-override/.git-portage-stable:/mnt/host/source/src/third_party/portage-stable/.git" \
|
|
-v "$(pwd)/__build__/images:/mnt/host/source/src/build" \
|
|
-v "$(pwd):/mnt/host/source/src/scripts" \
|
|
$gpg_volumes \
|
|
--privileged \
|
|
--network host \
|
|
-e SDK_USER_ID="$(id -u)" \
|
|
-e SDK_GROUP_ID="$(id -g)" \
|
|
--name="$name" \
|
|
--hostname="$hostname" \
|
|
"${container_image_name}"
|
|
fi
|
|
|
|
if [ "$stat" != "Up" ] ; then
|
|
yell "Starting stopped container '$name'"
|
|
trap "$docker stop -t 0 $name" EXIT
|
|
$docker start "$name"
|
|
fi
|
|
|
|
$docker exec $tty -i "$name" /home/sdk/sdk_entry.sh "$@"
|