-
Notifications
You must be signed in to change notification settings - Fork 56
Building GlusterFS
Below versions of GlusterFS are available in respective distributions at the time of creation of these build instructions:
- RHEL 8.0 -
3.12.2
- Ubuntu 16.04 -
3.7.6
- Ubuntu 18.04 -
3.13.2
- Ubuntu 19.04 -
5.3
The instructions provided below specify the steps to build GlusterFS 6.5 on Linux on IBM Z for following distributions:
- RHEL (7.5, 7.6, 7.7, 8.0)
- SLES (12 SP4, 15, 15 SP1)
- Ubuntu (16.04, 18.04, 19.04)
- When following the steps below please use a super user unless otherwise specified
- A directory
/<source root>/
will be referred to in these instructions, this is a temporary writable directory anywhere you'd like to place it
If you want to build GlusterFS using manual steps, go to Step 2.
Use the following commands to build GlusterFS using the build script. Please make sure you have wget installed.
wget -q https://raw.githubusercontent.com/linux-on-ibm-z/scripts/master/GlusterFS/6.5/build_glusterfs.sh
# Build GlusterFS
bash build_glusterfs.sh [Provide -t option for executing build with tests]
If the build completes successfully, go to STEP 5. In case of error, check logs
for more details or go to STEP 2 to follow manual build steps.
export SOURCE_ROOT=/<source_root>/
-
RHEL (7.5, 7.6, 7.7)
yum install -y autoconf automake bison bzip2 flex fuse-devel gcc git glib2-devel libacl-devel libaio-devel libibverbs-devel librdmacm-devel libtool libxml2-devel libuuid-devel lvm2 make openssl-devel pkgconfig python readline-devel wget zlib-devel
-
Building urcu
cd $SOURCE_ROOT wget https://lttng.org/files/urcu/userspace-rcu-0.10.2.tar.bz2 tar xvjf userspace-rcu-0.10.2.tar.bz2 cd userspace-rcu-0.10.2 ./configure --prefix=/usr --libdir=/usr/lib64 make make install
-
-
RHEL 8
yum install -y autoconf automake bison bzip2 flex fuse-devel gcc git glib2-devel libacl-devel libaio-devel libibverbs-devel librdmacm-devel libtool libxml2-devel libuuid-devel lvm2 make openssl-devel pkgconfig python3 readline-devel wget zlib-devel wget tar gzip libtirpc-devel
-
Building urcu
cd $SOURCE_ROOT wget https://lttng.org/files/urcu/userspace-rcu-0.10.2.tar.bz2 tar xvjf userspace-rcu-0.10.2.tar.bz2 cd userspace-rcu-0.10.2 ./configure --prefix=/usr --libdir=/usr/lib64 make make install
-
Building rpcsvc
cd $SOURCE_ROOT wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz tar xzvf rpcsvc-proto-1.4.tar.gz cd rpcsvc-proto-1.4 ./configure make && make install
-
-
SLES (12 SP4)
zypper install -y autoconf automake bison cmake flex fuse-devel gcc git glib2-devel libacl-devel libaio-devel librdmacm1 libopenssl-devel libtool liburcu-devel libuuid-devel libxml2-devel lvm2 make pkg-config python2 rdma-core-devel readline-devel zlib-devel which
-
SLES (15, 15 SP1)
zypper install -y autoconf automake bison cmake flex fuse-devel gcc git glib2-devel libacl-devel libaio-devel librdmacm1 libopenssl-devel libtool liburcu-devel libuuid-devel libxml2-devel lvm2 make pkg-config python3 rdma-core-devel readline-devel zlib-devel
-
Ubuntu (16.04, 18.04, 19.04)
apt-get update apt-get install -y autoconf automake bison flex gcc git libacl1-dev libaio-dev libfuse-dev libglib2.0-dev libibverbs-dev librdmacm-dev libreadline-dev libssl-dev libtool liburcu-dev libxml2-dev lvm2 make openssl pkg-config python3 uuid-dev zlib1g-dev
-
Download and configure source
cd $SOURCE_ROOT git clone -b v6.5 https://github.com/gluster/glusterfs cd glusterfs ./autogen.sh ./configure --enable-gnfs # For RHEL, SLES 15, SLES 15 SP1 and Ubuntu PYTHON=`which python2` ./configure --enable-gnfs --disable-events # For SLES 12 SP4
-
Create a patch file
patch_io-threads.diff
with the following contents: (For RHEL 8.0, SLES and Ubuntu only)diff --git a/xlators/performance/io-threads/src/io-threads.h b/xlators/performance/io-threads/src/io-threads.h index f54d2f4..1d9c22e 100644 --- a/xlators/performance/io-threads/src/io-threads.h +++ b/xlators/performance/io-threads/src/io-threads.h @@ -34,7 +34,7 @@ struct iot_conf; #define IOT_DEFAULT_THREADS 16 #define IOT_MAX_THREADS 64 -#define IOT_THREAD_STACK_SIZE ((size_t)(256 * 1024)) +#define IOT_THREAD_STACK_SIZE ((size_t)(512 * 1024)) typedef struct { struct list_head clients;
Apply the patch using the command below:
git apply patch_io-threads.diff
-
Build and install
make make install ldconfig
-
RHEL (7.5, 7.6, 7.7)
yum install -y acl attr bc bind-utils boost-devel docbook-style-xsl expat-devel gcc-c++ gdb net-tools nfs-utils psmisc pyxattr vim xfsprogs yajl
-
RHEL 8.0
yum install -y acl attr bc bind-utils boost-devel docbook-style-xsl expat-devel gcc-c++ gdb net-tools nfs-utils psmisc vim xfsprogs yajl redhat-rpm-config python3-pip python3-devel perl-Test-Harness
-
SLES 12 SP4
zypper install -y acl attr bc bind-utils boost-devel gcc-c++ gdb libexpat-devel libxml2-tools net-tools nfs-utils psmisc vim xfsprogs python-xattr
-
SLES (15, 15 SP1)
zypper install -y acl attr bc bind-utils gdb libxml2-tools net-tools-deprecated nfs-utils psmisc thin-provisioning-tools vim xfsprogs python3-xattr
-
Ubuntu (16.04, 18.04, 19.04)
apt-get install -y acl attr bc dbench dnsutils libxml2-utils net-tools nfs-common psmisc python3-pyxattr thin-provisioning-tools vim xfsprogs yajl-tools rpm2cpio gdb
-
Install gstack command (Ubuntu only)
cd $SOURCE_ROOT wget http://rpmfind.net/linux/opensuse/update/leap/42.1/oss/x86_64/gdb-7.11.1-16.1.x86_64.rpm rpm2cpio gdb-7.11.1-16.1.x86_64.rpm | cpio -idmv mv ./usr/bin/gstack /usr/bin/ rm -r ./etc ./usr rm gdb-7.11.1-16.1.x86_64.rpm
-
Install pyxattr (RHEL 8.0 only)
ln -s /usr/bin/gcc /usr/bin/s390x-linux-gnu-gcc pip3 install pyxattr
-
Building DBENCH (For RHEL and SLES only)
cd $SOURCE_ROOT git clone https://github.com/sahlberg/dbench cd dbench ./autogen.sh ./configure make make install
-
Building thin-provisioning-tools (For RHEL and SLES 12 SP4 only)
cd $SOURCE_ROOT git clone https://github.com/jthornber/thin-provisioning-tools cd thin-provisioning-tools git checkout v0.7.6 autoreconf ./configure make make install
-
Building YAJL (For SLES only)
cd $SOURCE_ROOT git clone https://github.com/lloyd/yajl cd yajl git checkout 2.1.0 ./configure make install
-
Create a patch file
patch_tests.diff
with the following contents:diff --git a/tests/basic/distribute/throttle-rebal.t b/tests/basic/distribute/throttle-rebal.t index f4823cf..1cc3cac 100644 --- a/tests/basic/distribute/throttle-rebal.t +++ b/tests/basic/distribute/throttle-rebal.t @@ -17,7 +17,7 @@ function set_throttle { } #Determine number of cores -cores=$(cat /proc/cpuinfo | grep processor | wc -l) +cores=$(cat /proc/cpuinfo | grep -w processor | wc -l) if [ "$cores" == "" ]; then echo "Could not get number of cores available" fi diff --git a/tests/bugs/distribute/bug-1161311.t b/tests/bugs/distribute/bug-1161311.t index c52c69b..45b4c7b 100755 --- a/tests/bugs/distribute/bug-1161311.t +++ b/tests/bugs/distribute/bug-1161311.t @@ -89,6 +89,7 @@ done ## FILE1 and FILE2 hashes are, 678b1c4a e22c1ada, so they fall ## into separate bricks when brick count is 3 TEST mv $M0/dir1/FILE2 $M0/dir1/FILE1 +brick_loc=$(get_backend_paths $M0/dir1/FILE1) # unmount and remount the volume EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $M0 @@ -99,7 +100,7 @@ TEST $CLI volume rebalance $V0 start force # Wait for FILE to get the sticky bit on, so that file is under # active rebalance, before creating the links -TEST checksticky $B0/${V0}3/dir1/FILE1 +TEST checksticky $brick_loc # Create the links ## FILE3 FILE5 FILE7 have hashes, c8c91469 566d26ce 22ce7eba @@ -120,7 +121,7 @@ cd / # Ideally for this test to have done its job, the file should still be # under migration, so check the sticky bit again -TEST checksticky $B0/${V0}3/dir1/FILE1 +TEST checksticky $brick_loc # Wait for rebalance to complete EXPECT_WITHIN $REBALANCE_TIMEOUT "completed" rebalance_status_field $V0 diff --git a/tests/bugs/distribute/bug-1193636.t b/tests/bugs/distribute/bug-1193636.t index ccde02e..e97d705 100644 --- a/tests/bugs/distribute/bug-1193636.t +++ b/tests/bugs/distribute/bug-1193636.t @@ -40,12 +40,13 @@ dd if=/dev/zero of=$M0/dir1/FILE2 bs=64k count=10240 # Rename the file to create a linkto, for rebalance to # act on the file TEST mv $M0/dir1/FILE2 $M0/dir1/FILE1 +brick_loc=$(get_backend_paths $M0/dir1/FILE1) build_tester $(dirname $0)/bug-1193636.c TEST $CLI volume rebalance $V0 start force -TEST checksticky $B0/${V0}3/dir1/FILE1 +TEST checksticky $brick_loc TEST setfattr -n "user.test1" -v "test1" $M0/dir1/FILE1 TEST setfattr -n "user.test2" -v "test1" $M0/dir1/FILE1 diff --git a/tests/bugs/nfs/bug-847622.t b/tests/bugs/nfs/bug-847622.t index 5ccee72..20d5ec5 100755 --- a/tests/bugs/nfs/bug-847622.t +++ b/tests/bugs/nfs/bug-847622.t @@ -30,7 +30,7 @@ cd $N0 # simple getfacl setfacl commands TEST touch testfile -TEST setfacl -m u:14:r testfile +TEST setfacl -m u:14:r $B0/brick0/testfile TEST getfacl testfile cd diff --git a/tests/basic/posix/shared-statfs.t b/tests/basic/posix/shared-statfs.t index 3343956..7776b44 100644 --- a/tests/basic/posix/shared-statfs.t +++ b/tests/basic/posix/shared-statfs.t @@ -28,7 +28,7 @@ TEST $GFS --volfile-server=$H0 --volfile-id=$V0 $M0 total_space=$(df -P $M0 | tail -1 | awk '{ print $2}') # Keeping the size less than 200M mainly because XFS will use # some storage in brick to keep its own metadata. -TEST [ $total_space -gt 194000 -a $total_space -lt 200000 ] +TEST [ $total_space -gt 193000 -a $total_space -lt 200000 ] TEST force_umount $M0 diff --git a/tests/bugs/glusterd/bug-1242875-do-not-pass-volinfo-quota.t b/tests/bugs/glusterd/ bug-1242875-do-not-pass-volinfo-quota.t index c229d43..79539ed 100644 --- a/tests/bugs/glusterd/bug-1242875-do-not-pass-volinfo-quota.t +++ b/tests/bugs/glusterd/bug-1242875-do-not-pass-volinfo-quota.t @@ -24,6 +24,7 @@ EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" get_quotad_count ## Killing all gluster process pkill gluster; +sleep 5; ## there should not be any quota daemon running after killing quota process EXPECT_WITHIN $PROCESS_UP_TIMEOUT "0" get_quotad_count diff --git a/tests/bugs/quota/bug-1293601.t b/tests/bugs/quota/bug-1293601.t index 741758b..688299f 100644 --- a/tests/bugs/quota/bug-1293601.t +++ b/tests/bugs/quota/bug-1293601.t @@ -28,6 +28,6 @@ EXPECT_WITHIN $MARKER_UPDATE_TIMEOUT "1.0MB" quotausage "/" TEST $CLI volume quota $V0 disable TEST $CLI volume quota $V0 enable -EXPECT_WITHIN 60 "1.0MB" quotausage "/" +EXPECT_WITHIN 180 "1.0MB" quotausage "/" cleanup; diff --git a/tests/bugs/shard/bug-1251824.t b/tests/bugs/shard/bug-1251824.t index d81685d..502613b 100644 --- a/tests/bugs/shard/bug-1251824.t +++ b/tests/bugs/shard/bug-1251824.t @@ -14,7 +14,7 @@ TEST $CLI volume set $V0 features.shard-block-size 4MB TEST $CLI volume start $V0 TEST glusterfs --volfile-id=$V0 --volfile-server=$H0 $M0 -TEST useradd -M test_user 2>/dev/null +TEST useradd -UM test_user 2>/dev/null # Create 3 files as root. TEST touch $M0/foo diff --git a/tests/bugs/shard/bug-1468483.t b/tests/bugs/shard/bug-1468483.t index e462b8d..e2d2ee1 100644 --- a/tests/bugs/shard/bug-1468483.t +++ b/tests/bugs/shard/bug-1468483.t @@ -35,7 +35,7 @@ TEST stat $B0/${V0}0/.shard/$gfid_foo.6 EXPECT "7" echo `$CLI volume profile $V0 info incremental | grep -w FSYNC | awk '{print $8}'` -useradd -M test_user 2>/dev/null +useradd -UM test_user 2>/dev/null TEST touch $M0/bar diff --git a/tests/basic/distribute/dir-heal.t b/tests/basic/distribute/dir-heal.t index 851f765..23e1070 100644 --- a/tests/basic/distribute/dir-heal.t +++ b/tests/basic/distribute/dir-heal.t @@ -30,8 +30,8 @@ TEST glusterfs --entry-timeout=0 --attribute-timeout=0 -s $H0 --volfile-id $V0 $ ls $M0/ cd $M0 -TEST kill_brick $V0 $H0 $B0/$V0-1 -EXPECT_WITHIN $PROCESS_UP_TIMEOUT "0" brick_up_status $V0 $H0 $B0/$V0-1 +TEST kill_brick $V0 $H0 $B0/$V0-2 +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "0" brick_up_status $V0 $H0 $B0/$V0-2 TEST mkdir dir{1..4} @@ -51,7 +51,7 @@ TEST setfattr -n "user.test" -v "test" $M0/dir4 # Start all bricks TEST $CLI volume start $V0 force -EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" brick_up_status $V0 $H0 $B0/$V0-1 +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" brick_up_status $V0 $H0 $B0/$V0-2 #$CLI volume status @@ -62,18 +62,18 @@ stat $M0/dir* > /dev/null # Check that directories have been created on the brick that was killed -TEST ls $B0/$V0-1/dir1 +TEST ls $B0/$V0-2/dir1 -TEST ls $B0/$V0-1/dir2 -EXPECT "777" stat -c "%a" $B0/$V0-1/dir2 +TEST ls $B0/$V0-2/dir2 +EXPECT "777" stat -c "%a" $B0/$V0-2/dir2 -TEST ls $B0/$V0-1/dir3 -EXPECT "test" getfattr -n "user.test" --absolute-names --only-values $B0/$V0-1/dir3 +TEST ls $B0/$V0-2/dir3 +EXPECT "test" getfattr -n "user.test" --absolute-names --only-values $B0/$V0-2/dir3 -TEST ls $B0/$V0-1/dir4 -EXPECT "777" stat -c "%a" $B0/$V0-1/dir4 -EXPECT "test" getfattr -n "user.test" --absolute-names --only-values $B0/$V0-1/dir4 +TEST ls $B0/$V0-2/dir4 +EXPECT "777" stat -c "%a" $B0/$V0-2/dir4 +EXPECT "test" getfattr -n "user.test" --absolute-names --only-values $B0/$V0-2/dir4 TEST rm -rf $M0/* @@ -97,8 +97,8 @@ ls $M0/ cd $M0 TEST mkdir dir{1..4} -TEST kill_brick $V0 $H0 $B0/$V0-1 -EXPECT_WITHIN $PROCESS_UP_TIMEOUT "0" brick_up_status $V0 $H0 $B0/$V0-1 +TEST kill_brick $V0 $H0 $B0/$V0-2 +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "0" brick_up_status $V0 $H0 $B0/$V0-2 # No change for dir1 # Change permissions for dir2 @@ -116,7 +116,7 @@ TEST setfattr -n "user.test" -v "test" $M0/dir4 # Start all bricks TEST $CLI volume start $V0 force -EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" brick_up_status $V0 $H0 $B0/$V0-1 +EXPECT_WITHIN $PROCESS_UP_TIMEOUT "1" brick_up_status $V0 $H0 $B0/$V0-2 #$CLI volume status @@ -127,16 +127,16 @@ stat $M0/dir* > /dev/null # Check directories on the brick that was killed -TEST ls $B0/$V0-1/dir2 -EXPECT "777" stat -c "%a" $B0/$V0-1/dir2 +TEST ls $B0/$V0-2/dir2 +EXPECT "777" stat -c "%a" $B0/$V0-2/dir2 -TEST ls $B0/$V0-1/dir3 -EXPECT "test" getfattr -n "user.test" --absolute-names --only-values $B0/$V0-1/dir3 +TEST ls $B0/$V0-2/dir3 +EXPECT "test" getfattr -n "user.test" --absolute-names --only-values $B0/$V0-2/dir3 -TEST ls $B0/$V0-1/dir4 -EXPECT "777" stat -c "%a" $B0/$V0-1/dir4 -EXPECT "test" getfattr -n "user.test" --absolute-names --only-values $B0/$V0-1/dir4 +TEST ls $B0/$V0-2/dir4 +EXPECT "777" stat -c "%a" $B0/$V0-2/dir4 +EXPECT "test" getfattr -n "user.test" --absolute-names --only-values $B0/$V0-2/dir4 cd diff --git a/tests/basic/fops-sanity.c b/tests/basic/fops-sanity.c index aff72d8..8245414 100644 --- a/tests/basic/fops-sanity.c +++ b/tests/basic/fops-sanity.c @@ -21,6 +21,7 @@ #include <fcntl.h> #include <unistd.h> #include <sys/types.h> +#include <sys/sysmacros.h> #include <sys/stat.h> #include <sys/xattr.h> #include <errno.h>
Apply the patch using the command below:
git apply patch_tests.diff
-
Create a patch file
patch_dbench-tests.diff
with the following content (Only for RHEL and SLES):diff --git a/tests/bugs/rpc/bug-847624.t b/tests/bugs/rpc/bug-847624.t index fe8fc9828..cd48a7b5f 100755 --- a/tests/bugs/rpc/bug-847624.t +++ b/tests/bugs/rpc/bug-847624.t @@ -20,7 +20,7 @@ EXPECT_WITHIN $NFS_EXPORT_TIMEOUT "1" is_nfs_export_available; TEST mount_nfs $H0:/$V0 $N0 nolock cd $N0 #7 -TEST dbench -t 10 10 +TEST dbench -c/usr/local/share/doc/loadfiles/client.txt -Bfileio -t 10 10 TEST rm -rf $N0/* cd EXPECT_WITHIN $UMOUNT_TIMEOUT "Y" force_umount $N0
-
Create a patch file
patch_run-tests.diff
with the following contents: (Only for Ubuntu 16.04 and SLES 12 SP4, reference to the issue.)diff --git a/run-tests.sh b/run-tests.sh index 5683b21..f2e8950 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -128,10 +128,10 @@ function check_dependencies() fi # Check for netstat - env netstat --version > /dev/null 2>&1 - if [ $? -ne 0 ]; then - MISSING="$MISSING netstat" - fi + # env netstat --version > /dev/null 2>&1 + # if [ $? -ne 0 ]; then + # MISSING="$MISSING netstat" + # fi # Check for the Perl Test Harness env prove --version > /dev/null 2>&1 @@ -165,10 +165,10 @@ function check_dependencies() fi # Check for netstat - env netstat --version > /dev/null 2>&1 - if [ $? -ne 0 ]; then - MISSING="$MISSING netstat" - fi + # env netstat --version > /dev/null 2>&1 + # if [ $? -ne 0 ]; then + # MISSING="$MISSING netstat" + # fi # check for psutil python package test `uname -s` == "Darwin" || test `uname -s` == "FreeBSD" && {
Apply the patch using the command below:
git apply patch_run-tests.diff
-
Run the test cases
cd $SOURCE_ROOT/glusterfs ./run-tests.sh
Note:
-
If any of the tests fail with error volume create: patchy: failed: Host is not in 'Peer in Cluster' state, make changes to file /etc/hosts by copying the host details entry that is present in the beginning to the section IPv6 capable hosts and replace 0.0.0.0 with the IP address of the host. It should be similar to : 0.0.0.0 .xyz.com hostname
-
If you want to use the kernel NFS server or client on a Gluster storage server, make sure to disable the Gluster NFS server:
gluster volume set <VOLUME> nfs.disable true
-
For geo-replication test case : Password-less SSH login has to be set up. Refer to the
Setting Up the Environment for Geo-replication
in the documentation. -
The patch for
io-threads.h
will allow./tests/features/weighted-rebalance.t
test case to pass. -
The
is_nfs_export_available
function fromnfs.rc
used in some tests may fail intermittently. You may try to enable rpcbind as that may fix some of the test cases. The community is aware this behaviour, refer here for more info. -
The test failures below are observed on s390x due to the little endian/big endian specific hash values calculations. Refer to issue here for further info.
./tests/basic/changelog/changelog-rename.t
./tests/basic/namespace.t
./tests/bugs/glusterfs/bug-902610.t
./tests/bugs/posix/bug-1619720.t
./tests/bugs/replicate/bug-1655854-support-dist-to-rep3-arb-conversion.t
-
For
./tests/bitrot/bug-1207627-bitrot-scrub-status.t
test case: This test failure is under investigation, refer to this issue for details. -
For
./tests/features/ssl-ciphers.t
test case: The test case is failing for both SLES 15 and Ubuntu 18.04. Changes have been made in master branch here. -
For
./tests/bugs/glusterfs/bug-866459.t
test case: This test is under investigation, refer to this issue for details. -
For tests under
./tests/00-geo-rep/
, the locale of the system must be UTF-8 for the test cases to pass. -
For
./tests/bugs/glusterfs-server/bug-861542.t
test case: If the hostname of the machine is long, the test case will fail. The hostname of the machine can be shortened temporarily to get the test case to pass. -
For
./tests/bugs/posix/bug-990028.t
test case: This test fails if the file system is of type ext4, changing the file system to xfs will fix this test. -
These are failures that appear on x86_64 and s390x:
./tests/basic/cloudsync-sanity.t
./tests/basic/gfapi/gfapi-copy-file-range.t
./tests/basic/playground/template-xlator-sanity.t
./tests/bugs/cli/bug-1320388.t
./tests/bugs/fuse/bug-985074.t
./tests/bugs/glusterfs-server/bug-887145.t
./tests/bugs/nfs/bug-1116503.t
./tests/bugs/nfs/bug-1157223-symlink-mounting.t
./tests/bugs/nfs/bug-974972.t
./tests/bugs/rpc/bug-954057.t
./tests/features/ssl-authz.t
./tests/bugs/shard/bug-1272986.t
./tests/bugs/shard/unlinks-and-renames.t
./tests/bugs/snapshot/bug-1399598-uss-with-ssl.t
-
Additional information on the GlusterFS test framework can be found here.
glusterd
Refer Documentation for instructions.
https://www.gluster.org/
https://github.com/gluster/glusterfs
http://docs.gluster.org/en/latest/Developer-guide/Building-GlusterFS/
The information provided in this article is accurate at the time of writing, but on-going development in the open-source projects involved may make the information incorrect or obsolete. Please open issue or contact us on IBM Z Community if you have any questions or feedback.