diff options
author | Niels de Vos <ndevos@redhat.com> | 2015-05-17 15:26:03 +0200 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-06-03 06:53:43 -0700 |
commit | 0209b18fd65f9df5ebd0a8764ebf864d0d392998 (patch) | |
tree | 332573977e0468d28a55a4519fd155b33ee79d35 | |
parent | 990cb828a2e9b0d83a767977712305534fac39e2 (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.am | 5 | ||||
-rw-r--r-- | configure.ac | 49 | ||||
-rw-r--r-- | extras/Makefile.am | 4 | ||||
-rw-r--r-- | extras/geo-rep/Makefile.am | 2 | ||||
-rw-r--r-- | extras/hook-scripts/Makefile.am | 2 | ||||
-rw-r--r-- | geo-replication/src/Makefile.am | 2 | ||||
-rw-r--r-- | glusterfs.spec.in | 40 | ||||
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 18 |
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) { |