# - Check transport-ibverbs package and ibverbs bcond
# - Add passing options from /etc/sysconfig/glusterfsd to glusterfsd
# - package /etc/glusterfs/glusterfs-logrotate as logrotate config
-# - package in proper emacs/vim locations:
-# /usr/share/doc/glusterfs/glusterfs-mode.el
-# /usr/share/doc/glusterfs/glusterfs.vim
+# - Fix/provide working systemd service files.
+# As for 3.7.11, package provided seems be non-working.
+# - configuration for firewalld? (--enable-firewalld, but checks for firewalld executable)
#
# Conditional build:
%bcond_without ibverbs # ib-verbs transport
%bcond_without systemtap # systemtap/dtrace support
+%bcond_without system_fuse # system fusermount
#
Summary: Clustered File Storage that can scale to peta bytes
Summary(pl.UTF-8): Klastrowy system przechowywania plików skalujący się do petabajtów
Name: glusterfs
-Version: 3.5.5
+Version: 3.12.6
Release: 1
License: LGPL v3+ or GPL v2 (libraries), GPL v3+ (programs)
Group: Applications/System
-Source0: http://download.gluster.org/pub/gluster/glusterfs/3.5/%{version}/glusterfs-%{version}.tar.gz
-# Source0-md5: ed339ec1b8b0cdf62f4eef36e415778a
+Source0: https://download.gluster.org/pub/gluster/glusterfs/3.12/LATEST/glusterfs-%{version}.tar.gz
+# Source0-md5: efdcddf38aecb3c2109bd773c58d1f9b
Source1: glusterfsd.init
-Patch0: %{name}-link.patch
-Patch1: %{name}-noquiet.patch
-Patch2: no-sysctl-on-linux.patch
-URL: http://www.gluster.org/
+Patch0: %{name}-noquiet.patch
+Patch1: %{name}-python.patch
+Patch3: interpreters.patch
+URL: https://www.gluster.org/
+BuildRequires: acl-devel
BuildRequires: autoconf >= 2.50
BuildRequires: automake
BuildRequires: bison
+#BuildRequires: cmocka-devel >= 1.0.1 for unittest
+# for bd-xlator
BuildRequires: device-mapper-devel >= 2.02.79
BuildRequires: flex
-BuildRequires: glib2-devel >= 2.0
BuildRequires: libaio-devel
-BuildRequires: libfuse-devel >= 2.6
%{?with_ibverbs:BuildRequires: libibverbs-devel >= 1.0.4}
+%{?with_ibverbs:BuildRequires: librdmacm-devel >= 1.0.15}
BuildRequires: libtool
+BuildRequires: libuuid-devel
BuildRequires: libxml2-devel >= 1:2.6.19
BuildRequires: openssl-devel
BuildRequires: pkgconfig
BuildRequires: python >= 1:2.4
+BuildRequires: python-devel >= 1:2.4
BuildRequires: readline-devel
BuildRequires: rpm-pythonprov
BuildRequires: rpmbuild(macros) >= 1.228
+BuildRequires: sed >= 4.0
+BuildRequires: sqlite3-devel >= 3
%{?with_systemtap:BuildRequires: systemtap-sdt-devel}
+BuildRequires: userspace-rcu-devel >= 0.8
BuildRequires: zlib-devel >= 1.2.0
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
Group: Libraries
Requires: %{name}-common = %{version}-%{release}
Requires: libibverbs >= 1.0.4
+Requires: librdmacm >= 1.0.15
%description transport-ibverbs
InfiniBand "verbs" transport plugins for GlusterFS.
Requires: %{name}-common = %{version}-%{release}
Requires(post,preun): /sbin/chkconfig
Requires: rc-scripts
+Requires: python-modules
%description server
This package provides the glusterfs server daemon.
Summary(pl.UTF-8): Klient GlusterFS
Group: Applications/System
Requires: %{name}-common = %{version}-%{release}
-Requires: libfuse >= 2.6
+%{?with_system_fuse:Requires: libfuse >= 2.6}
%description client
This package provides the FUSE based GlusterFS client.
%description resource-agents -l pl.UTF-8
Agenci OCF do monitorowania procesów GlusterFS-a.
+%package events
+Summary: GlusterFS Events
+Summary(pl.UTF-8): Obsługa zdarzeń dla GlusterFS-a
+Group: Applications/File
+Requires: %{name}-server = %{version}-%{release}
+Requires: python-gluster = %{version}-%{release}
+Requires: python-prettytable
+Requires: python-requests
+
+%description events
+GlusterFS Events.
+
+%description events -l pl.UTF-8
+Obsługa zdarzeń dla GlusterFS-a.
+
+%package geo-replication
+Summary: GlusterFS Geo-replication
+Summary(pl.UTF-8): Geo-replikacja dla GlusterFS-a
+Group: Applications/File
+Requires: %{name}-server = %{version}-%{release}
+Requires: python-gluster = %{version}-%{release}
+Requires: python-prettytable
+Requires: rsync
+
+%description geo-replication
+GlusterFS support for geo-replication.
+
+%description geo-replication -l pl.UTF-8
+Obsługa geo-replikacji dla GlusterFS-a.
+
+%package -n emacs-glusterfs-mode
+Summary: Emacs mode to edit GlusterFS configuration
+Summary(pl.UTF-8): Tryb Emacsa do edycji konfiguracji GlusterFS-a
+Group: Applications/Editors
+Requires: %{name}-common = %{version}-%{release}
+Requires: emacs-common
+
+%description -n emacs-glusterfs-mode
+Emacs mode to edit GlusterFS configuration.
+
+%description -n emacs-glusterfs-mode -l pl.UTF-8
+Tryb Emacsa do edycji konfiguracji GlusterFS-a.
+
+%package -n vim-syntax-glusterfs
+Summary: Vim syntax file to edit GlusterFS configuration
+Summary(pl.UTF-8): Plik składni Vima do edycji konfiguracji GlusterFS-a
+Group: Applications/Editors
+Requires: %{name}-common = %{version}-%{release}
+Requires: vim-rt >= 4:7.2.170
+
+%description -n vim-syntax-glusterfs
+Vim syntax file to edit GlusterFS configuration.
+
+%description -n vim-syntax-glusterfs -l pl.UTF-8
+Plik składni Vima do edycji konfiguracji GlusterFS-a.
+
%prep
%setup -q
%patch0 -p1
%patch1 -p1
-%patch2 -p1
+%patch3 -p1
%build
%{__libtoolize}
%{__autoconf}
%{__autoheader}
%{__automake}
-#%{__python} gen-headers.py
-#%{__mv} gf-error-codes.h libglusterfs/src
%configure \
+ %{?with_system_fuse:--disable-fusermount} \
--disable-silent-rules \
- --enable-fusermount \
%{!?with_ibverbs:--disable-ibverbs} \
--enable-systemtap%{!?with_systemtap:=no} \
--with-initdir=/etc/rc.d/init.d
+
%{__make} -j1
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{/etc/rc.d/init.d,%{_var}/lib/glusterd}
+install -d $RPM_BUILD_ROOT/etc/rc.d/init.d
%{__make} -j1 install \
DESTDIR=$RPM_BUILD_ROOT
# No idea why installs elsewhere than later expects to be
-mv $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/glusterd.vol $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/glusterfsd.vol
+%{__mv} $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/glusterd.vol $RPM_BUILD_ROOT%{_sysconfdir}/%{name}/glusterfsd.vol
install %{SOURCE1} $RPM_BUILD_ROOT/etc/rc.d/init.d/glusterfsd
+install -d $RPM_BUILD_ROOT%{_datadir}/{emacs/site-lisp,vim/syntax}
+%{__mv} $RPM_BUILD_ROOT%{_docdir}/glusterfs/glusterfs.vim $RPM_BUILD_ROOT%{_datadir}/vim/syntax
+%{__mv} $RPM_BUILD_ROOT%{_docdir}/glusterfs/glusterfs-mode.el $RPM_BUILD_ROOT%{_datadir}/emacs/site-lisp
+
%{__rm} $RPM_BUILD_ROOT%{_libdir}/glusterfs/%{version}/*/*.la
%{__rm} $RPM_BUILD_ROOT%{_libdir}/glusterfs/%{version}/*/*/*.la
%{__rm} $RPM_BUILD_ROOT%{_libdir}/glusterfs/%{version}/*/*/*/*.la
%{__rm} -r $RPM_BUILD_ROOT%{_docdir}/glusterfs/benchmarking
-%{__rm} $RPM_BUILD_ROOT%{_libdir}/glusterfs/python/syncdaemon/README.md
+%{__rm} $RPM_BUILD_ROOT%{_libexecdir}/glusterfs/python/syncdaemon/README.md
+# example, installed as /var/lib/glusterd/groups/virt
+%{__rm} $RPM_BUILD_ROOT%{_sysconfdir}/glusterfs/group-virt.example
%py_postclean
%post libs -p /sbin/ldconfig
%postun libs -p /sbin/ldconfig
+%if 0
+# TODO: verify these scripts (see also included glusterfs.spec)
+%post server
+# note: glusterfsd.init vs glusterd.service
+/sbin/chkconfig --add glusterfsd
+%service glusterfsd restart
+# TODO?
+#glusterd --xlator-option *.upgrade=on -N
+
+%preun server
+if [ "$1" = "0" ]; then
+ %service -q glusterfsd stop
+ /sbin/chkconfig --del glusterfsd
+fi
+
+%post geo-replication
+%service glusterd restart
+%endif
+
%files common
%defattr(644,root,root,755)
-%doc ChangeLog NEWS README THANKS
-%dir %{_sysconfdir}/%{name}
+%doc ChangeLog NEWS README.md THANKS
+%attr(755,root,root) %{_bindir}/glusterfind
%attr(755,root,root) %{_sbindir}/glfsheal
# NOTE: glusterfs is link to glusterfsd and is needed by client mount
%attr(755,root,root) %{_sbindir}/glusterfs
%attr(755,root,root) %{_sbindir}/glusterfsd
+%dir %{_sysconfdir}/%{name}
%dir %{_libdir}/glusterfs
%attr(755,root,root) %{_libdir}/glusterfs/%{version}/rpc-transport/socket.so
%dir %{_libdir}/glusterfs/%{version}/xlator
+%attr(755,root,root) %{_libdir}/glusterfs/%{version}/xlator/meta.so
%dir %{_libdir}/glusterfs/%{version}/xlator/cluster
%attr(755,root,root) %{_libdir}/glusterfs/%{version}/xlator/cluster/*.so
%dir %{_libdir}/glusterfs/%{version}/xlator/debug
%dir %{_libdir}/glusterfs/%{version}/xlator/mount
%attr(755,root,root) %{_libdir}/glusterfs/%{version}/xlator/mount/api.so
%attr(755,root,root) %{_libdir}/glusterfs/%{version}/xlator/mount/fuse.so
-%dir %{_libdir}/glusterfs/%{version}/xlator/nfs
-%attr(755,root,root) %{_libdir}/glusterfs/%{version}/xlator/nfs/server.so
+#%dir %{_libdir}/glusterfs/%{version}/xlator/nfs
+#%attr(755,root,root) %{_libdir}/glusterfs/%{version}/xlator/nfs/server.so
%dir %{_libdir}/glusterfs/%{version}/xlator/performance
%attr(755,root,root) %{_libdir}/glusterfs/%{version}/xlator/performance/*.so*
%dir %{_libdir}/glusterfs/%{version}/xlator/protocol
%dir %{_libdir}/glusterfs/%{version}/xlator/testing/performance
%attr(755,root,root) %{_libdir}/glusterfs/%{version}/xlator/testing/performance/*.so
-%attr(755,root,root) %{_libdir}/glusterfs/gsyncd
-%attr(755,root,root) %{_libdir}/glusterfs/gverify.sh
-%attr(755,root,root) %{_libdir}/glusterfs/peer_add_secret_pub
-%attr(755,root,root) %{_libdir}/glusterfs/peer_gsec_create
-
-%dir %{_libdir}/glusterfs/python
-%dir %{_libdir}/glusterfs/python/syncdaemon
-# gsyncd.py is a script, the rest probably don't require *.py
-%{_libdir}/glusterfs/python/syncdaemon/*.py*
+%if "%{_libexecdir}" != "%{_libdir}"
+%dir %{_libexecdir}/glusterfs
+%endif
+%attr(755,root,root) %{_libexecdir}/glusterfs/peer_add_secret_pub
+
+%dir %{_libexecdir}/glusterfs/glusterfind
+%attr(755,root,root) %{_libexecdir}/glusterfs/glusterfind/S57glusterfind-delete-post.py
+%attr(755,root,root) %{_libexecdir}/glusterfs/glusterfind/brickfind.py
+%attr(755,root,root) %{_libexecdir}/glusterfs/glusterfind/changelog.py
+%attr(755,root,root) %{_libexecdir}/glusterfs/glusterfind/nodeagent.py
+%{_libexecdir}/glusterfs/glusterfind/__init__.py*
+%{_libexecdir}/glusterfs/glusterfind/changelogdata.py*
+%{_libexecdir}/glusterfs/glusterfind/conf.py*
+%{_libexecdir}/glusterfs/glusterfind/libgfchangelog.py*
+%{_libexecdir}/glusterfs/glusterfind/main.py*
+%{_libexecdir}/glusterfs/glusterfind/utils.py*
+%{_libexecdir}/glusterfs/glusterfind/tool.conf
+
+%dir %{_libexecdir}/glusterfs/python
%dir %{_datadir}/glusterfs
%dir %{_datadir}/glusterfs/scripts
-%attr(755,root,root) %{_datadir}/glusterfs/scripts/generate-gfid-file.sh
-%attr(755,root,root) %{_datadir}/glusterfs/scripts/get-gfid.sh
-%attr(755,root,root) %{_datadir}/glusterfs/scripts/gsync-sync-gfid
-%attr(755,root,root) %{_datadir}/glusterfs/scripts/gsync-upgrade.sh
%attr(755,root,root) %{_datadir}/glusterfs/scripts/post-upgrade-script-for-quota.sh
%attr(755,root,root) %{_datadir}/glusterfs/scripts/pre-upgrade-script-for-quota.sh
-%attr(755,root,root) %{_datadir}/glusterfs/scripts/slave-upgrade.sh
+%attr(755,root,root) %{_datadir}/glusterfs/scripts/stop-all-gluster-processes.sh
%{_mandir}/man8/glusterfs.8*
%{_mandir}/man8/glusterfsd.8*
%attr(755,root,root) %ghost %{_libdir}/libgfapi.so.0
%attr(755,root,root) %{_libdir}/libgfchangelog.so.*.*.*
%attr(755,root,root) %ghost %{_libdir}/libgfchangelog.so.0
+%attr(755,root,root) %{_libdir}/libgfdb.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libgfdb.so.0
%attr(755,root,root) %{_libdir}/libgfrpc.so.*.*.*
%attr(755,root,root) %ghost %{_libdir}/libgfrpc.so.0
%attr(755,root,root) %{_libdir}/libgfxdr.so.*.*.*
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libgfapi.so
%attr(755,root,root) %{_libdir}/libgfchangelog.so
+%attr(755,root,root) %{_libdir}/libgfdb.so
%attr(755,root,root) %{_libdir}/libgfrpc.so
%attr(755,root,root) %{_libdir}/libgfxdr.so
%attr(755,root,root) %{_libdir}/libglusterfs.so
%{_libdir}/libgfapi.la
%{_libdir}/libgfchangelog.la
+%{_libdir}/libgfdb.la
%{_libdir}/libgfrpc.la
%{_libdir}/libgfxdr.la
%{_libdir}/libglusterfs.la
%dir %{_includedir}/glusterfs
%{_includedir}/glusterfs/api
%{_includedir}/glusterfs/gfchangelog
+%{_includedir}/glusterfs/gfdb
+%{_includedir}/glusterfs/rpc
+%{_includedir}/glusterfs/server
+%{_includedir}/glusterfs/*.h
%{_pkgconfigdir}/glusterfs-api.pc
%{_pkgconfigdir}/libgfchangelog.pc
+%{_pkgconfigdir}/libgfdb.pc
%files -n python-gluster
%defattr(644,root,root,755)
%dir %{py_sitescriptdir}/gluster
%{py_sitescriptdir}/gluster/*.py[co]
+%{py_sitescriptdir}/gluster/cliutils
+%{py_sitescriptdir}/gluster/glupy
+# created only when using py_build/py_install in xlators/features/glupy/src
+#%{py_sitescriptdir}/glusterfs_glupy-%{version}-py*.egg-info
%if %{with ibverbs}
%files transport-ibverbs
%files server
%defattr(644,root,root,755)
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/glusterfsd.vol
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/group-gluster-block
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/group-metadata-cache
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/%{name}/group-nl-cache
%attr(754,root,root) /etc/rc.d/init.d/glusterfsd
+%attr(755,root,root) %{_sbindir}/conf.py
+%attr(755,root,root) %{_sbindir}/gcron.py
+%attr(755,root,root) %{_sbindir}/gf_attach
+%attr(755,root,root) %{_sbindir}/gluster-setgfid2path
%attr(755,root,root) %{_sbindir}/glusterd
+%attr(755,root,root) %{_sbindir}/snap_scheduler.py
+
+%{_mandir}/man8/gluster-setgfid2path.8*
%{_mandir}/man8/glusterd.8*
%dir %{_var}/lib/glusterd
+%dir %{_var}/lib/glusterd/groups
+%config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/groups/gluster-block
+%config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/groups/metadata-cache
+%config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/groups/nl-cache
+%config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/groups/virt
+%dir %{_var}/lib/glusterd/hooks
+%dir %{_var}/lib/glusterd/hooks/1
+%dir %{_var}/lib/glusterd/hooks/1/add-brick
+%dir %{_var}/lib/glusterd/hooks/1/add-brick/post
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/add-brick/post/disabled-quota-root-xattr-heal.sh
+%dir %{_var}/lib/glusterd/hooks/1/add-brick/pre
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/add-brick/pre/S28Quota-enable-root-xattr-heal.sh
+%dir %{_var}/lib/glusterd/hooks/1/create
+%dir %{_var}/lib/glusterd/hooks/1/create/post
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/create/post/S10selinux-label-brick.sh
+%dir %{_var}/lib/glusterd/hooks/1/delete
+%dir %{_var}/lib/glusterd/hooks/1/delete/post
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/delete/post/S57glusterfind-delete-post
+%dir %{_var}/lib/glusterd/hooks/1/delete/pre
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/delete/pre/S10selinux-del-fcontext.sh
+%dir %{_var}/lib/glusterd/hooks/1/set
+%dir %{_var}/lib/glusterd/hooks/1/set/post
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/set/post/S30samba-set.sh
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/set/post/S32gluster_enable_shared_storage.sh
+%dir %{_var}/lib/glusterd/hooks/1/start
+%dir %{_var}/lib/glusterd/hooks/1/start/post
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/start/post/S29CTDBsetup.sh
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/start/post/S30samba-start.sh
+%dir %{_var}/lib/glusterd/hooks/1/stop
+%dir %{_var}/lib/glusterd/hooks/1/stop/pre
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/stop/pre/S29CTDB-teardown.sh
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/stop/pre/S30samba-stop.sh
%dir %{_var}/run/gluster
%files client
%defattr(644,root,root,755)
-%attr(755,root,root) %{_bindir}/fusermount-glusterfs
+%{!?with_system_fuse:%attr(755,root,root) %{_bindir}/fusermount-glusterfs}
%attr(755,root,root) /sbin/mount.glusterfs
%attr(755,root,root) %{_sbindir}/gluster
%{_mandir}/man8/gluster.8*
%dir %{_prefix}/lib/ocf/resource.d/glusterfs
%attr(755,root,root) %{_prefix}/lib/ocf/resource.d/glusterfs/glusterd
%attr(755,root,root) %{_prefix}/lib/ocf/resource.d/glusterfs/volume
+
+%files events
+%defattr(644,root,root,755)
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/glusterfs/eventsconfig.json
+%attr(755,root,root) %{_sbindir}/gluster-eventsapi
+%attr(755,root,root) %{_sbindir}/glustereventsd
+%dir %{_libexecdir}/glusterfs/events
+%attr(755,root,root) %{_libexecdir}/glusterfs/events/glustereventsd.py
+%{_libexecdir}/glusterfs/events/__init__.py*
+%{_libexecdir}/glusterfs/events/eventsapiconf.py*
+%{_libexecdir}/glusterfs/events/eventtypes.py*
+%{_libexecdir}/glusterfs/events/gf_event.py*
+%{_libexecdir}/glusterfs/events/handlers.py*
+%{_libexecdir}/glusterfs/events/utils.py*
+%{_libexecdir}/glusterfs/peer_eventsapi.py*
+%{_datadir}/glusterfs/scripts/eventsdash.py
+
+%files geo-replication
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_sbindir}/gfind_missing_files
+%attr(755,root,root) %{_sbindir}/gluster-georep-sshkey
+%attr(755,root,root) %{_sbindir}/gluster-mountbroker
+%attr(755,root,root) %{_libexecdir}/glusterfs/gsyncd
+%attr(755,root,root) %{_libexecdir}/glusterfs/gverify.sh
+%attr(755,root,root) %{_libexecdir}/glusterfs/peer_georep-sshkey.py*
+%attr(755,root,root) %{_libexecdir}/glusterfs/peer_gsec_create
+%attr(755,root,root) %{_libexecdir}/glusterfs/peer_mountbroker
+%attr(755,root,root) %{_libexecdir}/glusterfs/peer_mountbroker.py*
+%attr(755,root,root) %{_libexecdir}/glusterfs/set_geo_rep_pem_keys.sh
+%dir %{_libexecdir}/glusterfs/gfind_missing_files
+%attr(755,root,root) %{_libexecdir}/glusterfs/gfind_missing_files/*
+%dir %{_libexecdir}/glusterfs/python/syncdaemon
+# gsyncd.py is a script, the rest probably don't require *.py
+%{_libexecdir}/glusterfs/python/syncdaemon/*.py*
+%attr(755,root,root) %{_datadir}/glusterfs/scripts/generate-gfid-file.sh
+%attr(755,root,root) %{_datadir}/glusterfs/scripts/get-gfid.sh
+%attr(755,root,root) %{_datadir}/glusterfs/scripts/gsync-sync-gfid
+%attr(755,root,root) %{_datadir}/glusterfs/scripts/gsync-upgrade.sh
+%attr(755,root,root) %{_datadir}/glusterfs/scripts/schedule_georep.py
+%attr(755,root,root) %{_datadir}/glusterfs/scripts/slave-upgrade.sh
+%dir %{_var}/lib/glusterd/hooks/1/gsync-create
+%dir %{_var}/lib/glusterd/hooks/1/gsync-create/post
+%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/glusterd/hooks/1/gsync-create/post/S56glusterd-geo-rep-create-post.sh
+
+%files -n emacs-glusterfs-mode
+%defattr(644,root,root,755)
+%{_datadir}/emacs/site-lisp/glusterfs-mode.el
+
+%files -n vim-syntax-glusterfs
+%defattr(644,root,root,755)
+%{_datadir}/vim/syntax/glusterfs.vim