106 lines
2.2 KiB
Plaintext
106 lines
2.2 KiB
Plaintext
#! @shell@
|
|
|
|
STORE_DIR="${NIX_STORE_DIR:-/nix/store}"
|
|
MASS_QUERY=0
|
|
PRIORITY=75
|
|
COMPRESSION=bzip2
|
|
KEY=
|
|
KEYNAME=na
|
|
|
|
export NIX_REMOTE=daemon
|
|
|
|
config="${NIX_BINARY_CACHE_CONFIG:-${HTTP_NIX_BINARY_CACHE_CONFIG:-/etc/nix/nix-binary-cache.cgi.conf}}"
|
|
config="$(cd "$(@coreutils@/dirname "$config")";
|
|
@coreutils@/pwd)/$(@coreutils@/basename "$config")"
|
|
@coreutils@/test -e "$config" && . "$config"
|
|
|
|
header(){
|
|
echo "Content-Type: text/plain; charset=utf-8"
|
|
echo
|
|
}
|
|
|
|
header404(){
|
|
echo "Status: 404 Not Found"
|
|
echo
|
|
}
|
|
|
|
clean_path() {
|
|
@gnused@/sed -re "s@^$STORE_DIR/?@@" | @findutils@/xargs
|
|
}
|
|
|
|
storeq(){
|
|
@nix@/nix-store -q "$@"
|
|
}
|
|
|
|
sign(){
|
|
test -n "$1" &&
|
|
@coreutils@/sha256sum | @gnused@/sed -e 's/ .*//' |
|
|
@openssl@/openssl rsautl -sign -inkey "$@" | @coreutils@/base64 -w 0
|
|
}
|
|
|
|
case "$QUERY_STRING" in
|
|
"")
|
|
header
|
|
echo "Hello, this is a dynamically-generated Nix binary cache"
|
|
;;
|
|
/debug)
|
|
header
|
|
set
|
|
;;
|
|
/nix-cache-info)
|
|
header
|
|
echo "StoreDir: $STORE_DIR"
|
|
echo "WantMassQuery: $MASS_QUERY"
|
|
echo "Priority: $PRIORITY"
|
|
;;
|
|
*.narinfo)
|
|
hash=${QUERY_STRING%.narinfo}
|
|
hash=${hash#/}
|
|
path="$(echo "$STORE_DIR/$hash-"* | @coreutils@/sort | @coreutils@/head -n 1)"
|
|
if [ -n "$path" ] && [ -e "$path" ]; then
|
|
header
|
|
info="$(
|
|
echo "StorePath: $path"
|
|
echo "URL: $(@coreutils@/basename "$path"
|
|
).nar.$COMPRESSION"
|
|
echo "Compression: $COMPRESSION"
|
|
echo "NarHash: $(storeq --hash "$path")"
|
|
echo "NarSize: $(storeq --size "$path")"
|
|
echo "References: $(storeq --references "$path" |
|
|
@coreutils@/tac | clean_path )"
|
|
echo "Deriver: $(storeq --deriver "$path" |
|
|
clean_path )"
|
|
)"
|
|
signature="$(echo "$info" | sign "$KEY")"
|
|
|
|
echo "$info"
|
|
echo "Signature: 1;$KEYNAME;$signature"
|
|
|
|
else
|
|
header404
|
|
exit 1
|
|
fi
|
|
;;
|
|
*.nar.xz)
|
|
path="$STORE_DIR${QUERY_STRING%.nar.xz}"
|
|
if [ -n "$path" ] && [ -e "$path" ]; then
|
|
header
|
|
@nix@/nix-store --dump "$path" | @xz@/xz
|
|
else
|
|
header404
|
|
exit 1
|
|
fi
|
|
;;
|
|
*.nar.bzip2)
|
|
path="$STORE_DIR${QUERY_STRING%.nar.bzip2}"
|
|
echo "$path" >&2;
|
|
if [ -n "$path" ] && [ -e "$path" ]; then
|
|
header
|
|
@nix@/nix-store --dump "$path" | @bzip2@/bzip2
|
|
else
|
|
header404
|
|
exit 1
|
|
fi
|
|
;;
|
|
esac
|