mirror of
https://github.com/flatcar/scripts.git
synced 2026-03-02 12:01:10 +01:00
build_sysext: Factor out install root to a variable
Made it easier to change its path. Signed-off-by: Krzesimir Nowak <knowak@microsoft.com>
This commit is contained in:
parent
a5d6a35ae1
commit
41ab707fd6
42
build_sysext
42
build_sysext
@ -135,12 +135,22 @@ _get_sysext_arch() {
|
||||
fi
|
||||
}
|
||||
|
||||
if [[ ${FLAGS_install_root_basename} = */* || ${FLAGS_install_root_basename} = . || ${FLAGS_install_root_basename} = .. ]]; then
|
||||
die "Just use a normal install root basename like 'my-best-rootfs-with-no-slashes' instead of ${FLAGS_install_root_basename@Q}, will ya?!"
|
||||
fi
|
||||
|
||||
# Put the custom install root directory inside the install-root
|
||||
# subdirectory of BUILD_DIR to avoid the accidental messing with other
|
||||
# directories we create inside directly inside BUILD_DIR.
|
||||
THE_INSTALL_ROOT=${BUILD_DIR}/install-root/${FLAGS_install_root_basename}
|
||||
|
||||
cleanup() {
|
||||
local dirs=(
|
||||
"${BUILD_DIR}/fs-root"
|
||||
"${BUILD_DIR}/${FLAGS_install_root_basename}"
|
||||
"${THE_INSTALL_ROOT}"
|
||||
"${BUILD_DIR}/workdir"
|
||||
"${BUILD_DIR}/img-rootfs"
|
||||
"${BUILD_DIR}/install-root"
|
||||
)
|
||||
umount "${dirs[@]}" 2>/dev/null || true
|
||||
rm -rf "${dirs[@]}" || true
|
||||
@ -181,9 +191,9 @@ fi
|
||||
|
||||
mkdir "${BUILD_DIR}/fs-root"
|
||||
mount -rt squashfs -o loop,nodev "${FLAGS_squashfs_base}" "${BUILD_DIR}/fs-root"
|
||||
mkdir "${BUILD_DIR}/${FLAGS_install_root_basename}"
|
||||
mkdir -p "${THE_INSTALL_ROOT}"
|
||||
mkdir "${BUILD_DIR}/workdir"
|
||||
mount -t overlay overlay -o lowerdir="${BUILD_DIR}/fs-root${pkginfo_lowerdirs}",upperdir="${BUILD_DIR}/${FLAGS_install_root_basename}",workdir="${BUILD_DIR}/workdir" "${BUILD_DIR}/${FLAGS_install_root_basename}"
|
||||
mount -t overlay overlay -o lowerdir="${BUILD_DIR}/fs-root${pkginfo_lowerdirs}",upperdir="${THE_INSTALL_ROOT}",workdir="${BUILD_DIR}/workdir" "${THE_INSTALL_ROOT}"
|
||||
|
||||
REPO_BUILD_ID=$(source "${REPO_MANIFESTS_DIR}/version.txt"; echo "$FLATCAR_BUILD_ID")
|
||||
REPO_FLATCAR_VERSION=$(source "${REPO_MANIFESTS_DIR}/version.txt"; echo "$FLATCAR_VERSION")
|
||||
@ -223,7 +233,7 @@ info "Building '${SYSEXTNAME}' sysext with (meta-)packages '${@}' in '${BUILD_DI
|
||||
for package; do
|
||||
echo "Installing package into sysext image: $package"
|
||||
FEATURES="-ebuild-locks binpkg-multi-instance" emerge \
|
||||
--root="${BUILD_DIR}/${FLAGS_install_root_basename}" \
|
||||
--root="${THE_INSTALL_ROOT}" \
|
||||
--config-root="/build/${FLAGS_board}" \
|
||||
--sysroot="/build/${FLAGS_board}" \
|
||||
--usepkgonly \
|
||||
@ -239,18 +249,18 @@ export SOURCE_DATE_EPOCH=$(stat -c '%Y' "${BUILD_DIR}/fs-root/usr/lib/os-release
|
||||
|
||||
# Unmount in order to get rid of the overlay, but keep fs-root for
|
||||
# now, so we can use selinux file contexts.
|
||||
umount "${BUILD_DIR}/${FLAGS_install_root_basename}"
|
||||
umount "${THE_INSTALL_ROOT}"
|
||||
|
||||
if [[ "$FLAGS_generate_pkginfo" = "${FLAGS_TRUE}" ]] ; then
|
||||
info " Creating pkginfo squashfs '${BUILD_DIR}/${SYSEXTNAME}_pkginfo.raw'"
|
||||
mkdir -p "${BUILD_DIR}/img-pkginfo/var/db"
|
||||
cp -R "${BUILD_DIR}/${FLAGS_install_root_basename}/var/db/pkg" "${BUILD_DIR}/img-pkginfo/var/db/"
|
||||
cp -R "${THE_INSTALL_ROOT}/var/db/pkg" "${BUILD_DIR}/img-pkginfo/var/db/"
|
||||
mksquashfs "${BUILD_DIR}/img-pkginfo" "${BUILD_DIR}/${SYSEXTNAME}_pkginfo.raw" \
|
||||
-noappend -xattrs-exclude '^btrfs.' -comp zstd -Xcompression-level 22 -b 512k
|
||||
fi
|
||||
|
||||
info "Writing ${SYSEXTNAME}_packages.txt"
|
||||
ROOT="${BUILD_DIR}/${FLAGS_install_root_basename}" PORTAGE_CONFIGROOT="${BUILD_DIR}/${FLAGS_install_root_basename}" \
|
||||
ROOT="${THE_INSTALL_ROOT}" PORTAGE_CONFIGROOT="${THE_INSTALL_ROOT}" \
|
||||
equery --no-color list --format '$cpv::$repo' '*' > "${BUILD_DIR}/${SYSEXTNAME}_packages.txt"
|
||||
|
||||
# Check if there are forbidden packages
|
||||
@ -283,7 +293,7 @@ if [[ "${FLAGS_strip_binaries}" = "${FLAGS_TRUE}" ]]; then
|
||||
info "Stripping all non-stripped binaries in sysext using '${strip}'"
|
||||
|
||||
# Find all non-stripped binaries, remove ':' from filepath, and strip 'em
|
||||
find "${BUILD_DIR}/${FLAGS_install_root_basename}" -exec file \{\} \; \
|
||||
find "${THE_INSTALL_ROOT}" -exec file \{\} \; \
|
||||
| awk '/not stripped/ {print substr($1, 1, length($1)-1)}' \
|
||||
| while read bin; do
|
||||
info " ${strip} ${bin}"
|
||||
@ -295,37 +305,37 @@ if [[ -n "${FLAGS_manglefs_script}" ]]; then
|
||||
if [[ ! -x "${FLAGS_manglefs_script}" ]]; then
|
||||
die "${FLAGS_manglefs_script} is not executable"
|
||||
fi
|
||||
"${FLAGS_manglefs_script}" "${BUILD_DIR}/${FLAGS_install_root_basename}"
|
||||
"${FLAGS_manglefs_script}" "${THE_INSTALL_ROOT}"
|
||||
fi
|
||||
|
||||
info "Removing non-/usr directories from sysext image"
|
||||
for entry in "${BUILD_DIR}/${FLAGS_install_root_basename}"/*; do
|
||||
for entry in "${THE_INSTALL_ROOT}"/*; do
|
||||
if [[ "${entry}" = */usr ]]; then
|
||||
continue
|
||||
fi
|
||||
info " Removing ${entry##*/}"
|
||||
rm -rf "${entry}"
|
||||
done
|
||||
mkdir -p "${BUILD_DIR}/${FLAGS_install_root_basename}/usr/lib/extension-release.d"
|
||||
mkdir -p "${THE_INSTALL_ROOT}/usr/lib/extension-release.d"
|
||||
version_field="${VERSION_FIELD_OVERRIDE:-VERSION_ID=${FLATCAR_VERSION_ID}}"
|
||||
all_fields=(
|
||||
'ID=flatcar'
|
||||
"${version_field}"
|
||||
"ARCHITECTURE=${ARCH}"
|
||||
)
|
||||
printf '%s\n' "${all_fields[@]}" >"${BUILD_DIR}/${FLAGS_install_root_basename}/usr/lib/extension-release.d/extension-release.${SYSEXTNAME}"
|
||||
printf '%s\n' "${all_fields[@]}" >"${THE_INSTALL_ROOT}/usr/lib/extension-release.d/extension-release.${SYSEXTNAME}"
|
||||
|
||||
info "Removing opaque directory markers to always merge all contents"
|
||||
find "${BUILD_DIR}/${FLAGS_install_root_basename}" -xdev -type d -exec sh -c 'if [ "$(attr -R -q -g overlay.opaque {} 2>/dev/null)" = y ]; then attr -R -r overlay.opaque {}; fi' \;
|
||||
find "${THE_INSTALL_ROOT}" -xdev -type d -exec sh -c 'if [ "$(attr -R -q -g overlay.opaque {} 2>/dev/null)" = y ]; then attr -R -r overlay.opaque {}; fi' \;
|
||||
|
||||
info "Checking for invalid file ownership"
|
||||
invalid_files=$(find "${BUILD_DIR}/${FLAGS_install_root_basename}" -user sdk -or -group sdk)
|
||||
invalid_files=$(find "${THE_INSTALL_ROOT}" -user sdk -or -group sdk)
|
||||
if [[ -n "${invalid_files}" ]]; then
|
||||
die "Invalid file ownership: ${invalid_files}"
|
||||
fi
|
||||
|
||||
info "Relabeling sysext contents"
|
||||
setfiles -D -E -F -r "${BUILD_DIR}/${FLAGS_install_root_basename}" -v -T 0 "${BUILD_DIR}/fs-root/usr/share/flatcar/etc/selinux/mcs/contexts/files/file_contexts" "${BUILD_DIR}/${FLAGS_install_root_basename}"
|
||||
setfiles -D -E -F -r "${THE_INSTALL_ROOT}" -v -T 0 "${BUILD_DIR}/fs-root/usr/share/flatcar/etc/selinux/mcs/contexts/files/file_contexts" "${THE_INSTALL_ROOT}"
|
||||
umount "${BUILD_DIR}/fs-root"
|
||||
|
||||
# Set up EROFS compression options based on compression type
|
||||
@ -351,7 +361,7 @@ systemd-repart \
|
||||
--private-key="${SYSEXT_SIGNING_KEY_DIR}/sysexts.key" \
|
||||
--certificate="${SYSEXT_SIGNING_KEY_DIR}/sysexts.crt" \
|
||||
--make-ddi=sysext \
|
||||
--copy-source="${BUILD_DIR}/${FLAGS_install_root_basename}" \
|
||||
--copy-source="${THE_INSTALL_ROOT}" \
|
||||
"${BUILD_DIR}/${SYSEXTNAME}.raw"
|
||||
|
||||
rm -rf "${BUILD_DIR}"/{fs-root,"${FLAGS_install_root_basename}",workdir}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user