summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiels de Vos <ndevos@redhat.com>2015-05-17 15:26:03 +0200
committerVijay Bellur <vbellur@redhat.com>2015-06-03 06:53:43 -0700
commit0209b18fd65f9df5ebd0a8764ebf864d0d392998 (patch)
tree332573977e0468d28a55a4519fd155b33ee79d35
parent990cb828a2e9b0d83a767977712305534fac39e2 (diff)
build: fix compiling on older distributions
data-tiering is disabled on RHEL-5 because it depends on a too new SQLite version. This change also prevents installing some of files that are used by geo-replication, which is also not available on RHEL-5. geo-replication depends on a too recent version of Python. Due to an older version of OpenSSL, some of the newer functions can not be used. A fallback to previous functions is done. Unfortunately RHEL-5 does not seem to have TLSv1.2 support, so only older versions can be used. Change-Id: I672264a673f5432358d2e83b17e2a34efd9fd913 BUG: 1222317 Signed-off-by: Niels de Vos <ndevos@redhat.com> Reviewed-on: http://review.gluster.org/10803 Tested-by: NetBSD Build System <jenkins@build.gluster.org> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
-rw-r--r--Makefile.am5
-rw-r--r--configure.ac49
-rw-r--r--extras/Makefile.am4
-rw-r--r--extras/geo-rep/Makefile.am2
-rw-r--r--extras/hook-scripts/Makefile.am2
-rw-r--r--geo-replication/src/Makefile.am2
-rw-r--r--glusterfs.spec.in40
-rw-r--r--rpc/rpc-transport/socket/src/socket.c18
8 files changed, 91 insertions, 31 deletions
diff --git a/Makefile.am b/Makefile.am
index 1282c981d53..4dcf08c741c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -15,7 +15,10 @@ SUBDIRS = $(ARGP_STANDALONE_DIR) libglusterfs rpc api xlators glusterfsd \
@UMOUNTD_SUBDIR@ tools
pkgconfigdir = @pkgconfigdir@
-pkgconfig_DATA = glusterfs-api.pc libgfchangelog.pc libgfdb.pc
+pkgconfig_DATA = glusterfs-api.pc libgfchangelog.pc
+if USE_GFDB
+pkgconfig_DATA += libgfdb.pc
+endif
CLEANFILES =
CONFIG_CLEAN_FILES = $(CONTRIB_BUILDDIR)/uuid/uuid_types.h
diff --git a/configure.ac b/configure.ac
index e70e1c3b6db..fad2874c70a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -388,14 +388,7 @@ AC_CHECK_HEADERS([sys/ioctl.h], AC_DEFINE(HAVE_IOCTL_IN_SYS_IOCTL_H, 1, [have sy
AC_CHECK_HEADERS([sys/extattr.h])
dnl Math library
-case $host_os in
- linux*)
- MATH_LIB=''
- ;;
- *)
- MATH_LIB='-lm'
- ;;
-esac
+AC_CHECK_LIB([m], [pow], [MATH_LIB='-lm'], [MATH_LIB=''])
AC_SUBST(MATH_LIB)
dnl use libuuid.so or fall-back to contrib/uuid
@@ -406,6 +399,16 @@ PKG_CHECK_MODULES([UUID], [uuid],
[HAVE_LIBUUID=no
UUID_CFLAGS='-I$(CONTRIBDIR)/uuid'])
AM_CONDITIONAL([HAVE_LIBUUID], [test x$HAVE_LIBUUID = xyes])
+
+dnl older version of libuuid (from e2fsprogs) require including uuid/uuid.h
+saved_CFLAGS=${CFLAGS}
+CFLAGS="${CFLAGS} ${UUID_CFLAGS}"
+AC_CHECK_HEADER([uuid.h], [], [AC_CHECK_HEADER([uuid/uuid.h])])
+CFLAGS=${saved_CFLAGS}
+if test "x$ac_cv_header_uuid_uuid_h" = "xyes"; then
+ UUID_CFLAGS="${UUID_CFLAGS} -I$(pkg-config --variable=includedir uuid)/uuid"
+fi
+
dnl libglusterfs needs uuid.h, practically everything depends on it
GF_CPPFLAGS="${GF_CPPFLAGS} ${UUID_CFLAGS}"
dnl PKGCONFIG_UUID is used for the dependency in *.pc.in files
@@ -530,6 +533,10 @@ fi
AM_CONDITIONAL([ENABLE_BD_XLATOR], [test x$BUILD_BD_XLATOR = xyes])
+dnl check for old openssl
+AC_CHECK_FUNC([ssl], [CRYPTO_THREADID_set_callback], [HAVE_CRYPTO_THREADID=1], HAVE_CRYPTO_THREADID=0)
+AC_DEFINE(HAVE_CRYPTO_THREADID, $HAVE_CRYPTO_THREADID, [use new OpenSSL functions])
+
# start encryption/crypt section
AC_CHECK_HEADERS([openssl/cmac.h], [have_cmac_h=yes], [have_cmac_h=no])
@@ -705,6 +712,7 @@ if test "x$enable_georeplication" != "xno"; then
GEOREP_EXTRAS_SUBDIR=geo-rep
fi
AC_SUBST(GEOREP_EXTRAS_SUBDIR)
+AM_CONDITIONAL(USE_GEOREP, test "x$enable_georeplication" != "xno")
# CDC xlator - check if libz is present if so enable HAVE_LIB_Z
BUILD_CDC=yes
@@ -808,11 +816,8 @@ AC_SUBST(HAVE_BACKTRACE)
if test "x${have_backtrace}" != "xyes"; then
AC_TRY_COMPILE([#include <math.h>], [double x=0.0; x=ceil(0.0);],
- [have_math_h=yes],
+ [],
AC_MSG_ERROR([need math library for libexecinfo]))
-if test "x${have_math_h}" = "xyes"; then
- LIBS="$LIBS -lm"
-fi
fi
dnl glusterfs prints memory usage to stderr by sending it SIGUSR1
@@ -905,26 +910,29 @@ GF_HOST_OS=""
GF_LDFLAGS="-rdynamic"
dnl check for gcc -Werror=format-security
-saved_GF_CFLAGS="-Wformat -Werror=format-security"
+saved_CFLAGS=$CFLAGS
+CFLAGS="-Wformat -Werror=format-security"
AC_MSG_CHECKING([whether $CC accepts -Werror=format-security])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [cc_werror_format_security=yes], [cc_werror_format_security=no])
echo $cc_werror_format_security
if test "x$cc_werror_format_security" = "xno"; then
- GF_CFLAGS="$GF_CFLAGS"
+ CFLAGS="$saved_CFLAGS"
else
- GF_CFLAGS="$saved_GF_CFLAGS $GF_CFLAGS"
+ CFLAGS="$saved_CFLAGS $CFLAGS"
+ GF_CFLAGS="$GF_CFLAGS $CFLAGS"
fi
dnl check for gcc -Werror=implicit-function-declaration
-saved_GF_CFLAGS=$GF_CFLAGS
-GF_CFLAGS="-Werror=implicit-function-declaration"
+saved_CFLAGS=$CFLAGS
+CFLAGS="-Werror=implicit-function-declaration"
AC_MSG_CHECKING([whether $CC accepts -Werror=implicit-function-declaration])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [cc_werror_implicit=yes], [cc_werror_implicit=no])
echo $cc_werror_implicit
if test "x$cc_werror_implicit" = "xno"; then
- GF_CFLAGS="$saved_GF_CFLAGS"
+ CFLAGS="$saved_CFLAGS"
else
- GF_CFLAGS="$saved_GF_CFLAGS $GF_CFLAGS"
+ CFLAGS="$saved_CFLAGS $CFLAGS"
+ GF_CFLAGS="$GF_CFLAGS $CFLAGS"
fi
dnl clang is mostly GCC-compatible, but its version is much lower,
@@ -1242,6 +1250,9 @@ AC_SUBST(UNITTEST_LDFLAGS)
AC_SUBST(CFLAGS)
# end enable debug section
+dnl libglusterfs.so uses math functions
+GF_LDADD="${GF_LDADD} ${MATH_LIB}"
+
AC_SUBST(GF_HOST_OS)
AC_SUBST(GF_CFLAGS)
AC_SUBST(GF_LDFLAGS)
diff --git a/extras/Makefile.am b/extras/Makefile.am
index d54f7507210..ba2bef31420 100644
--- a/extras/Makefile.am
+++ b/extras/Makefile.am
@@ -1,5 +1,5 @@
-gsyncddir = $(libexecdir)/glusterfs
-gsyncd_SCRIPTS = peer_add_secret_pub
+addonexecdir = $(libexecdir)/glusterfs
+addonexec_SCRIPTS = peer_add_secret_pub
EditorModedir = $(docdir)
EditorMode_DATA = glusterfs-mode.el glusterfs.vim
diff --git a/extras/geo-rep/Makefile.am b/extras/geo-rep/Makefile.am
index e0aab77644e..7ebede32686 100644
--- a/extras/geo-rep/Makefile.am
+++ b/extras/geo-rep/Makefile.am
@@ -5,7 +5,7 @@ scripts_DATA = gsync-upgrade.sh generate-gfid-file.sh get-gfid.sh \
scripts_PROGRAMS = gsync-sync-gfid
gsync_sync_gfid_CFLAGS = $(GF_CFLAGS) -Wall -I$(top_srcdir)/libglusterfs/src
gsync_sync_gfid_LDFLAGS = $(GF_LDFLAGS)
-gsync_sync_gfid_LDADD = $(GF_LIBS) $(top_builddir)/libglusterfs/src/libglusterfs.la
+gsync_sync_gfid_LDADD = $(GF_LDADD) $(top_builddir)/libglusterfs/src/libglusterfs.la
gsync_sync_gfid_SOURCES = gsync-sync-gfid.c
gsync_sync_gfid_CPPFLAGS = $(GF_CPPFLAGS) -I$(top_srcdir)/libglusterfs/src
diff --git a/extras/hook-scripts/Makefile.am b/extras/hook-scripts/Makefile.am
index fa126f90591..771b37e3fdf 100644
--- a/extras/hook-scripts/Makefile.am
+++ b/extras/hook-scripts/Makefile.am
@@ -2,4 +2,6 @@ EXTRA_DIST = S40ufo-stop.py S56glusterd-geo-rep-create-post.sh
SUBDIRS = add-brick set start stop reset
scriptsdir = $(GLUSTERD_WORKDIR)/hooks/1/gsync-create/post/
+if USE_GEOREP
scripts_SCRIPTS = S56glusterd-geo-rep-create-post.sh
+endif
diff --git a/geo-replication/src/Makefile.am b/geo-replication/src/Makefile.am
index e9d6bc1a27e..1572698f8ae 100644
--- a/geo-replication/src/Makefile.am
+++ b/geo-replication/src/Makefile.am
@@ -11,7 +11,7 @@ gsyncd_PROGRAMS = gsyncd
gsyncd_SOURCES = gsyncd.c procdiggy.c
-gsyncd_LDADD = $(top_builddir)/libglusterfs/src/libglusterfs.la
+gsyncd_LDADD = $(GF_LDADD) $(top_builddir)/libglusterfs/src/libglusterfs.la
gsyncd_LDFLAGS = $(GF_LDFLAGS)
diff --git a/glusterfs.spec.in b/glusterfs.spec.in
index 36add2caccd..b9e2d689340 100644
--- a/glusterfs.spec.in
+++ b/glusterfs.spec.in
@@ -72,6 +72,11 @@
%define _without_qemu_block --disable-qemu-block
%endif
+# Disable data-tiering on EL5, sqlite is too old
+%if ( 0%{?rhel} && 0%{?rhel} < 6 )
+%global _without_tiering --disable-tiering
+%endif
+
##-----------------------------------------------------------------------------
## All %global definitions should be placed here and keep them sorted
##
@@ -196,11 +201,17 @@ BuildRequires: libaio-devel libacl-devel
BuildRequires: python-devel
BuildRequires: python-ctypes
BuildRequires: userspace-rcu-devel >= 0.7
+%if ( 0%{?rhel} && 0%{?rhel} <= 5 )
+BuildRequires: e2fsprogs-devel
+%else
BuildRequires: libuuid-devel
+%endif
%if ( 0%{?_with_cmocka:1} )
BuildRequires: libcmocka-devel >= 1.0.1
%endif
+%if ( 0%{!?_without_tiering:1} )
BuildRequires: sqlite-devel
+%endif
%if ( 0%{!?_without_systemtap:1} )
BuildRequires: systemtap-sdt-devel
%endif
@@ -572,17 +583,18 @@ This package provides the translators needed on any GlusterFS client.
%build
./autogen.sh && %configure \
+ %{?_with_cmocka} \
%{?_with_tmpfilesdir} \
- %{?_without_rdma} \
+ %{?_without_bd} \
%{?_without_epoll} \
%{?_without_fusermount} \
%{?_without_georeplication} \
%{?_without_ocf} \
- %{?_without_syslog} \
- %{?_without_bd} \
%{?_without_qemu_block} \
+ %{?_without_rdma} \
+ %{?_without_syslog} \
%{?_without_systemtap} \
- %{?_with_cmocka}
+ %{?_without_tiering}
# fix hardening and remove rpath in shlibs
%if ( 0%{?fedora} && 0%{?fedora} > 17 ) || ( 0%{?rhel} && 0%{?rhel} > 6 )
@@ -946,7 +958,10 @@ fi
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/debug/error-gen.so
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/debug/io-stats.so
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/debug/trace.so
+%if ( ! ( 0%{?rhel} && 0%{?rhel} < 6 ) )
+# RHEL-5 based distributions have a too old openssl
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/encryption/crypt.so
+%endif
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/access-control.so
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/barrier.so
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/cdc.so
@@ -996,13 +1011,17 @@ fi
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/glupy/helloworld.*
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/glupy/negative.*
%{_libdir}/pkgconfig/libgfchangelog.pc
+%if ( 0%{!?_without_tiering:1} )
%{_libdir}/pkgconfig/libgfdb.pc
+%endif
%files client-xlators
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/cluster/*.so
%exclude %{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/cluster/pump.so
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/ganesha.so
+%if ( 0%{!?_without_qemu_block:1} )
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/qemu-block.so
+%endif
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/protocol/client.so
%files extra-xlators
@@ -1064,17 +1083,17 @@ fi
%{_datadir}/glusterfs/scripts/generate-gfid-file.sh
%{_datadir}/glusterfs/scripts/gsync-sync-gfid
%ghost %attr(0644,-,-) %{_sharedstatedir}/glusterd/geo-replication/gsyncd_template.conf
+%endif
%{_libexecdir}/glusterfs/gfind_missing_files
%{_sbindir}/gfind_missing_files
-%exclude %{_libexecdir}/glusterfs/gfind_missing_files/gfid_to_path.pyo
-%exclude %{_libexecdir}/glusterfs/gfind_missing_files/gfid_to_path.pyc
-%endif
%files libs
%{_libdir}/*.so.*
%exclude %{_libdir}/libgfapi.*
+%if ( 0%{!?_without_tiering:1} )
# libgfdb is only needed server-side
%exclude %{_libdir}/libgfdb.*
+%endif
%files -n python-gluster
# introducing glusterfs module in site packages.
@@ -1136,7 +1155,9 @@ fi
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/arbiter.so
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/bit-rot.so
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/bitrot-stub.so
+%if ( 0%{!?_without_tiering:1} )
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/changetimerecorder.so
+%endif
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/index.so
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/locks.so
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/features/posix*
@@ -1149,7 +1170,9 @@ fi
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/nfs*
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/protocol/server*
%{_libdir}/glusterfs/%{version}%{?prereltag}/xlator/storage*
+%if ( 0%{!?_without_tiering:1} )
%{_libdir}/libgfdb.so.*
+%endif
#snap_scheduler
%{_sbindir}/snap_scheduler.py
@@ -1218,6 +1241,9 @@ fi
* Mon May 18 2015 Milind Changire <mchangir@redhat.com>
- Move file peer_add_secret_pub to the server RPM to support glusterfind (#1221544)
+* Sun May 17 2015 Niels de Vos <ndevos@redhat.com>
+- Fix building on RHEL-5 based distributions (#1222317)
+
* Tue May 05 2015 Niels de Vos <ndevos@redhat.com>
- Introduce glusterfs-client-xlators to reduce dependencies (#1195947)
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index e6ef7d2c220..355a7888f14 100644
--- a/rpc/rpc-transport/socket/src/socket.c
+++ b/rpc/rpc-transport/socket/src/socket.c
@@ -3709,6 +3709,7 @@ locking_func (int mode, int type, const char *file, int line)
}
}
+#if HAVE_CRYPTO_THREADID
static void
threadid_func (CRYPTO_THREADID *id)
{
@@ -3724,6 +3725,14 @@ threadid_func (CRYPTO_THREADID *id)
*/
CRYPTO_THREADID_set_numeric (id, (unsigned long)pthread_self());
}
+#else /* older openssl */
+static unsigned long
+legacy_threadid_func (void)
+{
+ /* See comments above, it applies here too. */
+ return (unsigned long)pthread_self();
+}
+#endif
static void __attribute__((constructor))
init_openssl_mt (void)
@@ -3738,7 +3747,11 @@ init_openssl_mt (void)
pthread_mutex_init (&lock_array[i], NULL);
}
CRYPTO_set_locking_callback (locking_func);
+#if HAVE_CRYPTO_THREADID
CRYPTO_THREADID_set_callback (threadid_func);
+#else /* older openssl */
+ CRYPTO_set_id_callback (legacy_threadid_func);
+#endif
constructor_ok = _gf_true;
}
@@ -3987,7 +4000,12 @@ socket_init (rpc_transport_t *this)
goto err;
}
+#if defined(TLS1_2_VERSION)
priv->ssl_meth = (SSL_METHOD *)TLSv1_2_method();
+#else /* old openssl */
+#warning TLSv1.2 is not available, using insecure TLSv1 support
+ priv->ssl_meth = (SSL_METHOD *)TLSv1_method();
+#endif
priv->ssl_ctx = SSL_CTX_new(priv->ssl_meth);
if (SSL_CTX_set_cipher_list(priv->ssl_ctx, cipher_list) == 0) {