#!/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 <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