diff --git a/Makefile b/Makefile index d3f42b76c..8c40d0e5d 100644 --- a/Makefile +++ b/Makefile @@ -405,9 +405,25 @@ scst-rpm: for d in BUILD RPMS SOURCES SPECS SRPMS; do \ mkdir -p $${rpmtopdir}/$$d; \ done && \ - cp $${name}-$(VERSION).tar.bz2 $${rpmtopdir}/SOURCES && \ + cp scst-$(VERSION).tar.bz2 $${rpmtopdir}/SOURCES && \ sed "s/@rpm_version@/$(VERSION)/g" \ - <$${name}.spec.in >$${name}.spec; \ + <$${name}.spec.in >$${name}.spec && \ + MAKE="$(MAKE)" rpmbuild --define="%_topdir $${rpmtopdir}" \ + $(if $(KVER),--define="%kversion $(KVER)") \ + -ba $${name}.spec && \ + rm -f $${name}-$(VERSION).tar.bz2 + +scst-dkms-rpm: + name=scst-dkms && \ + rpmtopdir="$$(if [ $$(id -u) = 0 ]; then echo /usr/src/packages;\ + else echo $$PWD/rpmbuilddir; fi)" && \ + $(MAKE) scst-dist-gzip && \ + for d in BUILD RPMS SOURCES SPECS SRPMS; do \ + mkdir -p $${rpmtopdir}/$$d; \ + done && \ + cp scst-$(VERSION).tar.bz2 $${rpmtopdir}/SOURCES && \ + sed "s/@rpm_version@/$(VERSION)/g" \ + <$${name}.spec.in >$${name}.spec && \ MAKE="$(MAKE)" rpmbuild --define="%_topdir $${rpmtopdir}" \ $(if $(KVER),--define="%kversion $(KVER)") \ -ba $${name}.spec && \ diff --git a/scst-dkms.spec.in b/scst-dkms.spec.in new file mode 100644 index 000000000..ea33b642f --- /dev/null +++ b/scst-dkms.spec.in @@ -0,0 +1,248 @@ +%define kmod_name scst +# kversion: Kernel version as it appears under /lib/modules. +# The algorithm for setting the variable kversion is as follows: +# - If the variable kversion has been set, use its value. +# - If an RPM with the name kernel-headers exists (RHEL / CentOS), use the +# version number of the kernel that package is based on. This provides the +# version number when building on a koji build server. +# - Otherwise use the version number of the running kernel. +%{!?kversion:%define kversion %{expand:%%( + if rpm --quiet -q kernel-headers; then + rpm -q --qf '%%%%{version}-%%%%{release}.%%%%{arch}\\n' \\ + kernel-headers | head -n1; + else + uname -r; + fi + )}} +%{echo:kversion=%{kversion} +} +# kernel_rpm: Name of the kernel RPM if the kernel is available as an RPM. +%if %{expand:%%(rpm --quiet -q kernel-headers || + rpm --quiet -qf /lib/modules/%{kversion}/kernel/arch 2>/dev/null; + echo $((1-$?)))} +%define kernel_rpm %{expand:%%( + if rpm --quiet -q kernel-headers; then + echo kernel; + else + rpm -q --qf '%%%%{name}\\n' \\ + "$(rpm -qf /lib/modules/%%{kversion}/kernel/arch | head -n1)"; + fi + )} +%endif +# krpmver: Version of the kernel RPM. Not necessarily identical to %{kversion}. +%{?kernel_rpm:%define krpmver %{expand:%%( + if rpm --quiet -q %%{kernel_rpm}; then + rpm -q --qf '%%%%{version}-%%%%{release}\\n' "%%{kernel_rpm}"; + else + rpm -q --qf '%%%%{version}-%%%%{release}\\n' kernel-headers; + fi | + head -n1 + )}} +%{echo:krpmver=%{krpmver} +} +# kernel_devel_rpm: Name of the kernel development RPM. +%{?kernel_rpm:%define kernel_devel_rpm %{kernel_rpm}-devel} +# Version of the RPM that is being built. +%define rpm_version @rpm_version@ +# Make command with or without flags. +%define make %{expand:%%(echo ${MAKE:-make})} +%define pkgrel 1 +%define dkms_version %{rpm_version}-%{pkgrel}%{?dist} + +Name: %{kmod_name}-dkms +Version: %{rpm_version} +Release: %{pkgrel}%{?dist} +Summary: SCST mid-layer kernel drivers +Group: System/Kernel +License: GPLv2 +Vendor: http://scst.sourceforge.net/ +URL: http://scst.sourceforge.net/ +# Unfortunately the Red Hat / CentOS kernel-debug-devel RPM provides +# kernel-devel so a workaround is needed to match the kernel-devel RPM. +BuildRequires: %{?kernel_rpm:%{kernel_rpm} = %{krpmver} %{kernel_devel_rpm} = %{krpmver}} gcc make + +Source: %{kmod_name}-%{version}.tar.bz2 +BuildRoot: %{_tmppath}/%{name}-%{version}-build +AutoReqProv: no + +%description +A generic SCSI target subsystem for Linux that allows to convert any Linux +server into a sophisticated storage server. The three layers in SCST are the +target driver layer; the SCSI target core and the device handler layer. SCST +target drivers realize communication with an initiator and implement a storage +protocol like iSCSI, FC or SRP. SCST device handlers implement a SCSI +interface on top of local storage. Examples of such local storage are SCSI +RAID controller (dev_disk handler), block device (vdisk_blockio handler), file +(vdisk_fileio handler) or custom block device behavior implemented in user +space (scst_user). + +Authors: +-------- + Vladislav Bolkhovitin, Bart Van Assche and others + +%package devel +Summary: SCST mid-layer kernel driver development package +Group: Development/Kernel +BuildArch: noarch + +%description devel +A generic SCSI target subsystem for Linux (SCST) that allows to convert +any Linux server into a sophisticated storage server. SCST target drivers +implement protocols like iSCSI, FC or SRP. SCST device handlers either +provide access to a local SCSI RAID controller (dev_disk), block device +(vdisk_blockio), file (vdisk_fileio) or custom block device behavior +implemented in user space (scst_user). + +Authors: +-------- + Vladislav Bolkhovitin, Bart Van Assche and others + +%package userspace +Summary: SCST mid-layer user space software +Group: Development/Kernel +Requires: scst-dkms + +%description userspace +A generic SCSI target subsystem for Linux that allows to convert any Linux +server into a sophisticated storage server. The three layers in SCST are the +target driver layer; the SCSI target core and the device handler layer. SCST +target drivers realize communication with an initiator and implement a storage +protocol like iSCSI, FC or SRP. SCST device handlers implement a SCSI +interface on top of local storage. Examples of such local storage are SCSI +RAID controller (dev_disk handler), block device (vdisk_blockio handler), file +(vdisk_fileio handler) or custom block device behavior implemented in user +space (scst_user). + +%prep + +%setup -q -n %{kmod_name}-%{version} + +%build +export KVER=%{kversion} PREFIX=%{_prefix} +export BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y +for d in scst fcst iscsi-scst qla2x00t/qla2x00-target scst_local srpt; do + %{make} -C $d +done + +%install +export KVER=%{kversion} PREFIX=%{_prefix} MANDIR=%{_mandir} +export BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y +for d in scst; do + DESTDIR=%{buildroot} %{make} -C $d install +done +for d in fcst iscsi-scst qla2x00t/qla2x00-target scst_local srpt; do + DESTDIR=%{buildroot} INSTALL_MOD_PATH=%{buildroot} %{make} -C $d install +done +rm -f %{buildroot}/lib/modules/%{kversion}/[Mm]odule* +rm -rf %{buildroot}/lib/modules/%{kversion}/extra + +install -d -m 755 %{buildroot}/usr/src/%{kmod_name}-%{dkms_version} +( + cd %{buildroot}/usr/src/%{kmod_name}-%{dkms_version} && + tar --strip-components=1 -xaf %{SOURCE0} +) +cat >%{buildroot}/usr/src/%{kmod_name}-%{dkms_version}/dkms.conf <<"EOF" +PACKAGE_VERSION="%{dkms_version}" +PACKAGE_NAME="%{kmod_name}" +AUTOINSTALL=yes +MAKE[0]="export KVER=${kernelver} KDIR=${kernel_source_dir} BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y && make -sC scst && make -sC fcst && make -sC iscsi-scst && make -sC qla2x00t/qla2x00-target && make -sC scst_local && make -sC srpt && cp */*.ko */*/*.ko */*/*/*.ko ." +CLEAN="make clean" +# Remove any existing ib_srpt.ko kernel modules +PRE_INSTALL="find /lib/modules/${kernelver} -name ib_srpt.ko -exec rm {} \;" +BUILT_MODULE_NAME[ 0]="fcst" +BUILT_MODULE_NAME[ 1]="ib_srpt" +BUILT_MODULE_NAME[ 2]="iscsi-scst" +BUILT_MODULE_NAME[ 3]="qla2x00tgt" +BUILT_MODULE_NAME[ 4]="qla2xxx_scst" +BUILT_MODULE_NAME[ 5]="scst" +BUILT_MODULE_NAME[ 6]="scst_local" +BUILT_MODULE_NAME[ 7]="scst_cdrom" +BUILT_MODULE_NAME[ 8]="scst_changer" +BUILT_MODULE_NAME[ 9]="scst_disk" +BUILT_MODULE_NAME[10]="scst_modisk" +BUILT_MODULE_NAME[11]="scst_processor" +BUILT_MODULE_NAME[12]="scst_raid" +BUILT_MODULE_NAME[13]="scst_tape" +BUILT_MODULE_NAME[14]="scst_user" +BUILT_MODULE_NAME[15]="scst_vdisk" +DEST_MODULE_LOCATION[ 0]="/extra" +DEST_MODULE_LOCATION[ 1]="/extra" +DEST_MODULE_LOCATION[ 2]="/extra" +DEST_MODULE_LOCATION[ 3]="/extra" +DEST_MODULE_LOCATION[ 4]="/extra" +DEST_MODULE_LOCATION[ 5]="/extra" +DEST_MODULE_LOCATION[ 6]="/extra" +DEST_MODULE_LOCATION[ 7]="/extra/dev_handlers" +DEST_MODULE_LOCATION[ 8]="/extra/dev_handlers" +DEST_MODULE_LOCATION[ 9]="/extra/dev_handlers" +DEST_MODULE_LOCATION[10]="/extra/dev_handlers" +DEST_MODULE_LOCATION[11]="/extra/dev_handlers" +DEST_MODULE_LOCATION[12]="/extra/dev_handlers" +DEST_MODULE_LOCATION[13]="/extra/dev_handlers" +DEST_MODULE_LOCATION[14]="/extra/dev_handlers" +DEST_MODULE_LOCATION[15]="/extra/dev_handlers" +EOF + +%clean +rm -rf %{buildroot} + +%pre +# Remove any existing ib_srpt.ko kernel modules +find /lib/modules/%{kversion} -name ib_srpt.ko -exec rm {} \; +# Remove files installed by "make install" +rm -f /usr/local/man/man5/iscsi-scstd.conf.5 +rm -f /usr/local/man/man8/iscsi-scst-adm.8 +rm -f /usr/local/man/man8/iscsi-scstd.8 +rm -f /usr/local/sbin/iscsi-scst-adm +rm -f /usr/local/sbin/iscsi-scstd +rm -rf /usr/local/include/scst + +%pre userspace +# Remove files installed by "make install" +rm -f /usr/local/man/man5/iscsi-scstd.conf.5 +rm -f /usr/local/man/man8/iscsi-scst-adm.8 +rm -f /usr/local/man/man8/iscsi-scstd.8 +rm -f /usr/local/sbin/iscsi-scst-adm +rm -f /usr/local/sbin/iscsi-scstd +rm -rf /usr/local/include/scst + +%post +dkms add -m %{kmod_name} -v %{dkms_version} --rpm_safe_upgrade +dkms build -m %{kmod_name} -v %{dkms_version} +dkms install -m %{kmod_name} -v %{dkms_version} + +%preun +dkms remove -m %{kmod_name} -v %{dkms_version} --rpm_safe_upgrade --all +true + +%files +%defattr(-,root,root) +/usr/src/%{kmod_name}-%{dkms_version}/ + +%files userspace +%{_mandir}/man5/iscsi-scstd.conf.5.gz +%{_mandir}/man8/iscsi-scst-adm.8.gz +%{_mandir}/man8/iscsi-scstd.8.gz +%{_sbindir}/iscsi-scst-adm +%{_sbindir}/iscsi-scstd +%dir /var/lib/scst/pr +%dir /var/lib/scst/vdev_mode_pages + +%files devel +%defattr(-,root,root) +%dir /usr/include/scst +/usr/include/scst/Module.symvers +/usr/include/scst/scst.h +/usr/include/scst/scst_const.h +/usr/include/scst/scst_debug.h +/usr/include/scst/scst_itf_ver.h +/usr/include/scst/scst_sgv.h +/usr/include/scst/scst_user.h + +%changelog +* Mon Feb 23 2015 Bart Van Assche +- Split spec file into a non-DKMS and a DKMS spec file. +* Fri Jan 16 2015 Bart Van Assche +- Added DKMS support. +* Fri Nov 22 2013 Bart Van Assche +- Initial spec file. diff --git a/scst.spec.in b/scst.spec.in index 538974ccd..6ad861f1f 100644 --- a/scst.spec.in +++ b/scst.spec.in @@ -8,8 +8,8 @@ # - Otherwise use the version number of the running kernel. %{!?kversion:%define kversion %{expand:%%( if rpm --quiet -q kernel-headers; then - rpm -q --qf '%%%%{version}-%%%%{release}.%%%%{arch}' \\ - kernel-headers; + rpm -q --qf '%%%%{version}-%%%%{release}.%%%%{arch}\\n' \\ + kernel-headers | head -n1; else uname -r; fi @@ -47,9 +47,8 @@ # Make command with or without flags. %define make %{expand:%%(echo ${MAKE:-make})} %define pkgrel 1 -%define dkms_version %{rpm_version}-%{pkgrel}%{?dist} -Name: %{kmod_name} +Name: %{kmod_name}-%{kversion} Version: %{rpm_version} Release: %{pkgrel}%{?dist} Summary: SCST mid-layer kernel drivers @@ -57,9 +56,9 @@ Group: System/Kernel License: GPLv2 Vendor: http://scst.sourceforge.net/ URL: http://scst.sourceforge.net/ +%{?kernel_rpm:Requires: %{kernel_rpm} = %{krpmver}} # Unfortunately the Red Hat / CentOS kernel-debug-devel RPM provides # kernel-devel so a workaround is needed to match the kernel-devel RPM. -%{?kernel_rpm:Requires: %{kernel_rpm} = %{krpmver}} BuildRequires: %{?kernel_rpm:%{kernel_rpm} = %{krpmver} %{kernel_devel_rpm} = %{krpmver}} gcc make Source: %{kmod_name}-%{version}.tar.bz2 @@ -81,22 +80,6 @@ Authors: -------- Vladislav Bolkhovitin, Bart Van Assche and others -%package userspace -Summary: SCST mid-layer user space software -Group: Development/Kernel -Requires: scst-dkms - -%description userspace -A generic SCSI target subsystem for Linux that allows to convert any Linux -server into a sophisticated storage server. The three layers in SCST are the -target driver layer; the SCSI target core and the device handler layer. SCST -target drivers realize communication with an initiator and implement a storage -protocol like iSCSI, FC or SRP. SCST device handlers implement a SCSI -interface on top of local storage. Examples of such local storage are SCSI -RAID controller (dev_disk handler), block device (vdisk_blockio handler), file -(vdisk_fileio handler) or custom block device behavior implemented in user -space (scst_user). - %package devel Summary: SCST mid-layer kernel driver development package Group: Development/Kernel @@ -110,25 +93,6 @@ provide access to a local SCSI RAID controller (dev_disk), block device (vdisk_blockio), file (vdisk_fileio) or custom block device behavior implemented in user space (scst_user). -Authors: --------- - Vladislav Bolkhovitin, Bart Van Assche and others - -%package dkms -Summary: DKMS-enabled SCST source code package -Group: System/Kernel -BuildArch: noarch -Requires(pre): dkms gcc make -Requires(post): dkms - -%description dkms -A generic SCSI target subsystem for Linux (SCST) that allows to convert -any Linux server into a sophisticated storage server. SCST target drivers -implement protocols like iSCSI, FC or SRP. SCST device handlers either -provide access to a local SCSI RAID controller (dev_disk), block device -(vdisk_blockio), file (vdisk_fileio) or custom block device behavior -implemented in user space (scst_user). - Authors: -------- Vladislav Bolkhovitin, Bart Van Assche and others @@ -155,53 +119,6 @@ for d in fcst iscsi-scst qla2x00t/qla2x00-target scst_local srpt; do done rm -f %{buildroot}/lib/modules/%{kversion}/[Mm]odule* -install -d -m 755 %{buildroot}/usr/src/%{kmod_name}-%{dkms_version} -( - cd %{buildroot}/usr/src/%{kmod_name}-%{dkms_version} && - tar --strip-components=1 -xaf %{SOURCE0} -) -cat >%{buildroot}/usr/src/%{kmod_name}-%{dkms_version}/dkms.conf <<"EOF" -PACKAGE_VERSION="%{dkms_version}" -PACKAGE_NAME="%{kmod_name}" -AUTOINSTALL=yes -MAKE[0]="export KVER=${kernelver} KDIR=${kernel_source_dir} BUILD_2X_MODULE=y CONFIG_SCSI_QLA_FC=y CONFIG_SCSI_QLA2XXX_TARGET=y && make -sC scst && make -sC fcst && make -sC iscsi-scst && make -sC qla2x00t/qla2x00-target && make -sC scst_local && make -sC srpt && cp */*.ko */*/*.ko */*/*/*.ko ." -CLEAN="make clean" -# Remove any existing ib_srpt.ko kernel modules -PRE_INSTALL="find /lib/modules/${kernelver} -name ib_srpt.ko -exec rm {} \;" -BUILT_MODULE_NAME[ 0]="fcst" -BUILT_MODULE_NAME[ 1]="ib_srpt" -BUILT_MODULE_NAME[ 2]="iscsi-scst" -BUILT_MODULE_NAME[ 3]="qla2x00tgt" -BUILT_MODULE_NAME[ 4]="qla2xxx_scst" -BUILT_MODULE_NAME[ 5]="scst" -BUILT_MODULE_NAME[ 6]="scst_local" -BUILT_MODULE_NAME[ 7]="scst_cdrom" -BUILT_MODULE_NAME[ 8]="scst_changer" -BUILT_MODULE_NAME[ 9]="scst_disk" -BUILT_MODULE_NAME[10]="scst_modisk" -BUILT_MODULE_NAME[11]="scst_processor" -BUILT_MODULE_NAME[12]="scst_raid" -BUILT_MODULE_NAME[13]="scst_tape" -BUILT_MODULE_NAME[14]="scst_user" -BUILT_MODULE_NAME[15]="scst_vdisk" -DEST_MODULE_LOCATION[ 0]="/extra" -DEST_MODULE_LOCATION[ 1]="/extra" -DEST_MODULE_LOCATION[ 2]="/extra" -DEST_MODULE_LOCATION[ 3]="/extra" -DEST_MODULE_LOCATION[ 4]="/extra" -DEST_MODULE_LOCATION[ 5]="/extra" -DEST_MODULE_LOCATION[ 6]="/extra" -DEST_MODULE_LOCATION[ 7]="/extra/dev_handlers" -DEST_MODULE_LOCATION[ 8]="/extra/dev_handlers" -DEST_MODULE_LOCATION[ 9]="/extra/dev_handlers" -DEST_MODULE_LOCATION[10]="/extra/dev_handlers" -DEST_MODULE_LOCATION[11]="/extra/dev_handlers" -DEST_MODULE_LOCATION[12]="/extra/dev_handlers" -DEST_MODULE_LOCATION[13]="/extra/dev_handlers" -DEST_MODULE_LOCATION[14]="/extra/dev_handlers" -DEST_MODULE_LOCATION[15]="/extra/dev_handlers" -EOF - %clean rm -rf %{buildroot} @@ -215,9 +132,6 @@ rm -f /usr/local/man/man8/iscsi-scstd.8 rm -f /usr/local/sbin/iscsi-scst-adm rm -f /usr/local/sbin/iscsi-scstd rm -rf /usr/local/include/scst - -%pre userspace -# Remove files installed by "make install" rm -f /usr/local/man/man5/iscsi-scstd.conf.5 rm -f /usr/local/man/man8/iscsi-scst-adm.8 rm -f /usr/local/man/man8/iscsi-scstd.8 @@ -228,15 +142,6 @@ rm -rf /usr/local/include/scst %post /sbin/depmod -a %{kversion} -%post dkms -dkms add -m %{kmod_name} -v %{dkms_version} --rpm_safe_upgrade -dkms build -m %{kmod_name} -v %{dkms_version} -dkms install -m %{kmod_name} -v %{dkms_version} - -%preun dkms -dkms remove -m %{kmod_name} -v %{dkms_version} --rpm_safe_upgrade --all -true - %files %defattr(-,root,root) %dir /lib/modules/%{kversion}/extra @@ -264,8 +169,6 @@ true %{_sbindir}/iscsi-scstd %dir /var/lib/scst/pr %dir /var/lib/scst/vdev_mode_pages - -%files userspace %{_mandir}/man5/iscsi-scstd.conf.5.gz %{_mandir}/man8/iscsi-scst-adm.8.gz %{_mandir}/man8/iscsi-scstd.8.gz @@ -285,11 +188,9 @@ true /usr/include/scst/scst_sgv.h /usr/include/scst/scst_user.h -%files dkms -%defattr(-,root,root) -/usr/src/%{kmod_name}-%{dkms_version}/ - %changelog +* Mon Feb 23 2015 Bart Van Assche +- Split spec file into a non-DKMS and a DKMS spec file. * Fri Jan 16 2015 Bart Van Assche - Added DKMS support. * Fri Nov 22 2013 Bart Van Assche