Yes, ok. Well the first thing is you want to use the newer client, (dhcp-client-beta if you're running slink, dhcp-client if you're running potato). Using the newer client is necessary because this client does not go into the background until it gets an address (or times out, but let's hope/assume that doesn't happen). The older client did go into the background with the unfortunate result that samba and other network daemons that want to know what your address is and want to look it up by host name would be started right away before the dhcp client had time to get an address.
The next thing is to modify /etc/dhclient-script. This script is run at various times by the dhcp client daemon in order to accomplish certain things like setting up routes. We need to add code to it so that when dhcp acquires an IP address it will update the /etc/hosts file to make the machine's host name resolve to it's IP address properly. I've included my /etc/dhclient-script which you can copy from. "J.M. \"Jersey\" Miszczyk" wrote: > Hello Phil, > > I am not that much worried about the other machines on the network, since > they are Win systems and I am installing Samba on my machine but...... my > machine does not even know itself :(. If I put some sort of static IP > address into "hosts" file this IP address is used when I try to ping say, > "elvis" and the error message that "network is unreachable" shows on my > screen. If I ping the IP address which I pick up from running "ifconfig" > for example, everything works fine. > I can force network admin to give me a static address but.... this is > besides the point <lol>... now the matter of pride is to solve the > problem.... if you know what I mean :))). > Jens Jorgensen mentiond about a script updating "hosts" file > automatically... would you have any idea it should look like? :) > > Best regards and thank you for help :) > "Jersey" > > ---------- > From: Phil Brutsche[SMTP:[EMAIL PROTECTED] > Sent: Wednesday, October 13, 1999 12:36 AM > To: [EMAIL PROTECTED] > Cc: Debian-User > Subject: Re: DHCP problem.... > > A long time ago, in a galaxy far, far way, someone said... > > > I just installed DHCP client on Debian slink machine. It works almost > > fine.... it just does not pick up the host name :(. It is seen on the > > network by its IP address only. If I ping it by the name from the local > > console it responds that the host name is not known (I removed its static > > IP entry from the "hosts" file). > > Any suggestions will be appreciated :) > > This is how I read your message: > 1) A computer running slink called elvis (for example) uses DHCP to get > it's IP# and related information. > 2) Someone else on the network tries to ping elvis, and fails > 3) Someone on elvis tries to ping elvis, and fails > > If this is the case, welcome to DHCP :) The reason #2 and #3 fails is > because there is no way for another system to find out elvis' IP#, either > because the name 'elvis' wasn't found in /etc/hosts (or the equivalent), > or in DNS, as you found out. Your solutions are: > 1) convince the local system administrator(s) to use Dynamic DNS. This > allows the DHCP server to update the DNS server's IP# database > 2) convince the local system administrator(s) to give you a static IP# > somehow, either through DHCP by MAC address or an outright static IP# > (no DHCP involved) > 3) use one of the free dynamic hosting services available on the internet; > an example is www.dhs.org > > -- > ---------------------------------------------------------------------- > Phil Brutsche [EMAIL PROTECTED] > > "There are two things that are infinite; Human stupidity and the > universe. And I'm not sure about the universe." - Albert Einstein -- Jens B. Jorgensen [EMAIL PROTECTED]
#!/bin/sh # dhclient-script for Linux. Dan Halbert, March, 1997. # Updated for Linux 2.[12] by Brian J. Murrell, January 1999. # No guarantees about this. I'm a novice at the details of Linux # networking. # Notes: # 0. This script is based on the netbsd script supplied with dhcp-970306. # 1. ifconfig down apparently deletes all relevant routes and flushes # the arp cache, so this doesn't need to be done explicitly. # 2. The alias address handling here has not been tested AT ALL. # I'm just going by the doc of modern Linux ip aliasing, which uses # notations like eth0:0, eth0:1, for each alias. # 3. I have to calculate the network address, and calculate the broadcast # address if it is not supplied. This might be much more easily done # by the dhclient C code, and passed on. # 4. TIMEOUT not tested. ping has a flag I don't know, and I'm suspicious # of the $1 in its args. update_hosts () { if sed -e '/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}[[:space:]]\+.*'$(/bin/hostname)'.*/ s/^[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/'$1'/' < /etc/hosts > /etc/hosts.new.$$ then /bin/cp /etc/hosts /etc/hosts.old mv /etc/hosts.new.$$ /etc/hosts else rm /etc/hosts.new.$$ fi } # Must be used on exit. Invokes the local dhcp client exit hooks, if any. function exit_with_hooks() { exit_status=$1 if [ -x /etc/dhclient-exit-hooks ]; then . /etc/dhclient-exit-hooks fi # probably should do something with exit status of the local script exit $exit_status } # set this to 1 for debug messages DEBUG=0 [ $DEBUG = 1 ] && printf "\tCalled for reason %s on interface %s\n" $reason $interface # Invoke the local dhcp client enter hooks, if they exist. if [ -x /etc/dhclient-enter-hooks ]; then exit_status=0 . /etc/dhclient-enter-hooks # allow the local script to abort processing of this state # local script must set exit_status variable to nonzero. if [ $exit_status -ne 0 ]; then exit $exit_status fi fi release=`uname -r` release=`expr $release : '\(.*\)\..*'` relmajor=`echo $release |sed -e 's/^\([^\.]*\)\..*$/\1/'` relminor=`echo $release |sed -e 's/^.*\.\([^\.]*\)$/\1/'` [ $DEBUG = 1 ] && printf "\tKernel version %s.%s.x\n" $relmajor $relminor if [ x$new_broadcast_address != x ]; then new_broadcast_arg="broadcast $new_broadcast_address" fi if [ x$old_broadcast_address != x ]; then old_broadcast_arg="broadcast $old_broadcast_address" fi if [ x$new_subnet_mask != x ]; then new_subnet_arg="netmask $new_subnet_mask" fi if [ x$old_subnet_mask != x ]; then old_subnet_arg="netmask $old_subnet_mask" fi if [ x$alias_subnet_mask != x ]; then alias_subnet_arg="netmask $alias_subnet_mask" fi if [ x$reason = xMEDIUM ]; then # Linux doesn't do mediums (ok, ok, media). exit_with_hooks 0 fi if [ x$reason = xPREINIT ]; then if [ x$alias_ip_address != x ]; then # Bring down alias interface. Its routes will disappear too. [ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface ifconfig $interface:0- inet 0 fi if [ $relmajor -lt 2 ] || ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ) then [ $DEBUG = 1 ] && printf "\tifconfig %s inet 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up\n" $interface ifconfig $interface inet 0.0.0.0 netmask 0.0.0.0 broadcast 255.255.255.255 up # Add route to make broadcast work. Do not omit netmask. [ $DEBUG = 1 ] && printf "\troute add default dev %s netmask 0.0.0.0\n" $interface route add default dev $interface netmask 0.0.0.0 else # added this code to fix this script for kernels greater than 2.0 [ $DEBUG = 1 ] && printf "\tifconfig %s inet 0.0.0.0 up\n" $interface ifconfig $interface inet 0.0.0.0 up # took this line out to fix this for kernels greater than 2.0 # ifconfig $interface up fi # We need to give the kernel some time to get the interface up. sleep 1 exit_with_hooks 0 fi if [ x$reason = xARPCHECK ] || [ x$reason = xARPSEND ]; then exit_with_hooks 0 fi if [ x$reason = xBOUND ] || [ x$reason = xRENEW ] || \ [ x$reason = xREBIND ] || [ x$reason = xREBOOT ]; then if [ x$old_ip_address != x ] && [ x$alias_ip_address != x ] && \ [ x$alias_ip_address != x$old_ip_address ]; then # Possible new alias. Remove old alias. [ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface ifconfig $interface:0- inet 0 fi if [ x$old_ip_address != x ] && [ x$old_ip_address != x$new_ip_address ]; then # IP address changed. Bringing down the interface will delete all routes, # and clear the ARP cache. [ $DEBUG = 1 ] && printf "\tifconfig %s inet down HERE!\n" $interface ifconfig $interface inet down fi if [ x$old_ip_address = x ] || [ x$old_ip_address != x$new_ip_address ] || \ [ x$reason = xBOUND ] || [ x$reason = xREBOOT ]; then [ $DEBUG = 1 ] && printf "\tifconfig %s inet %s %s %s\n" $interface $new_ip_address $new_subnet_arg $new_broadcast_arg ifconfig $interface inet $new_ip_address $new_subnet_arg $new_broadcast_arg update_hosts $new_ip_address printf "The hosts table was updated.\n" # Add a network route to the computed network address. if [ $relmajor -lt 2 ] || \ ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then [ $DEBUG = 1 ] && printf "\troute add -net %s %s dev %s\n" $new_network_number $new_subnet_arg $interface route add -net $new_network_number $new_subnet_arg dev $interface fi for router in $new_routers; do [ $DEBUG = 1 ] && printf "\troute add default gw %s\n" $router route add default gw $router done fi if [ x$new_ip_address != x$alias_ip_address ] && [ x$alias_ip_address != x ]; then [ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface ifconfig $interface:0- inet 0 [ $DEBUG = 1 ] && printf "\tifconfig %s:0 inet %s %s\n" $interface $alias_ip_address $alias_subnet_arg ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg [ $DEBUG = 1 ] && printf "\troute add -host %s %s:0\n" $alias_ip_address $interface route add -host $alias_ip_address $interface:0 fi echo search $new_domain_name >/etc/resolv.conf for nameserver in $new_domain_name_servers; do echo nameserver $nameserver >>/etc/resolv.conf done exit_with_hooks 0 fi if [ x$reason = xEXPIRE ] || [ x$reason = xFAIL ]; then exit 0 if [ x$alias_ip_address != x ]; then # Turn off alias interface. [ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface ifconfig $interface:0- inet 0 fi if [ x$old_ip_address != x ]; then # Shut down interface, which will delete routes and clear arp cache. [ $DEBUG = 1 ] && printf "\tifconfig %s inet down\n" $interface ifconfig $interface inet down fi if [ x$alias_ip_address != x ]; then [ $DEBUG = 1 ] && printf "\tifconfig %s:0 inet %s %s\n" $interface $alias_ip_address $alias_subnet_arg ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg [ $DEBUG = 1 ] && printf "\troute add -host %s %s:0\n" $alias_ip_address $interface route add -host $alias_ip_address $interface:0 fi exit_with_hooks 0 fi if [ x$reason = xTIMEOUT ]; then if [ x$alias_ip_address != x ]; then [ $DEBUG = 1 ] && printf "\tifconfig %s:0- inet 0\n" $interface ifconfig $interface:0- inet 0 fi [ $DEBUG = 1 ] && printf "\tifconfig %s inet %s %s %s\n" $interface $new_ip_address $new_subnet_arg $new_broadcast_arg ifconfig $interface inet $new_ip_address $new_subnet_arg $new_broadcast_arg set $new_routers ############## what is -w in ping? if ping -q -c 1 $1; then if [ x$new_ip_address != x$alias_ip_address ] && \ [ x$alias_ip_address != x ]; then [ $DEBUG = 1 ] && printf "\tifconfig %s:0 inet %s %s\n" $interface $alias_ip_address $alias_subnet_arg ifconfig $interface:0 inet $alias_ip_address $alias_subnet_arg [ $DEBUG = 1 ] && printf "\troute add -host %s dev %s:0\n" $alias_ip_address $interface route add -host $alias_ip_address dev $interface:0 fi if [ $relmajor -lt 2 ] || \ ( [ $relmajor -eq 2 ] && [ $relminor -eq 0 ] ); then [ $DEBUG = 1 ] && printf "\troute add -net %s\n" $new_network_number route add -net $new_network_number fi for router in $new_routers; do [ $DEBUG = 1 ] && printf "\troute add default gw %s\n" $router route add default gw $router done echo search $new_domain_name >/etc/resolv.conf.std for nameserver in $new_domain_name_servers; do echo nameserver $nameserver >>/etc/resolv.conf.std done if [ -f /etc/resolv.conf ]; then rm -f /etc/resolv.conf ln /etc/resolv.conf.std /etc/resolv.conf fi exit_with_hooks 0 fi [ $DEBUG = 1 ] && printf "\tifconfig %s inet down\n" $interface ifconfig $interface inet down exit_with_hooks 1 fi exit_with_hooks 0