I need to make a driver disk for anaconda. This disk would contain an updated module for the network card of a somewhat recent laptop and the goal is to get a network install of CentOS 6.2 working. I am using cobbler so even the kickstart file itself is on the network. I don't mind if the installation is not completely unattended and I don't mind sticking a USB stick with the driver disk image during the install and manually selecting the correct item, but I do want to keep everything else on the network (kernel image, initrd, kickstart file, RPM repositories).
I already got the updated driver built, and I even have a "kmod" RPM built with the help of /usr/lib/rpm/redhat/kmodtool. Unfortunately I have found absolutely no documentation on what a driver disk looks like.
http://www.phil.muni.cz/~letty/linuxfaq/pracovni/driver-disk-howto is the only link I could find, and it describes the struggle of someone who did the same thing I did - downloaded driver disks and tried to explore them. Unfortunately the format in CentOS 6 seems to have changed and the best I could do is to get anaconda to tell me that: "Driver disk is invalid for this release of CentOS.". The log itself says "cannot find /tmp/drivers/rpms/x86_64/repodata" and until now I have not seen a driver disk with "repodata" on it.
Currently diving into the anaconda source code but I hope someone can point me in the right direction.
I may have found my answer in the anaconda source after all.
To generate a CentOS 6 compatible driver disk, you can create a squashfs image (other filesystems might also work, but squashfs is by far the easiest to create) with the following layout:
rhdd3
- a file with a simple one-line comment to describe the disk.rundepmod
- the presence of this file tells the installer that it should rundepmod
in order to pick up the modulesrpms/x86_64
- an optional yum repository containing the kmod RPMslib/modules/2.6.32-220.el6.x86_64/...
- the actual kernel modules go here; if the driver disk contains an updated driver of an upstream driver, then the directory structure here should match the upstream kernel module location. The version of the kernel should of course match the version of the installer.And since a picture is worth a thousand words, here is the sample driver disk we use to kickstart recent laptops that need an updated
atl1c.ko
driver:I found this when searching for instructions on how to create a driver disk for Centos 7.4. In my case I needed a RAID driver for installation on a HP Microserver where the only internal disks are part of the RAID.
I started with on old device driver disk (actually a USB key), which had the following folders (among some other files):
The following process seemed to work for me:
/rpms/x86_64/
folder on the USB keyRun the following command, where your_folder is where the RPM is found:
createrepo your_folder/
Check that this has created a
repodata
folder in your_folder/rpms/x86_64
on the USB keyWhile this doesn't directly address the OP, it may be helpful for someone else who came across this page when trying to work out how to create a device driver disk for CentOS installs.
From the anaconda driverdisc.txt:
This part is critical if you are doing something like inst.dd=http://10.0.0.80/e1000e.rpm :
So you will need to edit the .spec and, at the top, add "Provides: kernel-modules = 3.10.0-1160.el7.x86_64" or whatever your equivalent install version might be.
Also note that inst.sshd is great for troubleshooting netboot installs. See /tmp/packaging.log:
This will complete the installation, but future kernel upgrades may not get the driver update. You can add a hook in /etc/kernel/postinst.d/ to copy your driver to newer kernel versions when the kernel is updated (assuming the ABI is compatible).