Files
fds-os/tools/in-void
T
2026-09-21 22:29:23 +08:00

30 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# Run an explicit build command inside the existing non-root Void container.
source "$(dirname -- "${BASH_SOURCE[0]}")/lib.sh"
(( $# > 0 )) || die 'Usage: tools/in-void [--isolated-network] COMMAND [ARGUMENT...]'
fds_network_options=()
if [[ $1 == --isolated-network ]]; then
fds_network_options=(--unshare-net)
shift
fi
if [[ ${FDS_OFFLINE:-0} == 1 ]]; then
fds_network_options=(--unshare-net)
fi
(( $# > 0 )) || die 'Missing command'
check_void_pin
[[ -x $FDS_VOID/masterdir-x86_64/usr/bin/xbps-install ]] || die 'Run make bootstrap first'
(( EUID != 0 )) || die 'Run as a normal user, not root'
fds_cargo_home=${CARGO_HOME:-$HOME/.cargo}
fds_rustup_home=${RUSTUP_HOME:-$HOME/.rustup}
fds_rust_bin=$(dirname -- "$(rustup which rustc)")
[[ -d $fds_cargo_home && -d $fds_rustup_home ]] || die 'Rustup directories are missing; run make bootstrap'
exec bwrap --unshare-user --uid 0 --gid 0 "${fds_network_options[@]}" \
--bind "$FDS_VOID/masterdir-x86_64" / --dev /dev --proc /proc \
--bind "$FDS_ROOT" "$FDS_ROOT" --bind "$FDS_VOID/hostdir" /host \
--bind "$fds_cargo_home" "$fds_cargo_home" \
--ro-bind "$fds_rustup_home" "$fds_rustup_home" \
--ro-bind /etc/resolv.conf /etc/resolv.conf \
--setenv CARGO_HOME "$fds_cargo_home" --setenv RUSTUP_HOME "$fds_rustup_home" \
--setenv PATH "$fds_rust_bin:/usr/bin:/bin" --setenv XBPS_ARCH x86_64 \
--chdir "$FDS_ROOT" "$@"