Ryan Steele wrote:
Ralf Utermann wrote:
Ryan Steele wrote:
[...]
638:    # make /scripts/live use configure_networking just like
/scripts/nfs does
639:    #ipconfig ${DEVICE} | tee /netboot.config
640:    configure_networking



And this change to /scripts/functions, at the bottom of the
configure_networking function:



356:     # If we don't know the device ahead of time, we need to check
net-*.conf
357:     # source ipconfig output
358:     #if [ -n "${DEVICE}" ]; then
359:     #       # source specific bootdevice
360:     #       . /tmp/net-${DEVICE}.conf
361:     #else
362:        # source any interface as not exactly specified
363:        . /tmp/net-*.conf
364:     #fi


these changes did not work for me on a lenny system :( Still
hangs trying eth0 and I don't see it trying any other
interface. So I go back to my udev rule for renaming ...

Ah, I (think I) forgot to tell you that I had to put 'ip=all' in the pxelinux.cfg, otherwise you either hang or get kernel panics.

Basically, when we PXE boot with the pxelinux.cfg file set up by
fai-chboot using ip=dhcp, we end up using the /scripts/live shell
script, which uses the 'ipconfig' binary. But, we need to tell ipconfig
to time out for an interface for which it can't find a DHCP server,
which is what configure_networking does using 'ipconfig -t'.  I'm not
the configure_networking, which my lenny/fai3.2.14 puts into the
generated initrd has no -t in any ipconfig call.

Well, what's stopping you from adding it?  :)

sure why /scripts/live doesn't use the configure_networking script by
default, or if this is even the right thing to do, but it works for me,
no matter which interface I have cables in or which interfaces can
contact a DHCP server via ipconfig. If anybody has any comments, please
feel free to voice them.

Ryan, can you send me your scripts/functions file?

Sure, I'll post it for all to see, hopefully the list formatting won't butcher the config - I use a 30" monitor, so I don't restrict my config files to 80 chars in width. That being said, the only function I hacked in there was configure_networking, so here it is:

configure_networking()
{
   # RYANS 2008-12-05 - add debugging output
   echo -e "\n\nInside configure_networking\n\n" > /dev/console 2>&1
   # networking already configured thus bail out
   [ -n "${DEVICE}" ] && [ -e /tmp/net-"${DEVICE}".conf ] && return 0

   # RYANS 2008-12-05 - set timeout to 30
   # support ip options see linux sources Documentation/nfsroot.txt
   case ${IPOPTS} in
   none|off)
       # Do nothing
       ;;
   ""|on|any)
       # Bring up device
       ipconfig -t 30 ${DEVICE}
       ;;
   dhcp|bootp|rarp|both)
       ipconfig -t 30 -c ${IPOPTS} -d ${DEVICE}
       ;;
   *)
       ipconfig -t 30 -d $IPOPTS

       # grab device entry from ip option
       NEW_DEVICE=${IPOPTS#*:*:*:*:*:*}
       if [ "${NEW_DEVICE}" != "${IPOPTS}" ]; then
           NEW_DEVICE=${NEW_DEVICE%:*}
       else
           # wrong parse, possibly only a partial string
           NEW_DEVICE=
       fi
       if [ -n "${NEW_DEVICE}" ]; then
           DEVICE="${NEW_DEVICE}"
       fi
       ;;
   esac

   # RYANS 2008-12-05 - just source net-*.conf and be done with it
   # source ipconfig output
   #if [ -n "${DEVICE}" ]; then
   #    # source specific bootdevice
   #    . /tmp/net-${DEVICE}.conf
   #else
       # source any interface as not exaclty specified
       . /tmp/net-*.conf
   #fi
}




And I forgot to mention also, that I have to use a custom script to rewrite the IP in the boot.log, otherwise at the end of the installation, fai-chboot fails to connect to the server and change the pxelinux.cfg file to foo.disable. Here is that script:

#! /bin/bash

error=0 ; trap "error=$((error|1))" ERR

set -x

REALIP=$(echo `host $(cat $target/etc/hostname) | awk '{print $4}'`)
perl -i -pe "s/^IPADDR=all(.*)/IPADDR='"$REALIP"'$3/" $LOGDIR/boot.log

exit $error

HTH,
Ryan

Antwort per Email an