{ lib , stdenv , fetchurl , which , autoconf , automake , flex , bison , kernel , glibc , perl , libtool_2 , libkrb5 , fetchpatch }: let inherit (import ./srcs.nix { inherit fetchurl; }) src version; modDestDir = "$out/lib/modules/${kernel.modDirVersion}/extra/openafs"; kernelBuildDir = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"; fetchBase64Patch = args: (fetchpatch args).overrideAttrs (o: { postFetch = "mv $out p; base64 -d p > $out; " + o.postFetch; }); in stdenv.mkDerivation { pname = "openafs"; version = "${version}-${kernel.modDirVersion}"; inherit src; patches = [ # afs: Make afs_AllocDCache static (fetchpatch { url = "https://github.com/openafs/openafs/commit/fca6fd911e493a344c040a95ea4ab820e2828802.patch"; hash = "sha256-XJAiZ7XL+QFk3l0CUSzudUSGC+oC7v4Kew9TWmEKvNg="; }) # LINUX: Minor osi_vfsop.c cleanup (fetchpatch { url = "https://github.com/openafs/openafs/commit/1e1bf8ebcd3c18b05326cd7b26a471db804aeaeb.patch"; hash = "sha256-kw8CQrpK9caq8eXrCEbk2zTSb727d8NmaSQg0Bg/TAM="; }) # afs: Remove SRXAFSCB_GetDE (fetchpatch { url = "https://github.com/openafs/openafs/commit/9f052c137d1184a783c8ac3182c3544b275484f5.patch"; hash = "sha256-3AMq5fAUt/HAIRuh/GAWPov3gwvMzVAqzmvpIKZLbBo="; }) # afs: remove dead ICL (fstrace) code (fetchpatch { url = "https://github.com/openafs/openafs/commit/05ac6149f2f7998b6110c403d26757151b8e8ffe.patch"; hash = "sha256-wXbM1hFnaAKJEMMoOdHd9xIjFY2Jk02/Frv8IvrnrGc="; }) # cf: Add function prototypes for linux conftest (fetchpatch { url = "https://github.com/openafs/openafs/commit/ef7b8c578790d84c89f09c3236f1718725770e75.patch"; hash = "sha256-6tceVLqrhdo5QWjOCvutvZmetopz+tyP5AtJUh7Kkkc="; }) # afs: Remove afs_MemExtendEntry() (fetchpatch { url = "https://github.com/openafs/openafs/commit/4881af8e3cf3f7d09670ba4b5bb9b644a329530d.patch"; hash = "sha256-9CA0lwiNjzeteAPXh/Yyu3gqZBSi2b9XBrl43w2VzSs="; }) # afs: Remove afs_osi_UnmaskUserLoop() (fetchpatch { url = "https://github.com/openafs/openafs/commit/cc8053e86eef75bff308e7606f2618e9fdc4ec5d.patch"; hash = "sha256-jBwd0zFidIfNx6csPSNp1RGCq1JKmXNXWbQnG2pIgvM="; }) # afs: Remove dummy_PSetAcl() (fetchpatch { url = "https://github.com/openafs/openafs/commit/bd2828f1ab4c88b95a5d075e29a942922aa86dba.patch"; hash = "sha256-ExvIzyyqPijf5c1T3mpSqFefvbd42FpLIFYUpcc5fyk="; }) # afs: Remove DFlushDCache() (fetchpatch { url = "https://github.com/openafs/openafs/commit/bb7eaafb2e87d313eeb0a7bedebe2aa7a797b005.patch"; hash = "sha256-/S4uZj+cScPFihvJDW49dQ2awrt7Thx7tIpoImIl/kg="; }) # afs: Remove SRXAFSCB_FetchData/StoreData (fetchpatch { url = "https://github.com/openafs/openafs/commit/be8001f1d64a2d9da4fdaeff59fdc40e205d4526.patch"; hash = "sha256-xpnyHLSybr3CFSE7BeyVLqDWbH44gfC2a9ygHojD4NI="; }) # afs: Remove afs_DbgDisconFiles() (fetchpatch { url = "https://github.com/openafs/openafs/commit/73844a4939a7b8198bf11d4dcbce9e28b621bd11.patch"; hash = "sha256-m0/jd8DBIht6M+Wzns8qN6APyYUgyN4+zlHs09NoFVE="; }) # afs: Add declaration for RXAFS_ResidencyCmd() (fetchpatch { url = "https://github.com/openafs/openafs/commit/5d2c4a0a8ada4a87d7f39dc21dbce14b3b2a978f.patch"; hash = "sha256-jzZG7w0tOxkrcphiITHrfodCZ6wyGp1NVARLI/tfN3c="; }) # roken: Declare ct_memcmp in hcrypto kernel roken.h (fetchpatch { url = "https://github.com/openafs/openafs/commit/15357006d9e8e45ac0be9e0c7e87456ee3857d90.patch"; hash = "sha256-OrkUiybGI2jOsEqQFeGXTQqWvgp1NwttuPvokNkwxHw="; }) # Linux 6.8: Add function prototypes for krb5 (fetchpatch { url = "https://github.com/openafs/openafs/commit/b1c93f13870e24795b857cb483320871703d00e8.patch"; hash = "sha256-PMnW4H/s2uKda3xbka2+2nz422pksttrYvsTf+omzrc="; }) # afs: Declare init_hckernel_mutex() (fetchpatch { url = "https://github.com/openafs/openafs/commit/25e17fe7196fd4a46e6a9408d135812ca53ddf80.patch"; hash = "sha256-73zpSSF2yfbA7wxZVdKWnOqkMtdi/EkT8IjpXIMNUnc="; }) # afs: Add includes to pick up function prototypes (fetchpatch { url = "https://github.com/openafs/openafs/commit/8b516820abf1edace60276152e9ed18a0b30fc13.patch"; hash = "sha256-V+cMQw+l78amvjzMI0cgVzwtHNCVoSAfwwgSOhv3zNU="; }) # afs: Move function prototypes into headers (fetchpatch { url = "https://github.com/openafs/openafs/commit/c04c2d07226583846c3949a4855c7db4316438da.patch"; hash = "sha256-WrfPZvNNVN3VuuBGH4sshpJOoPP2hwVitQW8PqQCBRA="; }) # afs: Add afs_xioctl prototyes to afs_prototypes.h (fetchpatch { url = "https://github.com/openafs/openafs/commit/96932160fa8ef1cf4422e9e1d1ca2a449f8ffe93.patch"; hash = "sha256-HJzTJlKNGjuXALXoaUjuQEr5Us2KLM9Exuj7jGqvHyg="; }) # afs: Remove SRXAFSCB* protos from afs_prototypes.h (fetchpatch { url = "https://github.com/openafs/openafs/commit/53752b01bc734f4bd5f5da24ac116c7fcb2ac07f.patch"; hash = "sha256-OfiubrKbHoHS1J/WjMOaZ9njMHELnQAegLxiVfPFBX8="; }) # rx: Add function prototypes to rx_prototypes.h (fetchpatch { url = "https://github.com/openafs/openafs/commit/09f9660fbbb4f3c20ba9f2283169818372c3f474.patch"; hash = "sha256-KYGehW48hw71dAIdd5Z5U5Kvp72Gk4Tu2q+VA50LL7A="; }) # afs: fix 'ops' variable may be used uninitialized (fetchpatch { url = "https://github.com/openafs/openafs/commit/90b8dcff36e9b03ec01550ad1a070a0ab7db8c46.patch"; hash = "sha256-IIjuY9LL2BjnUh8W8n5ohUVY7RNk5qoH58JpimXqrNo="; }) # afs: Add static attribute to internal functions (fetchpatch { url = "https://github.com/openafs/openafs/commit/195f154aaf2d8aff1f6debdb47c0db8f07cb5c5e.patch"; hash = "sha256-LKBYqorko5HmaigKWFiIiYHgVnyc03UcQX6p8CjfYrs="; }) # rx: Add static attribute to internal functions (fetchpatch { url = "https://github.com/openafs/openafs/commit/4c92936aefede187e57a9a433c0c192af2fc5e84.patch"; hash = "sha256-+Oq8CFI3+29WdCabrHV4+AU3U3fuyIUO+wYzy/QJ/24="; }) # rxgen: Declare generated PKG_TranslateOpCode() (fetchpatch { url = "https://github.com/openafs/openafs/commit/57e0192a690942c2a0f4f1f685cfadf2106b763a.patch"; hash = "sha256-iErcC/J9L7TrjnbkJw9yHXR4wHCM+KHai0vzs+KEgfo="; }) # rxgen: Declare generated PKG_OpCodeStats() (fetchpatch { url = "https://github.com/openafs/openafs/commit/fef1fc6f740c6f7395cf51ce99ed296652579c7d.patch"; hash = "sha256-copfhVvIa6zScehQm6gZ5FaIT42wr+YoFdhPCN50xn4="; }) # Linux 6.8: use hlist iteration for dentry children (fetchpatch { url = "https://github.com/openafs/openafs/commit/18a2a932df9c1b6b3c7513a6c161d4259f052ca9.patch"; hash = "sha256-NwF1CvdI9ZjISc1A/nJP4Ea1LJY4lBnsbkRqvQFo5Wc="; }) # Linux 6.8: Remove ctl_table sentinels (fetchpatch { url = "https://github.com/openafs/openafs/commit/6333fae573f8a7b7656e9c1b05d445a37b951b88.patch"; hash = "sha256-g8acwb7bGF+LjQN8tVKFLXvATddN+8gSepVoM28AehA="; }) # Linux 6.8: Use roken's strlcpy() in kernel module (fetchpatch { url = "https://github.com/openafs/openafs/commit/7b4802efaf29ef76969c8b931a31e93dd4fbb000.patch"; hash = "sha256-4P+9VkDhMezPHa47a5L92Rh+6PMGxF54Agdx4uAU63Y="; }) # Linux: Remove weak attribute for key_type_keyring (fetchpatch { url = "https://github.com/openafs/openafs/commit/d1a42401fddc51bd2f16da39dfebe0f60fc670ad.patch"; hash = "sha256-hg9UTc/gKfo7OcklxkEHwCjabHdwd6XOKEvtn/azQys="; }) # Linux: Define afs_thread_wrapper() as static (fetchpatch { url = "https://github.com/openafs/openafs/commit/dfb6b53a6802e90f6bc2cd3cd39da467ce8e4488.patch"; hash = "sha256-xhkBWA6WxpJ9VOqvy5vjFUoLM2N2Ap2gdLva2o+q6n4="; }) # rxperf: Add -o option to rxperf client (fetchpatch { url = "https://github.com/openafs/openafs/commit/4fc27548be88947ef58e2a3a3654a08ec6c334d9.patch"; hash = "sha256-mteEhVU49aEeUAj77T7Mo4qmZNBwRZY13VOwXzht5kQ="; }) # Linux-6.9: file_lock mbrs moved to file_lock_core (fetchpatch { url = "https://github.com/openafs/openafs/commit/de7bc4890e4368b88f20e15a7d795fc1c54cef29.patch"; hash = "sha256-SXCf2fyN/Xa37O/CTe+Hjy7EY7VnEYV0QhXJx3zCws8="; }) # afs: Reintroduce and use DFlushDCache() (fetchpatch { url = "https://github.com/openafs/openafs/commit/3ff310182926ab783f0f07fa8667d1ebaabbc5de.patch"; hash = "sha256-+76X25+TLgqDuam4wAKa78QkvANs8NCnOi2EeA7tzs4="; }) # dir: check afs_dir_Create return code in afs_dir_MakeDir (fetchpatch { url = "https://github.com/openafs/openafs/commit/db39f77f0ec931816ba5cc265e87954173b435e2.patch"; hash = "sha256-7gX9f2cvrw0mO36T492B1WvInXtp1lNYoDUsGIQ9+Ag="; }) # dir: check DNew return code (fetchpatch { url = "https://github.com/openafs/openafs/commit/837e6a4ad28588f22b4e9ace9bfa4bb4f412485c.patch"; hash = "sha256-1NpJq4F5z9csdpfBNc0k439J7toIFMm2a576lrhC4so="; }) # afs: avoid panic in DNew when afs_WriteDCache fails (fetchpatch { url = "https://github.com/openafs/openafs/commit/4022359253fb6a645b01f99b820b7331c019115a.patch"; hash = "sha256-2sxgmk5Y4Ai5xlUwlEARQXL+z/05r7heYfBC+WV+8xo="; }) # afs: Correct comment typo in DNew() (fetchpatch { url = "https://github.com/openafs/openafs/commit/308ee38a30549afd38ad1f83bb537fd6b43513a8.patch"; hash = "sha256-qePB+/9uelKAyjbfaK5tUzDcIbrSIYVrOBF7kimKPrE="; }) # Linux-6.10: Use filemap_alloc_folio when avail (fetchpatch { url = "https://github.com/openafs/openafs/commit/0f6a3a402f4a66114da9231032bd68cdc4dee7bc.patch"; hash = "sha256-1D0mijyF4hbd+xCONT50cd6T9eCpeM8Li3nCI7HgLPA="; }) # Linux-6.10: define a wrapper for vmalloc (fetchpatch { url = "https://github.com/openafs/openafs/commit/658942f2791fad5e33ec7542158c16dfc66eed39.patch"; hash = "sha256-MhfAUX/eNOEkjO0cGVbnIdObMlGtLdCnnGfJECDwO+A="; }) # Linux-6.10: remove includes for asm/ia32_unistd.h (fetchpatch { url = "https://github.com/openafs/openafs/commit/03b280649f5e22ed74c217d7c98c3416a2fa9052.patch"; hash = "sha256-ZdXz2ziuflqz7zNzjepuGvwDAPM31FIzsoEa4iNdLmo="; }) # afs: avoid empty-body warning (fetchpatch { url = "https://github.com/openafs/openafs/commit/d8b56f21994ce66d8daebb7d69e792f34c1a19ed.patch"; hash = "sha256-10VUfZdZiOC8xSPM0nq8onqiv7X/Vv4/WwGlkqWkNkQ="; }) # Linux 6.10: Move 'inline' before func return type (fetchpatch { url = "https://github.com/openafs/openafs/commit/7097eec17bc01bcfc12c4d299136b2d3b94ec3d7.patch"; hash = "sha256-PZmqeXWJL3EQFD9250YfDwCY1rvSGVCbAhzyHP1pE0Q="; }) ]; nativeBuildInputs = [ autoconf automake flex libtool_2 perl which bison ] ++ kernel.moduleBuildDependencies; buildInputs = [ libkrb5 ]; hardeningDisable = [ "pic" ]; configureFlags = [ "--with-linux-kernel-build=${kernelBuildDir}" "--sysconfdir=/etc" "--localstatedir=/var" "--with-gssapi" ]; preConfigure = '' patchShebangs . for i in `grep -l -R '/usr/\(include\|src\)' .`; do echo "Patch /usr/include and /usr/src in $i" substituteInPlace $i \ --replace "/usr/include" "${glibc.dev}/include" \ --replace "/usr/src" "${kernelBuildDir}" done ./regen.sh -q ''; buildPhase = '' make V=1 only_libafs ''; installPhase = '' mkdir -p ${modDestDir} cp src/libafs/MODLOAD-*/libafs-${kernel.modDirVersion}.* ${modDestDir}/libafs.ko xz -f ${modDestDir}/libafs.ko ''; meta = with lib; { description = "Open AFS client kernel module"; homepage = "https://www.openafs.org"; license = licenses.ipl10; platforms = platforms.linux; maintainers = with maintainers; [ andersk maggesi spacefrogg ]; broken = kernel.isHardened; }; }