diff options
Diffstat (limited to 'nixpkgs/pkgs/tools/filesystems/bcache-tools')
3 files changed, 137 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch b/nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch new file mode 100644 index 000000000000..c6cf79785b73 --- /dev/null +++ b/nixpkgs/pkgs/tools/filesystems/bcache-tools/bcache-udev-modern.patch @@ -0,0 +1,52 @@ +This patch does two things: +1) Drops probe-bcache, so now new util-linux detecting functionality is used. +2) Drops bcache-register, using kmod (built in udev) and moving registering device + into rule using 'sh'. +This reduces things that need to be present in initrd, replacing them with already +existing functionality and reducing overall initrd size. + +diff --git a/69-bcache.rules b/69-bcache.rules +index 5d28e70..6a52893 100644 +--- a/69-bcache.rules ++++ b/69-bcache.rules +@@ -10,15 +10,11 @@ KERNEL=="fd*|sr*", GOTO="bcache_end" + # It recognised bcache (util-linux 2.24+) + ENV{ID_FS_TYPE}=="bcache", GOTO="bcache_backing_found" + # It recognised something else; bail +-ENV{ID_FS_TYPE}=="?*", GOTO="bcache_backing_end" +- +-# Backing devices: scan, symlink, register +-IMPORT{program}="probe-bcache -o udev $tempnode" +-ENV{ID_FS_TYPE}!="bcache", GOTO="bcache_backing_end" +-ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" ++GOTO="bcache_backing_end" + + LABEL="bcache_backing_found" +-RUN+="bcache-register $tempnode" ++RUN{builtin}+="kmod load bcache" ++RUN+="/bin/sh -c 'echo $tempnode > /sys/fs/bcache/register_quiet'" + LABEL="bcache_backing_end" + + # Cached devices: symlink +diff --git a/Makefile b/Makefile +index 3f8d87b..15638a7 100644 +--- a/Makefile ++++ b/Makefile +@@ -9,7 +9,7 @@ all: make-bcache probe-bcache bcache-super-show + + install: make-bcache probe-bcache bcache-super-show + $(INSTALL) -m0755 make-bcache bcache-super-show $(DESTDIR)${PREFIX}/sbin/ +- $(INSTALL) -m0755 probe-bcache bcache-register $(DESTDIR)$(UDEVLIBDIR)/ ++# $(INSTALL) -m0755 probe-bcache bcache-register $(DESTDIR)$(UDEVLIBDIR)/ + $(INSTALL) -m0644 69-bcache.rules $(DESTDIR)$(UDEVLIBDIR)/rules.d/ + $(INSTALL) -m0644 -- *.8 $(DESTDIR)${PREFIX}/share/man/man8/ + $(INSTALL) -D -m0755 initramfs/hook $(DESTDIR)/usr/share/initramfs-tools/hooks/bcache +diff --git a/bcache-register b/bcache-register +index 9b592bc..75b4faf 100755 +--- a/bcache-register ++++ b/bcache-register +@@ -1,4 +1,3 @@ + #!/bin/sh +-/sbin/modprobe -qba bcache + test -f /sys/fs/bcache/register_quiet && echo "$1" > /sys/fs/bcache/register_quiet + diff --git a/nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix b/nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix new file mode 100644 index 000000000000..f6dfdd84d8c4 --- /dev/null +++ b/nixpkgs/pkgs/tools/filesystems/bcache-tools/default.nix @@ -0,0 +1,63 @@ +{ lib, stdenv, fetchFromGitHub, pkg-config, util-linux, bash }: + +stdenv.mkDerivation rec { + pname = "bcache-tools"; + version = "1.0.7"; + + src = fetchFromGitHub { + owner = "g2p"; + repo = "bcache-tools"; + rev = "v${version}"; + hash = "sha256-Ors2xXRrVTf8Cq3BYnSVSfJy/nyGjT5BGLSNpxOcHR4="; + }; + + nativeBuildInputs = [ pkg-config ]; + buildInputs = [ util-linux ]; + + # * Remove broken install rules (they ignore $PREFIX) for stuff we don't need + # anyway (it's distro specific stuff). + # * Fixup absolute path to modprobe. + prePatch = '' + sed -e "/INSTALL.*initramfs\/hook/d" \ + -e "/INSTALL.*initcpio\/install/d" \ + -e "/INSTALL.*dracut\/module-setup.sh/d" \ + -e "s/pkg-config/$PKG_CONFIG/" \ + -i Makefile + ''; + + patches = [ + ./bcache-udev-modern.patch + ./fix-static.patch + ]; + + makeFlags = [ + "PREFIX=${placeholder "out"}" + "UDEVLIBDIR=${placeholder "out"}/lib/udev/" + ]; + + preBuild = '' + sed -e "s|/bin/sh|${bash}/bin/sh|" -i *.rules + ''; + + preInstall = '' + mkdir -p "$out/sbin" "$out/lib/udev/rules.d" "$out/share/man/man8" + ''; + + meta = with lib; { + description = "User-space tools required for bcache (Linux block layer cache)"; + longDescription = '' + Bcache is a Linux kernel block layer cache. It allows one or more fast + disk drives such as flash-based solid state drives (SSDs) to act as a + cache for one or more slower hard disk drives. + + This package contains the required user-space tools. + + User documentation is in Documentation/bcache.txt in the Linux kernel + tree. + ''; + homepage = "https://bcache.evilpiepirate.org/"; + license = licenses.gpl2; + platforms = platforms.linux; + maintainers = [ maintainers.bjornfor ]; + }; +} diff --git a/nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch b/nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch new file mode 100644 index 000000000000..e5dd2df5299d --- /dev/null +++ b/nixpkgs/pkgs/tools/filesystems/bcache-tools/fix-static.patch @@ -0,0 +1,22 @@ +diff --git a/bcache.c b/bcache.c +index 8f37445..79806d8 100644 +--- a/bcache.c ++++ b/bcache.c +@@ -26,7 +26,7 @@ + * x^7 + x^4 + x + 1 + */ + +-static const uint64_t crc_table[256] = { ++const uint64_t crc_table[256] = { + 0x0000000000000000ULL, 0x42F0E1EBA9EA3693ULL, 0x85E1C3D753D46D26ULL, + 0xC711223CFA3E5BB5ULL, 0x493366450E42ECDFULL, 0x0BC387AEA7A8DA4CULL, + 0xCCD2A5925D9681F9ULL, 0x8E224479F47CB76AULL, 0x9266CC8A1C85D9BEULL, +@@ -115,7 +115,7 @@ static const uint64_t crc_table[256] = { + 0x9AFCE626CE85B507ULL + }; + +-inline uint64_t crc64(const void *_data, size_t len) ++uint64_t crc64(const void *_data, size_t len) + { + uint64_t crc = 0xFFFFFFFFFFFFFFFFULL; + const unsigned char *data = _data; |