mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-07-14 14:10:33 +03:00
bcachefs: 2023-06-28 -> 2023-09-29
Includes prep work for mainline bcachefs release.
This commit is contained in:
parent
6c1a24a6ea
commit
d6bf8b47ec
9 changed files with 351 additions and 46 deletions
|
@ -6,23 +6,39 @@ let
|
|||
|
||||
bootFs = filterAttrs (n: fs: (fs.fsType == "bcachefs") && (utils.fsNeededForBoot fs)) config.fileSystems;
|
||||
|
||||
mountCommand = pkgs.runCommand "mount.bcachefs" {} ''
|
||||
mkdir -p $out/bin
|
||||
cat > $out/bin/mount.bcachefs <<EOF
|
||||
#!/bin/sh
|
||||
exec "/bin/bcachefs" mount "\$@"
|
||||
EOF
|
||||
chmod +x $out/bin/mount.bcachefs
|
||||
'';
|
||||
|
||||
commonFunctions = ''
|
||||
prompt() {
|
||||
local name="$1"
|
||||
printf "enter passphrase for $name: "
|
||||
}
|
||||
|
||||
tryUnlock() {
|
||||
local name="$1"
|
||||
local path="$2"
|
||||
local success=false
|
||||
local target
|
||||
local uuid=$(echo -n $path | sed -e 's,UUID=\(.*\),\1,g')
|
||||
|
||||
printf "waiting for device to appear $path"
|
||||
for try in $(seq 10); do
|
||||
if [ -e $path ]; then
|
||||
success=true
|
||||
break
|
||||
else
|
||||
target=$(blkid --uuid $uuid)
|
||||
if [ $? == 0 ]; then
|
||||
success=true
|
||||
break
|
||||
fi
|
||||
fi
|
||||
echo -n "."
|
||||
sleep 1
|
||||
done
|
||||
printf "\n"
|
||||
if [ $success == true ]; then
|
||||
path=$target
|
||||
fi
|
||||
|
||||
if bcachefs unlock -c $path > /dev/null 2> /dev/null; then # test for encryption
|
||||
prompt $name
|
||||
until bcachefs unlock $path 2> /dev/null; do # repeat until successfully unlocked
|
||||
|
@ -30,6 +46,8 @@ let
|
|||
prompt $name
|
||||
done
|
||||
printf "unlocking successful.\n"
|
||||
else
|
||||
echo "Cannot unlock device $uuid with path $path" >&2
|
||||
fi
|
||||
}
|
||||
'';
|
||||
|
@ -51,28 +69,25 @@ in
|
|||
{
|
||||
config = mkIf (elem "bcachefs" config.boot.supportedFilesystems) (mkMerge [
|
||||
{
|
||||
# We do not want to include bachefs in the fsPackages for systemd-initrd
|
||||
# because we provide the unwrapped version of mount.bcachefs
|
||||
# through the extraBin option, which will make it available for use.
|
||||
system.fsPackages = lib.optional (!config.boot.initrd.systemd.enable) pkgs.bcachefs-tools;
|
||||
environment.systemPackages = lib.optional (config.boot.initrd.systemd.enable) pkgs.bcachefs-tools;
|
||||
# needed for systemd-remount-fs
|
||||
system.fsPackages = [ pkgs.bcachefs-tools ];
|
||||
|
||||
# use kernel package with bcachefs support until it's in mainline
|
||||
# TODO replace with requireKernelConfig
|
||||
boot.kernelPackages = pkgs.linuxPackages_testing_bcachefs;
|
||||
}
|
||||
|
||||
(mkIf ((elem "bcachefs" config.boot.initrd.supportedFilesystems) || (bootFs != {})) {
|
||||
# chacha20 and poly1305 are required only for decryption attempts
|
||||
boot.initrd.availableKernelModules = [ "bcachefs" "sha256" "chacha20" "poly1305" ];
|
||||
|
||||
boot.initrd.systemd.extraBin = {
|
||||
# do we need this? boot/systemd.nix:566 & boot/systemd/initrd.nix:357
|
||||
"bcachefs" = "${pkgs.bcachefs-tools}/bin/bcachefs";
|
||||
"mount.bcachefs" = "${mountCommand}/bin/mount.bcachefs";
|
||||
"mount.bcachefs" = "${pkgs.bcachefs-tools}/bin/mount.bcachefs";
|
||||
};
|
||||
|
||||
boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
copy_bin_and_libs ${pkgs.bcachefs-tools}/bin/bcachefs
|
||||
copy_bin_and_libs ${mountCommand}/bin/mount.bcachefs
|
||||
copy_bin_and_libs ${pkgs.bcachefs-tools}/bin/mount.bcachefs
|
||||
'';
|
||||
boot.initrd.extraUtilsCommandsTest = ''
|
||||
$out/bin/bcachefs version
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue