mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-07 21:16:57 +02:00
Looks like it was either never implemented, or was implemented and dropped before the script was added to the repo.
150 lines
5.3 KiB
Bash
Executable File
150 lines
5.3 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 -euo pipefail
|
|
|
|
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=""
|
|
remove=""
|
|
cleanup=""
|
|
|
|
usage() {
|
|
echo " Usage:"
|
|
echo " $0 [-t] [-v <version>] [-V sdk version] [-a arch] [-n <name> ] [-x <script>] [-C custom-container] [--rm] [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."
|
|
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 " --rm Remove container afterwards"
|
|
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;;
|
|
--help) 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;;
|
|
--rm) remove=true; 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)
|
|
|
|
if [ -z "$custom_image" ]; then
|
|
(
|
|
source ci-automation/ci_automation_common.sh
|
|
docker_image_from_registry_or_buildcache "flatcar-sdk-${arch}" "${docker_sdk_vernum}"
|
|
)
|
|
fi
|
|
|
|
$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'"
|
|
if [ "${remove}" = "true" ]; then
|
|
remove_command="$docker rm -f $name"
|
|
else
|
|
remove_command=":"
|
|
fi
|
|
trap "$docker stop -t 0 $name ; ${remove_command}" EXIT
|
|
$docker start "$name"
|
|
fi
|
|
|
|
# Workaround: The SDK expects to be able to write to /etc/hosts
|
|
$docker exec "$name" sh -c 'cp /etc/hosts /etc/hosts2; umount /etc/hosts ; mv /etc/hosts2 /etc/hosts'
|
|
|
|
$docker exec $tty -i "$name" /home/sdk/sdk_entry.sh "$@"
|