More kickstart fun
29 September 2003 02:00
Well, last week was fun, but exhausting, trying to debug problems with the kickstart. I wanted to put up a few notes here about tricks I learned.
E1000.o The biggest obstacle here was getting the whole PXE/Kickstart/boot kernel process to work, particularly getting the right driver for the Intel gigabit ethernet cards. I had found the driver (e1000.o) was included as part of the 2.4.20 kernel, so my initial efforts were directed to putting the e1000.o module from RedHat's update kernels into the initrd sent out in the PXE process. It appears that we must have some pretty new hardware with these NICS as it was a no-go with that driver.
After digging about a bit on RedHat mailing lists (anaconda-devel-list, and kickstart-list, to be precise), I found mention of a process to build newer drivers to match the kernels involved. Bundled with the RedHat kernel-source rpm is a directory at the top of the kernel tree (/usr/src/linux-version/configs) which houses various kernel configuration files that can be used to build kernels and/or modules to meet the specifications of the various redhat kernels. The process goes something like this:
[root@host root]$ cd /usr/src/linux-2.4
[root@host linux-2.4]$ cp configs/kernel-2.4.7-i386-BOOT.config .config
With the config file copied into place, you run
make oldconfig which will configure the kernel tree to the specs outlined in the config file. You then run
make dep, and then run back to the source directory of the driver. From there I had to tweak the makefile to look in the right spot for the kernel sources, as well as tweak the main Makefile in the top level kernel source directory. In the Makefile there is a line like this near the top:
EXTRAVERSION = -10.......
The -10 in this case is RedHat's release number for their rpms, and it's followed by something like 'BOOT','smp','enterprise','ibcs', etc., depending on which kernel you're building. You need to change the tag to match whatever kernel you're trying to match, be it 'smp', 'enterprise', or 'BOOT' in the case of RedHat's PXE boot kernels.
With these changes made, the module in place in the modules.cgz (a gzipped cpio archive) of the /modules directory of the initrd, and the /modules/pcitable and /modules/module-info files updated (also in the initrd) it looks like it's going to work, but I've got one last hurdle to jump (btw, lspci -n is a great help to make sure you've got the right line in the pcitable file).
We're using Cisco switches in our network, and from what I gather under certain conditions the switch will wait for 30 seconds to allow traffic across a port after the link comes up, unless you specify 'spantree portfast enable' on the given port. That hoses a kickstart install when the system goes to retrieve DHCP information. I have yet to test it out, (waiting on the network guys at corp. HQ), but that would explain the behavior I'm seeing.
Hmmm, looking back over what I've written, I can see a lot of contextual info is missing. This isn't a tutorial for PXE/Kickstart installs, but hopefully might provide a few clues for someone in a similar situation. If nothing else, it should help me to remember 'what-I-done' a few months down the road when we get new hardware in again :-).