diff options
Diffstat (limited to 'initramfs/initrd-stuff/bin/dhcpmkconfig')
-rwxr-xr-x | initramfs/initrd-stuff/bin/dhcpmkconfig | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/initramfs/initrd-stuff/bin/dhcpmkconfig b/initramfs/initrd-stuff/bin/dhcpmkconfig new file mode 100755 index 00000000..ded4caaa --- /dev/null +++ b/initramfs/initrd-stuff/bin/dhcpmkconfig @@ -0,0 +1,68 @@ +#!/bin/sh +# +# universal (distro independent) IP configuration writer for several dhcp +# clients used within OpenSLX initramfs. The result is written in unified +# form to the /etc/machine-setup file +# +# Dirk von Suchodoletz <dvs@OpenSLX.com>, 03-09-2006 +# Lars Mueller, 23-06-2006 +# Oliver Tappe, 23-06-2006 +# +# (c) 2006 - RZ Universitaet Freiburg + +# client variable should be exported via calling function +cfgfile="/tmp/confviadhcp" +cfgmsg="\n## Configuration written by $0" +infomsg="# --> You are using $dhcl. With this client you are not \ +able to\n# transfer any vendor specific, self defined dhcp options. If \ +this is\n# intended, use dhclient instead or get them via tftp (to be \ +enabled\n# via kernel command line)." +# heavy debugging output in level 3 and above ... and on 13 +#FIXME: DEBUGLEVEL is not propagated to this file (at least for Ubuntu) +[ -z "$DEBUGLEVEL" ] && DEBUGLEVEL=0 +[ $DEBUGLEVEL -gt 3 -a $DEBUGLEVEL -lt 8 -o $DEBUGLEVEL -eq 13 ] && \ + set -x +case $0 in + *dhcpcd*) + dhcl="dhcpcd"; echo -e "$cfgmsg\n$infomsg" >>/tmp/confviadhcp + sed -e "s,',\",g;s,IPADDR,clientip,;s,NETMASK,subnet_mask," \ + -e "s,GATEWAY,gateway,;s,BROADCAST,broadcast_address," \ + -e "s,HOSTNAME,host_name,;s,DOMAIN,domain_name," \ + -e "s,ROOTPATH,root_path,;s,DNS,domain_name_servers," \ + -e "s,NTPSERVERS,ntp_servers,;s,DHCPSID,serverip," \ + -e "s,WINSSERVERS,netbios_name_servers," \ + -e "s,NETWORK,network," \ + -e "s,DHCP..ADDR.*,,;s,.*TIME=.*,,;s,CL.*,,;/^$/d" \ + -e "s,INTER.*,,;s,DHCPSNAME.*,," /var/lib/dhcp/dhcpcd-eth0.info \ + >>$cfgfile + ;; + *dhclient*) + if [ $reason = "BOUND" ] ; then + echo -e "$cfgmsg\n# --> You are using dhclient. If you wish to \ +transfer other vendor/user\n# specific variables, you have to add \ +them in functions and in\n# dhcpmkconfig script or use tftp (to be \ +enabled via kernel command\n# line)." >>$cfgfile + set | sed -n -e '/^new/p' | sed \ + -e "s,^new_,,;s,fixed_address,clientip," \ + -e "s,routers,gateway,;s,dhcp_server_identifier,serverip," \ + -e "s,.*_t[iy][mp]e.*,,;s,.*_message_.*,,;/^$/d" \ + -e "s,language=,country=,;s,ip_address,clientip," \ + >>$cfgfile + fi + ;; + *pump*) + dhcl="pump"; echo -e "$cfgmsg\n$infomsg" >>$cfgfile + ;; + *udhcpc*) + dhcl="udhcpc"; echo -e "$cfgmsg\n$infomsg" >>$cfgfile + unset infomsg HOME IFS mask lease interface + set | sed \ + -e "s,^P.*,,;s,ntpsrv,ntp_servers,;s,ip,clientip," \ + -e "s,serverid,serverip,;s,subnet,subnet_mask," \ + -e "s,router,gateway,;s,hostname,host_name," \ + -e "s,dns,domain_name_servers,;s,domain,domain_name," \ + -e "s,broadcast,broadcast_address,;s,dhc.*,,;/^$/d" \ + >>$cfgfile + ;; +esac + |