# "uname -r" output of the kernel to build for, the running one # if none was specified with "--define 'kernelversion '" # PLEASE: provide both (correctly) or none!! %{!?kernelversion: %{expand: %%define kernelversion %(uname -r)}} %{!?kdir: %{expand: %%define kdir /lib/modules/%(uname -r)/build}} # # this results in strange names for e.g. smp4G, psmp, # -smp-lge or whatnot. #-- # %define kversion %(echo %{kernelversion} | sed -e s/smp// -) # %define krelver %(echo %{kversion} | tr -s '-' '_') # %if %(echo %{kernelversion} | grep -c smp) # %{expand:%%define ksmp -smp} # %endif #-- # so I choose to have it thus: %define krelver %(echo %{kernelversion} | tr -s '-' '_') Name: drbd Summary: Distributed Redundant Block Device driver for Linux Version: 0.7.25 Release: 1 Source: %{name}-%{version}.tar.gz Vendor: DRBD License: GPL ExclusiveOS: linux Group: System Environment/Kernel #Packager: Requires: kernel Provides: %{name} URL: http://www.drbd.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-root BuildRequires: flex, kernel-devel, kernel-doc %description Drbd is a distributed replicated block device. It mirrors a block device over the network to another machine. Think of it as networked raid 1. It is a building block for setting up high availability (HA) clusters. Authors: -------- Philipp Reisner Lars Ellenberg #%package -n kernel%{?ksmp}-module-drbd # I choose to have the kernelversion as part of the package name! # drbd is prepended... %package km-%{krelver} Summary: Kernel driver for DRBD. #Release: %{release}_%{krelver} Group: System Environment/Kernel Requires: %{name} = %{version}, /sbin/depmod # conflicts with the suse km_drbd package. use either theirs, or ours... Conflicts: km_drbd #%{?ksmp:Provides: kernel-module-drbd = %{version}-%{release}_%{krelver}} #%description -n kernel%{?ksmp}-module-drbd %description km-%{krelver} This module is the kernel-dependant driver for DRBD. This is split out so that multiple kernel driver versions can be installed, one for each installed kernel. %prep %setup test -d %{kdir}/. export KDIR=%{kdir} test "$(scripts/get_uts_release.sh)" = %{kernelversion} %build echo kernelversion=%{kernelversion} echo kversion=%{kversion} echo krelver=%{krelver} [ -n $RPM_BUILD_ROOT -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT mkdir -p %{buildroot} make clean # note: MANDIR is not used anywhere in the makefiles # maybe this should be changed if [ -e /etc/redhat-release ]; then # unset LOCALVERSION for building on RHEL AS 4 make all doc PREFIX=%{buildroot}/ MANDIR=%{_mandir} KDIR=%{kdir} LOCALVERSION="" else # LOCALVERSION necessary for building on SuSE-9.3 make all doc PREFIX=%{buildroot}/ MANDIR=%{_mandir} KDIR=%{kdir} fi %install make install PREFIX=%{buildroot}/ MANDIR=%{_mandir} cd drbd mv .kernel.config.gz k-config-%{kernelversion}.gz FILELIST="%{_builddir}/%{name}-%{version}/file.list" cd %{buildroot} # # this is because /etc/init.d != /etc/rc.d != /etc/rc.d/init.d ... # you may want to edit this, or the file list below ;) # find etc/ -name drbd -printf "/%p\n" > "$FILELIST" # on suse/united we have additionally: test -e sbin/rcdrbd && echo "/sbin/rcdrbd" >> "$FILELIST" ## If I only wanted to include the module, not all the directories ## I'd then say %files -n kernel%{?ksmp}-module-drbd -f $FILELIST.mod below #find lib/ -name "drbd.*" -printf "/%p\n" > "$FILELIST.mod" # # and I only want to install a hint to the example conf # cat <<___ > etc/drbd.conf # # please have a a look at the example configuration file in # %{_docdir}/%{name}/drbd.conf # ___ %clean [ -n $RPM_BUILD_ROOT -a "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %files -f %{_builddir}/%{name}-%{version}/file.list %defattr(755,root,root) /sbin/drbdsetup /sbin/drbdadm #/sbin/drbdmeta #/usr/lib/drbd/outdate-peer.sh /etc/ha.d/resource.d/drbddisk %defattr(644,root,root) %config(noreplace) /etc/drbd.conf %defattr(-,root,root) %{_mandir}/man8/drbd.8.gz %{_mandir}/man8/drbdsetup.8.gz %{_mandir}/man8/drbdadm.8.gz %{_mandir}/man8/drbddisk.8.gz %{_mandir}/man5/drbd.conf.5.gz #%{_mandir}/man8/drbdmeta.8.gz %doc scripts/drbd.conf %doc COPYING %doc README %doc file.list #%files -n kernel%{?ksmp}-module-drbd %files km-%{krelver} %defattr(-,root,root) /lib/modules/%{kernelversion}/ %doc drbd/k-config-%{kernelversion}.gz %post # hack for distribution kernel packages, # which already contain some (probably outdated) drbd module EXTRA_DRBD_KO=/lib/modules/%{kernelversion}/extra/drbd.ko if test -e $EXTRA_DRBD_KO; then mv $EXTRA_DRBD_KO $EXTRA_DRBD_KO.orig fi chkconfig --add drbd for i in `seq 0 15` ; do test -b /dev/drbd$i || mknod -m 0660 /dev/drbd$i b 147 $i; done %preun if type -p service ; then service drbd stop fi if type -p rcdrbd ; then rcdrbd stop fi lsmod | grep drbd > /dev/null 2>&1 if [ $? -eq 0 ]; then rmmod drbd fi if [ $1 -eq 0 ]; then chkconfig --del drbd fi #%post -n kernel%{?ksmp}-module-drbd %post km-%{krelver} # hack for distribution kernel packages, # which already contain some (probably outdated) drbd module EXTRA_DRBD_KO=/lib/modules/%{kernelversion}/extra/drbd.ko if test -e $EXTRA_DRBD_KO; then mv $EXTRA_DRBD_KO $EXTRA_DRBD_KO.orig fi uname -r | grep BOOT || /sbin/depmod -a -F /boot/System.map-%{kernelversion} %{kernelversion} >/dev/null 2>&1 || true #%postun -n kernel%{?ksmp}-module-drbd %postun km-%{krelver} /sbin/depmod -a -F /boot/System.map-%{kernelversion} %{kernelversion} >/dev/null 2>&1 || true %changelog