Split native FreeBSD boot and runtime artifacts
This commit is contained in:
142
tests/system/run-phase14-native-development-split.sh
Executable file
142
tests/system/run-phase14-native-development-split.sh
Executable file
@@ -0,0 +1,142 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
repo_root=${PROJECT_ROOT:-$(pwd)}
|
||||
store_dir=${STORE_DIR:-/frx/store}
|
||||
metadata_target=${METADATA_OUT:-}
|
||||
cleanup=0
|
||||
|
||||
if [ -n "${WORKDIR:-}" ]; then
|
||||
workdir=$WORKDIR
|
||||
mkdir -p "$workdir"
|
||||
else
|
||||
workdir=$(mktemp -d /tmp/fruix-phase14-native-development.XXXXXX)
|
||||
cleanup=1
|
||||
fi
|
||||
if [ "${KEEP_WORKDIR:-0}" -eq 1 ]; then
|
||||
cleanup=0
|
||||
fi
|
||||
|
||||
metadata_file=$workdir/phase14-native-development-split-metadata.txt
|
||||
|
||||
cleanup_workdir() {
|
||||
if [ "$cleanup" -eq 1 ]; then
|
||||
rm -rf "$workdir" 2>/dev/null || sudo rm -rf "$workdir"
|
||||
fi
|
||||
}
|
||||
trap cleanup_workdir EXIT INT TERM
|
||||
|
||||
action_env() {
|
||||
sudo env \
|
||||
HOME="$HOME" \
|
||||
GUILE_AUTO_COMPILE=0 \
|
||||
FRUIX_FREEBSD_BUILD_JOBS="${FRUIX_FREEBSD_BUILD_JOBS:-8}" \
|
||||
GUIX_SOURCE_DIR="${GUIX_SOURCE_DIR:-$HOME/repos/guix}" \
|
||||
GUILE_BIN="${GUILE_BIN:-/tmp/guile-freebsd-validate-install/bin/guile}" \
|
||||
GUILE_EXTRA_PREFIX="${GUILE_EXTRA_PREFIX:-/tmp/guile-gnutls-freebsd-validate-install}" \
|
||||
SHEPHERD_PREFIX="${SHEPHERD_PREFIX:-/tmp/shepherd-freebsd-validate-install}" \
|
||||
"$@"
|
||||
}
|
||||
|
||||
native_system_packages=$(GUILE_AUTO_COMPILE=0 /tmp/guile-freebsd-validate-install/bin/guile -L modules -L "$HOME/repos/guix" -c '
|
||||
(use-modules (fruix packages freebsd) (srfi srfi-13))
|
||||
(display (string-join (map freebsd-package-name %freebsd-native-system-packages) ","))
|
||||
(newline)')
|
||||
|
||||
native_development_packages=$(GUILE_AUTO_COMPILE=0 /tmp/guile-freebsd-validate-install/bin/guile -L modules -L "$HOME/repos/guix" -c '
|
||||
(use-modules (fruix packages freebsd) (srfi srfi-13))
|
||||
(display (string-join (map freebsd-package-name %freebsd-native-development-profile-packages) ","))
|
||||
(newline)')
|
||||
|
||||
materialize_native_package() {
|
||||
package_name=$1
|
||||
action_env env LD_LIBRARY_PATH="/tmp/guile-freebsd-validate-install/lib:/usr/local/lib" /tmp/guile-freebsd-validate-install/bin/guile -L modules -L "$HOME/repos/guix" -c '
|
||||
(use-modules (fruix packages freebsd) (ice-9 hash-table))
|
||||
(let* ((args (command-line))
|
||||
(store-dir (list-ref args (- (length args) 2)))
|
||||
(package-name (list-ref args (- (length args) 1)))
|
||||
(pkg (case (string->symbol package-name)
|
||||
((freebsd-native-bootloader) freebsd-native-bootloader)
|
||||
((freebsd-native-headers) freebsd-native-headers)
|
||||
(else (error "unsupported package" package-name))))
|
||||
(system-module (resolve-module (quote (fruix system freebsd))))
|
||||
(materialize (module-ref system-module (quote materialize-freebsd-package)))
|
||||
(cache (make-hash-table))
|
||||
(path (materialize pkg store-dir cache)))
|
||||
(display "STORE_PATH=")
|
||||
(display path)
|
||||
(newline))' dummy "$store_dir" "$package_name"
|
||||
}
|
||||
|
||||
bootloader_store=$(materialize_native_package freebsd-native-bootloader | sed -n 's/^STORE_PATH=//p' | tail -n 1)
|
||||
headers_store=$(materialize_native_package freebsd-native-headers | sed -n 's/^STORE_PATH=//p' | tail -n 1)
|
||||
|
||||
case "$bootloader_store" in
|
||||
/frx/store/*-freebsd-native-bootloader-15.0-STABLE) : ;;
|
||||
*) echo "unexpected native bootloader store path: $bootloader_store" >&2; exit 1 ;;
|
||||
esac
|
||||
case "$headers_store" in
|
||||
/frx/store/*-freebsd-native-headers-15.0-STABLE) : ;;
|
||||
*) echo "unexpected native headers store path: $headers_store" >&2; exit 1 ;;
|
||||
esac
|
||||
|
||||
for path in \
|
||||
"$bootloader_store/boot/loader" \
|
||||
"$bootloader_store/boot/loader.efi" \
|
||||
"$bootloader_store/boot/device.hints" \
|
||||
"$bootloader_store/boot/defaults/loader.conf" \
|
||||
"$bootloader_store/boot/lua/loader.lua" \
|
||||
"$headers_store/usr/include/stdio.h" \
|
||||
"$headers_store/usr/include/sys/param.h" \
|
||||
"$headers_store/usr/share/mk/bsd.prog.mk"
|
||||
do
|
||||
[ -e "$path" ] || {
|
||||
echo "expected native split artifact path missing: $path" >&2
|
||||
exit 1
|
||||
}
|
||||
done
|
||||
|
||||
[ ! -e "$bootloader_store/usr/include" ] || { echo "native bootloader slice unexpectedly contains headers" >&2; exit 1; }
|
||||
[ ! -e "$headers_store/boot" ] || { echo "native headers slice unexpectedly contains /boot" >&2; exit 1; }
|
||||
[ ! -e "$headers_store/bin/sh" ] || { echo "native headers slice unexpectedly contains runtime binaries" >&2; exit 1; }
|
||||
|
||||
case ",$native_system_packages," in
|
||||
*,freebsd-native-runtime,*) : ;;
|
||||
*) echo "native system package set does not include freebsd-native-runtime" >&2; exit 1 ;;
|
||||
esac
|
||||
case ",$native_development_packages," in
|
||||
*,freebsd-native-runtime,*) : ;;
|
||||
*) echo "native development package set does not include freebsd-native-runtime" >&2; exit 1 ;;
|
||||
esac
|
||||
case ",$native_development_packages," in
|
||||
*,freebsd-native-headers,*) : ;;
|
||||
*) echo "native development package set does not include freebsd-native-headers" >&2; exit 1 ;;
|
||||
esac
|
||||
case ",$native_development_packages," in
|
||||
*,freebsd-clang-toolchain,*) : ;;
|
||||
*) echo "native development package set does not retain the explicit toolchain artifact" >&2; exit 1 ;;
|
||||
esac
|
||||
|
||||
cat >"$metadata_file" <<EOF
|
||||
workdir=$workdir
|
||||
store_dir=$store_dir
|
||||
bootloader_store=$bootloader_store
|
||||
headers_store=$headers_store
|
||||
native_system_packages=$native_system_packages
|
||||
native_development_packages=$native_development_packages
|
||||
runtime_vs_development_split=ok
|
||||
EOF
|
||||
|
||||
if [ -n "$metadata_target" ]; then
|
||||
mkdir -p "$(dirname "$metadata_target")"
|
||||
cp "$metadata_file" "$metadata_target"
|
||||
fi
|
||||
|
||||
printf 'PASS phase14-native-development-split\n'
|
||||
printf 'Work directory: %s\n' "$workdir"
|
||||
printf 'Metadata file: %s\n' "$metadata_file"
|
||||
if [ -n "$metadata_target" ]; then
|
||||
printf 'Copied metadata to: %s\n' "$metadata_target"
|
||||
fi
|
||||
printf '%s\n' '--- metadata ---'
|
||||
cat "$metadata_file"
|
||||
Reference in New Issue
Block a user