[Gluster-devel] Fwd: Port GlusterFS as a GSoC 2013 project

Kaleb S. KEITHLEY kkeithle at redhat.com
Fri Apr 26 17:22:33 UTC 2013


On 04/26/2013 08:33 AM, John Mark Walker wrote:
> I would personally very much like to see this.
>
> The people who might be able to assist you are Emmanual Dreyfus, CC'd, the NetBSD maintainer, and Kaleb, who has lots of free time on his hands ;)
>
> I jest - I know Kaleb is pretty busy. Hopefully he can spare a few cycles for mentorship.
>

I'd like to see it done as well. I say go for it. I'd wager that doing 
this will go a long way to making it work on Mac OS X again too.

FWIW, I have looked at this from time to time. It seems that a 
fusefs-kmod pkg for 9.1-release finally materialized a couple weeks ago. 
That has been the major impediment to a port to 9.1 anyway, although a 
port to earlier FreeBSD releases maybe have been possible before now.

Attached is a short patch against master/HEAD that I spent a couple 
hours creating this morning. It should get you off to a good start. I 
left contrib/fuse-util as an exercise. ;-) With my patch, everything 
configured out of the box¹ compiles, except for contrib/fuse-util, which 
I have left as an exercise.

As far as what remains to be done then, my list would be:
1. port contrib/fuse-util.
2. of the pieces that don't currently auto-configure, explore whether 
any of them can or should
3. evaluate whether the changes in my patch are actually correct.
4. write /etc/rc.d/ script
4. package it all
5. submit changes in gerrit and get them through review.
6. put a package or set of packages up for download/distribution on 
ftp.freebsd.org

Regards

--

Kaleb

¹ Here's what I get by default when I run configure:
   GlusterFS configure summary
   ===========================
   FUSE client          : no
   Infiniband verbs     : no
   epoll IO multiplex   : no
   argp-standalone      : yes
   fusermount           : yes
   readline             : yes
   georeplication       : no
   Linux-AIO            : no
   Enable Debug         : no
   systemtap            : yes
   Block Device backend : no

Here's the list of packages I had to install in order to build:
   autoconf-2.69
   autoconf-wrapper-20101119
   automake-1.12.4
   automake-wrapper-20101119
   bison-2.5.1,1
   ca_root_nss-3.14
   curl-7.24.0_1
   cvsps-2.1_1
   expat-2.0.1_2
   flex-2.5.37
   fusefs-kmod-0.3.9.p1.20080208_11
   gettext-0.18.1.1
   git-1.8.0
   libiconv-1.14
   libtool-2.4.2
   libxml2-2.7.8_5
   m4-1.4.16_1,1
   p5-Error-0.17018
   p5-Net-SMTP-SSL-1.01_1
   perl-5.14.2_2
   pkgconf-0.8.9
   python27-2.7.3_3

-------------- next part --------------
diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c
index 61c524e..d745a6a 100644
--- a/api/src/glfs-fops.c
+++ b/api/src/glfs-fops.c
@@ -12,6 +12,7 @@
 #include "glfs-internal.h"
 #include "glfs-mem-types.h"
 #include "syncop.h"
+#include "compat-errno.h"
 #include "glfs.h"
 
 
diff --git a/configure.ac b/configure.ac
index 6357b19..91642f0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -578,7 +578,12 @@ case $host_os in
 	GF_CFLAGS="${ARGP_STANDALONE_CPPFLAGS} -O0"
 	GF_CFLAGS="${GF_CFLAGS} -DTHREAD_UNSAFE_BASENAME"
 	GF_CFLAGS="${GF_CFLAGS} -DTHREAD_UNSAFE_DIRNAME"
+	GF_CFLAGS="${GF_CFLAGS} -D_LIBGEN_H_"
+	GF_CFLAGS="${GF_CFLAGS} -DO_DSYNC=0"
+	GF_CFLAGS="${GF_CFLAGS} -Dxdr_quad_t=xdr_longlong_t"
+	GF_CFLAGS="${GF_CFLAGS} -Dxdr_u_quad_t=xdr_u_longlong_t"
 	GF_GLUSTERFS_CFLAGS="${GF_CFLAGS}"
+	GF_FUSE_CFLAGS="-DFUSERMOUNT_DIR=\\\"\$(sbindir)\\\""
 	GF_LDADD="${ARGP_STANDALONE_LDADD}"
 	if test "x$ac_cv_header_execinfo_h" = "xyes"; then
 	   GF_GLUSTERFS_LIBS="-lexecinfo"
diff --git a/contrib/fuse-lib/mount-common.c b/contrib/fuse-lib/mount-common.c
index fd6cce4..f519abb 100644
--- a/contrib/fuse-lib/mount-common.c
+++ b/contrib/fuse-lib/mount-common.c
@@ -23,7 +23,7 @@
  * see the commit log and per-function comments.
  */
 
-#ifndef __NetBSD__
+#ifndef GF_BSD_HOST_OS
 /* FUSE: cherry-picked bd99f9cf */
 static int
 mtab_needs_update (const char *mnt)
diff --git a/contrib/fuse-lib/mount-gluster-compat.h b/contrib/fuse-lib/mount-gluster-compat.h
index 4fc2062..cf06a8a 100644
--- a/contrib/fuse-lib/mount-gluster-compat.h
+++ b/contrib/fuse-lib/mount-gluster-compat.h
@@ -21,22 +21,24 @@
 #include <errno.h>
 #include <dirent.h>
 #include <signal.h>
-#ifndef __NetBSD__
+#ifndef GF_BSD_HOST_OS
 #include <mntent.h>
-#endif /* __NetBSD__ */
+#endif /* GF_BSD_HOST_OS */
 #include <sys/stat.h>
 #include <sys/poll.h>
 #include <sys/un.h>
 #include <sys/wait.h>
 #include <sys/mount.h>
 
+#ifdef GF_BSD_HOST_OS
 #ifdef __NetBSD__
 #include <perfuse.h>
+#endif
 #define umount2(dir, flags) unmount(dir, ((flags) != 0) ? MNT_FORCE : 0)
 #define MS_RDONLY MNT_RDONLY
 #endif
 
-#ifdef linux
+#ifdef GF_LINUX_HOST_OS
 #define _PATH_MOUNT "/bin/mount"
 #else /* NetBSD, MacOS X */
 #define _PATH_MOUNT "/sbin/mount"
diff --git a/contrib/fuse-lib/mount.c b/contrib/fuse-lib/mount.c
index a222aac..2769713 100644
--- a/contrib/fuse-lib/mount.c
+++ b/contrib/fuse-lib/mount.c
@@ -188,8 +188,12 @@ fuse_mount_sys (const char *mountpoint, char *fsname,
 
                 goto out;
         }
+#ifdef GF_LINUX_HOST_OS
         ret = mount (source, mountpoint, fstype, mountflags,
                      mnt_param_mnt);
+#else
+        ret = mount (fstype, mountpoint, mountflags, mnt_param_mnt);
+#endif
         if (ret == -1 && errno == ENODEV) {
                 /* fs subtype support was added by 79c0b2df aka
                    v2.6.21-3159-g79c0b2d. Probably we have an
@@ -201,8 +205,12 @@ fuse_mount_sys (const char *mountpoint, char *fsname,
 
                         goto out;
                 }
+#ifdef GF_LINUX_HOST_OS
                 ret = mount (source, mountpoint, fstype, 0,
                              mnt_param_mnt);
+#else
+                ret = mount (fstype, mountpoint, 0, mnt_param_mnt);
+#endif
         }
         if (ret == -1)
                 goto out;
diff --git a/contrib/fuse-util/fusermount.c b/contrib/fuse-util/fusermount.c
index 0ff8d90..9cd0a64 100644
--- a/contrib/fuse-util/fusermount.c
+++ b/contrib/fuse-util/fusermount.c
@@ -10,6 +10,7 @@
 #include <config.h>
 
 #include "mount_util.h"
+#include "../fuse-lib/mount-gluster-compat.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -20,7 +21,9 @@
 #include <fcntl.h>
 #include <pwd.h>
 #include <limits.h>
+#ifdef GF_LINUX_HOST_OS
 #include <mntent.h>
+#endif
 #include <sys/wait.h>
 #include <sys/stat.h>
 #include <sys/mount.h>
@@ -791,7 +794,11 @@ static int do_mount(const char *mnt, char **typep, mode_t rootmode,
 	else
 		strcpy(source, subtype ? subtype : dev);
 
+#ifdef GF_LINUX_HOST_OS
 	res = mount(source, mnt, type, flags, optbuf);
+#else
+        res = mount(type, mnt, flags, optbuf);
+#endif
 	if (res == -1 && errno == ENODEV && subtype) {
 		/* Probably missing subtype support */
 		strcpy(type, blkdev ? "fuseblk" : "fuse");
@@ -801,8 +808,11 @@ static int do_mount(const char *mnt, char **typep, mode_t rootmode,
 		} else {
 			strcpy(source, type);
 		}
-
+#ifdef GF_LINUX_HOST_OS
 		res = mount(source, mnt, type, flags, optbuf);
+#else
+                res = mount(type, mnt, flags, optbuf);
+#endif
 	}
 	if (res == -1 && errno == EINVAL) {
 		/* It could be an old version not supporting group_id */
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index 78127cd..0d40dfd 100644
--- a/rpc/rpc-transport/socket/src/socket.c
+++ b/rpc/rpc-transport/socket/src/socket.c
@@ -752,7 +752,7 @@ __socket_keepalive (int fd, int family, int keepalive_intvl, int keepalive_idle)
                 goto done;
 
 #if !defined(GF_LINUX_HOST_OS) && !defined(__NetBSD__)
-#ifdef GF_SOLARIS_HOST_OS
+#if defined(GF_SOLARIS_HOST_OS) || defined(__FreeBSD__)
         ret = setsockopt (fd, SOL_SOCKET, SO_KEEPALIVE, &keepalive_intvl,
                           sizeof (keepalive_intvl));
 #else
diff --git a/xlators/features/protect/src/prot_client.c b/xlators/features/protect/src/prot_client.c
index a27216d..ad0aa49 100644
--- a/xlators/features/protect/src/prot_client.c
+++ b/xlators/features/protect/src/prot_client.c
@@ -7,6 +7,8 @@
    later), or the GNU General Public License, version 2 (GPLv2), in all
    cases as published by the Free Software Foundation.
 */
+#ifndef __FreeBSD__
+
 #ifndef _CONFIG_H
 #define _CONFIG_H
 #include "config.h"
@@ -213,3 +215,4 @@ struct xlator_cbks cbks = {
 struct volume_options options[] = {
 	{ .key = {NULL} },
 };
+#endif
diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h
index d90b85e..ac1a6d9 100644
--- a/xlators/mount/fuse/src/fuse-bridge.h
+++ b/xlators/mount/fuse/src/fuse-bridge.h
@@ -24,6 +24,7 @@
 #include "config.h"
 #endif /* _CONFIG_H */
 
+#include "compat-errno.h"
 #include "glusterfs.h"
 #include "logging.h"
 #include "xlator.h"
@@ -47,7 +48,7 @@
 #include "syncop.h"
 #include "gidcache.h"
 
-#if defined(GF_LINUX_HOST_OS) || defined(__NetBSD__)
+#if defined(GF_LINUX_HOST_OS) || defined(GF_BSD_HOST_OS)
 #define FUSE_OP_HIGH (FUSE_READDIRPLUS + 1)
 #endif
 #ifdef GF_DARWIN_HOST_OS
diff --git a/xlators/mount/fuse/src/fuse-helpers.c b/xlators/mount/fuse/src/fuse-helpers.c
index d4dcc2e..488736f 100644
--- a/xlators/mount/fuse/src/fuse-helpers.c
+++ b/xlators/mount/fuse/src/fuse-helpers.c
@@ -10,6 +10,8 @@
 #include "fuse-bridge.h"
 #if defined(GF_SOLARIS_HOST_OS)
 #include <sys/procfs.h>
+#elif defined(GF_BSD_HOST_OS)
+#include <sys/user.h>
 #else
 #include <sys/sysctl.h>
 #endif
diff --git a/xlators/storage/posix/src/posix-handle.c b/xlators/storage/posix/src/posix-handle.c
index 219a582..b2c1046 100644
--- a/xlators/storage/posix/src/posix-handle.c
+++ b/xlators/storage/posix/src/posix-handle.c
@@ -12,7 +12,6 @@
 #include "config.h"
 #endif
 
-#include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
@@ -25,6 +24,7 @@
 #include "posix.h"
 #include "xlator.h"
 #include "syscall.h"
+#include "compat-errno.h"
 
 
 #define HANDLE_PFX ".glusterfs"


More information about the Gluster-devel mailing list