diff --git a/nixos/modules/services/network-filesystems/glusterfs.nix b/nixos/modules/services/network-filesystems/glusterfs.nix index db00cdc11abb..c218d5505566 100644 --- a/nixos/modules/services/network-filesystems/glusterfs.nix +++ b/nixos/modules/services/network-filesystems/glusterfs.nix @@ -180,7 +180,9 @@ in # Excludes one hook due to missing SELinux binaries. + '' mkdir -p /var/lib/glusterd/hooks/ - ${rsync}/bin/rsync -a --exclude="S10selinux-label-brick.sh" ${glusterfs}/var/lib/glusterd/hooks/ /var/lib/glusterd/hooks/ + # --copy-unsafe-links: the glusterfind hook is a symlink into the package's + # libexec that would dangle once copied verbatim into / (#257863). + ${rsync}/bin/rsync -a --copy-unsafe-links --exclude="S10selinux-label-brick.sh" ${glusterfs}/var/lib/glusterd/hooks/ /var/lib/glusterd/hooks/ ${tlsCmd} '' @@ -189,6 +191,12 @@ in + '' mkdir -p /var/lib/glusterd/glusterfind/.keys mkdir -p /var/lib/glusterd/hooks/1/delete/post/ + '' + # Volume option presets, installed by upstream under $out/var; copy them so + # `gluster volume set group ` works (#33159). + + '' + mkdir -p /var/lib/glusterd/groups/ + ${rsync}/bin/rsync -a ${glusterfs}/var/lib/glusterd/groups/ /var/lib/glusterd/groups/ ''; serviceConfig = { diff --git a/nixos/tests/glusterfs.nix b/nixos/tests/glusterfs.nix index 9224797704e2..ac4c8e7024f7 100644 --- a/nixos/tests/glusterfs.nix +++ b/nixos/tests/glusterfs.nix @@ -49,6 +49,14 @@ in server1.wait_for_unit("glusterd.service") server2.wait_for_unit("glusterd.service") + # The glusterfind delete hook must be a real file, not the dangling + # symlink it used to be after being copied out of the package (#257863). + server1.succeed("test -f /var/lib/glusterd/hooks/1/delete/post/S57glusterfind-delete-post") + server1.fail("test -L /var/lib/glusterd/hooks/1/delete/post/S57glusterfind-delete-post") + + # The volume option presets must be installed (#33159). + server1.succeed("test -f /var/lib/glusterd/groups/metadata-cache") + server1.wait_until_succeeds("gluster peer status") server2.wait_until_succeeds("gluster peer status") @@ -64,6 +72,9 @@ in server1.succeed("gluster volume create gv0 server1:/data/vg0 server2:/data/vg0") server1.succeed("gluster volume start gv0") + # Applying a group preset needs /var/lib/glusterd/groups populated (#33159). + server1.succeed("gluster volume set gv0 group metadata-cache") + # test clients client1.wait_for_unit("gluster.mount") client2.wait_for_unit("gluster.mount")