mirror of
				https://github.com/flatcar/scripts.git
				synced 2025-10-31 16:21:04 +01: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
 |