# TODO
-# - should unmount /proc/fs/nfsd at package uninstall (or in service nfs stop)
+# - should unmount /proc/fs/nfsd and /var/lib/nfs/rpc_pipefs at package
+# uninstall (or in service nfs stop)
#
# Conditional build:
-%bcond_without nfs4 # without NFSv4 support
+%bcond_with heimdal # build with Heimdal Kerberos instead of MIT
#
Summary: Kernel NFS server
Summary(pl.UTF-8): Działający na poziomie jądra serwer NFS
Summary(ru.UTF-8): Утилиты для NFS и демоны поддержки для NFS-сервера ядра
Summary(uk.UTF-8): Утиліти для NFS та демони підтримки для NFS-сервера ядра
Name: nfs-utils
-Version: 1.0.10
-Release: 7
-License: GPL
+Version: 1.2.0
+Release: 2
+License: GPL v2
Group: Networking/Daemons
-Source0: http://dl.sourceforge.net/nfs/%{name}-%{version}.tar.gz
-# Source0-md5: 1949634d0dc896696d8a880bdca622c8
-Source1: ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs.doc.tar.gz
+Source0: http://www.kernel.org/pub/linux/utils/nfs/%{name}-%{version}.tar.bz2
+# Source0-md5: 779cf81044e92cb51ad590960e7b3671
+#Source1: ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs.doc.tar.gz
+Source1: nfs.doc.tar.gz
# Source1-md5: ae7db9c61c5ad04f83bb99e5caed73da
Source2: nfs.init
Source3: nfslock.init
-Source4: rquotad.init
-Source5: nfs.sysconfig
-Source6: nfslock.sysconfig
-Source7: rquotad.sysconfig
-Source8: nfsfs.init
-Source9: nfsfs.sysconfig
-Patch0: %{name}-eepro-support.patch
-Patch1: %{name}-install.patch
-Patch2: %{name}-nolibs.patch
-Patch3: %{name}-heimdal.patch
-Patch4: %{name}-heimdal-internals.patch
-# http://www.citi.umich.edu/projects/nfsv4/linux/nfs-utils-patches/
-Patch5: %{name}-1.0.10-CITI_NFS4_ALL-1.dif
+Source4: nfsfs.init
+Source5: rpcidmapd.init
+Source6: rpcgssd.init
+Source7: rpcsvcgssd.init
+Source8: nfs.sysconfig
+Source9: nfslock.sysconfig
+Source10: nfsfs.sysconfig
+Patch0: %{name}-install.patch
+Patch1: %{name}-statdpath.patch
+Patch2: %{name}-keytab-path.patch
+Patch3: %{name}-subsys.patch
+Patch4: %{name}-union-mount.patch
+Patch5: %{name}-kerberos-ac.patch
+Patch6: %{name}-no_libgssapi.patch
+Patch7: %{name}-pkgconfig_ac.patch
+Patch8: %{name}-heimdal_functions.patch
URL: http://nfs.sourceforge.net/
BuildRequires: autoconf >= 2.59
BuildRequires: automake
-%if %{with nfs4}
-BuildRequires: heimdal-devel >= 0.7
-BuildRequires: libevent-devel >= 1.2
-BuildRequires: libnfsidmap-devel
-BuildRequires: librpcsecgss-devel >= 0.11-3
+BuildRequires: cpp
+%if %{with heimdal}
+BuildRequires: heimdal-devel >= 1.0
+%else
+BuildRequires: krb5-devel >= 1.6
+BuildRequires: libgssglue-devel >= 0.1
%endif
+BuildRequires: libblkid-devel
+BuildRequires: libevent-devel >= 1.2
+BuildRequires: libnfsidmap-devel >= 0.21-3
+BuildRequires: librpcsecgss-devel >= 0.16
+BuildRequires: libtirpc-devel >= 1:0.1.10-4
BuildRequires: libtool
BuildRequires: libwrap-devel
BuildRequires: pkgconfig
BuildRequires: sed >= 4.0
+# lucid context fields mismatch with current version of spkm3.h
+BuildConflicts: gss_mech_spkm3-devel
Requires(post): fileutils
Requires(post): sed >= 4.0
Requires(post,preun): /sbin/chkconfig
Requires: %{name}-common = %{version}-%{release}
-Requires: portmap >= 4.0
-Requires: rc-scripts >= 0.4.0
+Requires: rpcbind >= 0.1.7
+Requires: rc-scripts >= 0.4.1.5
Requires: setup >= 2.4.6-7
Provides: nfsdaemon
Obsoletes: knfsd
Summary(pl.UTF-8): Programy do obsługi blokowania plików poprzez NFS (lock)
Group: Networking
Requires(post,preun): /sbin/chkconfig
-#Requires: kernel >= 2.2.5
-Requires: portmap >= 4.0
+Requires: rpcbind >= 0.1.7
Requires: rc-scripts
+Provides: group(rpcstatd)
+Provides: user(rpcstatd)
Provides: nfslockd
Obsoletes: knfsd-lock
Obsoletes: nfslockd
Ten pakiet zawiera programy umożliwiające wykonywanie blokowania
plików (file locking) poprzez NFS.
-%package rquotad
-Summary: Remote quota server
-Summary(pl.UTF-8): Zdalny serwer quota
-Group: Networking/Daemons
-Requires(post,preun): /sbin/chkconfig
-Requires: rc-scripts
-Obsoletes: quota-rquotad
-
-%description rquotad
-rquotad is an rpc(3N) server which returns quotas for a user of a
-local file system which is mounted by a remote machine over the NFS.
-The results are used by quota(1) to display user quotas for remote
-file systems.
-
-%description rquotad -l pl.UTF-8
-rquotad jest serverem rpc(3N), który zwraca quoty użytkownika
-lokalnego systemu plików, który jest zamountowany przez zdalną maszynę
-poprzez NFS. Rezultaty są używane przez quota(1), aby wyświetlić quotę
-dla zdalnego systemu plików.
-
%package common
Summary: Common programs for NFS
Summary(pl.UTF-8): Wspólne programy do obsługi NFS
Group: Networking
+Requires: libnfsidmap >= 0.21-3
+Conflicts: mount < 2.13-0.pre7.1
%description common
Common programs for NFS.
%setup -q -a1
%patch0 -p1
%patch1 -p1
-%patch2 -p1
+%{!?with_heimdal:%patch2 -p1}
%patch3 -p1
%patch4 -p1
+%if %{with heimdal}
%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p0
+%endif
+
+# conflict with GNU stdio extension
+sed -i -e 's/dprintf/dbgprintf/' support/include/ha-callout.h utils/statd/*.[ch]
%build
-%if "%{_lib}" == "lib64"
-sed -i -e 's#/lib/#/%{_lib}/#g' aclocal/kerberos5.m4
-%endif
-sed -i -e 's#libroken.a#libroken.so#g' aclocal/kerberos5.m4
+%{__libtoolize}
%{__aclocal} -I aclocal
%{__autoconf}
+%{__autoheader}
%{__automake}
%configure \
-%if %{with nfs4}
- --enable-gss \
- --with-krb5=%{_prefix} \
+ --enable-nfsv3 \
--enable-nfsv4 \
+ --enable-gss \
+ --enable-mount \
+ --enable-tirpc \
+ --enable-ipv6 \
+ --with-statedir=/var/lib/nfs \
+ --with-statduser=rpcstatd \
+ --with-start-statd=%{_sbindir}/start-statd \
+ --with-tcp-wrappers \
+%if %{with heimdal}
+ --with-krb5-config=%{_bindir}/krb5-config
%else
- --disable-gss \
- --disable-nfsv4 \
+ --with-krb5=%{_prefix}
%endif
- --enable-nfsv3 \
- --enable-secure-statd \
- --with-statedir=/var/lib/nfs \
- --with-tcp-wrappers
%{__make} all
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{/sbin,%{_sbindir},%{_mandir}/man{5,8}} \
- $RPM_BUILD_ROOT%{_sysconfdir}/{rc.d/init.d,sysconfig} \
+install -d $RPM_BUILD_ROOT%{_sysconfdir}/{rc.d/init.d,sysconfig} \
$RPM_BUILD_ROOT%{_var}/lib/nfs/{rpc_pipefs,v4recovery}
%{__make} install \
DESTDIR=$RPM_BUILD_ROOT
-install tools/rpcdebug/rpcdebug $RPM_BUILD_ROOT/sbin
-install utils/idmapd/idmapd.conf $RPM_BUILD_ROOT%{_sysconfdir}/
+cat >$RPM_BUILD_ROOT%{_sbindir}/start-statd <<EOF
+#!/bin/sh
+# mount.nfs calls this script when mounting a filesystem with locking
+# enabled, but when statd does not seem to be running (based on
+# /var/run/rpc.statd.pid).
+exec /sbin/service nfslock start
+EOF
+
+sed -e "s|#!/bin/bash|#!/bin/sh|" utils/gssd/gss_destroy_creds > $RPM_BUILD_ROOT%{_sbindir}/gss_destroy_creds
+
+mv $RPM_BUILD_ROOT%{_sbindir}/rpcdebug $RPM_BUILD_ROOT/sbin
install %{SOURCE2} $RPM_BUILD_ROOT/etc/rc.d/init.d/nfs
install %{SOURCE3} $RPM_BUILD_ROOT/etc/rc.d/init.d/nfslock
-install %{SOURCE4} $RPM_BUILD_ROOT/etc/rc.d/init.d/rquotad
-install %{SOURCE8} $RPM_BUILD_ROOT/etc/rc.d/init.d/nfsfs
-install %{SOURCE5} $RPM_BUILD_ROOT/etc/sysconfig/nfsd
-install %{SOURCE6} $RPM_BUILD_ROOT/etc/sysconfig/nfslock
-install %{SOURCE7} $RPM_BUILD_ROOT/etc/sysconfig/rquotad
-install %{SOURCE9} $RPM_BUILD_ROOT/etc/sysconfig/nfsfs
+install %{SOURCE4} $RPM_BUILD_ROOT/etc/rc.d/init.d/nfsfs
+install %{SOURCE5} $RPM_BUILD_ROOT/etc/rc.d/init.d/idmapd
+install %{SOURCE6} $RPM_BUILD_ROOT/etc/rc.d/init.d/gssd
+install %{SOURCE7} $RPM_BUILD_ROOT/etc/rc.d/init.d/svcgssd
+install %{SOURCE8} $RPM_BUILD_ROOT/etc/sysconfig/nfsd
+install %{SOURCE9} $RPM_BUILD_ROOT/etc/sysconfig/nfslock
+install %{SOURCE10} $RPM_BUILD_ROOT/etc/sysconfig/nfsfs
> $RPM_BUILD_ROOT%{_var}/lib/nfs/rmtab
> $RPM_BUILD_ROOT%{_sysconfdir}/exports
-rm -f $RPM_BUILD_ROOT%{_mandir}/man8/rpc.{mountd,nfsd,rquotad,statd,lockd,svcgssd,gssd,idmapd}.8
-rm -f $RPM_BUILD_ROOT%{_mandir}/man5/rpc.idmapd.conf.5
-echo ".so lockd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.lockd.8
+rm $RPM_BUILD_ROOT%{_mandir}/man8/rpc.{mountd,nfsd,statd,sm-notify}.8
+rm $RPM_BUILD_ROOT%{_mandir}/man8/rpc.{svcgssd,gssd,idmapd}.8
echo ".so mountd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.mountd.8
echo ".so nfsd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.nfsd.8
-echo ".so rquotad.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.rquotad.8
echo ".so statd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.statd.8
-%if %{with nfs4}
+echo ".so sm-notify.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.sm-notify.8
echo ".so gssd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.gssd.8
echo ".so idmapd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.idmapd.8
echo ".so svcgssd.8" > $RPM_BUILD_ROOT%{_mandir}/man8/rpc.svcgssd.8
-echo ".so idmapd.conf.5" > $RPM_BUILD_ROOT%{_mandir}/man5/rpc.idmapd.conf.5
-%endif
touch $RPM_BUILD_ROOT/var/lib/nfs/xtab
ln -sf /bin/true $RPM_BUILD_ROOT/sbin/fsck.nfs
-rm -rf html
cp -a nfs html
%clean
%post
/sbin/chkconfig --add nfs
%service nfs restart "NFS daemon"
+/sbin/chkconfig --add svcgssd
+%service svcgssd restart "RPC svcgssd"
%preun
if [ "$1" = "0" ]; then
%service nfs stop
/sbin/chkconfig --del nfs
+ %service svcgssd stop
+ /sbin/chkconfig --del svcgssd
fi
%post clients
/sbin/chkconfig --add nfsfs
%service nfsfs restart
+/sbin/chkconfig --add gssd
+%service gssd restart "RPC gssd"
%preun clients
if [ "$1" = "0" ]; then
%service nfsfs stop
/sbin/chkconfig --del nfsfs
+ %service gssd stop
+ /sbin/chkconfig --del gssd
fi
+%pre lock
+%groupadd -g 191 rpcstatd
+%useradd -u 191 -d /var/lib/nfs/statd -s /bin/false -c "RPC statd user" -g rpcstatd rpcstatd
+
%post lock
/sbin/chkconfig --add nfslock
-%service nfslock restart "nfslock daemon"
+%service nfslock restart "RPC statd"
%preun lock
if [ "$1" = "0" ]; then
/sbin/chkconfig --del nfslock
fi
-%post rquotad
-/sbin/chkconfig --add rquotad
-%service rquotad restart "NFS quota daemon"
+%postun lock
+if [ "$1" = "0" ]; then
+ %userremove rpcstatd
+ %groupremove rpcstatd
+fi
+
+%post common
+/sbin/chkconfig --add idmapd
+%service idmapd restart "RPC idmapd"
-%preun rquotad
+%preun common
if [ "$1" = "0" ]; then
- %service rquotad stop
- /sbin/chkconfig --del rquotad
+ %service idmapd stop
+ /sbin/chkconfig --del idmapd
fi
-%triggerpostun clients -- %{name}-clients < 1.0.10-1.2
+%triggerpostun -- %{name} < 1.1.0-0.rc1.1
+/sbin/chkconfig nfs reset
+/sbin/chkconfig svcgssd reset
+
+%triggerpostun lock -- %{name}-lock < 1.1.0-0.rc1.1
+/sbin/chkconfig nfslock reset
+
+%triggerpostun clients -- %{name}-clients < 1.1.0-0.rc1.1
if [ -f /etc/sysconfig/nfsclient.rpmsave ]; then
mv -f /etc/sysconfig/nfsfs{,.rpmnew}
mv -f /etc/sysconfig/nfsclient.rpmsave /etc/sysconfig/nfsfs
fi
+/sbin/chkconfig nfsfs reset
+/sbin/chkconfig gssd reset
+
+%triggerpostun common -- %{name}-common < 1.1.0-0.rc1.1
+/sbin/chkconfig idmapd reset
%files
%defattr(644,root,root,755)
%attr(755,root,root) %{_sbindir}/rpc.mountd
%attr(755,root,root) %{_sbindir}/rpc.nfsd
%attr(755,root,root) %{_sbindir}/nfsstat
-%attr(755,root,root) %{_sbindir}/nhfsgraph
-%attr(755,root,root) %{_sbindir}/nhfsnums
-%attr(755,root,root) %{_sbindir}/nhfsrun
-%attr(755,root,root) %{_sbindir}/nhfsstone
%attr(754,root,root) /etc/rc.d/init.d/nfs
%{_mandir}/man7/nfsd.7*
%{_mandir}/man8/exportfs.8*
%{_mandir}/man8/mountd.8*
-%{_mandir}/man8/nhfsgraph.8*
-%{_mandir}/man8/nhfsnums.8*
-%{_mandir}/man8/nhfsrun.8*
-%{_mandir}/man8/nhfsstone.8*
%{_mandir}/man8/nfsd.8*
%{_mandir}/man8/nfsstat.8*
%{_mandir}/man8/rpc.mountd.8*
%{_mandir}/man8/rpc.nfsd.8*
-%if %{with nfs4}
+%{_mandir}/man8/rpcdebug.8*
+%attr(754,root,root) /etc/rc.d/init.d/svcgssd
%attr(755,root,root) %{_sbindir}/rpc.svcgssd
%{_mandir}/man8/*svcgss*
-%endif
%files lock
%defattr(644,root,root,755)
-%attr(755,root,root) %{_sbindir}/rpc.lockd
+%attr(700,rpcstatd,rpcstatd) %dir %{_var}/lib/nfs/statd
+%attr(700,rpcstatd,rpcstatd) %dir %{_var}/lib/nfs/statd/sm
+%attr(700,rpcstatd,rpcstatd) %dir %{_var}/lib/nfs/statd/sm.bak
+%attr(600,rpcstatd,rpcstatd) %config(noreplace) %verify(not md5 mtime size) %{_var}/lib/nfs/statd/state
%attr(755,root,root) %{_sbindir}/rpc.statd
+%attr(755,root,root) %{_sbindir}/sm-notify
+%attr(755,root,root) %{_sbindir}/start-statd
%attr(754,root,root) /etc/rc.d/init.d/nfslock
%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/nfslock
-%{_mandir}/man8/rpc.lockd.8*
-%{_mandir}/man8/lockd.8*
-%{_mandir}/man8/rpc.statd.8*
-%{_mandir}/man8/statd.8*
-%config(noreplace) %verify(not md5 mtime size) %{_var}/lib/nfs/state
+%{_mandir}/man8/*statd.8*
+%{_mandir}/man8/*sm-notify.8*
%files clients
%defattr(644,root,root,755)
%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/nfsfs
%attr(755,root,root) %{_sbindir}/showmount
%{_mandir}/man8/showmount.8*
-
-%if %{with nfs4}
+%attr(4755,root,root) /sbin/mount.nfs
+%attr(4755,root,root) /sbin/umount.nfs
+%attr(4755,root,root) /sbin/mount.nfs4
+%attr(4755,root,root) /sbin/umount.nfs4
+%{_mandir}/man8/*mount.nfs.8*
+%attr(754,root,root) /etc/rc.d/init.d/gssd
%attr(755,root,root) %{_sbindir}/rpc.gssd
%{_mandir}/man8/rpc.gssd*
%{_mandir}/man8/gssd*
-%endif
-
-#%files rquotad
-#%defattr(644,root,root,755)
-#%attr(755,root,root) %{_sbindir}/rpc.rquotad
-#%attr(754,root,root) /etc/rc.d/init.d/rquotad
-#%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/rquotad
-#%%{_mandir}/man8/rpc.rquotad.8*
%files common
%defattr(644,root,root,755)
%attr(755,root,root) %dir %{_var}/lib/nfs
%attr(755,root,root) %dir %{_var}/lib/nfs/rpc_pipefs
%attr(755,root,root) %dir %{_var}/lib/nfs/v4recovery
-%if %{with nfs4}
+%{_mandir}/man5/nfs*
+%attr(754,root,root) /etc/rc.d/init.d/idmapd
%attr(755,root,root) %{_sbindir}/gss_*
%attr(755,root,root) %{_sbindir}/rpc.idmapd
-%attr(660,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/idmapd.conf
%{_mandir}/man[58]/*idmap*
-%endif