Kickstart Redhat 9.0 and e1000 failure

s.davison at computer.org s.davison at computer.org
Tue Nov 15 19:22:08 UTC 2005


>-----Original Message-----
>From: Ricky Chawla [mailto:ricky at laurelnetworks.com]
>Sent: Tuesday, November 15, 2005 03:02 PM
>To: Kickstart-list at redhat.com
>Subject: Kickstart Redhat 9.0 and e1000 failure
>
>I am working on a DELL PE1850 which has the e1000 NICs. I am trying to
>installed redhat 9.0 on this machine via kickstart and am seeing the
>famous e1000 problem. In all the fixes that have been talked so far they
>have been mainly for RHEL/FC etc. 
>Has anyone fixed this issue to work on RedHat 9.0 ? If so, it would be
>nice to get a detailed work around. I tried adding the sleep 60 on the
>init.c file but that did not help.
>

We had that problem w/ rhel3u4.  Here's an
internal memo describing the fix we used.  
I think it should be applicable to rh9.

Stowe Davison





The problem occurs because the anaconda installer will not wait
long enough for a response when it is trying to NFS-mount the
partition containing the Red Hat RPMs.  The hardware combination of
certain NICs and certain network switches means that the initial
network connection after reboot can take over thirty seconds.
Anaconda gives up before then.

The part of anaconda you have to modify is buried in a file called
isolinux/initrd.img on RHEL3u4 installation disk number 1.

At a high level, what you have to do is edit a certain source file,
rebuild a binary called loader which links that file in, and install
the loader program in a new version of initrd.img.

Once you know which source file to modify and what changes to make
(which is covered in mailing list postings), rebuilding the loader
program is easy.  I could not find any information on getting that
loader program into initrd.img.  The procedure described below is
the result of trial and error.

The initrd.img file is a gzipped ext2 file system.  If you
uncompress initrd.img and mount the resulting uncompressed file
(call it initrd.img.uncompressed) as a loopback device, you find it
contains a directory (sbin) which in turn contains the loader
executable.  Delete that loader executable, copy your modified
version into its place, unmount the file system, and re-compress (gzip)
initrd.img.uncompressed.  Call the compressed result
initrd.img.newloader.  That is your new initrd.img file.



Do the following on a machine with RHEL3u4 installed.  Set
environment variable WORKSPACE to point to a scratch area.

# ----- Put Source CD-ROM number 1 from the RHEL3u4 distro into
# -----    the CD drive.
% mount /mnt/cdrom
% rm -rf $WORKSPACE
% mkdir $WORKSPACE
% cd $WORKSPACE
% rpm2cpio /mnt/cdrom/SRPMS/anaconda-9.1.4.1-1.RHEL.src.rpm | cpio --extract
% umount /mnt/cdrom
% cat anaconda-9.1.4.1.tar.bz2 | bunzip > anaconda-9.1.4.1.tar
% tar xf anaconda-9.1.4.1.tar
# ----- Now edit the file $WORKSPACE/anaconda-9.1.4.1/isys/nfsmount.c
# -----    See below for changes to make.
% cd $WORKSPACE/anaconda-9.1.4.1
% make
# ----- You get lots of out put from the make.
% strip $WORKSPACE/anaconda-9.1.4.1/loader2/loader



# ----- Take the source CD out of the drive and insert binary
# -----    (install) CD number 1 from the rhel3u4 distribution.
% mount /mnt/cdrom
% cp /mnt/cdrom/isolinux/initrd.img $WORKSPACE
% umount /mnt/cdrom
# ----- Take the CD out of the drive.

% cd $WORKSPACE
% cat initrd.img | gunzip > initrd.img.uncompressed
% mkdir $WORKSPACE/initrd
% mount -o loop -t ext2 $WORKSPACE/initrd.img.uncompressed $WORKSPACE/initrd
% rm $WORKSPACE/initrd/sbin/loader
% cp $WORKSPACE/anaconda-9.1.4.1/loader2/loader $WORKSPACE/initrd/sbin/loader
% umount $WORKSPACE/initrd
% cat $WORKSPACE/initrd.img.uncompressed | gzip > $WORKSPACE/initrd.img.newloader

The file $WORKSPACE/initrd.img.newloader is the new initrd.img file.


Changes to make to anaconda-9.1.4.1/isys/nfsmount.c:

Several people on various mailing lists have suggested patches.
Most are quite similar to each other.  I used the simplest.  It
was suggested by Jeroen Roodhart:
https://www.redhat.com/archives/kickstart-list/2004-June/msg00045.html

Search for the line
    pmap = pmap_getmaps(server_addr);
in the file anaconda-9.1.4.1/isys/nfsmount.c.
Immediately after that line, insert the following code:
    int retries = 0;
    while (!pmap && (retries < 30)) {
        sleep(2);
        pmap = pmap_getmaps(server_addr);
        retries++;
    }
Save the file and make anaconda as indicated above.



~
~
~
~
~










More information about the Kickstart-list mailing list