%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.