mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 03:09:34 +03:00
79593b0dec
ZFS requires a stable hostid to recognize foreign pool imports, but the hostid of a Linux system can change if the /etc/hostid file is missing, particularly during DHCP lease updates. Ensure that the system hostid is stable by creating the /etc/hostid file from the output of the /usr/bin/hostid utility. The /sbin/genhostid utility that is provided by the initscripts package is not used because it creates a random hostid, which breaks upgrades on systems that already have the SPL module installed. The external `printf` is used because the dash builtin lacks the byte format. Conveniences like a ${HOSTID:$ii:2} substring range or a `sed` one-liner are similarly avoided.
259 lines
7.1 KiB
RPMSpec
259 lines
7.1 KiB
RPMSpec
# The following block is used to allow the source RPM to be rebuilt
|
|
# against specific kernels. It is preferable that rpmbuild define the
|
|
# require_kver, require_kdir, require_obj constants for us, but if it does not
|
|
# not we attempt to determine the correct values based on your distro.
|
|
|
|
# kdir: Full path to the kernel source headers
|
|
# kobj: Full path to the kernel build objects
|
|
# kver: Kernel version
|
|
# kpkg: Kernel package name
|
|
# kdevpkg: Kernel devel package name
|
|
# kverpkg: Kernel package version
|
|
|
|
%if %{defined require_kver}
|
|
%define kver %{require_kver}
|
|
%endif
|
|
|
|
%if %{defined require_kdir}
|
|
%define kdir %{require_kdir}
|
|
%endif
|
|
|
|
%if %{defined require_kobj}
|
|
%define kobj %{require_kobj}
|
|
%endif
|
|
|
|
# SLES:
|
|
%if %{defined suse_version}
|
|
%if %{undefined kver}
|
|
%ifarch ppc64
|
|
%define kverextra ppc64
|
|
%else
|
|
%define kverextra default
|
|
%endif
|
|
|
|
%if %{suse_version} >= 1100
|
|
%define klnk %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
|
|
%define krelease %{klnk}/include/config/kernel.release
|
|
%else
|
|
%define klnk %{_usrsrc}/linux-obj/%{_target_cpu}/%{kverextra}
|
|
%define krelease %{klnk}/.kernelrelease
|
|
%endif
|
|
|
|
%define kver %((echo X; %{__cat} %{krelease} 2>/dev/null)|tail -1)
|
|
%endif
|
|
|
|
%if %{undefined kverextra}
|
|
%define kverextra %(echo %{kver} | cut -f3 -d'-')
|
|
%endif
|
|
|
|
%define kpkg kernel-%{kverextra}
|
|
%define kdevpkg kernel-source
|
|
%define kverpkg %(echo %{kver} | %{__sed} -e 's/-%{kverextra}//g')
|
|
|
|
# The kernel and rpm versions do not strictly match under SLES11
|
|
# e.g. kernel version 2.6.27.19-5 != rpm version 2.6.27.19-5.1
|
|
%if %{suse_version} >= 1100
|
|
%define koppkg >=
|
|
%else
|
|
%define koppkg =
|
|
%endif
|
|
|
|
%if %{undefined kdir}
|
|
%define kdir %{_usrsrc}/linux-%{kverpkg}
|
|
%endif
|
|
%if %{undefined kobj}
|
|
%define kobj %{kdir}-obj/%{_target_cpu}/%{kverextra}
|
|
%endif
|
|
%else
|
|
|
|
# CHAOS 4.x:
|
|
%if %{defined ch4}
|
|
%if %{undefined kver}
|
|
%define klnk %{_usrsrc}/kernels/*/include/config
|
|
%define kver %((echo X; %{__cat} %{klnk}/kernel.release
|
|
2>/dev/null) | tail -1)
|
|
%endif
|
|
%define kpkg chaos-kernel
|
|
%define kdevpkg chaos-kernel-devel
|
|
%define kverpkg %{kver}
|
|
%define koppkg =
|
|
%if %{undefined kdir}
|
|
%define kdir %{_usrsrc}/kernels/%{kver}
|
|
%endif
|
|
%if %{undefined kobj}
|
|
%define kobj %{kdir}
|
|
%endif
|
|
%else
|
|
|
|
# RHEL 5.x/6.x, CHAOS 5.x:
|
|
%if %{defined el5} || %{defined el6} || %{defined ch5}
|
|
%if %{undefined kver}
|
|
%define klnk %{_usrsrc}/kernels/*/include/config
|
|
%define kver %((echo X; %{__cat} %{klnk}/kernel.release
|
|
2>/dev/null) | tail -1)
|
|
%endif
|
|
%define kpkg kernel
|
|
%define kdevpkg kernel-devel
|
|
%if %{defined el6} || %{defined ch5}
|
|
%define kverpkg %(echo %{kver} | %{__sed} -e 's/.%{_target_cpu}//g')
|
|
%else
|
|
%define kverpkg %{kver}
|
|
%endif
|
|
%define koppkg =
|
|
%if %{undefined kdir}
|
|
%if %{defined el6} || %{defined ch5}
|
|
%define kdir %{_usrsrc}/kernels/%{kver}
|
|
%else
|
|
%define kdir %{_usrsrc}/kernels/%{kver}-%{_target_cpu}
|
|
%endif
|
|
%endif
|
|
%if %{undefined kobj}
|
|
%define kobj %{kdir}
|
|
%endif
|
|
%else
|
|
|
|
# Fedora:
|
|
%if %{defined fedora}
|
|
%if %{undefined kver}
|
|
%define klnk %{_usrsrc}/kernels/*/include/config
|
|
%define kver %((echo X; %{__cat} %{klnk}/kernel.release
|
|
2>/dev/null) | tail -1)
|
|
%endif
|
|
%define kpkg kernel
|
|
%define kdevpkg kernel-devel
|
|
%define kverpkg %(echo %{kver} | %{__sed} -e 's/.%{_target_cpu}//g')
|
|
%define koppkg =
|
|
%if %{undefined kdir}
|
|
%define kdir %{_usrsrc}/kernels/%{kver}
|
|
%endif
|
|
%if %{undefined kobj}
|
|
%define kobj %{kdir}
|
|
%endif
|
|
%else
|
|
|
|
# Unsupported distro:
|
|
%if %{undefined kver}
|
|
%define kver %(uname -r)
|
|
%endif
|
|
%define kverpkg %{kver}
|
|
%if %{undefined kdir}
|
|
%define kdir /lib/modules/%{kver}/build
|
|
%endif
|
|
%if %{undefined kobj}
|
|
%define kobj %{kdir}
|
|
%endif
|
|
|
|
%endif
|
|
%endif
|
|
%endif
|
|
%endif
|
|
|
|
# Distro agnostic:
|
|
%define name @PACKAGE@-modules
|
|
%define version @VERSION@
|
|
%define debug_package %{nil}
|
|
|
|
# The kernel version should only be appended to a binary RPM. When
|
|
# building a source RPM it must be kernel version agnostic. This means
|
|
# the source RPM must never specify a required kernel version, but the
|
|
# final RPM should be keyed to the kernel version it was built against.
|
|
%if %{defined build_src_rpm}
|
|
%define release @SPL_META_RELEASE@
|
|
%define requires %{kpkg}
|
|
%if %{defined kdevpkg}
|
|
%define devel_requires %{kdevpkg}
|
|
%endif
|
|
%else
|
|
%define relext %(echo %{kverpkg} | %{__sed} -e 's/-/_/g')
|
|
%define release @SPL_META_RELEASE@_%{relext}
|
|
%if %{defined kpkg}
|
|
%define krequires %{kpkg} %{koppkg} %{kverpkg}
|
|
%endif
|
|
%if %{defined kdevpkg}
|
|
%define devel_requires %{kdevpkg} %{koppkg} %{kverpkg}
|
|
%endif
|
|
%endif
|
|
|
|
Summary: Solaris Porting Layer Modules
|
|
Group: Utilities/System
|
|
Name: %{name}
|
|
Version: %{version}
|
|
Release: %{release}
|
|
License: @LICENSE@
|
|
URL: git://eris.llnl.gov/spl.git
|
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%(%{__id} -un)
|
|
Source: @PACKAGE@-%{version}.tar.gz
|
|
%if %{defined krequires}
|
|
Requires: %{krequires}
|
|
%endif
|
|
%if %{defined kdevpkg}
|
|
BuildRequires: %{kdevpkg}
|
|
%endif
|
|
|
|
%description
|
|
The %{name} package contains kernel modules for emulating Solaris style
|
|
primatives in the linux kernel. These include, but are not limited to:
|
|
atomic, condvar, debug, error, memory, kobject, kstat, mutex, rwlock,
|
|
taskq, thread, time, and vnode APIs.
|
|
|
|
%package devel
|
|
Summary: Solaris Porting Layer Headers and Symbols
|
|
Group: Development/Libraries
|
|
%if %{defined devel_requires}
|
|
Requires: %{devel_requires}
|
|
%endif
|
|
%if %{defined kdevpkg}
|
|
BuildRequires: %{kdevpkg}
|
|
%endif
|
|
|
|
%description devel
|
|
The %{name}-devel package contains the header files and Module{s}.symvers
|
|
symbols needed for building additional modules which use %{name}.
|
|
|
|
%prep
|
|
%setup -n @PACKAGE@-%{version}
|
|
%build
|
|
%configure --with-linux=%{kdir} --with-linux-obj=%{kobj} \
|
|
--with-config=kernel
|
|
make
|
|
|
|
%install
|
|
rm -rf $RPM_BUILD_ROOT
|
|
make DESTDIR=$RPM_BUILD_ROOT install
|
|
|
|
%clean
|
|
rm -rf $RPM_BUILD_ROOT
|
|
|
|
%files
|
|
%defattr(-, root, root)
|
|
/lib/modules/*
|
|
|
|
%files devel
|
|
%defattr(-,root,root)
|
|
%{_prefix}/src/*
|
|
|
|
%post
|
|
# The /sbin/genhostid utility writes a random value to the /etc/hostid
|
|
# file, which means that using it here will break upgrades on systems
|
|
# that already have spl installed.
|
|
if [ ! -f /etc/hostid ]; then
|
|
HOSTID=$(hostid)
|
|
AA=$(echo $HOSTID | cut -b 1,2)
|
|
BB=$(echo $HOSTID | cut -b 3,4)
|
|
CC=$(echo $HOSTID | cut -b 5,6)
|
|
DD=$(echo $HOSTID | cut -b 7,8)
|
|
"$(which printf)" "\x$DD\x$CC\x$BB\x$AA" >"/etc/hostid"
|
|
fi
|
|
if [ -f /boot/System.map-%{kver} ]; then
|
|
depmod -ae -F /boot/System.map-%{kver} %{kver} || exit 0
|
|
else
|
|
depmod -ae %{kver} || exit 0
|
|
fi
|
|
|
|
%postun
|
|
if [ -f /boot/System.map-%{kver} ]; then
|
|
depmod -ae -F /boot/System.map-%{kver} %{kver} || exit 0
|
|
else
|
|
depmod -ae %{kver} || exit 0
|
|
fi
|