Merge pull request #391 from marineam/repos

toolchain_util: include repos.conf in bootstrap build environments
This commit is contained in:
Michael Marineau 2015-04-03 13:45:18 -07:00
commit f04e213c2c
4 changed files with 69 additions and 20 deletions

View File

@ -80,11 +80,28 @@ export PORTAGE_GRPNAME=portage
EOF EOF
} }
repos_conf() {
cat <<EOF
[DEFAULT]
main-repo = portage-stable
[gentoo]
disabled = true
[coreos]
location = /usr/portage
[portage-stable]
location = /usr/local/portage
EOF
}
# Common values for all stage spec files # Common values for all stage spec files
catalyst_stage_default() { catalyst_stage_default() {
cat <<EOF cat <<EOF
subarch: $ARCH subarch: $ARCH
rel_type: $TYPE rel_type: $TYPE
portage_confdir: $TEMPDIR/portage
portage_overlay: $FLAGS_coreos_overlay portage_overlay: $FLAGS_coreos_overlay
profile: $FLAGS_profile profile: $FLAGS_profile
snapshot: $FLAGS_version snapshot: $FLAGS_version
@ -212,20 +229,22 @@ write_configs() {
export CCACHE_DIR="$TEMPDIR/ccache" export CCACHE_DIR="$TEMPDIR/ccache"
info "Creating output directories..." info "Creating output directories..."
mkdir -m 775 -p "$TEMPDIR" "$DISTDIR" "$CCACHE_DIR" mkdir -m 775 -p "$TEMPDIR/portage/repos.conf" "$DISTDIR" "$CCACHE_DIR"
chown portage:portage "$DISTDIR" "$CCACHE_DIR" chown portage:portage "$DISTDIR" "$CCACHE_DIR"
info "Writing out catalyst configs..." info "Writing out catalyst configs..."
info " $TEMPDIR/catalyst.conf" info " catalyst.conf"
catalyst_conf > "$TEMPDIR/catalyst.conf" catalyst_conf > "$TEMPDIR/catalyst.conf"
info " $TEMPDIR/catalystrc" info " catalystrc"
catalystrc > "$TEMPDIR/catalystrc" catalystrc > "$TEMPDIR/catalystrc"
info " $TEMPDIR/stage1.spec" info " portage/repos.conf/coreos.conf"
repos_conf > "$TEMPDIR/portage/repos.conf/coreos.conf"
info " stage1.spec"
catalyst_stage1 > "$TEMPDIR/stage1.spec" catalyst_stage1 > "$TEMPDIR/stage1.spec"
info " $TEMPDIR/stage2.spec" info " stage2.spec"
catalyst_stage2 > "$TEMPDIR/stage2.spec" catalyst_stage2 > "$TEMPDIR/stage2.spec"
info " $TEMPDIR/stage3.spec" info " stage3.spec"
catalyst_stage3 > "$TEMPDIR/stage3.spec" catalyst_stage3 > "$TEMPDIR/stage3.spec"
info " $TEMPDIR/stage4.spec" info " stage4.spec"
catalyst_stage4 > "$TEMPDIR/stage4.spec" catalyst_stage4 > "$TEMPDIR/stage4.spec"
} }

View File

@ -32,8 +32,7 @@ build_target_toolchain() {
run_merge -u --root="$ROOT" "${TOOLCHAIN_PKGS[@]}" run_merge -u --root="$ROOT" "${TOOLCHAIN_PKGS[@]}"
} }
mkdir -p "/tmp/crossdev" configure_crossdev_overlay / /tmp/crossdev
export PORTDIR_OVERLAY="/tmp/crossdev $(portageq envvar PORTDIR_OVERLAY)"
for cross_chost in $(get_chost_list); do for cross_chost in $(get_chost_list); do
echo "Building cross toolchain for ${cross_chost}" echo "Building cross toolchain for ${cross_chost}"

View File

@ -172,6 +172,35 @@ get_binonly_args() {
### Toolchain building utilities ### ### Toolchain building utilities ###
# Create the crossdev overlay and repos.conf entry.
# crossdev will try to setup this itself but doesn't do everything needed
# to make the newer repos.conf based configuration system happy. This can
# probably go away if crossdev itself is improved.
configure_crossdev_overlay() {
local root="$1"
local location="$2"
# may be called from either catalyst (root) or update_chroot (user)
local sudo="env"
if [[ $(id -u) -ne 0 ]]; then
sudo="sudo -E"
fi
$sudo mkdir -p "${root}${location}/"{profiles,metadata}
echo "x-crossdev" | \
$sudo tee "${root}${location}/profiles/repo_name" > /dev/null
$sudo tee "${root}${location}/metadata/layout.conf" > /dev/null <<EOF
masters = portage-stable coreos
use-manifests = true
thin-manifests = true
EOF
$sudo tee "${root}/etc/portage/repos.conf/crossdev.conf" > /dev/null <<EOF
[x-crossdev]
location = ${location}
EOF
}
# Ugly hack to get a dependency list of a set of packages. # Ugly hack to get a dependency list of a set of packages.
# This is required to figure out what to install in the crossdev sysroot. # This is required to figure out what to install in the crossdev sysroot.
# Usage: ROOT=/foo/bar _get_dependency_list pkgs... [--portage-opts...] # Usage: ROOT=/foo/bar _get_dependency_list pkgs... [--portage-opts...]
@ -198,7 +227,8 @@ _configure_sysroot() {
sudo="sudo -E" sudo="sudo -E"
fi fi
$sudo mkdir -p "${ROOT}/etc/portage" $sudo mkdir -p "${ROOT}/etc/portage/"{profile,repos.conf}
$sudo cp /etc/portage/repos.conf/* "${ROOT}/etc/portage/repos.conf/"
$sudo eselect profile set --force "$profile" $sudo eselect profile set --force "$profile"
$sudo tee "${ROOT}/etc/portage/make.conf" >/dev/null <<EOF $sudo tee "${ROOT}/etc/portage/make.conf" >/dev/null <<EOF
@ -240,6 +270,16 @@ install_cross_toolchain() {
sudo="sudo -E" sudo="sudo -E"
fi fi
# crossdev will arbitrarily choose an overlay that it finds first.
# Force it to use the one created by configure_crossdev_overlay
local cross_overlay=$(portageq get_repo_path / x-crossdev)
if [[ -n "${cross_overlay}" ]]; then
cross_flags+=( --ov-output "${cross_overlay}" )
else
echo "No x-crossdev overlay found!" >&2
return 1
fi
# Only call crossdev to regenerate configs if something has changed # Only call crossdev to regenerate configs if something has changed
if ! cmp --quiet - "${cross_cfg}" <<<"${cross_cfg_data}" if ! cmp --quiet - "${cross_cfg}" <<<"${cross_cfg_data}"
then then

View File

@ -125,16 +125,7 @@ sudo eselect profile set --force "$(get_sdk_profile)"
# Create crossdev repo_name and metadata # Create crossdev repo_name and metadata
info "Setting up crossdev..." info "Setting up crossdev..."
sudo mkdir -p "${FLAGS_chroot}/${CROSSDEV_OVERLAY}/profiles" configure_crossdev_overlay "${FLAGS_chroot}" "${CROSSDEV_OVERLAY}"
echo "x-crossdev" | \
sudo tee "/${CROSSDEV_OVERLAY}/profiles/repo_name" > /dev/null
sudo mkdir -p "/${CROSSDEV_OVERLAY}/metadata"
sudo tee "/${CROSSDEV_OVERLAY}/metadata/layout.conf" > /dev/null <<EOF
masters = portage-stable coreos
use-manifests = true
thin-manifests = true
EOF
# Run version hooks as pre-update # Run version hooks as pre-update
if [[ -f /etc/os-release ]]; then if [[ -f /etc/os-release ]]; then