2.0.x kernels
No matter what distribution you are using you will need to download the DHCP client daemon for Linux. The package you need to download is called dhcpcd and the current version is 0.70. You can read the description of the package here. (ftp://metalab.unc.edu/pub/Linux/system/network/daemons/dhcpcd-0.70.lsm)
2.2.x kernels
Due to changes in ipv4 network package in 2.1.x and 2.2.x
kernels (e.g. way it sets the defaults for several fields)
dhcpcd doesn't work properly. Unless you are using RedHat 6.x
(which comes with dhcpcd 1.3.x and 2.2.x kernel) you will
need to download an alternative version
of dhcpcd (1.3.x) which is a modified version that has been written
by Sergei Viznyuk sergei@phystech.com
in order to avoid
mentioned problems. You can download it at:
Then follow the instructions. They should be the same.
You can download the latest copy of the DHCPcd from any Metalab mirror or following:
Download the latest version of dhcpcd.tar.gz
tar -zxvf dhcpcd-0.70.tar.gz
cd dhcpcd-0.70
make
make install
This will create the directory /etc/dhcpc where DHCPcd will store the DHCP information and dhcpcd file will be copied into /usr/sbin.
In order to make the system initialize using DHCP during boot type:
cd /etc/rc.d
mv rc.inet1 rc.inet1.OLD
This will move the old network initialization script into rc.inet1.OLD. You now need to create the new rc.inet1 script. Following code is all you need:
#!/bin/sh # # rc.inet1 This shell script boots up the base INET system. HOSTNAME=`cat /etc/HOSTNAME` #This is probably not necessary but I #will leave it in anyways # Attach the loopback device. /sbin/ifconfig lo 127.0.0.1 /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo # IF YOU HAVE AN ETHERNET CONNECTION, use these lines below to configure the # eth0 interface. If you're only using loopback or SLIP, don't include the # rest of the lines in this file. /usr/sbin/dhcpcd
Save it and reboot your computer.
When you are finished go the last step
DHCPcd configuration under RedHat 5.0+ is really easy. All you need to do is start the Control Panel by typing
control-panel
When you are finished go the last step
DHCPcd is included in the standard RedHat distribution as an RPM and you can find it on your distribution's CD-ROM in RPMS directory or you can download it from:
ftp://ftp.redhat.com/pub/redhat/redhat-4.2/i386/RedHat/RPMS/dhcpcd-0.6-2.i386.rpm
and install it with
rpm -i dhcpcd-0.6-2.i386.rpm
Alternatively you can compile your own version by following the steps outlined in the Slackware.
This information was provided to me by nothing nothing@cc.gatech.edu
Removed my static ip and name from /etc/resolv.conf. However, I did leave in the search line and my two nameserver lines (for some reason my dhcpcd never creates a /etc/dhcpc/resolv.conf, so I have to use a static /etc/resolv.conf). In /etc/sysconfig/network I removed the HOSTNAME and GATEWAY entries. I left the other entries as is (NETWORKING, DOMAINNAME, GATEWAYDEV). In /etc/sysconfig/network-scripts/ifcfg-eth0 I removed the IPADDR, NETMASK, NETWORK, and BROADCAST entries. I left DEVICE and ONBOOT as is. I changed the BOOTPROTO line to BOOTPROTO=dhcp. Save the file. Reboot your computer.
When you are finished go the last step
There is a deb package of DHCPcd at
ftp://ftp.debian.org/debian/dists/slink/main/binary-i386/net/dhcpcd_0.70-4.deb
or you can follow the Slackware installation instructions. To unpack the deb package type
dpkg -i /where/ever/your/debian/packages/are/dhcpd*deb
It appears that there isn't a need for any DHCPcd configuration because:
From: Heiko Schlittermann (heiko@os.inf.tu-dresden.de)
The dhcpcd package installs it's startup script as usual for debian packages in /etc/init.d/<package_name>, here as /etc/init.d/dhcpcd, and links this to the various /etc/rc?.d/ directories.
The contents of the /etc/rc?.d/ dirs is then executed at boot time.
If you don't reboot after installing you should consider starting the daemon manually:
/etc/init.d/dhcpcd start
When you are finished go the last step
Following section has been written by R. Shapiro
Versions 0.65 and 0.70 of Yoichi Hariguchi's dhcpcd should work properly in MkLinux and in linuxppc kernel 2.1.24, with the following caveats:
* If you want, or need, to build the executable from sources, note that the ppc linux compilers assume that 'char' is 'unsigned char' while the Hariguchi sources assume 'char' is 'signed char'. To build from sources you must edit the Makefile so that CFLAGS includes the option "-fsigned-char".
* The current stable release of linuxppc [aka linux-pmac] is 2.1.24 and requires the
2.1 patch (http://www.cro.net/ vuksan/dhcppatch). Both the DR2.1 and DR3.0 releases of MkLinux use a 2.0 kernel (2.0.33) and do not require this patch, although it's harmless to apply it. Note that the dhcpcd rpm on the linuxppc cd-rom does not include the 2.1 patch and therefore will not work with the linux on that cd! It will work with MkLinux however.
* In linuxppc 2.1.24, you'll see a router warning shortly after dhcpcd starts up. You can ignore this.
* The Hariguchi dhcpcd takes awhile, about 30 seconds, to make its initial connection to the server and to set up routing. In linuxppc 2.1.24, the warning mentioned above is an indication that the routing is ready.
For later linuxppc kernels, no version of the Hariguchi dhcpcd will work: you must use Sergei Viznyuk's version instead (current release is 1.3.9: see above for url). Unfortunately the Viznyuk dhcpcd is written for glibc 2, which linuxppc 2.1.1xx isn't. As a result, compiling it is a bit tricky - contact me for details. Once compiled, however, it works fine on late kernels (and not at all in MkLinux or linuxppc 2.1.24).
As far as Viznyuk's version of dhcpcd is concerned I have a Viznyuk dhcpcd (v1.3.7) executable that works in recent linuxppc kernels: 2.1.102, 103, 115, and 119 have been tested. It's possible to build this from sources, but I don't know the details. The Viznyuk dhcpcd doesn't work in 2.1.24, but in that kernel the patched Hariguchi dhcpcd works. The Hariguchi dhcpcd can be built easily from sources.
Short summary:
MkLinux: Hariguchi: yes; Viznyuk, no 2.1.24: Hariguchi: yes if patched (easy to build); Viznyuk: no 2.1.102+: Hariguchi: no; Viznyuk: yes (tricky to build)
Note that the Viznyuk dhcpcd writes into /etc/resolv.conf directly (after renaming the existing one), so there's no need to copy or link it from /etc/dhcpc. Also note that it's typically installed into /sbin, not /usr/sbin, and that the command lines options are slightly different from the Hariguchi version. These differences may require small changes to ifup, if you're starting dhcpcd that way.
If you want a precompiled dhcpcd for linuxppc, send mail to
I've also made binary RPMs available in
ftp://ftp.linuxppc.org//pub/linuxppc/contrib/linuxppc-R4/RPMS/ Don't use dhcpcd-1.3.8-2.ppc.rpm in that directory, it's broken. The reliable versions here are dhcpcd-0.70-0.ppc.rpm (for linuxppc 2.1.24), and dhcpcd-1.3.8-3.ppc.rpm (linuxppc 2.1.102 and up). An rpm for 1.3.9 should show up shortly. I also have a modified 1.3.9 which includes the -c command-file option, as in 0.65 and 0.70 (the standard Viznyuk dhcpcd doesn't include this.)
If you are trying to run dhcpcd on the Token Ring Network it will not
work. This is the solution provided to me by
Henrik Stoerner (henrik_stoerner@olicom.dk)
The problem is that dhcpcd only knows about Ethernet cards. If it finds a Token-Ring card, it refuses to do anything with it and reports "interface is not ethernet".
The solution is to apply a simple patch to the dhcpcd sources. I have put up a small web page with the patch, RedHat RPM-files and a precompiled binary at http://eolicom.olicom.dk/~storner/dhcp/
The patch has been sent to the dhcpcd maintainer, so hopefully it will be included in a future release of dhcpcd.
After your machine reboots your network interface should be configured. Type:
ifconfig
You should get something like this
lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:302 errors:0 dropped:0 overruns:0 frame:0 TX packets:302 errors:0 dropped:0 overruns:0 carrier:0 coll:0 eth0 Link encap:Ethernet HWaddr 00:20:AF:EE:05:45 inet addr:24.128.53.102 Bcast:24.128.53.255 Mask:255.255.254.0 ^^^^^^^^^^^^^^^^^^^^^^^ UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24783 errors:1 dropped:1 overruns:0 frame:1 TX packets:11598 errors:0 dropped:0 overruns:0 carrier:0 coll:96 Interrupt:10 Base address:0x300
If you have some normal number under inet. addr you are set. If you see 0.0.0.0 don't despair, it is a temporary setting before dhcpcd acquires the IP address. If even after few minutes you are seeing 0.0.0.0 please check out troubleshooting. DHCPcd is a daemon and will stay running as long as you have your machine on. Every three hours it will contact the DHCP server and try to renew the IP address lease. It will log all the messages in the syslog (on Slackware /var/adm/syslog, RedHat/OpenLinux /var/log/syslog).
One final thing. You need to specify your nameservers. There are two ways to do it, you can either ask your provider to provide you with the addresses of your name server and then put those in the /etc/resolv.conf or DHCPcd will obtain the list from the DHCP server and will build a resolv.conf in /etc/dhcpc. I decided to use DHCPcds resolv.conf by doing the following:
Back up your old /etc/resolv.conf
mv /etc/resolv.conf /etc/resolv.conf.OLD
If directory /etc/dhcpc doesn't exist create it
mkdir /etc/dhcpc
Make a link from /etc/dhcpc/resolv.conf to /etc/resolv.conf
ln -s /etc/dhcpc/resolv.conf /etc/resolv.conf
If that doesn't work try this (fix suggested by nothing@cc.gatech.edu with a little amendment by Henrik Stoerner)
This last step I had to perform only because my dhcpcd doesn't create an /etc/dhcpc/resolv.conf. In /etc/sysconfig/network-scripts/ifup I made the following changes (which are a very poor hack, but they work for me):
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${DEVICE}... " /sbin/dhcpcd -c /etc/sysconfig/network-scripts/ifdhcpc-done ${DEVICE} echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh if [ -f /var/run/dhcp-wait-${DEVICE}.pid ]; then ^^^^ echo "failed." exit 1
I changed to:
elif [ "$BOOTPROTO" = dhcp -a "$ISALIAS" = no ]; then echo -n "Using DHCP for ${DEVICE}... " /sbin/dhcpcd echo "echo \$$ > /var/run/dhcp-wait-${DEVICE}.pid; exec sleep 30" | sh if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ]; then ^^^^^^ echo "failed." exit 1
Notice the ! (bang) in
if [ ! -f /var/run/dhcp-wait-${DEVICE}.pid ];
Now sit back and enjoy :-).
Following step(s) are not necessary but might be useful to some people
a) If you need network connectivity only occasionally you can start dhcpcd from the command line (you have to be root to do this) with:
/usr/sbin/dhcpcd
When you need to down (turn off) the network type
/usr/sbin/dhcpcd -k
If you have followed the steps outlined above and you are unable to access the network there are several possible explanations:
I. Your network card is not configured properly.
During the boot up process your Linux will probe your network card and should say something along these lines:
eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10. 3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
If a message like this doesn't appear your ethernet card might not be recognized by your Linux system. If you have a generic ethernet card (a NE2000 clone) you should have received a disk with DOS utilities that you can use to set up the card. Try playing with IRQs until Linux recognizes your card (IRQ 9,10,12 are usually good).
II. Your DHCP server supports RFC 1541/My DHCP server is Windows NT
Try running dhcpcd by typing
dhcpcd -r
Use ifconfig to check if your network interface is configured (wait few seconds for the configuration process, initally it will say Inet.addr=0.0.0.0)
If this solves your problem add the "-r" flag to the boot up scripts
ie. instead of /sbin/dhcpcd
you will have /sbin/dhcpcd -r
For example under RedHat edit script /etc/sysconfig/network-scripts/ifup and change the following
IFNAME=$[ {DEVICE} \ "/sbin/dhcpcd -r -c /etc/"- etc etc.
III. During bootup I get error message "Using DHCP for eth0 ... failed" but my system works fine.
You are most likely using RedHat and you haven't followed instructions carefully :-). You are missing the ! (bang) in one of the if statements. Jump here and check how to fix it.
IV. My network works for few minutes and then stops responding
There are some reports of gated (gateway daemon) screwing up routing on Linux boxes which results in problem described above. Check if gated is running
ps -auxww | grep gate
If it is try removing it with RedHat's RPM manager or removing the entry in /etc/rc.d/
V. My ethernet card is recognized during boot up but I still get "NO DHCPOFFER" message in my logs. I also happen to have a PCMCIA ethernet card.
You need to make sure that you have the 10BaseT port ("phone" plug) on your network card activated. Best way to verify it is to check what kind of connector your card is configured for during bootup e.g.
eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 20 af ee 11 11, IRQ 10. ^^^^^^^^^^^^ 3c509.c:1.07 6/15/95 becker@cesdis.gsfc.nasa.gov
I have received reports of laptop users having this kind of problems due to the PCMCIA utilities (specifically ifport) that would set the connector type to 10Base2 (thinnet). You have to make sure you use 10BaseT for your connection. If you are not reconfigure the card and restart the computer.
VI. My DHCP client broadcasts requests but no one answers (Contributed by Peter Amstutz)
On some systems, you need to include some hostname for your machine as part of the request. With dhcpcd, do this with 'dhcpcd -h foohost' Probably the hostname wanted will be your account username on the network.
VII. I have followed all the steps but still my machine is not able to connect
The cable modem will usually memorize the ethernet address of your network card so if you connect a new computer or switch network cards you will somehow have to "teach" your cable modem to recognize the new computer/card. Usually you can turn of the modem and bring it back up while computer is on or you will have to call tech support and tell them that you have changed a network card in the computer.
You have firewall rules (ipfwadm rules) that disallow port 67/68 traffic used by DHCP to distribute configuration info. Check your firewall rules carefully.
VIII. I have MediaOne Express service and I still can't connect.
It appears that MediaOne has been using adding some things to DHCP that shouldn't be there. Supposedly this is not a problem anymore but if you experience outages check for these things. If you are (un)lucky to have Windows NT on your machine if you go into Event Viewer you will see a warning like this.
DHCP received an unknown option 067 of length 005. The raw option data is given below.
0000: 62 61 73 69 63 basic
If this is the problem go to ftp://vanbuer.ddns.org/pub/ and either download a binary or get the source for the change.