From 830218cc64f5af489971aa05189204479011bcf6 Mon Sep 17 00:00:00 2001 From: Markus Kowalewski Date: Fri, 16 Aug 2019 23:27:30 +0200 Subject: [PATCH 1/2] glusterfs: 4.0 -> 6.5 * remove patches (fixed upstream) * python2 -> python3 --- pkgs/tools/filesystems/glusterfs/default.nix | 35 ++-- ...10-glusterfind-var-data-under-prefix.patch | 6 +- ...lusterfind-log-remote-node_cmd-error.patch | 49 ------ ...glusterfs-python-remove-find_library.patch | 156 ------------------ ...sterfs-use-PATH-instead-of-hardcodes.patch | 138 ---------------- 5 files changed, 20 insertions(+), 364 deletions(-) delete mode 100644 pkgs/tools/filesystems/glusterfs/glusterfs-glusterfind-log-remote-node_cmd-error.patch delete mode 100644 pkgs/tools/filesystems/glusterfs/glusterfs-python-remove-find_library.patch delete mode 100644 pkgs/tools/filesystems/glusterfs/glusterfs-use-PATH-instead-of-hardcodes.patch diff --git a/pkgs/tools/filesystems/glusterfs/default.nix b/pkgs/tools/filesystems/glusterfs/default.nix index e915cc1c132..606e41e582e 100644 --- a/pkgs/tools/filesystems/glusterfs/default.nix +++ b/pkgs/tools/filesystems/glusterfs/default.nix @@ -1,4 +1,4 @@ -{stdenv, fetchurl, fuse, bison, flex_2_5_35, openssl, python2, ncurses, readline, +{stdenv, fetchurl, fuse, bison, flex_2_5_35, openssl, python3, ncurses, readline, autoconf, automake, libtool, pkgconfig, zlib, libaio, libxml2, acl, sqlite, liburcu, attr, makeWrapper, coreutils, gnused, gnugrep, which, openssh, gawk, findutils, utillinux, lvm2, btrfs-progs, e2fsprogs, xfsprogs, systemd, @@ -15,25 +15,26 @@ let # The command # find /nix/store/...-glusterfs-.../ -name '*.py' -executable # can help with finding new Python scripts. - version = "4.0.0"; + version = "6.5"; name="${baseName}-${version}"; url="https://github.com/gluster/glusterfs/archive/v${version}.tar.gz"; - sha256 = "0af3fwiixddds6gdwhkyq3l214mmjl2wpjc2qayp5rpz79lnclq3"; + sha256 = "17vdrw71ys1n5g9pdmzipmr706bslq0gbxxjhacxnrgsz8r4rl6a"; }; + buildInputs = [ fuse bison flex_2_5_35 openssl ncurses readline autoconf automake libtool pkgconfig zlib libaio libxml2 - acl sqlite liburcu attr makeWrapper - (python2.withPackages (pkgs: [ + acl sqlite liburcu attr makeWrapper utillinux + (python3.withPackages (pkgs: [ pkgs.flask pkgs.prettytable pkgs.requests pkgs.pyxattr ])) - # NOTE: `python2` has to be *AFTER* the above `python2.withPackages`, + # NOTE: `python3` has to be *AFTER* the above `python3.withPackages`, # to ensure that the packages are available but the `toPythonPath` # shell function used in `postFixup` is also still available. - python2 + python3 ]; # Some of the headers reference acl propagatedBuildInputs = [ @@ -65,21 +66,15 @@ rec { inherit (s) name version; inherit buildInputs propagatedBuildInputs; + patches = [ + # Remove when https://bugzilla.redhat.com/show_bug.cgi?id=1489610 is fixed + ./glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch + ]; + postPatch = '' sed -e '/chmod u+s/d' -i contrib/fuse-util/Makefile.am ''; - patches = [ - # Remove when https://bugzilla.redhat.com/show_bug.cgi?id=1450546 is fixed - ./glusterfs-use-PATH-instead-of-hardcodes.patch - # Remove when https://bugzilla.redhat.com/show_bug.cgi?id=1450593 is fixed - ./glusterfs-python-remove-find_library.patch - # Remove when https://bugzilla.redhat.com/show_bug.cgi?id=1489610 is fixed - ./glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch - # Remove when https://bugzilla.redhat.com/show_bug.cgi?id=1559130 is fixed - ./glusterfs-glusterfind-log-remote-node_cmd-error.patch - ]; - # Note that the VERSION file is something that is present in release tarballs # but not in git tags (at least not as of writing in v3.10.1). # That's why we have to create it. @@ -92,6 +87,7 @@ rec { preConfigure = '' echo "v${s.version}" > VERSION ./autogen.sh + export PYTHON=${python3}/bin/python ''; configureFlags = [ @@ -178,6 +174,9 @@ rec { # on a real TTY for testing purposes. echo "" | (mkdir -p nix-test-dir-for-gfid_to_path && touch b && $out/libexec/glusterfs/gfind_missing_files/gfid_to_path.py nix-test-dir-for-gfid_to_path) $out/share/glusterfs/scripts/eventsdash.py --help + + # this gets falsely loaded as module by glusterfind + rm -r $out/bin/conf.py ''; src = fetchurl { diff --git a/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch b/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch index f679fb8f4c1..f08d73cf3a6 100644 --- a/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch +++ b/pkgs/tools/filesystems/glusterfs/glusterfs-fix-bug-1489610-glusterfind-var-data-under-prefix.patch @@ -18,10 +18,10 @@ index f87d8a454..b4d3f5d10 100644 fi GLUSTERFS_LIBEXECDIR="$(eval echo $libexecdir)/glusterfs" -GLUSTERFSD_MISCDIR="$(eval echo $prefix)/var/lib/misc/glusterfsd" -+GLUSTERFSD_MISCDIR="$(eval echo $localstatedir)/var/lib/misc/glusterfsd" ++GLUSTERFSD_MISCDIR="$(eval echo $localstatedir)/lib/misc/glusterfsd" prefix=$old_prefix exec_prefix=$old_exec_prefix - --- + +-- 2.12.0 diff --git a/pkgs/tools/filesystems/glusterfs/glusterfs-glusterfind-log-remote-node_cmd-error.patch b/pkgs/tools/filesystems/glusterfs/glusterfs-glusterfind-log-remote-node_cmd-error.patch deleted file mode 100644 index 8bc00fdbf75..00000000000 --- a/pkgs/tools/filesystems/glusterfs/glusterfs-glusterfind-log-remote-node_cmd-error.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 92a6b84a37e7e2e0ec0655ca45cedb64ab72080e Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= -Date: Fri, 8 Sep 2017 02:40:01 +0200 -Subject: [PATCH] glusterfind: Log remote stderr on `node_cmd` error. - -The problem of lost stderr was introduced in -commit feea851fad4f89b48bfe89fe3b75250cc7bd6501. - -Change-Id: Ic98f9bc9682ae3bd9c3ebea3855667fc8ba2843d ---- - tools/glusterfind/src/main.py | 17 ++++++++++++++++- - 1 file changed, 16 insertions(+), 1 deletion(-) - -diff --git a/tools/glusterfind/src/main.py b/tools/glusterfind/src/main.py -index c125f970a..6fffce4b3 100644 ---- a/tools/glusterfind/src/main.py -+++ b/tools/glusterfind/src/main.py -@@ -75,12 +75,27 @@ def node_cmd(host, host_uuid, task, cmd, args, opts): - cmd = ["ssh", - "-oNumberOfPasswordPrompts=0", - "-oStrictHostKeyChecking=no", -+ # We force TTY allocation (-t -t) so that Ctrl+C is handed -+ # through; see: -+ # https://bugzilla.redhat.com/show_bug.cgi?id=1382236 -+ # Note that this turns stderr of the remote `cmd` -+ # into stdout locally. - "-t", - "-t", - "-i", pem_key_path, - "root@%s" % host] + cmd - -- execute(cmd, exit_msg="%s - %s failed" % (host, task), logger=logger) -+ (returncode, err, out) = execute(cmd, logger=logger) -+ if returncode != 0: -+ # Because the `-t -t` above turns the remote stderr into -+ # local stdout, we need to log both stderr and stdout -+ # here to print all error messages. -+ fail("%s - %s failed; stdout (including remote stderr):\n" -+ "%s\n" -+ "stderr:\n" -+ "%s" % (host, task, out, err), -+ returncode, -+ logger=logger) - - if opts.get("copy_outfile", False) and not localdir: - cmd_copy = ["scp", --- -2.12.0 - diff --git a/pkgs/tools/filesystems/glusterfs/glusterfs-python-remove-find_library.patch b/pkgs/tools/filesystems/glusterfs/glusterfs-python-remove-find_library.patch deleted file mode 100644 index 4757f2fce77..00000000000 --- a/pkgs/tools/filesystems/glusterfs/glusterfs-python-remove-find_library.patch +++ /dev/null @@ -1,156 +0,0 @@ -From e6293e367f56833457291e32a4df7b21a52365a7 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= -Date: Sat, 13 May 2017 18:54:36 +0200 -Subject: [PATCH] python: Remove all uses of find_library. Fixes #1450593 - -`find_library()` doesn't consider LD_LIBRARY_PATH on Python < 3.6. - -Change-Id: Iee26085cb5d14061001f19f032c2664d69a378a8 ---- - api/examples/getvolfile.py | 2 +- - geo-replication/syncdaemon/libcxattr.py | 3 +-- - geo-replication/syncdaemon/libgfchangelog.py | 6 ++---- - tests/features/ipctest.py | 10 ++-------- - tests/utils/libcxattr.py | 5 ++--- - tools/glusterfind/src/libgfchangelog.py | 3 +-- - .../features/changelog/lib/examples/python/libgfchangelog.py | 3 +-- - 7 files changed, 10 insertions(+), 22 deletions(-) - -diff --git a/api/examples/getvolfile.py b/api/examples/getvolfile.py -index 0c95213f0..32c2268b3 100755 ---- a/api/examples/getvolfile.py -+++ b/api/examples/getvolfile.py -@@ -3,7 +3,7 @@ - import ctypes - import ctypes.util - --api = ctypes.CDLL(ctypes.util.find_library("gfapi")) -+api = ctypes.CDLL("libgfapi.so") - api.glfs_get_volfile.argtypes = [ctypes.c_void_p, - ctypes.c_void_p, - ctypes.c_ulong] -diff --git a/geo-replication/syncdaemon/libcxattr.py b/geo-replication/syncdaemon/libcxattr.py -index 3671e102c..f576648b7 100644 ---- a/geo-replication/syncdaemon/libcxattr.py -+++ b/geo-replication/syncdaemon/libcxattr.py -@@ -10,7 +10,6 @@ - - import os - from ctypes import CDLL, create_string_buffer, get_errno --from ctypes.util import find_library - - - class Xattr(object): -@@ -25,7 +24,7 @@ class Xattr(object): - sizes we expect - """ - -- libc = CDLL(find_library("c"), use_errno=True) -+ libc = CDLL("libc.so.6", use_errno=True) - - @classmethod - def geterrno(cls): -diff --git a/geo-replication/syncdaemon/libgfchangelog.py b/geo-replication/syncdaemon/libgfchangelog.py -index 334f5e9ea..093ae157a 100644 ---- a/geo-replication/syncdaemon/libgfchangelog.py -+++ b/geo-replication/syncdaemon/libgfchangelog.py -@@ -9,14 +9,12 @@ - # - - import os --from ctypes import CDLL, RTLD_GLOBAL, create_string_buffer, \ -- get_errno, byref, c_ulong --from ctypes.util import find_library -+from ctypes import CDLL, RTLD_GLOBAL, create_string_buffer, get_errno, byref, c_ulong - from syncdutils import ChangelogException, ChangelogHistoryNotAvailable - - - class Changes(object): -- libgfc = CDLL(find_library("gfchangelog"), mode=RTLD_GLOBAL, -+ libgfc = CDLL("libgfchangelog.so", mode=RTLD_GLOBAL, - use_errno=True) - - @classmethod -diff --git a/tests/features/ipctest.py b/tests/features/ipctest.py -index 5aff319b8..933924861 100755 ---- a/tests/features/ipctest.py -+++ b/tests/features/ipctest.py -@@ -1,14 +1,8 @@ - #!/usr/bin/python - - import ctypes --import ctypes.util -- --# find_library does not lookup LD_LIBRARY_PATH and may miss the --# function. In that case, retry with less portable but explicit name. --libgfapi = ctypes.util.find_library("gfapi") --if libgfapi == None: -- libgfapi = "libgfapi.so" --api = ctypes.CDLL(libgfapi,mode=ctypes.RTLD_GLOBAL) -+ -+api = ctypes.CDLL("libgfapi.so",mode=ctypes.RTLD_GLOBAL) - - api.glfs_ipc.argtypes = [ ctypes.c_void_p, ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p ] - api.glfs_ipc.restype = ctypes.c_int -diff --git a/tests/utils/libcxattr.py b/tests/utils/libcxattr.py -index 149db72e6..4e6e6c46d 100644 ---- a/tests/utils/libcxattr.py -+++ b/tests/utils/libcxattr.py -@@ -11,7 +11,6 @@ - import os - import sys - from ctypes import CDLL, c_int, create_string_buffer --from ctypes.util import find_library - - - class Xattr(object): -@@ -28,9 +27,9 @@ class Xattr(object): - - if sys.hexversion >= 0x02060000: - from ctypes import DEFAULT_MODE -- libc = CDLL(find_library("libc"), DEFAULT_MODE, None, True) -+ libc = CDLL("libc.so.6", DEFAULT_MODE, None, True) - else: -- libc = CDLL(find_library("libc")) -+ libc = CDLL("libc.so.6") - - @classmethod - def geterrno(cls): -diff --git a/tools/glusterfind/src/libgfchangelog.py b/tools/glusterfind/src/libgfchangelog.py -index 0f6b40d6c..9ca3f326b 100644 ---- a/tools/glusterfind/src/libgfchangelog.py -+++ b/tools/glusterfind/src/libgfchangelog.py -@@ -11,14 +11,13 @@ - import os - from ctypes import CDLL, get_errno, create_string_buffer, c_ulong, byref - from ctypes import RTLD_GLOBAL --from ctypes.util import find_library - - - class ChangelogException(OSError): - pass - - --libgfc = CDLL(find_library("gfchangelog"), use_errno=True, mode=RTLD_GLOBAL) -+libgfc = CDLL("libgfchangelog.so", use_errno=True, mode=RTLD_GLOBAL) - - - def raise_oserr(): -diff --git a/xlators/features/changelog/lib/examples/python/libgfchangelog.py b/xlators/features/changelog/lib/examples/python/libgfchangelog.py -index 10e73c02b..2cdbf1152 100644 ---- a/xlators/features/changelog/lib/examples/python/libgfchangelog.py -+++ b/xlators/features/changelog/lib/examples/python/libgfchangelog.py -@@ -1,9 +1,8 @@ - import os - from ctypes import * --from ctypes.util import find_library - - class Changes(object): -- libgfc = CDLL(find_library("gfchangelog"), mode=RTLD_GLOBAL, use_errno=True) -+ libgfc = CDLL("libgfchangelog.so", mode=RTLD_GLOBAL, use_errno=True) - - @classmethod - def geterrno(cls): --- -2.12.0 - diff --git a/pkgs/tools/filesystems/glusterfs/glusterfs-use-PATH-instead-of-hardcodes.patch b/pkgs/tools/filesystems/glusterfs/glusterfs-use-PATH-instead-of-hardcodes.patch deleted file mode 100644 index acb15464e48..00000000000 --- a/pkgs/tools/filesystems/glusterfs/glusterfs-use-PATH-instead-of-hardcodes.patch +++ /dev/null @@ -1,138 +0,0 @@ -From 616381bc25b0e90198683fb049f994e82d467d96 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= -Date: Sat, 13 May 2017 02:45:49 +0200 -Subject: [PATCH] Don't use hardcoded /sbin, /usr/bin etc. paths. Fixes - #1450546. - -Instead, rely on programs to be in PATH, as gluster already -does in many places across its code base. - -Change-Id: Id21152fe42f5b67205d8f1571b0656c4d5f74246 ---- - contrib/fuse-lib/mount-common.c | 8 ++++---- - xlators/mgmt/glusterd/src/glusterd-ganesha.c | 6 +++--- - xlators/mgmt/glusterd/src/glusterd-quota.c | 6 +++--- - xlators/mgmt/glusterd/src/glusterd-snapshot.c | 4 ++-- - xlators/mgmt/glusterd/src/glusterd-utils.c | 14 +------------- - 5 files changed, 13 insertions(+), 25 deletions(-) - -diff --git a/contrib/fuse-lib/mount-common.c b/contrib/fuse-lib/mount-common.c -index e9f80fe81..6380dd867 100644 ---- a/contrib/fuse-lib/mount-common.c -+++ b/contrib/fuse-lib/mount-common.c -@@ -255,16 +255,16 @@ fuse_mnt_umount (const char *progname, const char *abs_mnt, - exit (1); - } - #ifdef GF_LINUX_HOST_OS -- execl ("/bin/umount", "/bin/umount", "-i", rel_mnt, -+ execl ("umount", "umount", "-i", rel_mnt, - lazy ? "-l" : NULL, NULL); -- GFFUSE_LOGERR ("%s: failed to execute /bin/umount: %s", -+ GFFUSE_LOGERR ("%s: failed to execute umount: %s", - progname, strerror (errno)); - #elif __NetBSD__ - /* exitting the filesystem causes the umount */ - exit (0); - #else -- execl ("/sbin/umount", "/sbin/umount", "-f", rel_mnt, NULL); -- GFFUSE_LOGERR ("%s: failed to execute /sbin/umount: %s", -+ execl ("umount", "umount", "-f", rel_mnt, NULL); -+ GFFUSE_LOGERR ("%s: failed to execute umount: %s", - progname, strerror (errno)); - #endif /* GF_LINUX_HOST_OS */ - exit (1); -diff --git a/xlators/mgmt/glusterd/src/glusterd-quota.c b/xlators/mgmt/glusterd/src/glusterd-quota.c -index 0e6629cf0..fcb4738b7 100644 ---- a/xlators/mgmt/glusterd/src/glusterd-quota.c -+++ b/xlators/mgmt/glusterd/src/glusterd-quota.c -@@ -30,7 +30,7 @@ - - #ifndef _PATH_SETFATTR - # ifdef GF_LINUX_HOST_OS --# define _PATH_SETFATTR "/usr/bin/setfattr" -+# define _PATH_SETFATTR "setfattr" - # endif - # ifdef __NetBSD__ - # define _PATH_SETFATTR "/usr/pkg/bin/setfattr" -@@ -335,7 +335,7 @@ _glusterd_quota_initiate_fs_crawl (glusterd_conf_t *priv, - - if (type == GF_QUOTA_OPTION_TYPE_ENABLE || - type == GF_QUOTA_OPTION_TYPE_ENABLE_OBJECTS) -- runner_add_args (&runner, "/usr/bin/find", ".", NULL); -+ runner_add_args (&runner, "find", ".", NULL); - - else if (type == GF_QUOTA_OPTION_TYPE_DISABLE) { - -@@ -351,7 +351,7 @@ _glusterd_quota_initiate_fs_crawl (glusterd_conf_t *priv, - VIRTUAL_QUOTA_XATTR_CLEANUP_KEY, "1", - "{}", "\\", ";", NULL); - #else -- runner_add_args (&runner, "/usr/bin/find", ".", -+ runner_add_args (&runner, "find", ".", - "-exec", _PATH_SETFATTR, "-n", - VIRTUAL_QUOTA_XATTR_CLEANUP_KEY, "-v", - "1", "{}", "\\", ";", NULL); -diff --git a/xlators/mgmt/glusterd/src/glusterd-snapshot.c b/xlators/mgmt/glusterd/src/glusterd-snapshot.c -index da0152366..f0d135350 100644 ---- a/xlators/mgmt/glusterd/src/glusterd-snapshot.c -+++ b/xlators/mgmt/glusterd/src/glusterd-snapshot.c -@@ -121,7 +121,7 @@ glusterd_build_snap_device_path (char *device, char *snapname, - } - - runinit (&runner); -- runner_add_args (&runner, "/sbin/lvs", "--noheadings", "-o", "vg_name", -+ runner_add_args (&runner, "lvs", "--noheadings", "-o", "vg_name", - device, NULL); - runner_redir (&runner, STDOUT_FILENO, RUN_PIPE); - snprintf (msg, sizeof (msg), "Get volume group for device %s", device); -@@ -1982,7 +1982,7 @@ glusterd_is_thinp_brick (char *device, uint32_t *op_errno) - - runinit (&runner); - -- runner_add_args (&runner, "/sbin/lvs", "--noheadings", "-o", "pool_lv", -+ runner_add_args (&runner, "lvs", "--noheadings", "-o", "pool_lv", - device, NULL); - runner_redir (&runner, STDOUT_FILENO, RUN_PIPE); - runner_log (&runner, this->name, GF_LOG_DEBUG, msg); -diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c -index 51db13df0..6fa7b92f9 100644 ---- a/xlators/mgmt/glusterd/src/glusterd-utils.c -+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c -@@ -6027,7 +6027,6 @@ static struct fs_info { - char *fs_tool_pattern; - char *fs_tool_pkg; - } glusterd_fs[] = { -- /* some linux have these in /usr/sbin/and others in /sbin/? */ - { "xfs", "xfs_info", NULL, "isize=", "xfsprogs" }, - { "ext3", "tune2fs", "-l", "Inode size:", "e2fsprogs" }, - { "ext4", "tune2fs", "-l", "Inode size:", "e2fsprogs" }, -@@ -6048,7 +6047,6 @@ glusterd_add_inode_size_to_dict (dict_t *dict, int count) - char *trail = NULL; - runner_t runner = {0, }; - struct fs_info *fs = NULL; -- char fs_tool_name[256] = {0, }; - static dict_t *cached_fs = NULL; - - memset (key, 0, sizeof (key)); -@@ -6085,17 +6083,7 @@ glusterd_add_inode_size_to_dict (dict_t *dict, int count) - cur_word = "N/A"; - goto cached; - } -- -- snprintf (fs_tool_name, sizeof (fs_tool_name), -- "/usr/sbin/%s", fs->fs_tool_name); -- if (sys_access (fs_tool_name, R_OK|X_OK) == 0) -- runner_add_arg (&runner, fs_tool_name); -- else { -- snprintf (fs_tool_name, sizeof (fs_tool_name), -- "/sbin/%s", fs->fs_tool_name); -- if (sys_access (fs_tool_name, R_OK|X_OK) == 0) -- runner_add_arg (&runner, fs_tool_name); -- } -+ runner_add_arg (&runner, fs->fs_tool_name); - break; - } - } --- -2.12.0 - From 6104ad00a1ce78ad96a9255869feef358730f2b7 Mon Sep 17 00:00:00 2001 From: Markus Kowalewski Date: Sat, 17 Aug 2019 01:28:43 +0200 Subject: [PATCH 2/2] nixos/glusterfs: add test --- nixos/tests/all-tests.nix | 1 + nixos/tests/glusterfs.nix | 65 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+) create mode 100644 nixos/tests/glusterfs.nix diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index c24c8ae61a5..c3e44ad6ce4 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -93,6 +93,7 @@ in gitlab = handleTest ./gitlab.nix {}; gitolite = handleTest ./gitolite.nix {}; gjs = handleTest ./gjs.nix {}; + glusterfs = handleTest ./glusterfs.nix {}; gnome3-xorg = handleTest ./gnome3-xorg.nix {}; gnome3 = handleTest ./gnome3.nix {}; gocd-agent = handleTest ./gocd-agent.nix {}; diff --git a/nixos/tests/glusterfs.nix b/nixos/tests/glusterfs.nix new file mode 100644 index 00000000000..9fd8bd2ed12 --- /dev/null +++ b/nixos/tests/glusterfs.nix @@ -0,0 +1,65 @@ +import ./make-test.nix ({ ... } : + +let + client = { pkgs, ... } : { + environment.systemPackages = [ pkgs.glusterfs ]; + fileSystems = pkgs.lib.mkVMOverride + [ { mountPoint = "/gluster"; + fsType = "glusterfs"; + device = "server1:/gv0"; + } ]; + }; + + server = { pkgs, ... } : { + networking.firewall.enable = false; + services.glusterfs.enable = true; + + # create a mount point for the volume + boot.initrd.postDeviceCommands = '' + ${pkgs.e2fsprogs}/bin/mkfs.ext4 -L data /dev/vdb + ''; + + virtualisation.emptyDiskImages = [ 1024 ]; + + fileSystems = pkgs.lib.mkVMOverride + [ { mountPoint = "/data"; + device = "/dev/disk/by-label/data"; + fsType = "ext4"; + } + ]; + }; +in { + name = "glusterfs"; + + nodes = { + server1 = server; + server2 = server; + client1 = client; + client2 = client; + }; + + testScript = '' + $server1->waitForUnit("glusterd.service"); + $server2->waitForUnit("glusterd.service"); + + # establish initial contact + $server1->succeed("sleep 2"); + $server1->succeed("gluster peer probe server2"); + $server1->succeed("gluster peer probe server1"); + + $server1->succeed("gluster peer status | grep Connected"); + + # create volumes + $server1->succeed("mkdir -p /data/vg0"); + $server2->succeed("mkdir -p /data/vg0"); + $server1->succeed("gluster volume create gv0 server1:/data/vg0 server2:/data/vg0"); + $server1->succeed("gluster volume start gv0"); + + # test clients + $client1->waitForUnit("gluster.mount"); + $client2->waitForUnit("gluster.mount"); + + $client1->succeed("echo test > /gluster/file1"); + $client2->succeed("grep test /gluster/file1"); + ''; +})