make: correct path to 'bcachefs' in mkfs/fsck scripts

The fsck and bcachefs scripts simply worked by running 'exec bcachefs
...', but this executes whatever is out of `$PATH`, which is likely not
what a user expected when working inside the bcachefs-tools tree.

This replaces the local uses of 'exec bcachefs' to use bash's
readlink/dirname builtins in order to find the location of the currently
executing wrapper, and execute the 'bcachefs' tool from there.

This allows executing these wrappers from anywhere, provided 'bcachefs'
is just right next to them, with the correct semantics.

As a result, this also allows removing a tiny hack from the Nix
expressions, allowing the included default.nix to use completely
standard mkDerivation builders, with no extra patch/fixup phases.

Signed-off-by: Austin Seipp <aseipp@pobox.com>
This commit is contained in:
Austin Seipp 2017-12-15 17:39:12 -06:00
parent 5053c6ed25
commit 8acc54456e
3 changed files with 6 additions and 17 deletions

View File

@ -15,19 +15,6 @@ stdenv.mkDerivation rec {
libsodium libscrypt
];
patchPhase = ''
# ensure the mkfs and fsck scripts, which are just wrappers around
# 'bcachefs', are patched to refer to the right location inside the
# nix store. (you wouldn't expect built tools to call random outside
# utilities, in general, but the exact tools they were built with.)
#
# TODO FIXME: it would be better to fix this in the 'install' target,
# however, so this works with any bog-standard installation
substituteInPlace fsck.bcachefs --replace bcachefs $out/bin/bcachefs
substituteInPlace mkfs.bcachefs --replace bcachefs $out/bin/bcachefs
'';
enableParallelBuilding = true;
makeFlags =
[ "PREFIX=$(out)"

View File

@ -1,3 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
exec bcachefs fsck "$@"
SDIR="$(dirname "$(readlink -f "$0")")"
exec "$SDIR/bcachefs" fsck "$@"

View File

@ -1,3 +1,4 @@
#!/bin/sh
#!/usr/bin/env bash
exec bcachefs format "$@"
SDIR="$(dirname "$(readlink -f "$0")")"
exec "$SDIR/bcachefs" format "$@"