--- /dev/null
+--- mptlinux.spec.dist 2008-11-07 02:16:26.000000000 -0500
++++ mptlinux.spec 2009-12-01 14:17:11.000000000 -0500
+@@ -1,13 +1,15 @@
++%{!?kernel_obj: %define kernel_obj ""}
++
+ %define name mptlinux
+ %define version 4.18.20.04
+-%define release 1
+-Summary: MPT Fusion drivers for 53C1030, FC9XX, and SAS Adapters
++%define release 1sun1
++Summary: Common files for the MPT Fusion drivers for 53C1030, FC9XX, and SAS Adapters
+ Name: %{name}
+ Version: %{version}
+ Release: %{release}
+ Vendor: LSI Logic
+ License: GPL
+-Group: System Environment/Kernel
++Group: Utilities/System
+ Source0: %{name}-%{version}.tar.gz
+ Source1: fusion.mptctl
+ URL: http://www.lsilogic.com
+@@ -22,238 +24,274 @@
+ Fibre Channel FC909, FC919, FC929, FC919X, FC929X, and FC949X adapters
+ SAS SAS1064, SAS1068, and SAS1078 adapters.
+
++This package contains the common file(s).
++
++%package modules
++Summary: Kernel modules for the MPT Fusion drivers for 53C1030, FC9XX, and SAS Adapters
++Group: System Environment/Kernel
++Requires: mptlinux
++
++%description modules
++Drivers for (suse i686, x86_64, ia64 and updates) for the
++LSI Logic Fusion-MPT Architecture parts.
++These include the Ultra320 53C1030 and 53C1020 adapters.
++Fibre Channel FC909, FC919, FC929, FC919X, FC929X, and FC949X adapters
++SAS SAS1064, SAS1068, and SAS1078 adapters.
++
++This package contains the drivers.
++
+ # prep #########################################################################
+ %prep
++#exit 0
+ echo prep %{version}
+-%setup -c -b 0
++%setup -c
+
+ # build ########################################################################
+ %build
++#exit 0
+ echo build %{version}
++if [ "%{kernel_obj}" != "" ]; then
++ # dig the version out of the tree
++ LINUXRELEASEHEADER=%{kernel_obj}/include/linux/version.h
++ if [ -s %{kernel_obj}/include/linux/utsrelease.h ]; then
++ LINUXRELEASEHEADER=%{kernel_obj}/include/linux/utsrelease.h
++ fi
++ LINUXRELEASE=$(sed -ne 's/#define UTS_RELEASE "\(.*\)"$/\1/p' $LINUXRELEASEHEADER)
++
++ make build LINUX=%{kernel_obj} KERNEL=$LINUXRELEASE
++else
+ for i in /lib/modules/2.6.*; do
+- kernel=`basename ${i}`;
++ kernel=`basename ${i}`
+ if [ -f /lib/modules/${kernel}/source/drivers/message/fusion/Kconfig ]; then
+- make build KERNEL=$kernel;
+- fi;
+-done;
++ make build KERNEL=$kernel
++ fi
++done
++fi
+
+ # install ######################################################################
+ %install
+ echo install %{version}
+ echo "%defattr(-,root,root)" > $RPM_BUILD_DIR/file.list.%{name}
++echo "%defattr(-,root,root)" > $RPM_BUILD_DIR/file.list.%{name}-modules
+ echo "/etc/init.d/fusion.mptctl" >> $RPM_BUILD_DIR/file.list.%{name}
+ mkdir -p $RPM_BUILD_ROOT/etc/init.d
+-cp -rf $RPM_SOURCE_DIR/fusion.mptctl $RPM_BUILD_ROOT/etc/init.d
++cp -f $RPM_SOURCE_DIR/fusion.mptctl $RPM_BUILD_ROOT/etc/init.d
++if [ "%{kernel_obj}" != "" ]; then
++ # dig the version out of the tree
++ LINUXRELEASEHEADER=%{kernel_obj}/include/linux/version.h
++ if [ -s %{kernel_obj}/include/linux/utsrelease.h ]; then
++ LINUXRELEASEHEADER=%{kernel_obj}/include/linux/utsrelease.h
++ fi
++ kernel="$(sed -ne 's/#define UTS_RELEASE "\(.*\)"$/\1/p' $LINUXRELEASEHEADER)"
++
++ #if [ ! -e /lib/modules/${kernel}/source/drivers/message/fusion/Kconfig ]; then
++ # continue
++ #fi
++ MPTLINUX_IPATH=/lib/modules/${kernel}/updates/drivers/message/fusion
++ mkdir -p $RPM_BUILD_ROOT/lib/modules/${kernel}/{kernel,updates}/drivers/message/fusion
++
++ # create the file list used in %files to indicate which files are in package
++ for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
++ echo "$MPTLINUX_IPATH/${driver_name}" >> $RPM_BUILD_DIR/file.list.%{name}-modules
++ done
++
++ make install PREFIX=$RPM_BUILD_ROOT LINUX=%{kernel_obj} KERNEL=$kernel
++ # the Makefile hardcodes the destination path to
++ # $(PREFIX)/lib/modules/$(KERNEL)/kernel/drivers/message/fusion
++ # so lets move these to where they really go
++ # ideally, the Makefile should take this location as an (optional if you
++ # wish) argument
++ mv -f $RPM_BUILD_ROOT/lib/modules/${kernel}/kernel/drivers/message/fusion/* \
++ $RPM_BUILD_ROOT/$MPTLINUX_IPATH/
++else
+ for i in /lib/modules/2.6.*; do
+ kernel=`basename ${i}`
+ if [ ! -e /lib/modules/${kernel}/source/drivers/message/fusion/Kconfig ]; then
+- continue;
+- fi;
+- MPTLINUX_IPATH=/lib/modules/${kernel}/kernel/drivers/message/fusion
+- mkdir -p $RPM_BUILD_ROOT/lib/modules/${kernel}/kernel/drivers/message/fusion
++ continue
++ fi
++ MPTLINUX_IPATH=/lib/modules/${kernel}/updates/drivers/message/fusion
++ mkdir -p $RPM_BUILD_ROOT/lib/modules/${kernel}/{kernel,updates}/drivers/message/fusion
+
+ # create the file list used in %files to indicate which files are in package
+ for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
+- echo "$MPTLINUX_IPATH/${driver_name}.new" >> $RPM_BUILD_DIR/file.list.%{name}
+- done;
++ echo "$MPTLINUX_IPATH/${driver_name}" >> $RPM_BUILD_DIR/file.list.%{name}-modules
++ done
+
+ make install PREFIX=$RPM_BUILD_ROOT KERNEL=$kernel
+-
+- for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
+- mv -f $RPM_BUILD_ROOT/$MPTLINUX_IPATH/${driver_name} \
+- $RPM_BUILD_ROOT/$MPTLINUX_IPATH/${driver_name}.new
+- done;
+-done;
+-
+-# pre #########################################################################
+-%pre
+-echo pre %{version}
+-system_arch=`uname -m`
+-if [ -f /etc/SuSE-release ] && [ ${system_arch} == i686 ]; then
+- system_arch=i586;
+-fi;
+-if [ %{_target_cpu} != ${system_arch} ]; then
+- echo "ERROR: Failed installing this rpm!!!!"
+- echo "This rpm is intended for %{_target_cpu} platform. It seems your system is ${system_arch}.";
+- exit 1;
+-fi;
++ # the Makefile hardcodes the destination path to
++ # $(PREFIX)/lib/modules/$(KERNEL)/kernel/drivers/message/fusion
++ # so lets move these to where they really go
++ # ideally, the Makefile should take this location as an (optional if you
++ # wish) argument
++ mv -f $RPM_BUILD_ROOT/lib/modules/${kernel}/kernel/drivers/message/fusion/* \
++ $RPM_BUILD_ROOT/$MPTLINUX_IPATH/
++done
++fi
+
+ # post #########################################################################
+-%post
++%post modules
+ echo post %{version}
+ chkconfig fusion.mptctl --add >/dev/null 2>&1
+ if [ -f /etc/redhat-release ]; then
+ # RHEL 4
+- if [ -f /etc/modprobe.conf ] ; then
+- cp /etc/modprobe.conf /etc/modprobe.conf.orig.%{version};
+- sed -e '/mptbase/d' /etc/modprobe.conf > modprobe.edit;
+- sed -e '/mptscsih/d' modprobe.edit > modprobe.edit.1;
+- sed -e '/mptspi/d' modprobe.edit.1 > modprobe.edit.2;
+- sed -e '/mptfc/d' modprobe.edit.2 > modprobe.edit.3;
+- sed -e '/mptsas/d' modprobe.edit.3 > modprobe.edit;
+- echo "alias scsi_hostadapter mptspi" >> modprobe.edit;
+- echo "alias scsi_hostadapter1 mptfc" >> modprobe.edit;
+- echo "alias scsi_hostadapter2 mptsas" >> modprobe.edit;
+- mv -f modprobe.edit /etc/modprobe.conf;
+- rm -fr modprobe.edit.*;
+- fi;
++ # per the comments below, i can't see any modprobe.conf editing here that's
++ # valid
++ #if [ -f /etc/modprobe.conf ] ; then
++ # cp /etc/modprobe.conf /etc/modprobe.conf.orig.mptlinux-%{version}
++ # i don't think this is kosher. what sort of entries are
++ # being deleted here?
++ #sed -e '/mptbase/d' -e '/mptscsih/d' -e '/mptspi/d' \
++ # -e '/mptfc/d' -e '/mptsas/d' /etc/modprobe.conf > /etc/modprobe.edit
++ # this really isn't kosher. you can't assume that the
++ # administrator has not already defined the scsi_hostadapter
++ # aliases for some other HBA that's already in the system
++ #echo "alias scsi_hostadapter mptspi" >> /etc/modprobe.edit
++ #echo "alias scsi_hostadapter1 mptfc" >> /etc/modprobe.edit
++ #echo "alias scsi_hostadapter2 mptsas" >> /etc/modprobe.edit
++ #mv -f /etc/modprobe.edit /etc/modprobe.conf
++ #fi
++ :
+ elif [ -f /etc/SuSE-release ]; then
+ # SLES 9
+ if [ -f /etc/sysconfig/kernel ] ; then
+- cp /etc/sysconfig/kernel /etc/sysconfig/kernel.orig.%{version};
+- sed -e 's/mptscsih//g' /etc/sysconfig/kernel > kernel.edit;
+- sed -e 's/mptsas//g' kernel.edit > kernel.edit.1;
+- sed -e 's/mptfc//g' kernel.edit.1 > kernel.edit.2;
+- sed -e 's/mptspi//g' kernel.edit.2 > kernel.edit.3;
+- sed -e 's/INITRD_MODULES="/INITRD_MODULES="mptsas /g' kernel.edit.3 > kernel.edit.4;
+- sed -e 's/INITRD_MODULES="/INITRD_MODULES="mptfc /g' kernel.edit.4 > kernel.edit.5;
+- sed -e 's/INITRD_MODULES="/INITRD_MODULES="mptspi /g' kernel.edit.5 > kernel.edit;
+- mv -f kernel.edit /etc/sysconfig/kernel;
+- rm -fr kernel.edit.*;
+- fi;
++ cp /etc/sysconfig/kernel /etc/sysconfig/kernel.orig.mptlinux-%{version}
++ sed -e 's/mptscsih//g' -e 's/mptsas//g' -e 's/mptfc//g' \
++ -e 's/mptspi//g' \
++ -e 's/INITRD_MODULES="/INITRD_MODULES="mptsas /g' \
++ -e 's/INITRD_MODULES="/INITRD_MODULES="mptfc /g' \
++ -e 's/INITRD_MODULES="/INITRD_MODULES="mptspi /g' \
++ /etc/sysconfig/kernel > /etc/sysconfig/kernel.edit
++ mv -f /etc/sysconfig/kernel.edit /etc/sysconfig/kernel
++ fi
+ fi
+
+ # adding device nodes
+ if [ ! -e /dev/mptctl ]; then
+- echo "Creating /dev/mptctl ioctl node file";
+- mknod /dev/mptctl c 10 220;
+-fi;
++ echo "Creating /dev/mptctl ioctl node file"
++ mknod /dev/mptctl c 10 220
++fi
+
++# i think this is wrong. we should not muck around with kernels we did not
++# install new drivers into. but how to determine which kernels those are?
++# maybe look for the new driver in the /lib/modules/*/updates tree?
+ for i in /lib/modules/2.6.*; do
+- kernel=`basename ${i}`;
+- MPTLINUX_IPATH=/lib/modules/${kernel}/kernel/drivers/message/fusion
+- if [ ! -e $MPTLINUX_IPATH/mptbase.ko ] || \
+- [ ! -e $MPTLINUX_IPATH/mptbase.ko.new ]; then
+- continue;
+- fi;
++ kernel=`basename ${i}`
+
+ if [ -f /etc/SuSE-release ] &&
+ [ ! -e /boot/initrd-${kernel} ]; then
+- continue;
+- fi;
++ continue
++ fi
+
+- echo "The mpt driver for kernel ${kernel} is now version 4.18.20.04";
+- #backup original fusion drivers here if not already done
+- for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
+- if [ ! -e $MPTLINUX_IPATH/${driver_name}.orig ]; then
+- cp $MPTLINUX_IPATH/${driver_name} \
+- $MPTLINUX_IPATH/${driver_name}.orig
+- fi;
+- cp -f $MPTLINUX_IPATH/${driver_name}.new $MPTLINUX_IPATH/${driver_name}
+- done;
++ echo "The mpt driver for kernel ${kernel} is now version 4.18.20.04"
+ # Remake the initrd image for the user, depending on their OS
+ if [ -f /etc/redhat-release ]; then
+-
+- # taking care of dud migration, by moving all the ko's to ko.orig
+- for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
+- MPTLINUX_IPATH=/lib/modules/${kernel}/updates
+- if [ -e $MPTLINUX_IPATH/${driver_name} ]; then
+- mv $MPTLINUX_IPATH/${driver_name} \
+- $MPTLINUX_IPATH/${driver_name}.orig
+- fi;
+- # to handle kmods partially need to handle week updates
+- MPTLINUX_KPATH=/lib/modules/${kernel}/extra/mptbase
+- if [ -e $MPTLINUX_KPATH/${driver_name} ]; then
+- mv $MPTLINUX_KPATH/${driver_name} \
+- $MPTLINUX_KPATH/${driver_name}.orig
+- fi;
+- done;
+-
+ # RHEL 4
+ if [ -d /boot/efi/efi/redhat ]; then
+- bootpart=/boot/efi/efi/redhat;
++ bootpart=/boot/efi/efi/redhat
+ elif [ -d /boot/efi ]; then
+- bootpart=/boot/efi;
++ bootpart=/boot/efi
+ else
+- bootpart=/boot;
++ bootpart=/boot
+ fi
+ if [ ! -e ${bootpart}/initrd-${kernel}.img.orig ]; then
+ echo Saving initrd-${kernel}.img in ${bootpart} directory.
+ cp ${bootpart}/initrd-${kernel}.img \
+- ${bootpart}/initrd-${kernel}.img.orig
+- fi;
++ ${bootpart}/initrd-${kernel}.img.orig.mptlinux-%{version}
++ fi
+ # Calling depmod
+- depmod -v ${kernel} > /dev/null 2>&1;
++ depmod -v ${kernel} > /dev/null 2>&1
+ mkinitrd -f ${bootpart}/initrd-${kernel}.img ${kernel}
+ elif [ -f /etc/SuSE-release ]; then
+ # SLES 9
+ if [ ! -e /boot/initrd-${kernel}.orig ]; then
+ echo Saving initrd-${kernel} in /boot directory.
+- cp /boot/initrd-${kernel} /boot/initrd-${kernel}.orig
+- fi;
++ cp /boot/initrd-${kernel} /boot/initrd-${kernel}.orig.mptlinux-%{version}
++ fi
+ # Calling depmod
+- depmod -v ${kernel} > /dev/null 2>&1;
++ depmod -v ${kernel} > /dev/null 2>&1
+ mk_initrd -k vmlinuz-${kernel} -i /boot/initrd-${kernel}
+- fi;
+-done;
++ fi
++done
+ echo -e "post Install Done."
+
+ # postun #######################################################################
+-%postun
++%postun modules
+ echo postun %{version}
+ for i in /lib/modules/2.6.*; do
+- kernel=`basename ${i}`;
+- MPTLINUX_IPATH=/lib/modules/${kernel}/kernel/drivers/message/fusion
+- if [ ! -e $MPTLINUX_IPATH/mptbase.ko ] || \
+- [ -e $MPTLINUX_IPATH/mptbase.ko.new ]; then
+- continue;
+- fi;
++ kernel=`basename ${i}`
++ MPTLINUX_IPATH=/lib/modules/${kernel}/updates/drivers/message/fusion
++ if [ ! -e $MPTLINUX_IPATH/mptbase.ko ]; then
++ continue
++ fi
+ if [ ! -e /etc/init.d/fusion.mptctl ]; then
++ # why are we only doing this if the fustion.mptctl file
++ # *doesn't* exist? running chkconfig on a file that doesn't
++ # exist is surely an error
++ #chkconfig fusion.mptctl --del >/dev/null 2>&1
++ :
++ else
+ chkconfig fusion.mptctl --del >/dev/null 2>&1
+- fi;
+- if [ -f /etc/modprobe.conf.orig ]; then
++ fi
++
++ if [ -f /etc/modprobe.conf.orig.mptlinux-%{version} ]; then
+ # RHEL 4
+- mv -f /etc/modprobe.conf.orig /etc/modprobe.conf;
+- elif [ -f /etc/sysconfig/kernel.orig ]; then
++ mv -f /etc/modprobe.conf.orig.mptlinux-%{version} /etc/modprobe.conf
++ elif [ -f /etc/sysconfig/kernel.orig.mptlinux-%{version} ]; then
+ # SLES 9
+- mv -f /etc/sysconfig/kernel.orig /etc/sysconfig/kernel;
+- fi;
+- for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
+- if [ -f $MPTLINUX_IPATH/${driver_name}.orig ]; then
+- mv -f $MPTLINUX_IPATH/${driver_name}.orig $MPTLINUX_IPATH/${driver_name}
+- fi;
+- done;
++ mv -f /etc/sysconfig/kernel.orig.mptlinux-%{version} /etc/sysconfig/kernel
++ fi
+ # restore original initrd images
++ # i don't think this is a good idea. lots of stuff may have happened
++ # to the system between the time this backup was made and now that
++ # renders the original initrd images useless now
++ # probably should just generate new ones
+ if [ -f /etc/redhat-release ]; then
+
+- # restoring the state of dud migration
+- for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
+- MPTLINUX_IPATH=/lib/modules/${kernel}/udpates
+- if [ -f $MPTLINUX_IPATH/${driver_name}.orig ]; then
+- mv -f $MPTLINUX_IPATH/${driver_name}.orig $MPTLINUX_IPATH/${driver_name}
+- fi;
+- MPTLINUX_KPATH=/lib/modules/${kernel}/extra/mptbase
+- if [ -e $MPTLINUX_KPATH/${driver_name}.orig ]; then
+- mv -f $MPTLINUX_KPATH/${driver_name}.orig $MPTLINUX_KPATH/${driver_name}
+- fi;
+- done;
+-
+ # RHEL 4
+ if [ -d /boot/efi/efi/redhat ]; then
+- bootpart=/boot/efi/efi/redhat;
++ bootpart=/boot/efi/efi/redhat
+ elif [ -d /boot/efi ]; then
+- bootpart=/boot/efi;
++ bootpart=/boot/efi
+ else
+- bootpart=/boot;
++ bootpart=/boot
+ fi
+- if [ -f ${bootpart}/initrd-${kernel}.img.orig ]; then
+- mv -f ${bootpart}/initrd-${kernel}.img.orig ${bootpart}/initrd-${kernel}.img;
+- fi;
++ #if [ -f ${bootpart}/initrd-${kernel}.img.orig.mptlinux-%{version} ]; then
++ # mv -f ${bootpart}/initrd-${kernel}.img.orig.mptlinux-%{version} ${bootpart}/initrd-${kernel}.img
++ #fi
++ # Calling depmod
++ depmod -v ${kernel} > /dev/null 2>&1
++ mkinitrd -f ${bootpart}/initrd-${kernel}.img ${kernel}
+ elif [ -f /etc/SuSE-release ]; then
+ # SLES 9
+- if [ -f /boot/initrd-${kernel}.orig ]; then
+- mv -f /boot/initrd-${kernel}.orig /boot/initrd-${kernel};
+- fi;
+- fi;
+- depmod -v ${kernel} > /dev/null 2>&1;
+-done;
++ #if [ -f /boot/initrd-${kernel}.orig.mptlinux-%{version} ]; then
++ # mv -f /boot/initrd-${kernel}.orig.mptlinux-%{version} /boot/initrd-${kernel}
++ #fi
++ # Calling depmod
++ depmod -v ${kernel} > /dev/null 2>&1
++ mk_initrd -k vmlinuz-${kernel} -i /boot/initrd-${kernel}
++ fi
++done
+ echo -e "Uninstall Done."
+
+ # files ########################################################################
+ %files -f ../file.list.%{name}
++%files modules -f ../file.list.%{name}-modules
+
+ # changelog ###################################################################
+ %changelog
++* Fri Jun 11 2010 Brian J. Murrell <brian.murrell@oracle.com>
++ - update to 4.18.20.04
++* Wed Oct 28 2009 Brian J. Murrell <Brian.Murrell@Sun.COM>
++ - split into modules and non-modules packages so that multiple
++ modules packages can be installed, for several kernels
++ - don't fiddle with files once RPM has installed them
++ - put modules into the updates tree under the modules dir, where
++ they belong
++ - don't use the "orig" initrd, but generate a new one on removal
++ + the orig initrd could very well no longer be suitable
++ - don't edit the modprobe.conf file as that's a job for the admin
++ + we really can't assume which other scsi_host_adapters are in
++ the machine and what position we are to take relative to them
+ * Tue Apr 24 2007 Eric Moore <Eric.Moore@lsi.com>
+ - Fix RHEL5 DUD to RPM migration
+ * Tue Apr 17 2007 Eric Moore <Eric.Moore@lsi.com>