mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-08 05:26:58 +02:00
Right now there is some funky logic to either use a previous build as a seed or the current SDK tarball if it happens to have been downloaded. This is a bit confusing and doesn't work reliably since it is reasonable for there to be neither a previous build or the current SDK available if the SDK chroot was created some time ago. Fix this by using the new SDK library and always use the latest SDK, downloading it if needed.
90 lines
3.4 KiB
Bash
Executable File
90 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Copyright (c) 2013 The CoreOS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
#
|
|
# This uses Gentoo's catalyst for very thoroughly building images from
|
|
# scratch. Using images based on this will eliminate some of the hackery
|
|
# in make_chroot.sh for building up the sdk from a stock stage3 tarball.
|
|
#
|
|
# For reference the procedure it performs is this:
|
|
#
|
|
# 1. snapshot: Grab a snapshot of portage-stable. Note that overalys are
|
|
# not snapshotted.
|
|
# 2. stage1: Using a "seed" tarball as a build environment, build a
|
|
# minimal root file system into a clean directory using ROOT=...
|
|
# and USE=-* The restricted USE flags are key be small and avoid
|
|
# circular dependencies.
|
|
# 3. stage2: Run portage-stable/scripts/bootstrap.sh
|
|
# This rebuilds the toolchain. Probably not strictly necessary most of
|
|
# the time but does super-duper-promise that the toolchain isn't linked
|
|
# to or otherwise influenced by whatever was in the "seed" tarball.
|
|
# 4. stage3: Run emerge -e system to rebuild everything using the fresh
|
|
# toolchain using the normal USE flags provided by the profile. This
|
|
# will also pull in assorted base system packages that weren't included
|
|
# in the minimal environment stage1 created.
|
|
# 5. stage4: Install any extra packages or other desired tweaks. For the
|
|
# sdk we just install all the packages normally make_chroot.sh does.
|
|
#
|
|
# Usage: bootstrap_sdk [stage1 stage2 etc]
|
|
# By default all four stages will be built using the latest stage4 as a seed.
|
|
|
|
SCRIPT_ROOT=$(dirname $(readlink -f "$0"))
|
|
. "${SCRIPT_ROOT}/common.sh" || exit 1
|
|
|
|
TYPE="coreos-sdk"
|
|
|
|
. "${BUILD_LIBRARY_DIR}/catalyst.sh" || exit 1
|
|
|
|
# include upload options
|
|
. "${BUILD_LIBRARY_DIR}/release_util.sh" || exit 1
|
|
|
|
## Define the stage4 config template
|
|
catalyst_stage4() {
|
|
cat <<EOF
|
|
target: stage4
|
|
pkgcache_path: $BINPKGS
|
|
stage4/packages: coreos-devel/sdk-depends
|
|
stage4/fsscript: ${BUILD_LIBRARY_DIR}/catalyst_default_stage4.sh
|
|
stage4/root_overlay: ${TEMPDIR}/stage4_overlay
|
|
EOF
|
|
catalyst_stage_default
|
|
}
|
|
|
|
catalyst_init "$@"
|
|
check_gsutil_opts
|
|
|
|
if [[ "$STAGES" =~ stage4 ]]; then
|
|
info "Setting release to ${COREOS_VERSION_STRING}"
|
|
rm -rf "${TEMPDIR}/stage4_overlay"
|
|
mkdir -p "${TEMPDIR}/stage4_overlay"
|
|
"${BUILD_LIBRARY_DIR}/set_lsb_release" \
|
|
--root "${TEMPDIR}/stage4_overlay" \
|
|
--production_track sdk --board "${ARCH}-host"
|
|
fi
|
|
|
|
catalyst_build
|
|
|
|
if [[ "$STAGES" =~ stage4 ]]; then
|
|
info "Build complete! Changing output name to something more sensible."
|
|
build_name="stage4-${ARCH}-${FLAGS_version}.tar.bz2"
|
|
release_name="${TYPE}-${ARCH}-${FLAGS_version}.tar.bz2"
|
|
ln -f "$BUILDS/${build_name}" "$BUILDS/${release_name}"
|
|
ln -f "$BUILDS/${build_name}.CONTENTS" "$BUILDS/${release_name}.CONTENTS"
|
|
sed -e "s/${build_name}/${release_name}/" \
|
|
"$BUILDS/${build_name}.DIGESTS" > "$BUILDS/${release_name}.DIGESTS"
|
|
|
|
# Validate we didn't break the DIGESTS with sed
|
|
verify_digests "$BUILDS/${release_name}" "$BUILDS/${release_name}.CONTENTS"
|
|
|
|
info "SDK ready: $BUILDS/${release_name}"
|
|
|
|
def_upload_path="${UPLOAD_ROOT}/sdk/${ARCH}/${FLAGS_version}"
|
|
upload_files "tarball" "${def_upload_path}" "" "$BUILDS/${release_name}" \
|
|
"$BUILDS/${release_name}.CONTENTS" "$BUILDS/${release_name}.DIGESTS"
|
|
upload_files "packages" "${def_upload_path}" "pkgs/" "${BINPKGS}"/*
|
|
fi
|
|
|
|
command_completed
|