mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-06 12:36:59 +02:00
This change introduces a containerised SDK as a replacement for cork SDK operations. It also simplifies versioning by removing the need for manifest repos as well as usage of the "repo" tool by use of git submodules for coreos-overlay and portage-stable. The following feature scripts are added: - run_sdk_container: Run a command in an SDK container, using the current scripts repo + ebuild submodules. current scripts repo + ebuild submodules. - bootstrap_sdk_container / build_sdk_container_image: Bootstrap a new SDK and create an SDK container from the resulting SDK tarball. The following additions have been made to SDK scripts: - setup_board: add --pkgdir parameter to use a custom binary packge directory. Signed-off-by: Thilo Fromm <thilo@kinvolk.io>
126 lines
4.3 KiB
Bash
Executable File
126 lines
4.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 -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
|
|
|
|
stat="$(docker ps --all --no-trunc --filter name="$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)/__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 $name" EXIT
|
|
docker start "$name"
|
|
|
|
fi
|
|
|
|
docker exec $tty -i "$name" /home/sdk/sdk_entry.sh "$@"
|