mirror of
https://github.com/SebastianWendel/nixpkgs.git
synced 2024-09-29 08:30:21 +02:00
nixos-rebuild: Allow remote building when using flakes
This commit is contained in:
parent
652749c4ca
commit
456aa2db49
|
@ -214,6 +214,49 @@ nixBuild() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nixFlakeBuild() {
|
||||||
|
if [ -z "$buildHost" ]; then
|
||||||
|
nix build "$@" --out-link "${tmpDir}/result"
|
||||||
|
readlink -f "${tmpDir}/result"
|
||||||
|
else
|
||||||
|
local attr="$1"
|
||||||
|
shift 1
|
||||||
|
local evalArgs=()
|
||||||
|
local buildArgs=()
|
||||||
|
while [ "$#" -gt 0 ]; do
|
||||||
|
local i="$1"; shift 1
|
||||||
|
case "$i" in
|
||||||
|
--recreate-lock-file|--no-update-lock-file|--no-write-lock-file|--no-registries|--commit-lock-file)
|
||||||
|
evalArgs+=("$i")
|
||||||
|
;;
|
||||||
|
--update-input)
|
||||||
|
local j="$1"; shift 1
|
||||||
|
evalArgs+=("$i" "$j")
|
||||||
|
;;
|
||||||
|
--override-input)
|
||||||
|
local j="$1"; shift 1
|
||||||
|
local k="$1"; shift 1
|
||||||
|
evalArgs+=("$i" "$j" "$k")
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
buildArgs+=("$i")
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
local drv="$(nix "${flakeFlags[@]}" eval --raw "${attr}.drvPath" "${evalArgs[@]}" "${extraBuildArgs[@]}")"
|
||||||
|
if [ -a "$drv" ]; then
|
||||||
|
NIX_SSHOPTS=$SSHOPTS nix "${flakeFlags[@]}" copy --derivation --to "ssh://$buildHost" "$drv"
|
||||||
|
# The 'nix-command flakes' part in "${flakeFlags[@]}" is seen as two separate args over SSH
|
||||||
|
buildHostCmd nix --experimental-features "'nix-command flakes'" build "${buildArgs[@]}" --out-link "${tmpDir}/result" "$drv"
|
||||||
|
buildHostCmd readlink -f "${tmpDir}/result"
|
||||||
|
else
|
||||||
|
echo "nix eval failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if [ -z "$action" ]; then showSyntax; fi
|
if [ -z "$action" ]; then showSyntax; fi
|
||||||
|
|
||||||
|
@ -315,8 +358,14 @@ fi
|
||||||
|
|
||||||
tmpDir=$(mktemp -t -d nixos-rebuild.XXXXXX)
|
tmpDir=$(mktemp -t -d nixos-rebuild.XXXXXX)
|
||||||
SSHOPTS="$NIX_SSHOPTS -o ControlMaster=auto -o ControlPath=$tmpDir/ssh-%n -o ControlPersist=60"
|
SSHOPTS="$NIX_SSHOPTS -o ControlMaster=auto -o ControlPath=$tmpDir/ssh-%n -o ControlPersist=60"
|
||||||
|
if [ -n "$buildHost" -a -n "$flake" ]; then
|
||||||
|
buildHostCmd mkdir -p "$tmpDir"
|
||||||
|
fi
|
||||||
|
|
||||||
cleanup() {
|
cleanup() {
|
||||||
|
if [ -n "$buildHost" -a -n "$flake" ]; then
|
||||||
|
buildHostCmd rm -rf "$tmpDir"
|
||||||
|
fi
|
||||||
for ctrl in "$tmpDir"/ssh-*; do
|
for ctrl in "$tmpDir"/ssh-*; do
|
||||||
ssh -o ControlPath="$ctrl" -O exit dummyhost 2>/dev/null || true
|
ssh -o ControlPath="$ctrl" -O exit dummyhost 2>/dev/null || true
|
||||||
done
|
done
|
||||||
|
@ -418,10 +467,7 @@ if [ -z "$rollback" ]; then
|
||||||
if [[ -z $flake ]]; then
|
if [[ -z $flake ]]; then
|
||||||
pathToConfig="$(nixBuild '<nixpkgs/nixos>' --no-out-link -A system "${extraBuildFlags[@]}")"
|
pathToConfig="$(nixBuild '<nixpkgs/nixos>' --no-out-link -A system "${extraBuildFlags[@]}")"
|
||||||
else
|
else
|
||||||
outLink=$tmpDir/result
|
pathToConfig="$(nixFlakeBuild "$flake#$flakeAttr.config.system.build.toplevel" "${extraBuildFlags[@]}" "${lockFlags[@]}")"
|
||||||
nix "${flakeFlags[@]}" build "$flake#$flakeAttr.config.system.build.toplevel" \
|
|
||||||
"${extraBuildFlags[@]}" "${lockFlags[@]}" --out-link $outLink
|
|
||||||
pathToConfig="$(readlink -f $outLink)"
|
|
||||||
fi
|
fi
|
||||||
copyToTarget "$pathToConfig"
|
copyToTarget "$pathToConfig"
|
||||||
targetHostCmd nix-env -p "$profile" --set "$pathToConfig"
|
targetHostCmd nix-env -p "$profile" --set "$pathToConfig"
|
||||||
|
@ -429,24 +475,19 @@ if [ -z "$rollback" ]; then
|
||||||
if [[ -z $flake ]]; then
|
if [[ -z $flake ]]; then
|
||||||
pathToConfig="$(nixBuild '<nixpkgs/nixos>' -A system -k "${extraBuildFlags[@]}")"
|
pathToConfig="$(nixBuild '<nixpkgs/nixos>' -A system -k "${extraBuildFlags[@]}")"
|
||||||
else
|
else
|
||||||
nix "${flakeFlags[@]}" build "$flake#$flakeAttr.config.system.build.toplevel" "${extraBuildFlags[@]}" "${lockFlags[@]}"
|
pathToConfig="$(nixFlakeBuild "$flake#$flakeAttr.config.system.build.toplevel" "${extraBuildFlags[@]}" "${lockFlags[@]}")"
|
||||||
pathToConfig="$(readlink -f ./result)"
|
|
||||||
fi
|
fi
|
||||||
elif [ "$action" = build-vm ]; then
|
elif [ "$action" = build-vm ]; then
|
||||||
if [[ -z $flake ]]; then
|
if [[ -z $flake ]]; then
|
||||||
pathToConfig="$(nixBuild '<nixpkgs/nixos>' -A vm -k "${extraBuildFlags[@]}")"
|
pathToConfig="$(nixBuild '<nixpkgs/nixos>' -A vm -k "${extraBuildFlags[@]}")"
|
||||||
else
|
else
|
||||||
nix "${flakeFlags[@]}" build "$flake#$flakeAttr.config.system.build.vm" \
|
pathToConfig="$(nixFlakeBuild "$flake#$flakeAttr.config.system.build.vm" "${extraBuildFlags[@]}" "${lockFlags[@]}")"
|
||||||
"${extraBuildFlags[@]}" "${lockFlags[@]}"
|
|
||||||
pathToConfig="$(readlink -f ./result)"
|
|
||||||
fi
|
fi
|
||||||
elif [ "$action" = build-vm-with-bootloader ]; then
|
elif [ "$action" = build-vm-with-bootloader ]; then
|
||||||
if [[ -z $flake ]]; then
|
if [[ -z $flake ]]; then
|
||||||
pathToConfig="$(nixBuild '<nixpkgs/nixos>' -A vmWithBootLoader -k "${extraBuildFlags[@]}")"
|
pathToConfig="$(nixBuild '<nixpkgs/nixos>' -A vmWithBootLoader -k "${extraBuildFlags[@]}")"
|
||||||
else
|
else
|
||||||
nix "${flakeFlags[@]}" build "$flake#$flakeAttr.config.system.build.vmWithBootLoader" \
|
pathToConfig="$(nixFlakeBuild "$flake#$flakeAttr.config.system.build.vmWithBootLoader" "${extraBuildFlags[@]}" "${lockFlags[@]}")"
|
||||||
"${extraBuildFlags[@]}" "${lockFlags[@]}"
|
|
||||||
pathToConfig="$(readlink -f ./result)"
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
showSyntax
|
showSyntax
|
||||||
|
|
Loading…
Reference in a new issue