mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-06 12:36:59 +02:00
Most of this hinges on the --upload option being passed, and it never is any more. Much of it also uses Google Buckets, which we no longer use, save for some GCE-specific bits. Signed-off-by: James Le Cuirot <jlecuirot@microsoft.com>
113 lines
4.0 KiB
Bash
Executable File
113 lines
4.0 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.
|
|
# For reference the procedure it performs is this:
|
|
#
|
|
# 1. seed: Take a recent SDK, dev container, or custom tarball as a seed to
|
|
# build stage 1 with. Before proceeding, update relevant packages that have
|
|
# changed sub-slot to avoid missing library issues later in the build.
|
|
#
|
|
# 2. stage1: Using the above 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.
|
|
# NOTE that stage1 LACKS PROPER STAGE ISOLATION. Binaries produced in stage1
|
|
# will be linked against the SEED SDK libraries, NOT against libraries built
|
|
# in stage 1.
|
|
#
|
|
# 3. stage2: This is skipped as recommended by upstream Gentoo.
|
|
#
|
|
# 4. stage3: Run emerge -e system to rebuild everything 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 stage3 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="flatcar-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
|
|
pkgcache_path: $BINPKGS
|
|
stage4/packages: coreos-devel/sdk-depends
|
|
stage4/fsscript: ${BUILD_LIBRARY_DIR}/catalyst_sdk.sh
|
|
stage4/root_overlay: ${ROOT_OVERLAY}
|
|
stage4/empty: /root /var/cache/edb
|
|
stage4/rm: /etc/machine-id /etc/resolv.conf
|
|
EOF
|
|
catalyst_stage_default 4
|
|
}
|
|
|
|
# Switch to HTTP because early boostrap stages do not have SSL support.
|
|
GENTOO_MIRRORS=$(portageq envvar GENTOO_MIRRORS)
|
|
GENTOO_MIRRORS="${GENTOO_MIRRORS//https:\/\//http://}"
|
|
export GENTOO_MIRRORS
|
|
|
|
catalyst_init "$@"
|
|
ROOT_OVERLAY=${TEMPDIR}/stage4_overlay
|
|
|
|
if [[ "$STAGES" =~ stage4 ]]; then
|
|
info "Setting release to ${FLATCAR_VERSION}"
|
|
rm -rf "${ROOT_OVERLAY}"
|
|
# need to setup the lib->lib64 symlink correctly
|
|
libdir=$(get_sdk_libdir)
|
|
mkdir -p "${ROOT_OVERLAY}/usr/${libdir}"
|
|
if [[ "${libdir}" != lib ]]; then
|
|
if [[ "$(get_sdk_symlink_lib)" == "yes" ]]; then
|
|
ln -s "${libdir}" "${ROOT_OVERLAY}/usr/lib"
|
|
else
|
|
mkdir -p "${ROOT_OVERLAY}/usr/lib"
|
|
fi
|
|
fi
|
|
"${BUILD_LIBRARY_DIR}/set_lsb_release" \
|
|
--root "${ROOT_OVERLAY}"
|
|
fi
|
|
|
|
# toolchain_util.sh is required by catalyst_sdk.sh
|
|
# To copy it, we need to create /tmp with the right permissions as it will be
|
|
# used in the exported chroot.
|
|
mkdir -p "${ROOT_OVERLAY}/tmp"
|
|
chmod 1777 "${ROOT_OVERLAY}/tmp"
|
|
cp "${BUILD_LIBRARY_DIR}/toolchain_util.sh" "${ROOT_OVERLAY}/tmp"
|
|
|
|
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"
|
|
build_image="${BUILDS}/${build_name}"
|
|
release_image="${BUILDS}/${release_name}"
|
|
build_contents="${build_image}.CONTENTS.gz"
|
|
release_contents="${release_image}.CONTENTS.gz"
|
|
build_digests="${build_image}.DIGESTS"
|
|
release_digests="${release_image}.DIGESTS"
|
|
ln -f "${build_image}" "${release_image}"
|
|
ln -f "${build_contents}" "${release_contents}"
|
|
sed -e "s/${build_name}/${release_name}/" \
|
|
"${build_digests}" > "${release_digests}"
|
|
|
|
# Validate we didn't break the DIGESTS with sed
|
|
verify_digests "${release_image}" "${release_contents}"
|
|
|
|
info "SDK ready: ${release_image}"
|
|
fi
|
|
|
|
command_completed
|