mirror of
				https://github.com/flatcar/scripts.git
				synced 2025-10-31 08:11:03 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			122 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| # Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 | |
| # Use of this source code is governed by a BSD-style license that can be
 | |
| # found in the LICENSE file.
 | |
| 
 | |
| get_binhost_url() {
 | |
| 	local binhost_base=$1
 | |
| 	local image_group=$2
 | |
| 	local image_path=$3
 | |
| 	if [ "${image_group}" == "developer" ]; then
 | |
| 		echo "${binhost_base}/${image_group}/boards/${BOARD}/${FLATCAR_VERSION}/${image_path}"
 | |
| 	else
 | |
| 		echo "${binhost_base}/boards/${BOARD}/${FLATCAR_VERSION_ID}/${image_path}"
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| configure_dev_portage() {
 | |
|     local root_fs_dir="${1}"; shift
 | |
|     local binhost="${1}"; shift
 | |
|     local update_group="${1}"; shift
 | |
| 
 | |
|     # Need profiles at the bare minimum
 | |
|     local repo
 | |
|     for repo in portage-stable coreos-overlay; do
 | |
|         sudo mkdir -p "${root_fs_dir}/var/lib/portage/${repo}"
 | |
|         sudo rsync -rtl --exclude=md5-cache \
 | |
|             "${SRC_ROOT}/third_party/${repo}/metadata" \
 | |
|             "${SRC_ROOT}/third_party/${repo}/profiles" \
 | |
|             "${root_fs_dir}/var/lib/portage/${repo}"
 | |
|     done
 | |
| 
 | |
|     sudo mkdir -p "${root_fs_dir}/etc/portage/repos.conf"
 | |
|     sudo_clobber "${root_fs_dir}/etc/portage/make.conf" <<EOF
 | |
| # make.conf for Flatcar dev images
 | |
| ARCH=$(get_board_arch $BOARD)
 | |
| CHOST=$(get_board_chost $BOARD)
 | |
| 
 | |
| # Use /var/lib/portage instead of /usr/portage
 | |
| DISTDIR="/var/lib/portage/distfiles"
 | |
| PKGDIR="/var/lib/portage/pkgs"
 | |
| PORT_LOGDIR="/var/log/portage"
 | |
| PORTAGE_BINHOST="$(get_binhost_url "${binhost}" "${update_group}" 'pkgs')"
 | |
| EOF
 | |
| 
 | |
|     sudo_clobber "${root_fs_dir}/etc/portage/repos.conf/portage-stable.conf" <<EOF
 | |
| [DEFAULT]
 | |
| main-repo = portage-stable
 | |
| 
 | |
| [portage-stable]
 | |
| location = /var/lib/portage/portage-stable
 | |
| EOF
 | |
| 
 | |
|     sudo_clobber "${root_fs_dir}/etc/portage/repos.conf/coreos-overlay.conf" <<EOF
 | |
| [coreos-overlay]
 | |
| location = /var/lib/portage/coreos-overlay
 | |
| EOF
 | |
| 
 | |
|     # Now set the correct profile, we do not use the eselect tool - it
 | |
|     # does not seem to be usable outside of the chroot without using
 | |
|     # deprecated PORTDIR and PORTDIR_OVERLAY environment variables.
 | |
|     local profile_name=$(get_board_profile "${BOARD}")
 | |
|     # Turn coreos-overlay:coreos/amd64/generic into coreos/amd64/generic/dev
 | |
|     profile_name="${profile_name#*:}/dev"
 | |
|     local profile_directory="${root_fs_dir}/var/lib/portage/coreos-overlay/profiles/${profile_name}"
 | |
|     if [[ ! -d "${profile_directory}" ]]; then
 | |
|         die "Not a valid profile: ${profile_name}"
 | |
|     fi
 | |
|     local profile_link="${root_fs_dir}/etc/portage/make.profile"
 | |
|     sudo ln -sfrT "${profile_directory}" "${profile_link}"
 | |
| }
 | |
| 
 | |
| create_dev_container() {
 | |
|   local image_name=$1
 | |
|   local disk_layout=$2
 | |
|   local binhost=$3
 | |
|   local update_group=$4
 | |
|   local base_pkg="$5"
 | |
| 
 | |
|   if [ -z "${base_pkg}" ]; then
 | |
|     echo "did not get base package!"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   info "Building developer image ${image_name}"
 | |
|   # The "dev-image-rootfs" directory name is important - it is used to
 | |
|   # determine the package target in coreos/base/profile.bashrc
 | |
|   local root_fs_dir="${BUILD_DIR}/dev-image-rootfs"
 | |
|   local image_contents="${image_name%.bin}_contents.txt"
 | |
|   local image_contents_wtd="${image_name%.bin}_contents_wtd.txt"
 | |
|   local image_packages="${image_name%.bin}_packages.txt"
 | |
|   local image_licenses="${image_name%.bin}_licenses.json"
 | |
| 
 | |
|   start_image "${image_name}" "${disk_layout}" "${root_fs_dir}" "${update_group}"
 | |
| 
 | |
|   set_image_profile dev
 | |
|   emerge_to_image "${root_fs_dir}" @system ${base_pkg}
 | |
|   run_ldconfig "${root_fs_dir}"
 | |
|   run_localedef "${root_fs_dir}"
 | |
|   write_packages "${root_fs_dir}" "${BUILD_DIR}/${image_packages}"
 | |
|   write_licenses "${root_fs_dir}" "${BUILD_DIR}/${image_licenses}"
 | |
|   insert_licenses "${BUILD_DIR}/${image_licenses}" "${root_fs_dir}"
 | |
| 
 | |
|   # Setup portage for emerge and gmerge
 | |
|   configure_dev_portage "${root_fs_dir}" "${binhost}" "${update_group}"
 | |
| 
 | |
|   # Mark the image as a developer image (input to chromeos_startup).
 | |
|   # TODO(arkaitzr): Remove this file when applications no longer rely on it
 | |
|   # (crosbug.com/16648). The preferred way of determining developer mode status
 | |
|   # is via crossystem cros_debug?1 (checks boot args for "cros_debug").
 | |
|   sudo mkdir -p "${root_fs_dir}/root"
 | |
|   sudo touch "${root_fs_dir}/root/.dev_mode"
 | |
| 
 | |
|   # Remount the system partition read-write by default.
 | |
|   # The remount services are provided by coreos-base/coreos-init
 | |
|   systemd_enable "${root_fs_dir}" "multi-user.target" "remount-usr.service"
 | |
| 
 | |
|   finish_image "${image_name}" "${disk_layout}" "${root_fs_dir}" "${image_contents}" "${image_contents_wtd}"
 | |
| 
 | |
|   declare -a files_to_evaluate
 | |
|   files_to_evaluate+=( "${BUILD_DIR}/${image_name}" )
 | |
|   compress_disk_images files_to_evaluate
 | |
| }
 |