1 --- mptlinux.spec.dist 2008-11-07 02:16:26.000000000 -0500
2 +++ mptlinux.spec 2009-12-01 14:17:11.000000000 -0500
4 +%{!?kernel_obj: %define kernel_obj ""}
7 %define version 4.18.20.04
9 -Summary: MPT Fusion drivers for 53C1030, FC9XX, and SAS Adapters
10 +%define release 1sun1
11 +Summary: Common files for the MPT Fusion drivers for 53C1030, FC9XX, and SAS Adapters
17 -Group: System Environment/Kernel
18 +Group: Utilities/System
19 Source0: %{name}-%{version}.tar.gz
20 Source1: fusion.mptctl
21 URL: http://www.lsilogic.com
23 Fibre Channel FC909, FC919, FC929, FC919X, FC929X, and FC949X adapters
24 SAS SAS1064, SAS1068, and SAS1078 adapters.
26 +This package contains the common file(s).
29 +Summary: Kernel modules for the MPT Fusion drivers for 53C1030, FC9XX, and SAS Adapters
30 +Group: System Environment/Kernel
34 +Drivers for (suse i686, x86_64, ia64 and updates) for the
35 +LSI Logic Fusion-MPT Architecture parts.
36 +These include the Ultra320 53C1030 and 53C1020 adapters.
37 +Fibre Channel FC909, FC919, FC929, FC919X, FC929X, and FC949X adapters
38 +SAS SAS1064, SAS1068, and SAS1078 adapters.
40 +This package contains the drivers.
42 # prep #########################################################################
49 # build ########################################################################
53 +if [ "%{kernel_obj}" != "" ]; then
54 + # dig the version out of the tree
55 + LINUXRELEASEHEADER=%{kernel_obj}/include/linux/version.h
56 + if [ -s %{kernel_obj}/include/linux/utsrelease.h ]; then
57 + LINUXRELEASEHEADER=%{kernel_obj}/include/linux/utsrelease.h
59 + LINUXRELEASE=$(sed -ne 's/#define UTS_RELEASE "\(.*\)"$/\1/p' $LINUXRELEASEHEADER)
61 + make build LINUX=%{kernel_obj} KERNEL=$LINUXRELEASE
63 for i in /lib/modules/2.6.*; do
64 - kernel=`basename ${i}`;
65 + kernel=`basename ${i}`
66 if [ -f /lib/modules/${kernel}/source/drivers/message/fusion/Kconfig ]; then
67 - make build KERNEL=$kernel;
70 + make build KERNEL=$kernel
75 # install ######################################################################
77 echo install %{version}
78 echo "%defattr(-,root,root)" > $RPM_BUILD_DIR/file.list.%{name}
79 +echo "%defattr(-,root,root)" > $RPM_BUILD_DIR/file.list.%{name}-modules
80 echo "/etc/init.d/fusion.mptctl" >> $RPM_BUILD_DIR/file.list.%{name}
81 mkdir -p $RPM_BUILD_ROOT/etc/init.d
82 -cp -rf $RPM_SOURCE_DIR/fusion.mptctl $RPM_BUILD_ROOT/etc/init.d
83 +cp -f $RPM_SOURCE_DIR/fusion.mptctl $RPM_BUILD_ROOT/etc/init.d
84 +if [ "%{kernel_obj}" != "" ]; then
85 + # dig the version out of the tree
86 + LINUXRELEASEHEADER=%{kernel_obj}/include/linux/version.h
87 + if [ -s %{kernel_obj}/include/linux/utsrelease.h ]; then
88 + LINUXRELEASEHEADER=%{kernel_obj}/include/linux/utsrelease.h
90 + kernel="$(sed -ne 's/#define UTS_RELEASE "\(.*\)"$/\1/p' $LINUXRELEASEHEADER)"
92 + #if [ ! -e /lib/modules/${kernel}/source/drivers/message/fusion/Kconfig ]; then
95 + MPTLINUX_IPATH=/lib/modules/${kernel}/updates/drivers/message/fusion
96 + mkdir -p $RPM_BUILD_ROOT/lib/modules/${kernel}/{kernel,updates}/drivers/message/fusion
98 + # create the file list used in %files to indicate which files are in package
99 + for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
100 + echo "$MPTLINUX_IPATH/${driver_name}" >> $RPM_BUILD_DIR/file.list.%{name}-modules
103 + make install PREFIX=$RPM_BUILD_ROOT LINUX=%{kernel_obj} KERNEL=$kernel
104 + # the Makefile hardcodes the destination path to
105 + # $(PREFIX)/lib/modules/$(KERNEL)/kernel/drivers/message/fusion
106 + # so lets move these to where they really go
107 + # ideally, the Makefile should take this location as an (optional if you
109 + mv -f $RPM_BUILD_ROOT/lib/modules/${kernel}/kernel/drivers/message/fusion/* \
110 + $RPM_BUILD_ROOT/$MPTLINUX_IPATH/
112 for i in /lib/modules/2.6.*; do
113 kernel=`basename ${i}`
114 if [ ! -e /lib/modules/${kernel}/source/drivers/message/fusion/Kconfig ]; then
117 - MPTLINUX_IPATH=/lib/modules/${kernel}/kernel/drivers/message/fusion
118 - mkdir -p $RPM_BUILD_ROOT/lib/modules/${kernel}/kernel/drivers/message/fusion
121 + MPTLINUX_IPATH=/lib/modules/${kernel}/updates/drivers/message/fusion
122 + mkdir -p $RPM_BUILD_ROOT/lib/modules/${kernel}/{kernel,updates}/drivers/message/fusion
124 # create the file list used in %files to indicate which files are in package
125 for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
126 - echo "$MPTLINUX_IPATH/${driver_name}.new" >> $RPM_BUILD_DIR/file.list.%{name}
128 + echo "$MPTLINUX_IPATH/${driver_name}" >> $RPM_BUILD_DIR/file.list.%{name}-modules
131 make install PREFIX=$RPM_BUILD_ROOT KERNEL=$kernel
133 - for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
134 - mv -f $RPM_BUILD_ROOT/$MPTLINUX_IPATH/${driver_name} \
135 - $RPM_BUILD_ROOT/$MPTLINUX_IPATH/${driver_name}.new
139 -# pre #########################################################################
142 -system_arch=`uname -m`
143 -if [ -f /etc/SuSE-release ] && [ ${system_arch} == i686 ]; then
146 -if [ %{_target_cpu} != ${system_arch} ]; then
147 - echo "ERROR: Failed installing this rpm!!!!"
148 - echo "This rpm is intended for %{_target_cpu} platform. It seems your system is ${system_arch}.";
151 + # the Makefile hardcodes the destination path to
152 + # $(PREFIX)/lib/modules/$(KERNEL)/kernel/drivers/message/fusion
153 + # so lets move these to where they really go
154 + # ideally, the Makefile should take this location as an (optional if you
156 + mv -f $RPM_BUILD_ROOT/lib/modules/${kernel}/kernel/drivers/message/fusion/* \
157 + $RPM_BUILD_ROOT/$MPTLINUX_IPATH/
161 # post #########################################################################
165 chkconfig fusion.mptctl --add >/dev/null 2>&1
166 if [ -f /etc/redhat-release ]; then
168 - if [ -f /etc/modprobe.conf ] ; then
169 - cp /etc/modprobe.conf /etc/modprobe.conf.orig.%{version};
170 - sed -e '/mptbase/d' /etc/modprobe.conf > modprobe.edit;
171 - sed -e '/mptscsih/d' modprobe.edit > modprobe.edit.1;
172 - sed -e '/mptspi/d' modprobe.edit.1 > modprobe.edit.2;
173 - sed -e '/mptfc/d' modprobe.edit.2 > modprobe.edit.3;
174 - sed -e '/mptsas/d' modprobe.edit.3 > modprobe.edit;
175 - echo "alias scsi_hostadapter mptspi" >> modprobe.edit;
176 - echo "alias scsi_hostadapter1 mptfc" >> modprobe.edit;
177 - echo "alias scsi_hostadapter2 mptsas" >> modprobe.edit;
178 - mv -f modprobe.edit /etc/modprobe.conf;
179 - rm -fr modprobe.edit.*;
181 + # per the comments below, i can't see any modprobe.conf editing here that's
183 + #if [ -f /etc/modprobe.conf ] ; then
184 + # cp /etc/modprobe.conf /etc/modprobe.conf.orig.mptlinux-%{version}
185 + # i don't think this is kosher. what sort of entries are
186 + # being deleted here?
187 + #sed -e '/mptbase/d' -e '/mptscsih/d' -e '/mptspi/d' \
188 + # -e '/mptfc/d' -e '/mptsas/d' /etc/modprobe.conf > /etc/modprobe.edit
189 + # this really isn't kosher. you can't assume that the
190 + # administrator has not already defined the scsi_hostadapter
191 + # aliases for some other HBA that's already in the system
192 + #echo "alias scsi_hostadapter mptspi" >> /etc/modprobe.edit
193 + #echo "alias scsi_hostadapter1 mptfc" >> /etc/modprobe.edit
194 + #echo "alias scsi_hostadapter2 mptsas" >> /etc/modprobe.edit
195 + #mv -f /etc/modprobe.edit /etc/modprobe.conf
198 elif [ -f /etc/SuSE-release ]; then
200 if [ -f /etc/sysconfig/kernel ] ; then
201 - cp /etc/sysconfig/kernel /etc/sysconfig/kernel.orig.%{version};
202 - sed -e 's/mptscsih//g' /etc/sysconfig/kernel > kernel.edit;
203 - sed -e 's/mptsas//g' kernel.edit > kernel.edit.1;
204 - sed -e 's/mptfc//g' kernel.edit.1 > kernel.edit.2;
205 - sed -e 's/mptspi//g' kernel.edit.2 > kernel.edit.3;
206 - sed -e 's/INITRD_MODULES="/INITRD_MODULES="mptsas /g' kernel.edit.3 > kernel.edit.4;
207 - sed -e 's/INITRD_MODULES="/INITRD_MODULES="mptfc /g' kernel.edit.4 > kernel.edit.5;
208 - sed -e 's/INITRD_MODULES="/INITRD_MODULES="mptspi /g' kernel.edit.5 > kernel.edit;
209 - mv -f kernel.edit /etc/sysconfig/kernel;
210 - rm -fr kernel.edit.*;
212 + cp /etc/sysconfig/kernel /etc/sysconfig/kernel.orig.mptlinux-%{version}
213 + sed -e 's/mptscsih//g' -e 's/mptsas//g' -e 's/mptfc//g' \
215 + -e 's/INITRD_MODULES="/INITRD_MODULES="mptsas /g' \
216 + -e 's/INITRD_MODULES="/INITRD_MODULES="mptfc /g' \
217 + -e 's/INITRD_MODULES="/INITRD_MODULES="mptspi /g' \
218 + /etc/sysconfig/kernel > /etc/sysconfig/kernel.edit
219 + mv -f /etc/sysconfig/kernel.edit /etc/sysconfig/kernel
223 # adding device nodes
224 if [ ! -e /dev/mptctl ]; then
225 - echo "Creating /dev/mptctl ioctl node file";
226 - mknod /dev/mptctl c 10 220;
228 + echo "Creating /dev/mptctl ioctl node file"
229 + mknod /dev/mptctl c 10 220
232 +# i think this is wrong. we should not muck around with kernels we did not
233 +# install new drivers into. but how to determine which kernels those are?
234 +# maybe look for the new driver in the /lib/modules/*/updates tree?
235 for i in /lib/modules/2.6.*; do
236 - kernel=`basename ${i}`;
237 - MPTLINUX_IPATH=/lib/modules/${kernel}/kernel/drivers/message/fusion
238 - if [ ! -e $MPTLINUX_IPATH/mptbase.ko ] || \
239 - [ ! -e $MPTLINUX_IPATH/mptbase.ko.new ]; then
242 + kernel=`basename ${i}`
244 if [ -f /etc/SuSE-release ] &&
245 [ ! -e /boot/initrd-${kernel} ]; then
251 - echo "The mpt driver for kernel ${kernel} is now version 4.18.20.04";
252 - #backup original fusion drivers here if not already done
253 - for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
254 - if [ ! -e $MPTLINUX_IPATH/${driver_name}.orig ]; then
255 - cp $MPTLINUX_IPATH/${driver_name} \
256 - $MPTLINUX_IPATH/${driver_name}.orig
258 - cp -f $MPTLINUX_IPATH/${driver_name}.new $MPTLINUX_IPATH/${driver_name}
260 + echo "The mpt driver for kernel ${kernel} is now version 4.18.20.04"
261 # Remake the initrd image for the user, depending on their OS
262 if [ -f /etc/redhat-release ]; then
264 - # taking care of dud migration, by moving all the ko's to ko.orig
265 - for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
266 - MPTLINUX_IPATH=/lib/modules/${kernel}/updates
267 - if [ -e $MPTLINUX_IPATH/${driver_name} ]; then
268 - mv $MPTLINUX_IPATH/${driver_name} \
269 - $MPTLINUX_IPATH/${driver_name}.orig
271 - # to handle kmods partially need to handle week updates
272 - MPTLINUX_KPATH=/lib/modules/${kernel}/extra/mptbase
273 - if [ -e $MPTLINUX_KPATH/${driver_name} ]; then
274 - mv $MPTLINUX_KPATH/${driver_name} \
275 - $MPTLINUX_KPATH/${driver_name}.orig
280 if [ -d /boot/efi/efi/redhat ]; then
281 - bootpart=/boot/efi/efi/redhat;
282 + bootpart=/boot/efi/efi/redhat
283 elif [ -d /boot/efi ]; then
284 - bootpart=/boot/efi;
290 if [ ! -e ${bootpart}/initrd-${kernel}.img.orig ]; then
291 echo Saving initrd-${kernel}.img in ${bootpart} directory.
292 cp ${bootpart}/initrd-${kernel}.img \
293 - ${bootpart}/initrd-${kernel}.img.orig
295 + ${bootpart}/initrd-${kernel}.img.orig.mptlinux-%{version}
298 - depmod -v ${kernel} > /dev/null 2>&1;
299 + depmod -v ${kernel} > /dev/null 2>&1
300 mkinitrd -f ${bootpart}/initrd-${kernel}.img ${kernel}
301 elif [ -f /etc/SuSE-release ]; then
303 if [ ! -e /boot/initrd-${kernel}.orig ]; then
304 echo Saving initrd-${kernel} in /boot directory.
305 - cp /boot/initrd-${kernel} /boot/initrd-${kernel}.orig
307 + cp /boot/initrd-${kernel} /boot/initrd-${kernel}.orig.mptlinux-%{version}
310 - depmod -v ${kernel} > /dev/null 2>&1;
311 + depmod -v ${kernel} > /dev/null 2>&1
312 mk_initrd -k vmlinuz-${kernel} -i /boot/initrd-${kernel}
317 echo -e "post Install Done."
319 # postun #######################################################################
322 echo postun %{version}
323 for i in /lib/modules/2.6.*; do
324 - kernel=`basename ${i}`;
325 - MPTLINUX_IPATH=/lib/modules/${kernel}/kernel/drivers/message/fusion
326 - if [ ! -e $MPTLINUX_IPATH/mptbase.ko ] || \
327 - [ -e $MPTLINUX_IPATH/mptbase.ko.new ]; then
330 + kernel=`basename ${i}`
331 + MPTLINUX_IPATH=/lib/modules/${kernel}/updates/drivers/message/fusion
332 + if [ ! -e $MPTLINUX_IPATH/mptbase.ko ]; then
335 if [ ! -e /etc/init.d/fusion.mptctl ]; then
336 + # why are we only doing this if the fustion.mptctl file
337 + # *doesn't* exist? running chkconfig on a file that doesn't
338 + # exist is surely an error
339 + #chkconfig fusion.mptctl --del >/dev/null 2>&1
342 chkconfig fusion.mptctl --del >/dev/null 2>&1
344 - if [ -f /etc/modprobe.conf.orig ]; then
347 + if [ -f /etc/modprobe.conf.orig.mptlinux-%{version} ]; then
349 - mv -f /etc/modprobe.conf.orig /etc/modprobe.conf;
350 - elif [ -f /etc/sysconfig/kernel.orig ]; then
351 + mv -f /etc/modprobe.conf.orig.mptlinux-%{version} /etc/modprobe.conf
352 + elif [ -f /etc/sysconfig/kernel.orig.mptlinux-%{version} ]; then
354 - mv -f /etc/sysconfig/kernel.orig /etc/sysconfig/kernel;
356 - for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
357 - if [ -f $MPTLINUX_IPATH/${driver_name}.orig ]; then
358 - mv -f $MPTLINUX_IPATH/${driver_name}.orig $MPTLINUX_IPATH/${driver_name}
361 + mv -f /etc/sysconfig/kernel.orig.mptlinux-%{version} /etc/sysconfig/kernel
363 # restore original initrd images
364 + # i don't think this is a good idea. lots of stuff may have happened
365 + # to the system between the time this backup was made and now that
366 + # renders the original initrd images useless now
367 + # probably should just generate new ones
368 if [ -f /etc/redhat-release ]; then
370 - # restoring the state of dud migration
371 - for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
372 - MPTLINUX_IPATH=/lib/modules/${kernel}/udpates
373 - if [ -f $MPTLINUX_IPATH/${driver_name}.orig ]; then
374 - mv -f $MPTLINUX_IPATH/${driver_name}.orig $MPTLINUX_IPATH/${driver_name}
376 - MPTLINUX_KPATH=/lib/modules/${kernel}/extra/mptbase
377 - if [ -e $MPTLINUX_KPATH/${driver_name}.orig ]; then
378 - mv -f $MPTLINUX_KPATH/${driver_name}.orig $MPTLINUX_KPATH/${driver_name}
383 if [ -d /boot/efi/efi/redhat ]; then
384 - bootpart=/boot/efi/efi/redhat;
385 + bootpart=/boot/efi/efi/redhat
386 elif [ -d /boot/efi ]; then
387 - bootpart=/boot/efi;
393 - if [ -f ${bootpart}/initrd-${kernel}.img.orig ]; then
394 - mv -f ${bootpart}/initrd-${kernel}.img.orig ${bootpart}/initrd-${kernel}.img;
396 + #if [ -f ${bootpart}/initrd-${kernel}.img.orig.mptlinux-%{version} ]; then
397 + # mv -f ${bootpart}/initrd-${kernel}.img.orig.mptlinux-%{version} ${bootpart}/initrd-${kernel}.img
400 + depmod -v ${kernel} > /dev/null 2>&1
401 + mkinitrd -f ${bootpart}/initrd-${kernel}.img ${kernel}
402 elif [ -f /etc/SuSE-release ]; then
404 - if [ -f /boot/initrd-${kernel}.orig ]; then
405 - mv -f /boot/initrd-${kernel}.orig /boot/initrd-${kernel};
408 - depmod -v ${kernel} > /dev/null 2>&1;
410 + #if [ -f /boot/initrd-${kernel}.orig.mptlinux-%{version} ]; then
411 + # mv -f /boot/initrd-${kernel}.orig.mptlinux-%{version} /boot/initrd-${kernel}
414 + depmod -v ${kernel} > /dev/null 2>&1
415 + mk_initrd -k vmlinuz-${kernel} -i /boot/initrd-${kernel}
418 echo -e "Uninstall Done."
420 # files ########################################################################
421 %files -f ../file.list.%{name}
422 +%files modules -f ../file.list.%{name}-modules
424 # changelog ###################################################################
426 +* Fri Jun 11 2010 Brian J. Murrell <brian.murrell@oracle.com>
427 + - update to 4.18.20.04
428 +* Wed Oct 28 2009 Brian J. Murrell <Brian.Murrell@Sun.COM>
429 + - split into modules and non-modules packages so that multiple
430 + modules packages can be installed, for several kernels
431 + - don't fiddle with files once RPM has installed them
432 + - put modules into the updates tree under the modules dir, where
434 + - don't use the "orig" initrd, but generate a new one on removal
435 + + the orig initrd could very well no longer be suitable
436 + - don't edit the modprobe.conf file as that's a job for the admin
437 + + we really can't assume which other scsi_host_adapters are in
438 + the machine and what position we are to take relative to them
439 * Tue Apr 24 2007 Eric Moore <Eric.Moore@lsi.com>
440 - Fix RHEL5 DUD to RPM migration
441 * Tue Apr 17 2007 Eric Moore <Eric.Moore@lsi.com>