liminix

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 30153a2d4e7e8d758c9869b240046756dc791663
parent 67768004eedf86608e14951f38892168700bdb13
Author: Daniel Barlow <dan@telent.net>
Date:   Sat,  6 May 2023 22:47:03 +0100

add min-copy-closure, a minimal nix-copy-closure substitute

Diffstat:
Mpkgs/default.nix | 1+
Apkgs/min-copy-closure/default.nix | 13+++++++++++++
Apkgs/min-copy-closure/min-copy-closure.fnl | 2++
Apkgs/min-copy-closure/min-copy-closure.sh | 40++++++++++++++++++++++++++++++++++++++++
Apkgs/min-copy-closure/receive.sh | 9+++++++++
5 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/pkgs/default.nix b/pkgs/default.nix @@ -45,5 +45,6 @@ openwrt = callPackage ./openwrt {}; + min-copy-closure = callPackage ./min-copy-closure {}; hi = callPackage ./hi {}; } diff --git a/pkgs/min-copy-closure/default.nix b/pkgs/min-copy-closure/default.nix @@ -0,0 +1,13 @@ +{ + stdenv +, nix +, cpio +}: stdenv.mkDerivation { + name = "min-copy-closure"; + buildInputs = [ nix cpio ]; + src = ./.; + installPhase = '' + mkdir -p $out/bin + cp min-copy-closure.sh $out/bin/nix-copy-closure + ''; +} diff --git a/pkgs/min-copy-closure/min-copy-closure.fnl b/pkgs/min-copy-closure/min-copy-closure.fnl @@ -0,0 +1,2 @@ + +(local ssh (io.popen " diff --git a/pkgs/min-copy-closure/min-copy-closure.sh b/pkgs/min-copy-closure/min-copy-closure.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +target_host=$1 +shift + +paths=$(nix-store -q --requisites "$@") +needed="" + +coproc remote { + ssh -C ${target_host} +} + +exec 10>&${remote[1]} + +for p in $paths; do + echo "test -e $p && echo skip || echo $p" >&10 + read n <&${remote[0]} + case $n in + skip) + : + ;; + *) + needed="${needed} $n" + echo Will copy $n + ;; + esac +done + +if test -z "$needed" ; then + echo Nothing to copy + exit 1 +fi + +echo "cd / && cpio -v -i >/dev/console" >&10 + +find $needed | cpio -H newc -o >&10 + +echo "date" >&10 +read n <&${remote[0]} +echo $n diff --git a/pkgs/min-copy-closure/receive.sh b/pkgs/min-copy-closure/receive.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh +cd /nix/store +while read f ; do + test "$f" = "end" && break + test -e $f || echo -n $f " " +done +mkdir -p /tmp/store +cd /tmp/store +cpio -i