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.16.00.00
9 -Summary: MPT Fusion drivers for 53C1030, FC9XX, and SAS Adapters
10 +%define release 2sun1
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.16.00.00";
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.16.00.00"
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
274 if [ -d /boot/efi/efi/redhat ]; then
275 - bootpart=/boot/efi/efi/redhat;
276 + bootpart=/boot/efi/efi/redhat
277 elif [ -d /boot/efi ]; then
278 - bootpart=/boot/efi;
284 if [ ! -e ${bootpart}/initrd-${kernel}.img.orig ]; then
285 echo Saving initrd-${kernel}.img in ${bootpart} directory.
286 cp ${bootpart}/initrd-${kernel}.img \
287 - ${bootpart}/initrd-${kernel}.img.orig
289 + ${bootpart}/initrd-${kernel}.img.orig.mptlinux-%{version}
292 - depmod -v ${kernel} > /dev/null 2>&1;
293 + depmod -v ${kernel} > /dev/null 2>&1
294 mkinitrd -f ${bootpart}/initrd-${kernel}.img ${kernel}
295 elif [ -f /etc/SuSE-release ]; then
297 if [ ! -e /boot/initrd-${kernel}.orig ]; then
298 echo Saving initrd-${kernel} in /boot directory.
299 - cp /boot/initrd-${kernel} /boot/initrd-${kernel}.orig
301 + cp /boot/initrd-${kernel} /boot/initrd-${kernel}.orig.mptlinux-%{version}
304 - depmod -v ${kernel} > /dev/null 2>&1;
305 + depmod -v ${kernel} > /dev/null 2>&1
306 mk_initrd -k vmlinuz-${kernel} -i /boot/initrd-${kernel}
311 echo -e "post Install Done."
313 # postun #######################################################################
316 echo postun %{version}
317 for i in /lib/modules/2.6.*; do
318 - kernel=`basename ${i}`;
319 - MPTLINUX_IPATH=/lib/modules/${kernel}/kernel/drivers/message/fusion
320 - if [ ! -e $MPTLINUX_IPATH/mptbase.ko ] || \
321 - [ -e $MPTLINUX_IPATH/mptbase.ko.new ]; then
324 + kernel=`basename ${i}`
325 + MPTLINUX_IPATH=/lib/modules/${kernel}/updates/drivers/message/fusion
326 + if [ ! -e $MPTLINUX_IPATH/mptbase.ko ]; then
329 if [ ! -e /etc/init.d/fusion.mptctl ]; then
330 + # why are we only doing this if the fustion.mptctl file
331 + # *doesn't* exist? running chkconfig on a file that doesn't
332 + # exist is surely an error
333 + #chkconfig fusion.mptctl --del >/dev/null 2>&1
336 chkconfig fusion.mptctl --del >/dev/null 2>&1
338 - if [ -f /etc/modprobe.conf.orig ]; then
341 + if [ -f /etc/modprobe.conf.orig.mptlinux-%{version} ]; then
343 - mv -f /etc/modprobe.conf.orig /etc/modprobe.conf;
344 - elif [ -f /etc/sysconfig/kernel.orig ]; then
345 + mv -f /etc/modprobe.conf.orig.mptlinux-%{version} /etc/modprobe.conf
346 + elif [ -f /etc/sysconfig/kernel.orig.mptlinux-%{version} ]; then
348 - mv -f /etc/sysconfig/kernel.orig /etc/sysconfig/kernel;
350 - for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
351 - if [ -f $MPTLINUX_IPATH/${driver_name}.orig ]; then
352 - mv -f $MPTLINUX_IPATH/${driver_name}.orig $MPTLINUX_IPATH/${driver_name}
355 + mv -f /etc/sysconfig/kernel.orig.mptlinux-%{version} /etc/sysconfig/kernel
357 # restore original initrd images
358 + # i don't think this is a good idea. lots of stuff may have happened
359 + # to the system between the time this backup was made and now that
360 + # renders the original initrd images useless now
361 + # probably should just generate new ones
362 if [ -f /etc/redhat-release ]; then
364 - # restoring the state of dud migration
365 - for driver_name in mptbase.ko mptscsih.ko mptctl.ko mptlan.ko mptspi.ko mptfc.ko mptsas.ko; do
366 - MPTLINUX_IPATH=/lib/modules/${kernel}/udpates
367 - if [ -f $MPTLINUX_IPATH/${driver_name}.orig ]; then
368 - mv -f $MPTLINUX_IPATH/${driver_name}.orig $MPTLINUX_IPATH/${driver_name}
373 if [ -d /boot/efi/efi/redhat ]; then
374 - bootpart=/boot/efi/efi/redhat;
375 + bootpart=/boot/efi/efi/redhat
376 elif [ -d /boot/efi ]; then
377 - bootpart=/boot/efi;
383 - if [ -f ${bootpart}/initrd-${kernel}.img.orig ]; then
384 - mv -f ${bootpart}/initrd-${kernel}.img.orig ${bootpart}/initrd-${kernel}.img;
386 + #if [ -f ${bootpart}/initrd-${kernel}.img.orig.mptlinux-%{version} ]; then
387 + # mv -f ${bootpart}/initrd-${kernel}.img.orig.mptlinux-%{version} ${bootpart}/initrd-${kernel}.img
390 + depmod -v ${kernel} > /dev/null 2>&1
391 + mkinitrd -f ${bootpart}/initrd-${kernel}.img ${kernel}
392 elif [ -f /etc/SuSE-release ]; then
394 - if [ -f /boot/initrd-${kernel}.orig ]; then
395 - mv -f /boot/initrd-${kernel}.orig /boot/initrd-${kernel};
398 - depmod -v ${kernel} > /dev/null 2>&1;
400 + #if [ -f /boot/initrd-${kernel}.orig.mptlinux-%{version} ]; then
401 + # mv -f /boot/initrd-${kernel}.orig.mptlinux-%{version} /boot/initrd-${kernel}
404 + depmod -v ${kernel} > /dev/null 2>&1
405 + mk_initrd -k vmlinuz-${kernel} -i /boot/initrd-${kernel}
408 echo -e "Uninstall Done."
410 # files ########################################################################
411 %files -f ../file.list.%{name}
412 +%files modules -f ../file.list.%{name}-modules
414 # changelog ###################################################################
416 +* Wed Oct 28 2009 Brian J. Murrell <Brian.Murrell@Sun.COM>
417 + - split into modules and non-modules packages so that multiple
418 + modules packages can be installed, for several kernels
419 + - don't fiddle with files once RPM has installed them
420 + - put modules into the updates tree under the modules dir, where
422 + - don't use the "orig" initrd, but generate a new one on removal
423 + + the orig initrd could very well no longer be suitable
424 + - don't edit the modprobe.conf file as that's a job for the admin
425 + + we really can't assume which other scsi_host_adapters are in
426 + the machine and what position we are to take relative to them
427 * Tue Apr 24 2007 Eric Moore <Eric.Moore@lsi.com>
428 - Fix RHEL5 DUD to RPM migration
429 * Tue Apr 17 2007 Eric Moore <Eric.Moore@lsi.com>