I bought several HP DL360 G4p from Server Monkey to use as test machines for OpenStack. Unfortunately, the HP SmartArray 6i SCSI RAID controller that is installed in these machines is not supported by the RHEL 7.

The cciss driver required for the controller is still part of the main kernel, it’s just not shipped as part of RHEL 7. Luckily, the folks over at ELRepo have packaged it as a rpm for RHEL

  1. Therefore, it’s just a simple matter of creating a driver disk and passing that into my PXE boot configuration.

The process for creating a custom driver disk is not very well documented, but I was able to figure it out with help from a ServerFault post and the Anaconda documentation.

First, a file listing:

[root@galadriel driver-disk.dd]# find .

.rundepmod is just an empty file. It instructs Anaconda to run depmod to find dependancies.

rhdd3 contains a one line description of what’s on the driver disk. Mine just has: cciss drivers from ElRepo

To populate the lib directory, I installed the kmod-cciss package on a working RHEL server, and then copied it to the directory.

[root@galadriel driver-disk.dd]# tar cvf - /lib/modules/3.10.0-123.el7.x86_64/extra/cciss | tar xvf -
tar: Removing leading `/' from member names

The final bit is the repository. I just downloaded the rpm from ELRepo, and used the createrepo command.

[root@galadriel driver-disk.dd]# mkdir -p ./rpms/x86_64
[root@galadriel driver-disk.dd]# cd ./rpms/x86_64
[root@galadriel x86_64]# curl -O http://mirror.symnds.com/distributions/elrepo/elrepo/el7/x86_64/RPMS/kmod-cciss-3.6.26-1.el7.elrepo.x86_64.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 45528 100 45528 0 0 70041 0 --:--:-- --:--:-- --:--:-- 70043
[root@galadriel x86_64]# createrepo .
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

With all these bits in place, I created an ISO, and served it up via http.

[root@galadriel driver-disk.dd]# mkisofs -V OEMDRV -r . | cat > /var/www/html/cciss.iso
I: -input-charset not specified, using utf-8 (detected in locale settings)
Total translation table size: 0
Total rockridge attributes bytes: 3256
Total directory bytes: 16384
Path table size(bytes): 128
Max brk space used 23000
273 extents written (0 MB)

I’m PXE booting all these hosts, so in order to use my newly created driver disk, I had to add the inst.dd parameter to my boot parameters:

label linux
menu label ^Install system text
menu default
kernel rhel7/vmlinuz
append initrd=rhel7/initrd.img ip=dhcp inst.text inst.repo=nfs: inst.dd=

Next time I booted up the servers, Anaconda downloaded and mounted the ISO, and installed the disks.

This is, of course, completely non-supported, but I don’t really care because these are my personal lab machines.