redhat: speed up userland-only rpm builds
[openafs.git] / src / packaging / RedHat / openafs.spec.in
index 6ae1e2a..de2c469 100644 (file)
@@ -1,47 +1,56 @@
 # Openafs Spec $Revision$
 
-# TEMPORARY fix for patch fuzz so we can build on Fedora 10
-%define _default_patch_fuzz 2
-
 %define afsvers @VERSION@
 %define pkgvers @LINUX_PKGVER@
-# for beta/rc releases make pkgrel 0.X.<tag>
+# for beta/rc releases make pkgrel 0.<tag>
 # for real releases make pkgrel 1 (or more for extra releases)
-#%define pkgrel 0.1.rc1
 %define pkgrel @LINUX_PKGREL@
 
-%if %{?osvers:0}%{!?osvers:1}
-%define osvers 1
-%endif
-
-%{!?fedorakmod: %define fedorakmod 1}
 %{!?build_dkmspkg: %define build_dkmspkg 1}
 
-# Determine presence of rpmbuild command line --define arguments used for
-# option specification
-%define kernvers_on_cmdline %{?kernvers:1}%{!?kernvers:0}
+#
+# Determine presence of rpmbuild command line --define arguments and set
+# defaults if not present.
+#
 %define build_userspace_on_cmdline %{?build_userspace:1}%{!?build_userspace:0}
 %define build_modules_on_cmdline %{?build_modules:1}%{!?build_modules:0}
-%define build_authlibs_on_cmdline %{?build_authlibs:1}%{!?build_authlibs:0}
+%define debugspec_on_cmdline %{?debugspec:1}%{!?debugspec:0}
 
-# Determine the version of the kernel to build against
-# - automatically select running kernel if there are sources in /lib/modules
-# - note that this can be overridden on the command line
-#
-%if !%{kernvers_on_cmdline}
-%define kernvers %(%{_sourcedir}/openafs-kernel-version.sh)
+%if !%{build_userspace_on_cmdline}
+%define build_userspace 1
+%endif
+%if !%{build_modules_on_cmdline}
+%define build_modules 1
 %endif
+%if !%{debugspec_on_cmdline}
+%define debugspec 0
+%endif
+
+# Specify '--with kauth' if you want to build packages containing the legacy
+# kaserver and related programs.
+%define kauth_support %{?_with_kauth:1}%{!?_with_kauth:0}
 
-# If we're building for a 2.4 series kernel, then fedora style kmods aren't
-# appropriate - disable them.
+# Specify '--without authlibs' if you do not want to build the openafs-authlibs
+# package.
+%define build_authlibs %{?_without_authlibs:0}%{!?_without_authlibs:1}
 
-%define kern24 %([ `echo "%{kernvers}" | sed -e 's/^\([0-9]*\.[0-9]*\)\..*/\1/'` = "2.4" ] && echo 1 || echo 0)
+# Specify '--without krb5' if you do not want to build the openafs-krb5 package
+# to distribute aklog, asetkey, and akeyconvert.
+%define krb5support %{?_without_krb5:0}%{!?_without_krb5:1}
+
+# Specify '--with bootkernel' if you want to build the
+# kernel module for Red Hat BOOT Kernels on x86.
+%define bootkernelsupport %{?_with_bootkernel:1}%{!?_with_bootkernel:0}
 
-%if %{kern24}
-%define fedorakmod 0
+#
+# Definitions
+#
+%if 0%{?fedora} >= 17 || 0%{?rhel} >= 7
+%define depmod /usr/sbin/depmod
+%else
+%define depmod /sbin/depmod
 %endif
 
-%if %{fedorakmod}
 %define kmodtool bash %{_sourcedir}/openafs-kmodtool
 
 %define kmod_name openafs
   fi
 %endif
 
-%else # Legacy kernel build stuff 
-
-%define kversis %{_sourcedir}/openafs-kvers-is.sh
-%define kvers %(%{kversis} parsev %{kernvers})
-%define kvers_is_24 %(%{kversis} %{kvers} "2.4")
-%define kvers_is_26 %(%{kversis} %{kvers} "2.6")
-%define ktype %(%{kversis} parset %{kernvers})
-%define kversion %(%{kversis} kvers %{kernvers})
-
-# This is where to look for kernel build include files.  Default
-# is /lib/modules/<kvers>/build, but you can define kbase and
-# kend on the commandline to change that.
-#
-%if %{?kbase:0}%{!?kbase:1}
-%define kbase /lib/modules/
-%endif
-%if %{?kend:0}%{!?kend:1}
-%define kend /build
-%endif
-# Let the buildscript define the ksrcdir directly -- needed for RHEL4
-%if %{?ksrcdir:0}%{!?ksrcdir:1}
-%define ksrcdir %{kbase}%{kernvers}%{kend}
-%endif
-
-%if %{?kmoddir:0}%{!?kmoddir:1}
-%define kmoddir /lib/modules
-%endif
-%define kxmoddir %{kmoddir}/%{kernvers}
-
-# End legacy kernel build stuff
-%endif 
-
-%define dkms_version %{osvers}.%{pkgrel}
-
-# Set 'debugspec' to 1 if you want to debug the spec file.  This will
-# not remove the installed tree as part of the %clean operation
-%if %{?debugspec:0}%{!?debugspec:1}
-%define debugspec 0
-%endif
-
-# Set 'krb5support' to 1 if you want to build the openafs-krb5 package
-# to distribute aklog and asetkey
-%define krb5support %{?_without_krb5:0}%{!?_without_krb5:1}
-
-%if %{krb5support}
-%if %{?krb5config:0}%{!?krb5config:1}
-%define krb5config /usr/kerberos/bin/krb5-config
-%endif
-%endif
-
-# Set 'bootkernelsupport' to 1 if you want to build the
-# kernel module for Red Hat BOOT Kernels on x86.
-%define bootkernelsupport %{?_with_bootkernel:1}%{!?_with_bootkernel:0}
+%define dkms_version %{pkgvers}-%{pkgrel}%{?dist}
 
 # Define the location of your init.d directory
-%define initdir /etc/init.d
+%define initdir /etc/rc.d/init.d
 
 #determine if the kernel provides an arch-specific Provides
 %define kprovidesarch %(%{kversis} provideskernelarch %{ksrcdir} %{_target_cpu})
 # Define the location of the PAM security module directory
 %define pamdir /%{_lib}/security
 
-%if !%{fedorakmod}
-
-# Define the set of kernel module variations to be built:
-# For 2.4 kernels we just build everything at once for a particular
-# kernel.   So we build up, smp, and bigmem all at once.
-# For 2.6 kernels we have to build against the specific kernel headers
-# for a particular kernel variation.  AFS will handle the specific smp or
-# non-smp determination.  So just always build as if it's "up" -- the kernel
-# version will have the 'variation' type already in the version #.
-
-%define up_package 0
-%define smp_package 0
-%define bigmem_package 0
-%define hugemem_package 0
-%define largesmp_package 0
-
-#######################################################################
-# 2.4
-%if %{kvers_is_24}
-%define kdepend kernel-source
-%define up_package 1
-%define smp_package 1
-%define smp_ext smp
-
-%define bigmem_package %(%{kversis} find %{ksrcdir} %{_target_cpu} bigmem) 
-%if %{bigmem_package}
-%define bigmem_ext bigmem
-%endif
-
-%define hugemem_package %(%{kversis} find %{ksrcdir} %{_target_cpu} hugemem) 
-%if %{hugemem_package}
-%define hugemem_ext hugemem
-%endif
-
-%define kvariations up smp %{?bigmem_ext:%{bigmem_ext}} %{?hugemem_ext:%{hugemem_ext}}
-
-#######################################################################
-# 2.6
-%else
-%if %{kvers_is_26}
-%define kvariations up
-%ifarch s390x
-%define ktype "smp"
-%define up_package 1
-%else
-%define up_package %(%{kversis} "%{ktype}" "")
-%define smp_package %(%{kversis} "%{ktype}" "smp")
-%define hugemem_package %(%{kversis} "%{ktype}" "hugemem")
-%define largesmp_package %(%{kversis} "%{ktype}" "largesmp")
-%endif
-
-%if !%{up_package} && !%{smp_package} && !%{hugemem_package} && !%{largesmp_package}
-%error "unknown kernel type: %{ktype}"
-%endif
-
-%if !%{kernvers_on_cmdline}
-%define kdepend %{ksrcdir}/include/linux/version.h
-%endif
-
-#######################################################################
-# other kernels?
-%else
-%error "unknown kernel version: ${kvers} (parsed from %{kernvers})"
-%endif
-%endif
-
-# End of legacy kernel module build
-%endif 
-
-#######################################################################
-# You probably don't need to change anything beyond this line
-# NOTE: If you do, please email me!!!
-
-# Determine which elements of OpenAFS to build.  For non-x86 arches
-# (subject to the ExclusiveArch setting, below), we build both userspace
-# and modules.  For most x86 arches, we build just the kernel modules.  For
-# i386, we build just the userspace.  If you're running an i386 kernel,
-# you'll need to tweak that last bit.
-%if !%{build_userspace_on_cmdline} && !%{build_modules_on_cmdline}
-
-%ifarch x86_64 ia64 s390 s390x
-%define build_userspace 1
-%define build_modules 1
-%ifarch x86_64 ia64
-%define build_authlibs 1
-%else
-%define build_authlibs 0
-%endif
-%endif
-
-%ifarch %{ix86}
-%define build_userspace 0
-%define build_modules 1
-%define build_authlibs 1
-%endif
-
-%ifarch i386
-%define build_userspace 1
-%define build_modules 0
-%define build_authlibs 1
-%endif
-
-%endif
-
-# deal with cmdline specification
-%if %{build_userspace_on_cmdline} || %{build_modules_on_cmdline}
-%if !%{build_userspace_on_cmdline}
-%define build_userspace 0
-%endif
-%if !%{build_modules_on_cmdline}
-%define build_modules 0
-%endif
-%endif
-
-%if !%{build_authlibs_on_cmdline}
-%if %{build_userspace_on_cmdline}
-%define build_authlibs 1
-%else
-%define build_authlibs 0
-%endif
-%endif
-
-# Make sure RPM doesn't complain about installed but non-packaged files.
-#define __check_files  %{nil}
-
 Summary: OpenAFS distributed filesystem
 Name: openafs
 Version: %{pkgvers}
-Release: %{osvers}.%{pkgrel}
+Release: %{pkgrel}%{?dist}
 License: IBM Public License
 URL: http://www.openafs.org
 BuildRoot: %{_tmppath}/%{name}-%{version}-root
 Packager: OpenAFS Gatekeepers <openafs-gatekeepers@openafs.org>
 Group: Networking/Filesystems
 BuildRequires: %{?kdepend:%{kdepend}, } pam-devel, ncurses-devel, flex, bison
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7
+BuildRequires: systemd-units
+%endif
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 6
+BuildRequires: perl-devel, swig
+%endif
+BuildRequires: perl(ExtUtils::Embed)
 %if %{krb5support}
 BuildRequires: krb5-devel
 %endif
-ExclusiveArch: %{ix86} x86_64 ia64 s390 s390x sparc64 ppc ppc64
+%if %{build_modules}
+BuildRequires: kernel-devel
+%endif
+
+ExclusiveArch: %{ix86} x86_64 ia64 s390 s390x sparc64 ppc ppc64 aarch64
 
 #    http://dl.openafs.org/dl/openafs/candidate/%{afsvers}/...
 Source0: http://www.openafs.org/dl/openafs/%{afsvers}/openafs-%{afsvers}-src.tar.bz2
@@ -269,9 +112,8 @@ Source1: http://www.openafs.org/dl/openafs/%{afsvers}/openafs-%{afsvers}-doc.tar
 Source10: http://www.openafs.org/dl/openafs/%{afsvers}/RELNOTES-%{afsvers}
 Source11: http://www.openafs.org/dl/openafs/%{afsvers}/ChangeLog
 
-Source20: http://dl.central.org/dl/cellservdb/CellServDB.2008-11-07
+Source20: https://www.central.org/dl/cellservdb/CellServDB.2017-03-14
 
-Source30: openafs-kernel-version.sh
 Source996: openafs-kvers-is.sh
 Source997: openafs-buildfedora.pl
 Source998: openafs-buildall.sh
@@ -289,7 +131,7 @@ OpenAFS packages but are not necessarily tied to a client or server.
 The OpenAFS SRPM can be rebuilt with the following options to control
 what gets built:
 
- --define "kernvers 2.4.20-1.1376_FC3" Specify the specific kernel version 
+ --define "kernvers 3.19.3-100.fc20.i686" Specify the specific kernel version
                                   to build modules against. The default is
                                   to build against the currently-running
                                   kernel.
@@ -298,18 +140,16 @@ what gets built:
                                   The build will define ksrvdir as
                                   %%{kbase}<kernvers>%%{kend}
 
+ --without authlibs               Disable authlibs package (default: with authlibs)
  --without krb5                   Disable krb5 support (default: with krb5)
  --with bitmap-later              Enable "bitmap later" support
  --with bos-restricted            Enable "bos restricted" mode
- --with fast-restart              Enable "fast restart" mode
- --with largefiles                Enable "largefile fileserver" mode
  --with supergroups               Enable "supergroups"
+ --with kauth                     Build the openafs-kauth-server and openafs-kauth-client
+                                  packages which contain the legacy kaserver and
+                                  related programs. (default: --without kauth)
 
  --target=i386                    The target architecture to build for.
-                                  When building for a non-default target
-                                  the build may choose whether to build
-                                  userspace or kernel modules automatically.
-                                  The defaults are probably what you want.
 
  --define "build_userspace 1"     Request building of userspace tools
  --define "build_modules 1"       Request building of kernel modules
@@ -319,19 +159,16 @@ what gets built:
                                   will be installed.  You probably don't
                                   need to change this ever.
 
- --define "fedorakmod 0"         Disable the building of 'Fedora' style kernel 
-                                 modules, and use the old format.
-
  --define "kvariants <variants>"  When building Fedora style kernel modules,
                                   this defines the set of kernel variants
                                   to build.
                                   <variants> is a space seperated list which
                                   may contain one or more of
                                   '' (for the generic kernel), smp, PAE, xen
-                                  or kdump 
+                                  or kdump
 
 To a kernel module for your running kernel, just run:
-  rpmbuild --rebuild --target=`uname -m` openafs-%{pkgvers}-%{osvers}.%{pkgrel}.src.rpm
+  rpmbuild --rebuild --target=`uname -m` openafs-%{pkgvers}-%{pkgrel}%{?dist}.src.rpm
 
 ##############################################################################
 #
@@ -341,14 +178,16 @@ To a kernel module for your running kernel, just run:
 %if %{build_userspace}
 
 %package client
-Requires: binutils, openafs = %{PACKAGE_VERSION}
+Requires: binutils, openafs = %{version}
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7
+Requires: systemd-units
+Requires(post): systemd-units, systemd-sysv
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+%endif
 
-%if %{fedorakmod}
 Requires: %{name}-kmod >= %{version}
 Provides: %{name}-kmod-common = %{version}
-%else
-Requires: openafs-kernel
-%endif
 
 Summary: OpenAFS Filesystem Client
 Group: Networking/Filesystem
@@ -363,9 +202,15 @@ This package provides basic client support to mount and manipulate
 AFS.
 
 %package server
-Requires: openafs = %{PACKAGE_VERSION}
+Requires: openafs = %{version}
 Summary: OpenAFS Filesystem Server
 Group: Networking/Filesystems
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7
+Requires: systemd-units
+Requires(post): systemd-units, systemd-sysv
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+%endif
 
 %description server
 The AFS distributed filesystem.  AFS is a distributed filesystem
@@ -380,10 +225,8 @@ Cell.
 %package -n dkms-%{name}
 Summary:        DKMS-ready kernel source for AFS distributed filesystem
 Group:          Development/Kernel
-Provides:       openafs-kernel = %{PACKAGE_VERSION}
-%if %{fedorakmod}
-Provides: %{name}-kmod = %{PACKAGE_VERSION}
-%endif
+Provides:       openafs-kernel = %{version}
+Provides: %{name}-kmod = %{version}
 Requires(pre):  dkms
 Requires(pre):  flex
 Requires(post): dkms
@@ -410,17 +253,17 @@ allowing cross-platform sharing of files among multiple computers.
 Facilities are provided for access control, authentication, backup and
 administrative management.
 
-This package provides a shared version of libafsrpc and libafsauthent. 
-None of the programs included with OpenAFS currently use these shared 
-libraries; however, third-party software that wishes to perform AFS 
+This package provides a shared version of libafsrpc and libafsauthent.
+None of the programs included with OpenAFS currently use these shared
+libraries; however, third-party software that wishes to perform AFS
 authentication may link against them.
 %endif
 
 %package authlibs-devel
 %if %{build_authlibs}
-Requires: openafs-authlibs = %{PACKAGE_VERSION}
+Requires: openafs-authlibs = %{version}-%{release}
 %endif
-Requires: openafs-devel = %{PACKAGE_VERSION}
+Requires: openafs-devel = %{version}-%{release}
 Summary: OpenAFS shared library development
 Group: Development/Filesystems
 
@@ -430,13 +273,14 @@ allowing cross-platform sharing of files among multiple computers.
 Facilities are provided for access control, authentication, backup and
 administrative management.
 
-This package includes the static versions of libafsrpc and 
-libafsauthent, and symlinks required for building against the dynamic 
+This package includes the static versions of libafsrpc and
+libafsauthent, and symlinks required for building against the dynamic
 libraries.
 
 %package devel
 Summary: OpenAFS Development Libraries and Headers
 Group: Development/Filesystems
+Requires: openafs = %{version}-%{release}
 
 %description devel
 The AFS distributed filesystem.  AFS is a distributed filesystem
@@ -450,7 +294,7 @@ shared libraries.
 
 %package docs
 Summary: OpenAFS user and administrator documentation
-Requires: openafs = %{PACKAGE_VERSION}
+Requires: openafs = %{version}-%{release}
 Group: Networking/Filesystems
 
 %description docs
@@ -465,10 +309,8 @@ administrators.
 %package kernel-source
 Summary: OpenAFS Kernel Module source tree
 Group: Networking/Filesystems
-Provides: openafs-kernel = %{PACKAGE_VERSION}
-%if %{fedorakmod}
-Provides: %{name}-kmod = %{PACKAGE_VERSION}
-%endif
+Provides: openafs-kernel = %{version}
+Provides: %{name}-kmod = %{version}
 
 %description kernel-source
 The AFS distributed filesystem.  AFS is a distributed filesystem
@@ -481,7 +323,7 @@ module.
 
 %package compat
 Summary: OpenAFS client compatibility symlinks
-Requires: openafs = %{PACKAGE_VERSION}, openafs-client = %{PACKAGE_VERSION}
+Requires: openafs = %{version}, openafs-client = %{version}
 Group: Networking/Filesystems
 Obsoletes: openafs-client-compat
 
@@ -496,24 +338,43 @@ completely optional, and is only necessary to support legacy
 applications and scripts that hard-code the location of AFS client
 programs.
 
-%package kpasswd
-Summary: OpenAFS KA kpasswd support
+%if %{kauth_support}
+%package kauth-client
+Summary: OpenAFS Kauth Client support
+Requires: openafs
+Group: Networking/Filesystems
+
+%description kauth-client
+The AFS distributed filesystem.  AFS is a distributed filesystem
+allowing cross-platform sharing of files among multiple computers.
+Facilities are provided for access control, authentication, backup and
+administrative management.
+
+This package provides the legacy KAServer client programs and the PAM module
+for authentication with the OpenAFS KAserver; a deprecated authentication
+service.  Generally you should not install this package for new cells or for
+cells using Kerberos v5.
+
+%package kauth-server
+Summary: OpenAFS Kauth Server support
 Requires: openafs
 Group: Networking/Filesystems
 
-%description kpasswd
+%description kauth-server
 The AFS distributed filesystem.  AFS is a distributed filesystem
 allowing cross-platform sharing of files among multiple computers.
 Facilities are provided for access control, authentication, backup and
 administrative management.
 
-This package provides the compatibility symlink for kpasswd, in case
-you are using KAserver instead of Krb5.
+This package provides the legacy OpenAFS KAServer; a deprecated authentication
+service. Generally you should not install this package for new cells or for
+cells using Kerberos v5.
+%endif
 
 %if %{krb5support}
 %package krb5
 Summary: OpenAFS programs to use with krb5
-Requires: openafs = %{PACKAGE_VERSION}
+Requires: openafs = %{version}
 Group: Networking/Filesystems
 BuildRequires: krb5-devel
 
@@ -537,124 +398,9 @@ krb4 lookalike services.
 ##############################################################################
 %if %{build_modules}
 
-%if %{fedorakmod}
-%{expand:%(%{kmodtool} rpmtemplate %{kmod_name} %{kverrel} %{kvariants} 2>/dev/null)}
-
-%else
-
-# Legacy kernel compilation code here ...
-%define modkversion %(echo %{kernvers} | cut -d- -f1)
-%define modkrelease %(echo %{kernvers} | cut -d- -f2)
-%define modpkgrel %{modkversion}_%{modkrelease}_%{pkgrel}
-
-%if %{up_package}
-%package kernel
-Summary: OpenAFS Kernel Module (compiled for UP)
-Release: %{modpkgrel}
-Group: Networking/Filesystems
-Provides: openafs-kernel = %{PACKAGE_VERSION}
-%if %{kprovidesarch}
-Requires: kernel-%{_target_cpu} = %{kversion}
-%else
-Requires: /boot/config-%{kernvers}
-%endif
-
-%description kernel
-The AFS distributed filesystem.  AFS is a distributed filesystem
-allowing cross-platform sharing of files among multiple computers.
-Facilities are provided for access control, authentication, backup and
-administrative management.
-
-This package provides a precompiled AFS kernel module for %{kernvers}.
-%endif
-
-%if %{smp_package}
-%package kernel-smp
-Summary: OpenAFS Kernel Module (compiled for SMP)
-Release: %{modpkgrel}
-Provides: openafs-kernel = %{PACKAGE_VERSION}
-%if %{kprovidesarch}
-Requires: kernel-smp-%{_target_cpu} = %{kversion}
-%else
-Requires: /boot/config-%{kernvers}%{?smp_ext:%{smp_ext}}
-%endif
-Group: Networking/Filesystems
-
-%description kernel-smp
-The AFS distributed filesystem.  AFS is a distributed filesystem
-allowing cross-platform sharing of files among multiple computers.
-Facilities are provided for access control, authentication, backup and
-administrative management.
-
-This package provides a precompiled AFS kernel module for %{kernvers}.
-%endif
-
-%if %{largesmp_package}
-%package kernel-largesmp
-Summary: OpenAFS Kernel Module (compiled for LARGESMP)
-Release: %{modpkgrel}
-Provides: openafs-kernel = %{PACKAGE_VERSION}
-%if %{kprovidesarch}
-Requires: kernel-largesmp-%{_target_cpu} = %{kversion}
-%else
-Requires: /boot/config-%{kernvers}%{?largesmp_ext:%{largesmp_ext}}
-%endif
-Group: Networking/Filesystems
-
-%description kernel-largesmp
-The AFS distributed filesystem.  AFS is a distributed filesystem
-allowing cross-platform sharing of files among multiple computers.
-Facilities are provided for access control, authentication, backup and
-administrative management.
-
-This package provides a precompiled AFS kernel module for %{kernvers}.
-%endif
-%if %{bigmem_package}
-%package kernel-bigmem
-Summary: OpenAFS Kernel Module (compiled for SMP & big memory support)
-Release: %{modpkgrel}
-Provides: openafs-kernel = %{PACKAGE_VERSION}
-%if %{kprovidesarch}
-Requires: kernel-bigmem-%{_target_cpu} = %{kversion}
-%else
-Requires: /boot/config-%{kernvers}%{?bigmem_ext:%{bigmem_ext}}
-%endif
-Group: Networking/Filesystems
-
-%description kernel-bigmem
-The AFS distributed filesystem.  AFS is a distributed filesystem
-allowing cross-platform sharing of files among multiple computers.
-Facilities are provided for access control, authentication, backup and
-administrative management.
-
-This package provides a precompiled AFS kernel module for %{kernvers}.
-%endif
-
-%if %{hugemem_package}
-%package kernel-hugemem
-Summary: OpenAFS Kernel Module (compiled for SMP & huge memory support)
-Release: %{modpkgrel}
-Provides: openafs-kernel = %{PACKAGE_VERSION}
-%if %{kprovidesarch}
-Requires: kernel-hugemem-%{_target_cpu} = %{kversion}
-%else
-Requires: /boot/config-%{kernvers}%{?hugemem_ext:%{hugemem_ext}}
-%endif
-Group: Networking/Filesystems
-
-%description kernel-hugemem
-The AFS distributed filesystem.  AFS is a distributed filesystem
-allowing cross-platform sharing of files among multiple computers.
-Facilities are provided for access control, authentication, backup and
-administrative management.
-
-This package provides a precompiled AFS kernel module for %{kernvers}.
-%endif
+%{expand:%(%{kmodtool} rpmtemplate %{kmod_name} %{kverrel} %{depmod} %{kvariants} 2>/dev/null)}
 
 %endif
-# End legacy kernel compilation code ...
-%endif
 
 ##############################################################################
 #
@@ -666,23 +412,8 @@ This package provides a precompiled AFS kernel module for %{kernvers}.
 
 : @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
 : @@@
-: @@@ kernel version:     %{kernvers}
-%if %{fedorakmod}
+: @@@ kernel version:     %{kverrel}
 : @@@ kernel variations:  %{kvariants}
-%else
-: @@@ base kernel version:%{kversion}
-: @@@ kernel modules dir: %{kxmoddir}
-: @@@ kernel source dir:  %{ksrcdir}
-%if %{kvers_is_24}
-: @@@ kernel variations:  %{kvariations}
-%else
-%if %{up_package}
-: @@@ kernel type:        up
-%else
-: @@@ kernel type:        %{ktype}
-%endif
-%endif
-%endif
 : @@@ PAM modules dir:    %{pamdir}
 : @@@ build userspace:    %{build_userspace}
 : @@@ build modules:      %{build_modules}
@@ -701,25 +432,12 @@ This package provides a precompiled AFS kernel module for %{kernvers}.
 #
 ##############################################################################
 %build
-
-case %{kernvers} in
-   2.4.*)
-       kv='24'
-       ;;
-   2.6.*)
-       kv='26'
-       ;;
-   *)
-       echo "I don't know how to build linux-`expr ${kernvers} : \(^[0-9]*[.][0-9]*\)`"
-       exit 1
-       ;;
-esac
-
 case %{_arch} in
-       x86_64)                         sysname=amd64_linux${kv}        ;;
-       alpha*)                         sysname=alpha_linux_${kv}       ;;
-       i386|i486|i586|i686|athlon)     sysname=i386_linux${kv}         ;;
-       *)                              sysname=%{_arch}_linux${kv}     ;;
+       x86_64)                         sysname=amd64_linux26        ;;
+       alpha*)                         sysname=alpha_linux_26       ;;
+       i386|i486|i586|i686|athlon)     sysname=i386_linux26         ;;
+       aarch64)                        sysname=arm64_linux26        ;;
+       *)                              sysname=%{_arch}_linux26     ;;
 esac
 
 %ifarch %{ix86}
@@ -826,50 +544,63 @@ PrintRedhatKernelFix() {
 }
 
 config_opts="--enable-redhat-buildsys \
+       %{?_with_kauth:--enable-kauth} \
        %{?_with_bitmap_later:--enable-bitmap-later} \
        %{?_with_bos_restricted:--enable-bos-restricted-mode} \
-       %{?_with_fast_restart:--enable-fast-restart} \
-       %{?_with_largefiles:--enable-largefile-fileserver} \
        %{?_with_supergroups:--enable-supergroups} \
        --enable-transarc-paths"
 
 # Configure AFS
 
-# If we're using Fedora kmods, work out which is the best kernel module to 
+# If we're using Fedora kmods, work out which is the best kernel module to
 # use for the userland configuration step. If no variants have been specified,
 # then use the standard kernel. If variants are specified, use the standard kernel
 # if it's listed, otherwise pick the first listed kernel.
 ksrc=""
-%if %{fedorakmod} 
-  for kvariant in %{kvariants} ; do
-    if [ -z "${kvariant}" -o -z "$ksrc" ] ; then
-      if [ -d %{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} ] ; then
-        ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
-      else
-        ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}
-      fi
+for kvariant in %{kvariants} ; do
+  if [ -z "${kvariant}" -o -z "$ksrc" ] ; then
+    if [ -d %{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} ] ; then
+      ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+    elif [ -d %{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:++$kvariant} ] ; then
+      ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:++$kvariant}
+    else
+      ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}
     fi
-  done
-%endif
+  fi
+done
 if [ -z "$ksrc" ] ; then
 ksrc=%{ksrcdir}
 fi
 
 CFLAGS="$RPM_OPT_FLAGS"; export CFLAGS
 
+%if %{krb5support}
+%if %{?krb5config:1}%{!?krb5config:0}
+KRB5_CONFIG="%{krb5config}"
+export KRB5_CONFIG
+%endif
+%endif
+
 ./configure --with-afs-sysname=${sysname} \
        --prefix=%{_prefix} \
        --libdir=%{_libdir} \
        --bindir=%{_bindir} \
        --sbindir=%{_sbindir} \
        --disable-strip-binaries \
+       --enable-debug \
        --with-linux-kernel-packaging \
-       --enable-disconnected \
 %if %{build_modules}
        --with-linux-kernel-headers=${ksrc} \
+%else
+       --disable-kernel-module \
 %endif
 %if %{krb5support}
-       --with-krb5-conf=%{krb5config} \
+       --with-krb5 \
+%endif
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 6
+    --with-swig \
+%else
+    --without-swig \
 %endif
        $config_opts \
        || exit 1
@@ -877,13 +608,28 @@ CFLAGS="$RPM_OPT_FLAGS"; export CFLAGS
 # Build the libafs tree
 make only_libafs_tree || exit 1
 
+%if %{krb5support}
+%if %{?krb5config:1}%{!?krb5config:0}
+KRB5_CONFIG="%{krb5config}"
+export KRB5_CONFIG
+%endif
+%endif
+
 # Configure each of our kernel modules
 
-%if %{fedorakmod} && %{build_modules}
+%if %{build_modules}
 for kvariant in %{kvariants} ; do
   if [ -n "${kvariant}" ] ; then
+
     if [ -d %{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu} ] ; then
       ksrc=%{_usrsrc}/kernels/%{kverrel}${kvariant:+-$kvariant}-%{_target_cpu}
+
+    elif [ -d %{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:++$kvariant} ] ; then
+      # Fedora 20 started putting kernel sources in e.g.
+      # 3.12.5-302.fc20.i686+PAE, instead of:
+      # 3.12.5-302.fc20.i686.PAE
+      ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:++$kvariant}
+
     else
       ksrc=%{_usrsrc}/kernels/%{kverrel}.%{_target_cpu}${kvariant:+.$kvariant}
     fi
@@ -897,9 +643,8 @@ for kvariant in %{kvariants} ; do
        --sbindir=%{_sbindir} \
         --with-linux-kernel-packaging \
        --with-linux-kernel-headers=${ksrc} \
-       --enable-disconnected \
 %if %{krb5support}
-       --with-krb5-conf=/usr/kerberos/bin/krb5-config \
+       --with-krb5 \
 %endif
        $config_opts \
        || exit 1
@@ -910,11 +655,10 @@ done
 
 %if %{build_userspace}
 # Build the user-space AFS stuff
-make dest_nolibafs || exit 1
+make all_nolibafs
 %endif
 
 %if %{build_modules}
-%if %{fedorakmod}
 for kvariant in %{kvariants}
 do
   if [ -n "${kvariant}" ] ; then
@@ -922,327 +666,286 @@ do
     make all
     popd
   else
-    make dest_only_libafs
+    make libafs
   fi
 done
-
-%else
-# Begin legacy kernel module building code
-
-%if %{kvers_is_24}
-# Build all the kernel modules for linux 2.4.x
-for variation in %{kvariations}
-do
-    if [ ${variation} = up ]
-    then
-       local_smp_def=-DREDHAT_FIX
-       suffix=
-    else
-       local_smp_def="-DAFS_SMP -DREDHAT_FIX"
-       suffix=${variation}
-    fi
-
-    PrintRedhatKernelFix %{_target_cpu} $variation src/config/redhat-fix.h
-    make dest_only_libafs LOCAL_SMP_DEF="${local_smp_def}" \
-       LINUX_MODULE_NAME="${suffix}" MPS=SP
-
-done
-rm -f src/config/redhat-fix.h
-
-%elseif %{kvers_is_26}
-# Build the kernel module for this version of linux 2.6.x
-# Notice how much easier this is than 2.4.  On the other hand,
-# we require much more external support to build multiple modules.
-
-  # the MPS=SP just means that we don't add a '.mp' to the name.
-  make dest_only_libafs MPS=SP
-
-%endif
-# End legacy kernel module building code
-%endif
 %endif
 
 
 ##############################################################################
-#
-# installation
-#
+###
+### install
+###
 ##############################################################################
 %install
 
-export DONT_GPRINTIFY=1
+export DONT_GPRINTIFY=1 # Do not modify initscripts.
 
 [ $RPM_BUILD_ROOT != / ] && rm -rf $RPM_BUILD_ROOT
 
-case %{kernvers} in
-   2.4.*)
-       kv='24'
-       kmodend=.o
-       ;;
-   2.6.*)
-       kv='26'
-       kmodend=.ko
-       ;;
-   *)
-       echo "I don't know how to build linux-`expr ${kernvers} : \(^[0-9]*[.][0-9]*\)`"
-       exit 1
-       ;;
-esac
+##############################################################################
+###
+### Install userspace
+###
+##############################################################################
+%if %{build_userspace}
 
-case %{_arch} in
-       x86_64)                         sysname=amd64_linux${kv}        ;;
-       alpha*)                         sysname=alpha_linux_${kv}       ;;
-       i386|i486|i586|i686|athlon)     sysname=i386_linux${kv}         ;;
-       *)                              sysname=%{_arch}_linux${kv}     ;;
-esac
+#-----------------------------------------------------------------------------
+# Install userspace files
+#-----------------------------------------------------------------------------
+make install_nolibafs DESTDIR="$RPM_BUILD_ROOT"
+
+# Set the executable bit on libraries in libdir, so rpmbuild knows to
+# create "Provides" entries in the package metadata for the libraries
+chmod +x $RPM_BUILD_ROOT%{_libdir}/*.so*
+
+# Exclude duplicated files.
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/bos
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/fs
+%if %{kauth_support}
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/kas
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/klog
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/klog.krb
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/kpwvalid
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/tokens.krb
+rm -f $RPM_BUILD_ROOT%{_sbindir}/kpwvalid
+%endif
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/pts
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/tokens
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/udebug
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/vos
+
+# Exclude obsolete or unused files.
+rm -f $RPM_BUILD_ROOT%{_bindir}/dlog
+rm -f $RPM_BUILD_ROOT%{_bindir}/dpass
+rm -f $RPM_BUILD_ROOT%{_bindir}/install
+rm -f $RPM_BUILD_ROOT%{_bindir}/knfs
+rm -f $RPM_BUILD_ROOT%{_bindir}/livesys
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/kdb
+rm -f $RPM_BUILD_ROOT%{_sbindir}/rmtsysd
+rm -rf $RPM_BUILD_ROOT%{_sbindir}/kdump*
+%if !%{build_authlibs}
+rm -f $RPM_BUILD_ROOT%{_libdir}/libafsauthent.so*
+rm -f $RPM_BUILD_ROOT%{_libdir}/libafsrpc.so*
+rm -f $RPM_BUILD_ROOT%{_libdir}/libkopenafs.so*
+%endif
+rm -f $RPM_BUILD_ROOT%{_sbindir}/afsd.fuse
+%if !%{kauth_support}
+rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/tokens.krb
+rm -f $RPM_BUILD_ROOT%{_bindir}/tokens.krb
+rm -f $RPM_BUILD_ROOT%{_bindir}/pagsh.krb
+%endif
 
-# Build install tree
-%if %{build_userspace}
-mkdir -p $RPM_BUILD_ROOT%{_sbindir}
-mkdir -p $RPM_BUILD_ROOT%{_libdir}
-mkdir -p $RPM_BUILD_ROOT/etc/sysconfig
-mkdir -p $RPM_BUILD_ROOT%{initdir}
-mkdir -p $RPM_BUILD_ROOT/etc/openafs
+# Relocate afsd to legacy path to match init scripts.
+mv $RPM_BUILD_ROOT%{_sbindir}/afsd $RPM_BUILD_ROOT%{_prefix}/vice/etc/afsd
+
+# Relocate admin utilities to a modern path.
+%if %{kauth_support}
+mv $RPM_BUILD_ROOT%{_prefix}/afs/bin/kadb_check $RPM_BUILD_ROOT%{_sbindir}/kadb_check
+%endif
+mv $RPM_BUILD_ROOT%{_prefix}/afs/bin/prdb_check $RPM_BUILD_ROOT%{_sbindir}/prdb_check
+mv $RPM_BUILD_ROOT%{_prefix}/afs/bin/vldb_check $RPM_BUILD_ROOT%{_sbindir}/vldb_check
+mv $RPM_BUILD_ROOT%{_prefix}/afs/bin/vldb_convert $RPM_BUILD_ROOT%{_sbindir}/vldb_convert
+%if %{krb5support}
+mv $RPM_BUILD_ROOT%{_prefix}/afs/bin/akeyconvert $RPM_BUILD_ROOT%{_sbindir}/akeyconvert
+mv $RPM_BUILD_ROOT%{_prefix}/afs/bin/asetkey $RPM_BUILD_ROOT%{_sbindir}/asetkey
+%endif
+
+%if %{kauth_support}
+# Relocate PAM files to the standard PAM module path.
 mkdir -p $RPM_BUILD_ROOT%{pamdir}
-mkdir -p $RPM_BUILD_ROOT%{_prefix}/afs/etc
-mkdir -p $RPM_BUILD_ROOT%{_prefix}/afs/logs
-mkdir -p $RPM_BUILD_ROOT%{_prefix}/vice/etc
-mkdir -p $RPM_BUILD_ROOT%{_prefix}/vice/cache
-chmod 700 $RPM_BUILD_ROOT%{_prefix}/vice/cache
-mkdir -p $RPM_BUILD_ROOT%{_mandir}
+mv $RPM_BUILD_ROOT%{_libdir}/pam_afs.krb.so $RPM_BUILD_ROOT%{pamdir}
+mv $RPM_BUILD_ROOT%{_libdir}/pam_afs.so $RPM_BUILD_ROOT%{pamdir}
+ln -sf pam_afs.so $RPM_BUILD_ROOT%{pamdir}/pam_afs.so.1
+ln -sf pam_afs.krb.so $RPM_BUILD_ROOT%{pamdir}/pam_afs.krb.so.1
 
-# Copy files from dest to the appropriate places in BuildRoot
-tar cf - -C ${sysname}/dest bin include | tar xf - -C $RPM_BUILD_ROOT%{_prefix}
-tar cf - -C ${sysname}/dest/lib . | tar xf - -C $RPM_BUILD_ROOT%{_libdir}
-tar cf - -C ${sysname}/dest/etc . | tar xf - -C $RPM_BUILD_ROOT%{_sbindir}
-tar cf - -C ${sysname}/dest/root.server%{_prefix}/afs bin | tar xf - -C $RPM_BUILD_ROOT%{_prefix}/afs
-tar cf - -C ${sysname}/dest/root.client%{_prefix}/vice/etc afsd C | tar xf - -C $RPM_BUILD_ROOT%{_prefix}/vice/etc
+# Rename kpasswd to avoid conflicting with krb5 kpasswd.
+mv $RPM_BUILD_ROOT%{_bindir}/kpasswd $RPM_BUILD_ROOT%{_bindir}/kapasswd
+mv $RPM_BUILD_ROOT%{_mandir}/man1/kpasswd.1 $RPM_BUILD_ROOT%{_mandir}/man1/kapasswd.1
+%endif
 
-# Link kpasswd to kapasswd
-ln -f $RPM_BUILD_ROOT%{_bindir}/kpasswd $RPM_BUILD_ROOT%{_bindir}/kapasswd
+# Exclude obsolete or unused man pages.
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/afs_ftpd.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/afs_inetd.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/afs_login.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/afs_rcp.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/afs_rlogind.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/afs_rsh.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/dkload.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/knfs.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/package.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/runntp.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/symlink.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/symlink_list.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/symlink_make.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/symlink_remove.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/dlog.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/copyauth.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/dpass.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/livesys.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/afsd.fuse.8
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/rmtsysd.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/aklog_dynamic_auth.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/kdb.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/xfs_size_check.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/package_test.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man5/package.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/package.*
+%if !%{krb5support}
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/akeyconvert.*
+rm -f $RPM_BUILD_ROOT%{_mandir}/man8/asetkey.*
+%endif
+%if !%{kauth_support}
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/pagsh.krb.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man1/tokens.krb.1
+rm -f $RPM_BUILD_ROOT%{_mandir}/man5/AuthLog.5
+rm -f $RPM_BUILD_ROOT%{_mandir}/man5/AuthLog.dir.5
+%endif
+%if !(0%{?fedora} >= 15 || 0%{?rhel} >= 6)
+rm -f %{_mandir}/man3/AFS::ukernel.3
+%endif
 
-# Copy root.client config files
+#-----------------------------------------------------------------------------
+# Install client and server initscripts/systemd files
+#-----------------------------------------------------------------------------
+mkdir -p $RPM_BUILD_ROOT/etc/sysconfig
 install -m 755 src/packaging/RedHat/openafs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/openafs
+%if 0%{?fedora} < 15 && 0%{?rhel} < 7
+mkdir -p $RPM_BUILD_ROOT%{initdir}
 install -m 755 src/packaging/RedHat/openafs-client.init $RPM_BUILD_ROOT%{initdir}/openafs-client
 install -m 755 src/packaging/RedHat/openafs-server.init $RPM_BUILD_ROOT%{initdir}/openafs-server
+%else
+mkdir -p $RPM_BUILD_ROOT%{_unitdir}
+mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/modules
+install -m 644 src/packaging/RedHat/openafs-client.service $RPM_BUILD_ROOT%{_unitdir}/openafs-client.service
+install -m 755 src/packaging/RedHat/openafs-client.modules $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/modules/openafs-client.modules
+install -m 644 src/packaging/RedHat/openafs-server.service $RPM_BUILD_ROOT%{_unitdir}/openafs-server.service
+%endif
 
-# Copy PAM modules
-install -m 755 ${sysname}/dest/lib/pam* $RPM_BUILD_ROOT%{pamdir}
-
-# PAM symlinks
-ln -sf pam_afs.so.1 $RPM_BUILD_ROOT%{pamdir}/pam_afs.so
-ln -sf pam_afs.krb.so.1 $RPM_BUILD_ROOT%{pamdir}/pam_afs.krb.so
+#-----------------------------------------------------------------------------
+# Install server directories.
+#-----------------------------------------------------------------------------
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/afs/etc
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/afs/logs
 
-# Populate /usr/vice/etc
-uve=$RPM_BUILD_ROOT%{_prefix}/vice/etc
-install -p -m 644 src/packaging/RedHat/openafs-ThisCell $uve/ThisCell
-install -p -m 644 %{SOURCE20} $uve/CellServDB.dist
-install -p -m 644 src/packaging/RedHat/openafs-cacheinfo $uve/cacheinfo
+#-----------------------------------------------------------------------------
+# Install client directories and config files.
+#-----------------------------------------------------------------------------
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/vice/etc
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/vice/cache
+chmod 700 $RPM_BUILD_ROOT%{_prefix}/vice/cache
+install -p -m 644 src/packaging/RedHat/openafs-ThisCell $RPM_BUILD_ROOT%{_prefix}/vice/etc/ThisCell
+install -p -m 644 %{SOURCE20} $RPM_BUILD_ROOT%{_prefix}/vice/etc/CellServDB.dist
+install -p -m 644 src/packaging/RedHat/openafs-cacheinfo $RPM_BUILD_ROOT%{_prefix}/vice/etc/cacheinfo
 
-#
-# install dkms source
-#
+#-----------------------------------------------------------------------------
+# Install DKMS source.
+#-----------------------------------------------------------------------------
 install -d -m 755 $RPM_BUILD_ROOT%{_prefix}/src
 cp -a libafs_tree $RPM_BUILD_ROOT%{_prefix}/src/%{name}-%{dkms_version}
 
-cat > $RPM_BUILD_ROOT%{_prefix}/src/%{name}-%{dkms_version}/dkms.conf <<EOF
+cat > $RPM_BUILD_ROOT%{_prefix}/src/%{name}-%{dkms_version}/dkms.conf <<"EOF"
 
 PACKAGE_VERSION="%{dkms_version}"
 
-# Items below here should not have to change with each driver version
+# Items below here should not have to change with each driver version.
 PACKAGE_NAME="%{name}"
-MAKE[0]="SMP=SP; eval \\\`grep CONFIG_SMP /boot/config-\${kernelver_array[0]}\\\`; [ -n \"\\\$CONFIG_SMP\" ] && SMP=MP; KMODNAME=openafs.ko; DSTKMOD=\\".\\"; [ \\"\\\`echo \\"\${kernelver_array[0]}\\" | sed -e 's/^\\([0-9]*\\.[0-9]*\\)\\..*/\\1/'\\\`\\" = \\"2.4\\" ] && KMODNAME=\\"libafs-*\\" && DSTKMOD=openafs.o; ./configure --enable-disconnected --with-linux-kernel-headers=\${kernel_source_dir}; make MPS=\\\$SMP; mv src/libafs/MODLOAD-*/\\\$KMODNAME \\\$DSTKMOD"
+MAKE[0]='./configure --with-linux-kernel-headers=${kernel_source_dir} --with-linux-kernel-packaging && make && case "${kernelver_array[0]}${kernelver[0]}" in 2.4.*) mv src/libafs/MODLOAD-*/libafs-* openafs.o ;; *) mv src/libafs/MODLOAD-*/openafs.ko . ;; esac'
 CLEAN="make -C src/libafs clean"
 
-BUILT_MODULE_NAME[0]="\$PACKAGE_NAME"
-DEST_MODULE_LOCATION[0]="/kernel/3rdparty/\$PACKAGE_NAME/"
+BUILT_MODULE_NAME[0]="$PACKAGE_NAME"
+DEST_MODULE_LOCATION[0]="/kernel/3rdparty/$PACKAGE_NAME/"
 STRIP[0]=no
 AUTOINSTALL=yes
 
 EOF
 
-#
-# install kernel-source
-#
-
-# Install the kernel module source tree
+#-----------------------------------------------------------------------------
+# Install the kernel module source tree.
+#-----------------------------------------------------------------------------
 mkdir -p $RPM_BUILD_ROOT%{_prefix}/src/openafs-kernel-%{afsvers}/src
 tar cf - -C libafs_tree . | \
        tar xf - -C $RPM_BUILD_ROOT%{_prefix}/src/openafs-kernel-%{afsvers}/src
-
-# Next, copy the LICENSE Files, README
-install -m 644 src/LICENSE $RPM_BUILD_ROOT%{_prefix}/src/openafs-kernel-%{afsvers}/LICENSE.IBM
+install -m 644 LICENSE $RPM_BUILD_ROOT%{_prefix}/src/openafs-kernel-%{afsvers}/LICENSE.IBM
 install -m 644 src/packaging/RedHat/openafs-LICENSE.Sun $RPM_BUILD_ROOT%{_prefix}/src/openafs-kernel-%{afsvers}/LICENSE.Sun
 install -m 644 src/packaging/RedHat/openafs-README $RPM_BUILD_ROOT%{_prefix}/src/openafs-kernel-%{afsvers}/README
 
-#
-# Install DOCUMENTATION
-#
-
-# Build the DOC directory
+#-----------------------------------------------------------------------------
+# Install documentation.
+#-----------------------------------------------------------------------------
 mkdir -p $RPM_BUILD_ROOT/$RPM_DOC_DIR/openafs-%{afsvers}
 tar cf - -C doc LICENSE html pdf | \
     tar xf - -C $RPM_BUILD_ROOT/$RPM_DOC_DIR/openafs-%{afsvers}
 install -m 644 %{SOURCE10} $RPM_BUILD_ROOT/$RPM_DOC_DIR/openafs-%{afsvers}
 install -m 644 %{SOURCE11} $RPM_BUILD_ROOT/$RPM_DOC_DIR/openafs-%{afsvers}
 
-#
-# man pages
-#
-tar cf - -C doc/man-pages man1 man5 man8 | \
-    tar xf - -C $RPM_BUILD_ROOT%{_mandir}
-
-# Copy the uninstalled krb5 files (or delete the unused krb5 files)
-%if %{krb5support}
-mv $RPM_BUILD_ROOT%{_prefix}/afs/bin/asetkey $RPM_BUILD_ROOT%{_sbindir}/asetkey
-%else
-rm -f $RPM_BUILD_ROOT%{_mandir}/man8/asetkey.*
-%endif
-
-# remove unused man pages
-for x in afs_ftpd afs_inetd afs_login afs_rcp afs_rlogind afs_rsh \
-    dkload knfs package runntp symlink symlink_list symlink_make \
-    symlink_remove; do
-       rm -f $RPM_BUILD_ROOT%{_mandir}/man1/${x}.1
-done
-
-# rename kpasswd to kapasswd
-mv $RPM_BUILD_ROOT%{_mandir}/man1/kpasswd.1 $RPM_BUILD_ROOT%{_mandir}/man1/kapasswd.1
-
-# gzip man pages
-gzip -9 $RPM_BUILD_ROOT%{_mandir}/man*/*
-
-# create list of man pages that go in the 'openafs' package
-/bin/ls $RPM_BUILD_ROOT%{_mandir}/man1 \
-       |egrep '^afs|^fs|^kas|^klog|kapasswd|pagsh|^pts|^rxdebug|scout|^sys|tokens|translate|udebug|unlog|^uss|^vos' \
-       >openafs-man1files
-
-/bin/ls $RPM_BUILD_ROOT%{_mandir}/man5 \
-       |egrep 'CellServDB|ThisCell|afsmonitor|^butc|^uss' \
-       >openafs-man5files
-
-/bin/ls $RPM_BUILD_ROOT%{_mandir}/man8 \
-       |egrep '^backup|^bos|^butc|^fms|^fstrace|^kas|^read_tape|^uss' \
-       >openafs-man8files
-
-#
-# create filelist
-#
-grep -v "^#" >openafs-file-list <<EOF-openafs-file-list
-%{_bindir}/afsmonitor
-%{_bindir}/bos
-%{_bindir}/fs
-%{_bindir}/kapasswd
-%{_bindir}/kpasswd
-%{_bindir}/klog
-%{_bindir}/klog.krb
-%{_bindir}/pagsh
-%{_bindir}/pagsh.krb
-%{_bindir}/pts
-%{_bindir}/scout
-%{_bindir}/sys
-%{_bindir}/tokens
-%{_bindir}/tokens.krb
-%{_bindir}/translate_et
-%{_bindir}/udebug
-%{_bindir}/unlog
-%{_sbindir}/backup
-%{_sbindir}/butc
-%{_sbindir}/fms
-%{_sbindir}/fstrace
-%{_sbindir}/kas
-%{_sbindir}/read_tape
-%{_sbindir}/restorevol
-%{_sbindir}/rxdebug
-%{_sbindir}/uss
-%{_sbindir}/vos
-%{_sbindir}/vsys
-EOF-openafs-file-list
-
-# add man pages to the list
-cat openafs-man1files \
-       | ( while read x; do echo "%{_mandir}/man1/$x"; done ) \
-       >>openafs-file-list
-cat openafs-man5files \
-       | ( while read x; do echo "%{_mandir}/man5/$x"; done ) \
-       >>openafs-file-list
-cat openafs-man8files \
-       | ( while read x; do echo "%{_mandir}/man8/$x"; done ) \
-       >>openafs-file-list
-
-#
-# Install compatiblity links
-#
-for d in bin:bin etc:sbin; do
-  olddir=`echo $d | sed 's/:.*$//'`
-  newdir=`echo $d | sed 's/^.*://'`
-  mkdir -p $RPM_BUILD_ROOT%{_prefix}/afsws/$olddir
-  for f in `cat openafs-file-list`; do
-    if echo $f | grep -q /$newdir/; then
-      fb=`basename $f`
-      ln -sf %{_prefix}/$newdir/$fb $RPM_BUILD_ROOT%{_prefix}/afsws/$olddir/$fb
-    fi
-  done
-done
-
-#
-# Remove files we're not installing
-#
-
-# remove duplicated files from /usr/afs/bin
-for f in bos fs kas klog klog.krb kpwvalid pts tokens tokens.krb udebug vos ; do
-  rm -f $RPM_BUILD_ROOT%{_prefix}/afs/bin/$f
-done
-
-# the rest are not needed.
-for f in dlog dpass install knfs livesys xstat_cm_test xstat_fs_test ; do
-  rm -f $RPM_BUILD_ROOT%{_bindir}/$f
-done
-
-# not supported on Linux or duplicated
-for f in kdb rmtsysd kpwvalid ; do
-  rm -f $RPM_BUILD_ROOT%{_sbindir}/$f
-done
-# sometimes install sucks and puts down a directory. kill it all.
-rm -rf $RPM_BUILD_ROOT%{_sbindir}/kdump*
-
-# remove man pages from programs deleted above
-for f in 1/dlog 1/dpass 1/livesys 1/xstat_cm_test 1/xstat_fs_test 8/kdb 8/kpwvalid 8/xfs_size_check 1/package_test 5/package 8/package ; do
-  rm -f $RPM_BUILD_ROOT%{_mandir}/man$f.*
-done
-
-# PAM modules are doubly-installed  Remove the version we don't need
-for f in pam_afs.krb.so.1 pam_afs.so.1 ; do
-  rm -f $RPM_BUILD_ROOT%{_libdir}/$f
-done
-
-%if !%{build_authlibs}
-rm -f $RPM_BUILD_ROOT%{_libdir}/libafsauthent.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/libafsrpc.so
-rm -f $RPM_BUILD_ROOT%{_libdir}/libafsauthent.so.*
-rm -f $RPM_BUILD_ROOT%{_libdir}/libafsrpc.so.*
-%endif
+#-----------------------------------------------------------------------------
+# Install compatiblity links.
+#-----------------------------------------------------------------------------
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/afsws/bin
+mkdir -p $RPM_BUILD_ROOT%{_prefix}/afsws/etc
+ln -sf %{_prefix}/bin/afsmonitor    $RPM_BUILD_ROOT%{_prefix}/afsws/bin/afsmonitor
+ln -sf %{_prefix}/bin/bos           $RPM_BUILD_ROOT%{_prefix}/afsws/bin/bos
+ln -sf %{_prefix}/bin/fs            $RPM_BUILD_ROOT%{_prefix}/afsws/bin/fs
+%if %{kauth_support}
+ln -sf %{_prefix}/bin/kapasswd      $RPM_BUILD_ROOT%{_prefix}/afsws/bin/kapasswd
+ln -sf %{_prefix}/bin/klog          $RPM_BUILD_ROOT%{_prefix}/afsws/bin/klog
+ln -sf %{_prefix}/bin/klog.krb      $RPM_BUILD_ROOT%{_prefix}/afsws/bin/klog.krb
+ln -sf %{_prefix}/bin/pagsh.krb     $RPM_BUILD_ROOT%{_prefix}/afsws/bin/pagsh.krb
+ln -sf %{_prefix}/bin/tokens.krb    $RPM_BUILD_ROOT%{_prefix}/afsws/bin/tokens.krb
+%endif
+ln -sf %{_prefix}/bin/pagsh         $RPM_BUILD_ROOT%{_prefix}/afsws/bin/pagsh
+ln -sf %{_prefix}/bin/pts           $RPM_BUILD_ROOT%{_prefix}/afsws/bin/pts
+ln -sf %{_prefix}/bin/restorevol    $RPM_BUILD_ROOT%{_prefix}/afsws/bin/restorevol
+ln -sf %{_prefix}/bin/scout         $RPM_BUILD_ROOT%{_prefix}/afsws/bin/scout
+ln -sf %{_prefix}/bin/sys           $RPM_BUILD_ROOT%{_prefix}/afsws/bin/sys
+ln -sf %{_prefix}/bin/tokens        $RPM_BUILD_ROOT%{_prefix}/afsws/bin/tokens
+ln -sf %{_prefix}/bin/translate_et  $RPM_BUILD_ROOT%{_prefix}/afsws/bin/translate_et
+ln -sf %{_prefix}/bin/xstat_cm_test $RPM_BUILD_ROOT%{_prefix}/afsws/bin/xstat_cm_test
+ln -sf %{_prefix}/bin/xstat_fs_test $RPM_BUILD_ROOT%{_prefix}/afsws/bin/xstat_fs_test
+ln -sf %{_prefix}/bin/udebug        $RPM_BUILD_ROOT%{_prefix}/afsws/bin/udebug
+ln -sf %{_prefix}/bin/unlog         $RPM_BUILD_ROOT%{_prefix}/afsws/bin/unlog
+ln -sf %{_prefix}/sbin/backup       $RPM_BUILD_ROOT%{_prefix}/afsws/etc/backup
+ln -sf %{_prefix}/sbin/butc         $RPM_BUILD_ROOT%{_prefix}/afsws/etc/butc
+ln -sf %{_prefix}/sbin/fms          $RPM_BUILD_ROOT%{_prefix}/afsws/etc/fms
+ln -sf %{_prefix}/sbin/fstrace      $RPM_BUILD_ROOT%{_prefix}/afsws/etc/fstrace
+%if %{kauth_support}
+ln -sf %{_prefix}/sbin/kas          $RPM_BUILD_ROOT%{_prefix}/afsws/etc/kas
+%endif
+ln -sf %{_prefix}/sbin/read_tape    $RPM_BUILD_ROOT%{_prefix}/afsws/etc/read_tape
+ln -sf %{_prefix}/sbin/rxdebug      $RPM_BUILD_ROOT%{_prefix}/afsws/etc/rxdebug
+ln -sf %{_prefix}/sbin/uss          $RPM_BUILD_ROOT%{_prefix}/afsws/etc/uss
+ln -sf %{_prefix}/sbin/vos          $RPM_BUILD_ROOT%{_prefix}/afsws/etc/vos
+ln -sf %{_prefix}/sbin/vsys         $RPM_BUILD_ROOT%{_prefix}/afsws/etc/vsys
 
 %endif
 
+##############################################################################
+###
+### Install modules
+###
+##############################################################################
 %if %{build_modules}
-%if %{fedorakmod}
+
 for kvariant in %{kvariants}
 do
   if [ -n "$kvariant" ] ; then
     if [ -d _kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP ] ; then
       srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}${kvariant}-SP
       dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}${kvariant}/extra/openafs
+    elif [ -d _kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}.%{_target_cpu}+${kvariant}-SP ] ; then
+      srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}.%{_target_cpu}+${kvariant}-SP
+      dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}.%{_target_cpu}+${kvariant}/extra/openafs
     else
       srcdir=_kmod_build_$kvariant/src/libafs/MODLOAD-%{kverrel}.%{_target_cpu}.${kvariant}-SP
       dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}.%{_target_cpu}.${kvariant}/extra/openafs
     fi
   else
-    if [ -d ${sysname}/dest/root.client/lib/modules/%{kverrel}/extra/openafs ] ; then
-      srcdir=${sysname}/dest/root.client/lib/modules/%{kverrel}/extra/openafs
+    if [ -d src/libafs/MODLOAD-%{kverrel}-SP ] ; then
+      srcdir=src/libafs/MODLOAD-%{kverrel}-SP
       dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}/extra/openafs
     else
-      srcdir=${sysname}/dest/root.client/lib/modules/%{kverrel}.%{_target_cpu}/extra/openafs
+      srcdir=src/libafs/MODLOAD-%{kverrel}.%{_target_cpu}-SP
       dstdir=$RPM_BUILD_ROOT/lib/modules/%{kverrel}.%{_target_cpu}/extra/openafs
     fi
   fi
@@ -1250,27 +953,6 @@ do
   mkdir -p ${dstdir}
   install -m 755 ${srcdir}/openafs.ko ${dstdir}/openafs.ko
 done
-%else
-# Install the kernel modules
-for variation in %{kvariations}
-do
-    if [ ${variation} = up ]
-    then
-       kvar=%{kxmoddir}
-       modname=openafs${kmodend}
-    else
-       kvar=%{kxmoddir}${variation}
-       modname=openafs${kmodend}
-    fi
-
-    srcdir=${sysname}/dest/root.client/lib/modules/%{kverrel}${kvariant}/extra/openafs
-    dstdir=$RPM_BUILD_ROOT${kvar}/fs/openafs
-
-    mkdir -p ${dstdir}
-
-    install -m 755 ${srcdir}/${modname} ${dstdir}/openafs${kmodend}
-done
-%endif
 %endif
 
 ##############################################################################
@@ -1279,7 +961,6 @@ done
 ###
 ##############################################################################
 %clean
-rm -f openafs-file-list
 [ "$RPM_BUILD_ROOT" != "/" -a "x%{debugspec}" != "x1" ] && \
        rm -fr $RPM_BUILD_ROOT
 
@@ -1297,38 +978,44 @@ if [ -e %{_prefix}/afsws ]; then
 fi
 
 %post client
+%if 0%{?fedora} < 15 && 0%{?rhel} < 7
 chkconfig --add openafs-client
+%else
+if [ $1 -eq 1 ] ; then
+    # Initial installation
+    /bin/systemctl daemon-reload >/dev/null 2>&1 || :
+fi
+%endif
 if [ ! -d /afs ]; then
        mkdir /afs
        chown root.root /afs
        chmod 0755 /afs
+       [ -x /sbin/restorecon ] && /sbin/restorecon /afs
 fi
 
 # Create the CellServDB
 [ -f /usr/vice/etc/CellServDB.local ] || touch /usr/vice/etc/CellServDB.local
 
 ( cd /usr/vice/etc ; \
+  if [ -h CellServDB ]; then \
+    rm -f CellServDB; \
+  fi; \
   cat CellServDB.local CellServDB.dist > CellServDB ; \
   chmod 644 CellServDB )
 
-echo
-echo The AFS cache is configured for 100 MB. Edit the
-echo /usr/vice/etc/cacheinfo file to change this before
-echo running AFS for the first time. You should also
-echo set your home cell in /usr/vice/etc/ThisCell.
-echo
-echo Also, you may want to edit /etc/pam.d/login and
-echo possibly others there to get an AFS token on login.
-echo Put the line:
-echo 
-echo    auth      sufficient   %{pamdir}/pam_afs.so try_first_pass ignore_root
-echo
-echo before the one for pwdb.
-echo
-
 %post server
-chkconfig --add openafs-server
+#on an upgrade, don't enable if we were disabled
+%if 0%{?fedora} < 15 && 0%{?rhel} < 7
+if [ $1 = 1 ] ; then
+  chkconfig --add openafs-server
+fi
 %{initdir}/openafs-server condrestart
+%else
+if [ $1 -eq 1 ] ; then
+    # Initial installation
+    /bin/systemctl daemon-reload >/dev/null 2>&1 || :
+fi
+%endif
 
 %if %{build_authlibs}
 %post authlibs
@@ -1341,19 +1028,43 @@ chkconfig --add openafs-server
 %preun
 if [ $1 = 0 ] ; then
        [ -d /afs ] && rmdir /afs
+       :
 fi
 
 %preun client
+%if 0%{?fedora} < 15 && 0%{?rhel} < 7
 if [ $1 = 0 ] ; then
         %{initdir}/openafs-client stop
         chkconfig --del openafs-client
 fi
+%else
+if [ $1 -eq 0 ] ; then
+       # Package removal, not upgrade
+       /bin/systemctl --no-reload disable openafs-client.service > /dev/null 2>&1 || :
+       /bin/systemctl stop openafs-client.service > /dev/null 2>&1 || :
+fi
+%endif
 
 %preun server
+%if 0%{?fedora} < 15 && 0%{?rhel} < 7
 if [ $1 = 0 ] ; then
         %{initdir}/openafs-server stop
         chkconfig --del openafs-server
 fi
+%else
+if [ $1 -eq 0 ] ; then
+       /bin/systemctl --no-reload disable openafs-server.service > /dev/null 2>&1 || :
+       /bin/systemctl stop openafs-server.service > /dev/null 2>&1 || :
+fi
+%endif
+
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7
+%postun client
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+
+%postun server
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+%endif
 
 %if %{build_dkmspkg}
 %post -n dkms-%{name}
@@ -1366,49 +1077,24 @@ dkms remove -m %{name} -v %{dkms_version} --rpm_safe_upgrade --all ||:
 %endif
 %endif
 
-%if %{build_modules}
-%if !%{fedorakmod}
-%if %{up_package}
-%post kernel
-/sbin/depmod -ae %{kernvers}
-
-%postun kernel
-/sbin/depmod -ae %{kernvers}
-
-%endif
-
-%if %{smp_package}
-%post kernel-smp
-/sbin/depmod -ae %{kernvers}%{?smp_ext:%{smp_ext}}
-
-%postun kernel-smp
-/sbin/depmod -ae %{kernvers}%{?smp_ext:%{smp_ext}}
-%endif
-
-%if %{largesmp_package}
-%post kernel-largesmp
-/sbin/depmod -ae %{kernvers}%{?largesmp_ext:%{largesmp_ext}}
-
-%postun kernel-largesmp
-/sbin/depmod -ae %{kernvers}%{?largesmp_ext:%{largesmp_ext}}
-%endif
-%if %{bigmem_package}
-%post kernel-bigmem
-/sbin/depmod -ae %{kernvers}%{?bigmem_ext:%{bigmem_ext}}
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 7
+%triggerun -- openafs-client < 1.6.0-1
+# Save the current service runlevel info
+# User must manually run systemd-sysv-convert --apply httpd
+# to migrate them to systemd targets
+/usr/bin/systemd-sysv-convert --save openafs-client >/dev/null 2>&1 ||:
 
-%postun kernel-bigmem
-/sbin/depmod -ae %{kernvers}%{?bigmem_ext:%{bigmem_ext}}
-%endif
+# Run this because the SysV package being removed won't do it
+/sbin/chkconfig --del openafs-client >/dev/null 2>&1 || :
 
-%if %{hugemem_package}
-%post kernel-hugemem
-/sbin/depmod -ae %{kernvers}%{?hugemem_ext:%{hugemem_ext}}
+%triggerun -- openafs-server < 1.6.0-1
+# Save the current service runlevel info
+# User must manually run systemd-sysv-convert --apply httpd
+# to migrate them to systemd targets
+/usr/bin/systemd-sysv-convert --save openafs-server >/dev/null 2>&1 ||:
 
-%postun kernel-hugemem
-/sbin/depmod -ae %{kernvers}%{?hugemem_ext:%{hugemem_ext}}
-%endif
-%endif
+# Run this because the SysV package being removed won't do it
+/sbin/chkconfig --del openafs-server >/dev/null 2>&1 || :
 %endif
 
 ##############################################################################
@@ -1418,14 +1104,80 @@ dkms remove -m %{name} -v %{dkms_version} --rpm_safe_upgrade --all ||:
 ##############################################################################
 %if %{build_userspace}
 
-%files -f openafs-file-list
+%files
 %defattr(-,root,root)
-%config /etc/sysconfig/openafs
+%config(noreplace) /etc/sysconfig/openafs
 %doc %{_docdir}/openafs-%{afsvers}/LICENSE
+%{_bindir}/afsmonitor
+%{_bindir}/bos
+%{_bindir}/fs
+%{_bindir}/pagsh
+%{_bindir}/pts
+%{_bindir}/restorevol
+%{_bindir}/scout
+%{_bindir}/sys
+%{_bindir}/tokens
+%{_bindir}/translate_et
+%{_bindir}/xstat_cm_test
+%{_bindir}/xstat_fs_test
+%{_bindir}/udebug
+%{_bindir}/unlog
+%{_sbindir}/backup
+%{_sbindir}/butc
+%{_sbindir}/fms
+%{_sbindir}/fstrace
+%{_sbindir}/read_tape
+%{_sbindir}/rxdebug
+%{_sbindir}/uss
+%{_sbindir}/vos
+%{_sbindir}/vsys
+%{_libdir}/libafshcrypto.so.*
+%{_libdir}/librokenafs.so.*
+%{_mandir}/man1/afs.1.gz
+%{_mandir}/man1/afsmonitor.1.gz
+%{_mandir}/man1/fs.1.gz
+%{_mandir}/man1/fs_*.1.gz
+%{_mandir}/man1/pagsh.1.gz
+%{_mandir}/man1/pts.1.gz
+%{_mandir}/man1/pts_*.1.gz
+%{_mandir}/man1/restorevol.1.gz
+%{_mandir}/man1/rxdebug.1.gz
+%{_mandir}/man1/scout.1.gz
+%{_mandir}/man1/sys.1.gz
+%{_mandir}/man1/tokens.1.gz
+%{_mandir}/man1/translate_et.1.gz
+%{_mandir}/man1/udebug.1.gz
+%{_mandir}/man1/unlog.1.gz
+%{_mandir}/man1/vos.1.gz
+%{_mandir}/man1/vos_*.1.gz
+%{_mandir}/man1/xstat_cm_test.1.gz
+%{_mandir}/man1/xstat_fs_test.1.gz
+%{_mandir}/man5/CellServDB.5.gz
+%{_mandir}/man5/ThisCell.5.gz
+%{_mandir}/man5/afsmonitor.5.gz
+%{_mandir}/man5/butc.5.gz
+%{_mandir}/man5/butc_logs.5.gz
+%{_mandir}/man5/uss.5.gz
+%{_mandir}/man5/uss_bulk.5.gz
+%{_mandir}/man8/backup.8.gz
+%{_mandir}/man8/backup_*.8.gz
+%{_mandir}/man8/bos.8.gz
+%{_mandir}/man8/bos_*.8.gz
+%{_mandir}/man8/butc.8.gz
+%{_mandir}/man8/fms.8.gz
+%{_mandir}/man8/fstrace.8.gz
+%{_mandir}/man8/fstrace_*.8.gz
+%{_mandir}/man8/read_tape.8.gz
+%{_mandir}/man8/uss.8.gz
+%{_mandir}/man8/uss_*.8.gz
 
 %files docs
 %defattr(-,root,root)
-%doc %{_docdir}/openafs-%{afsvers}
+%docdir %{_docdir}/openafs-%{afsvers}
+%dir %{_docdir}/openafs-%{afsvers}
+%{_docdir}/openafs-%{afsvers}/ChangeLog
+%{_docdir}/openafs-%{afsvers}/RELNOTES-%{afsvers}
+%{_docdir}/openafs-%{afsvers}/pdf
 
 %files client
 %defattr(-,root,root)
@@ -1434,27 +1186,31 @@ dkms remove -m %{name} -v %{dkms_version} --rpm_safe_upgrade --all ||:
 %dir %{_prefix}/vice/etc
 %dir %{_prefix}/vice/etc/C
 %{_prefix}/vice/etc/CellServDB.dist
-%config %{_prefix}/vice/etc/ThisCell
-%config %{_prefix}/vice/etc/cacheinfo
+%config(noreplace) %{_prefix}/vice/etc/ThisCell
+%config(noreplace) %{_prefix}/vice/etc/cacheinfo
+%{_bindir}/afsio
 %{_bindir}/cmdebug
 %{_bindir}/up
 %{_prefix}/vice/etc/afsd
 %{_prefix}/vice/etc/C/afszcm.cat
-%{pamdir}/pam_afs.krb.so.1
-%{pamdir}/pam_afs.krb.so
-%{pamdir}/pam_afs.so.1
-%{pamdir}/pam_afs.so
+%{_libdir}/libuafs.a
+%{_libdir}/libuafs_pic.a
+%if 0%{?fedora} < 15 && 0%{?rhel} < 7
 %{initdir}/openafs-client
-%{_mandir}/man1/cmdebug.*
-%{_mandir}/man1/copyauth.*
-%{_mandir}/man1/up.*
-%{_mandir}/man5/afs*
-%{_mandir}/man5/cacheinfo.*
-%{_mandir}/man8/afsd.*
-%{_mandir}/man8/rmtsysd.*
-%{_mandir}/man8/vsys.*
-%{_mandir}/man5/CellAlias.*
-%{_mandir}/man5/afszcm.cat.*
+%else
+%{_unitdir}/openafs-client.service
+%{_sysconfdir}/sysconfig/modules/openafs-client.modules
+%endif
+%{_mandir}/man1/cmdebug.1.gz
+%{_mandir}/man1/up.1.gz
+%{_mandir}/man5/afs.5.gz
+%{_mandir}/man5/afs_cache.5.gz
+%{_mandir}/man5/afs_volume_header.5.gz
+%{_mandir}/man5/afszcm.cat.5.gz
+%{_mandir}/man5/cacheinfo.5.gz
+%{_mandir}/man8/afsd.8.gz
+%{_mandir}/man8/vsys.8.gz
+%{_mandir}/man5/CellAlias.5.gz
 
 %files server
 %defattr(-,root,root)
@@ -1465,114 +1221,139 @@ dkms remove -m %{name} -v %{dkms_version} --rpm_safe_upgrade --all ||:
 %{_prefix}/afs/bin/bosserver
 %{_prefix}/afs/bin/bos_util
 %{_prefix}/afs/bin/buserver
+%{_prefix}/afs/bin/dafileserver
+%{_prefix}/afs/bin/dafssync-debug
+%{_prefix}/afs/bin/dasalvager
+%{_prefix}/afs/bin/davolserver
 %{_prefix}/afs/bin/fileserver
 %{_prefix}/afs/bin/fssync-debug
-# Should we support KAServer?
-%{_prefix}/afs/bin/kaserver
-%{_prefix}/afs/bin/ka-forwarder
 %{_prefix}/afs/bin/pt_util
 %{_prefix}/afs/bin/ptserver
 %{_prefix}/afs/bin/salvager
+%{_prefix}/afs/bin/salvageserver
+%{_prefix}/afs/bin/salvsync-debug
 %{_prefix}/afs/bin/state_analyzer
 %{_prefix}/afs/bin/upclient
 %{_prefix}/afs/bin/upserver
 %{_prefix}/afs/bin/vlserver
 %{_prefix}/afs/bin/volinfo
+%{_prefix}/afs/bin/volscan
 %{_prefix}/afs/bin/volserver
-%{_sbindir}/kadb_check
 %{_sbindir}/prdb_check
 %{_sbindir}/vldb_check
 %{_sbindir}/vldb_convert
 %{_sbindir}/voldump
+%if 0%{?fedora} < 15 && 0%{?rhel} < 7
 %{initdir}/openafs-server
-%{_mandir}/man5/AuthLog.*
-%{_mandir}/man5/BackupLog.*
-%{_mandir}/man5/BosConfig.*
-%{_mandir}/man5/BosLog.*
-%{_mandir}/man5/FORCESALVAGE.*
-%{_mandir}/man5/FileLog.*
-%{_mandir}/man5/KeyFile.*
-%{_mandir}/man5/NetInfo.*
-%{_mandir}/man5/NetRestrict.*
-%{_mandir}/man5/NoAuth.*
-%{_mandir}/man5/SALVAGE.fs.*
-%{_mandir}/man5/SalvageLog.*
-%{_mandir}/man5/sysid.*
-%{_mandir}/man5/UserList.*
-%{_mandir}/man5/VLLog.*
-%{_mandir}/man5/VolserLog.*
-%{_mandir}/man5/bdb.DB0.*
-%{_mandir}/man5/fms.log.*
-%{_mandir}/man5/kaserver.DB0.*
-%{_mandir}/man5/kaserverauxdb.*
-%{_mandir}/man5/krb.conf.*
-%{_mandir}/man5/prdb.DB0.*
-%{_mandir}/man5/salvage.lock.*
-%{_mandir}/man5/tapeconfig.*
-%{_mandir}/man5/vldb.DB0.*
-%{_mandir}/man8/buserver.*
-%{_mandir}/man8/fileserver.*
-%{_mandir}/man8/kadb_check.*
-%{_mandir}/man8/ka-forwarder.*
-%{_mandir}/man8/prdb_check.*
-%{_mandir}/man8/ptserver.*
-%{_mandir}/man8/pt_util.*
-%{_mandir}/man8/restorevol.*
-%{_mandir}/man8/salvager.*
-%{_mandir}/man8/salvageserver.*
-%{_mandir}/man8/upclient.*
-%{_mandir}/man8/upserver.*
-%{_mandir}/man8/vldb_check.*
-%{_mandir}/man8/vldb_convert.*
-%{_mandir}/man8/vlserver.*
-%{_mandir}/man8/voldump.*
-%{_mandir}/man8/volinfo.*
-%{_mandir}/man8/volserver.*
+%else
+%{_unitdir}/openafs-server.service
+%endif
+%{_mandir}/man5/BackupLog.5.gz
+%{_mandir}/man5/BosConfig.5.gz
+%{_mandir}/man5/BosLog.5.gz
+%{_mandir}/man5/FORCESALVAGE.5.gz
+%{_mandir}/man5/FileLog.5.gz
+%{_mandir}/man5/KeyFile.5.gz
+%{_mandir}/man5/KeyFileExt.5.gz
+%{_mandir}/man5/NetInfo.5.gz
+%{_mandir}/man5/NetRestrict.5.gz
+%{_mandir}/man5/NoAuth.5.gz
+%{_mandir}/man5/PtLog.5.gz
+%{_mandir}/man5/SALVAGE.fs.5.gz
+%{_mandir}/man5/SalvageLog.5.gz
+%{_mandir}/man5/sysid.5.gz
+%{_mandir}/man5/UserList.5.gz
+%{_mandir}/man5/VLLog.5.gz
+%{_mandir}/man5/VolserLog.5.gz
+%{_mandir}/man5/bdb.DB0.5.gz
+%{_mandir}/man5/fms.log.5.gz
+%{_mandir}/man5/krb.conf.5.gz
+%{_mandir}/man5/krb.excl.5.gz
+%{_mandir}/man5/prdb.DB0.5.gz
+%{_mandir}/man5/salvage.lock.5.gz
+%{_mandir}/man5/tapeconfig.5.gz
+%{_mandir}/man5/vldb.DB0.5.gz
+%{_mandir}/man8/bosserver.8.gz
+%{_mandir}/man8/buserver.8.gz
+%{_mandir}/man8/fileserver.8.gz
+%{_mandir}/man8/dafileserver.8.gz
+%{_mandir}/man8/dafssync-debug.8.gz
+%{_mandir}/man8/dafssync-debug_*.8.gz
+%{_mandir}/man8/dasalvager.8.gz
+%{_mandir}/man8/davolserver.8.gz
+%{_mandir}/man8/fssync-debug.8.gz
+%{_mandir}/man8/fssync-debug_*.8.gz
+%{_mandir}/man8/prdb_check.8.gz
+%{_mandir}/man8/ptserver.8.gz
+%{_mandir}/man8/pt_util.8.gz
+%{_mandir}/man8/salvager.8.gz
+%{_mandir}/man8/salvageserver.8.gz
+%{_mandir}/man8/state_analyzer.8.gz
+%{_mandir}/man8/upclient.8.gz
+%{_mandir}/man8/upserver.8.gz
+%{_mandir}/man8/vldb_check.8.gz
+%{_mandir}/man8/vldb_convert.8.gz
+%{_mandir}/man8/vlserver.8.gz
+%{_mandir}/man8/voldump.8.gz
+%{_mandir}/man8/volinfo.8.gz
+%{_mandir}/man8/volscan.8.gz
+%{_mandir}/man8/volserver.8.gz
 
 %if %{build_authlibs}
 %files authlibs
 %defattr(-,root,root)
 %{_libdir}/libafsauthent.so.*
 %{_libdir}/libafsrpc.so.*
+%{_libdir}/libkopenafs.so.*
 %endif
 
 %files authlibs-devel
 %defattr(-,root,root)
+%{_includedir}/kopenafs.h
 %{_libdir}/libafsauthent.a
+%{_libdir}/libafscp.a
 %{_libdir}/libafsrpc.a
 %{_libdir}/libafsauthent_pic.a
 %{_libdir}/libafsrpc_pic.a
+%{_libdir}/libkopenafs.a
 %if %{build_authlibs}
 %{_libdir}/libafsauthent.so
 %{_libdir}/libafsrpc.so
+%{_libdir}/libkopenafs.so
 %endif
 
 %files devel
 %defattr(-,root,root)
+%{_bindir}/afs_compile_et
 %{_bindir}/rxgen
 %{_includedir}/afs
-%{_includedir}/des.h
-%{_includedir}/des_conf.h
-%{_includedir}/des_odd.h
-%{_includedir}/des_prototypes.h
 %{_includedir}/lock.h
 %{_includedir}/lwp.h
-%{_includedir}/mit-cpyright.h
-%{_includedir}/potpourri.h
-%{_includedir}/preempt.h
 %{_includedir}/rx
 %{_includedir}/timer.h
 %{_includedir}/ubik.h
 %{_includedir}/ubik_int.h
+%{_includedir}/opr/lock.h
+%{_includedir}/opr/queue.h
 %{_libdir}/afs
-%{_libdir}/libdes.a
+%{_libdir}/libafshcrypto.a
+%{_libdir}/libafshcrypto.so
+%{_libdir}/libafsrfc3961.a
 %{_libdir}/liblwp.a
+%{_libdir}/libopr.a
+%{_libdir}/librokenafs.a
+%{_libdir}/librokenafs.so
 %{_libdir}/librx.a
 %{_libdir}/librxkad.a
 %{_libdir}/librxstat.a
 %{_libdir}/libubik.a
-%{_mandir}/man1/rxgen.*
-%{_mandir}/man1/afs_compile_et.*
+%{_mandir}/man1/rxgen.1.gz
+%{_mandir}/man1/afs_compile_et.1.gz
+%if 0%{?fedora} >= 15 || 0%{?rhel} >= 6
+%{_libdir}/perl/AFS/ukernel.pm
+%{_libdir}/perl/ukernel.so
+%{_mandir}/man3/AFS::ukernel.3.gz
+%endif
 
 %if %{build_dkmspkg}
 %files -n dkms-%{name}
@@ -1589,60 +1370,88 @@ dkms remove -m %{name} -v %{dkms_version} --rpm_safe_upgrade --all ||:
 
 %files compat
 %defattr(-,root,root)
-%{_prefix}/afsws
-
-%files kpasswd
+%{_prefix}/afsws/bin/afsmonitor
+%{_prefix}/afsws/bin/bos
+%{_prefix}/afsws/bin/fs
+%{_prefix}/afsws/bin/pagsh
+%{_prefix}/afsws/bin/pts
+%{_prefix}/afsws/bin/restorevol
+%{_prefix}/afsws/bin/scout
+%{_prefix}/afsws/bin/sys
+%{_prefix}/afsws/bin/tokens
+%{_prefix}/afsws/bin/translate_et
+%{_prefix}/afsws/bin/udebug
+%{_prefix}/afsws/bin/unlog
+%{_prefix}/afsws/bin/xstat_cm_test
+%{_prefix}/afsws/bin/xstat_fs_test
+%{_prefix}/afsws/etc/backup
+%{_prefix}/afsws/etc/butc
+%{_prefix}/afsws/etc/fms
+%{_prefix}/afsws/etc/fstrace
+%{_prefix}/afsws/etc/read_tape
+%{_prefix}/afsws/etc/rxdebug
+%{_prefix}/afsws/etc/uss
+%{_prefix}/afsws/etc/vos
+%{_prefix}/afsws/etc/vsys
+%if %{kauth_support}
+%{_prefix}/afsws/bin/pagsh.krb
+%{_prefix}/afsws/bin/tokens.krb
+%endif
+
+%if %{kauth_support}
+%files kauth-client
 %defattr(-,root,root)
-%{_bindir}/kpasswd
+%{_sbindir}/kas
+%{_bindir}/klog
+%{_bindir}/klog.krb
+%{pamdir}/pam_afs.krb.so.1
+%{pamdir}/pam_afs.krb.so
+%{pamdir}/pam_afs.so.1
+%{pamdir}/pam_afs.so
+%{_bindir}/kapasswd
 %{_bindir}/kpwvalid
+%{_bindir}/pagsh.krb
+%{_bindir}/tokens.krb
+%{_prefix}/afsws/bin/kapasswd
+%{_prefix}/afsws/bin/klog
+%{_prefix}/afsws/bin/klog.krb
+%{_prefix}/afsws/etc/kas
+%{_mandir}/man1/kapasswd.1.gz
+%{_mandir}/man1/klog.1.gz
+%{_mandir}/man1/klog.krb.1.gz
+%{_mandir}/man1/pagsh.krb.1.gz
+%{_mandir}/man1/tokens.krb.1.gz
+%{_mandir}/man8/kpwvalid.8.gz
+%{_mandir}/man8/kas.8.gz
+%{_mandir}/man8/kas_*.8.gz
+
+%files kauth-server
+%defattr(-,root,root)
+%{_prefix}/afs/bin/kaserver
+%{_prefix}/afs/bin/ka-forwarder
+%{_sbindir}/kadb_check
+%{_mandir}/man5/AuthLog.5.gz
+%{_mandir}/man5/AuthLog.dir.5.gz
+%{_mandir}/man5/kaserver.DB0.5.gz
+%{_mandir}/man5/kaserverauxdb.5.gz
+%{_mandir}/man8/kadb_check.8.gz
+%{_mandir}/man8/ka-forwarder.8.gz
+%{_mandir}/man8/kaserver.8.gz
+%endif
 
 %if %{krb5support}
 %files krb5
 %defattr(-,root,root)
 %{_bindir}/aklog
 %{_bindir}/klog.krb5
+%{_sbindir}/akeyconvert
 %{_sbindir}/asetkey
-%{_mandir}/man1/aklog.*
-%{_mandir}/man8/asetkey.*
-%endif
-
-%endif
-
-%if %{build_modules}
-
-%if !%{fedorakmod}
-%if %{up_package}
-%files kernel
-%defattr(-,root,root)
-%{kxmoddir}/fs/openafs/openafs.*
-%endif
-
-%if %{smp_package}
-%files kernel-smp
-%defattr(-,root,root)
-%{kxmoddir}%{?smp_ext:%{smp_ext}}/fs/openafs/openafs.*
-%endif
-
-%if %{largesmp_package}
-%files kernel-largesmp
-%defattr(-,root,root)
-%{kxmoddir}%{?largesmp_ext:%{largesmp_ext}}/fs/openafs/openafs.*
-%endif
-%if %{bigmem_package}
-%files kernel-bigmem
-%defattr(-,root,root)
-%{kxmoddir}%{?bigmem_ext:%{bigmem_ext}}/fs/openafs/openafs.*
-%endif
-
-%if %{hugemem_package}
-%files kernel-hugemem
-%defattr(-,root,root)
-%{kxmoddir}%{?hugemem_ext:%{hugemem_ext}}/fs/openafs/openafs.*
-%endif
-%endif
-
+%{_mandir}/man1/aklog.1.gz
+%{_mandir}/man1/klog.krb5.1.gz
+%{_mandir}/man8/akeyconvert.8.gz
+%{_mandir}/man8/asetkey.8.gz
 %endif
+%endif  # build_userspace
 
 ##############################################################################
 ###
@@ -1653,7 +1462,7 @@ dkms remove -m %{name} -v %{dkms_version} --rpm_safe_upgrade --all ||:
 * Wed Dec 12 2007  Simon Wilkinson <simon@sxw.org.uk> 1.4.5
 - Make the RPM mockable
 
-* Tue Oct 29 2007  Simon Wilkinson <simon@sxw.org.uk> 1.4.5
+* Mon Oct 29 2007  Simon Wilkinson <simon@sxw.org.uk> 1.4.5
 - Update to match the shipped 1.4.5 RPMS
 - Fix the kvariant stuff to only configure the 'standard' case once
 - Add openafs-kvers.sh back in