diff options
author | Kenneth R Westerback <krw@cvs.openbsd.org> | 2001-11-17 20:23:24 +0000 |
---|---|---|
committer | Kenneth R Westerback <krw@cvs.openbsd.org> | 2001-11-17 20:23:24 +0000 |
commit | 63ef7f8e5d3f43701fae752fc152c7f1756f4729 (patch) | |
tree | 4f77b318fba48a6c48f86576c0bdfcf348c8bd0a /distrib | |
parent | a1a4633c607cf0114cfa8cdcf0f36b930a039f7d (diff) |
Improve/enhance network handling during installations.
a) Allow user to enter empty FQDN and assume DHCP will supply one.
b) Silently check for any DHCP supplied FQDN after network
interfaces are initialized. *NOTE* DHCP information will
now override any user supplied FQDN.
c) Apply FQDN information to hosts file only after DHCP has had a
chance to supply information.
d) Don't modify hosts file if FQDN is empty.
e) Don't preserve hosts file across install script restarts.
f) Don't preserve hostname.* files across install script restarts.
g) Don't preserve decision to use resolver during install across
install script restarts.
h) Don't allow DHCP to force use of resolver during install.
i) Ensure DHCP created resolv.conf file is saved as /etc/resolv.conf.
j) Add IPv6 localhost ('::1') line to hosts file. (Closes PR#2155)
k) Make IPv4 and IPv6 localhost lines in hosts file look like
'X localhost.domain.name localhost'
Bonus: install.sub on the floppy image is 51 bytes smaller.
ok millert@
Diffstat (limited to 'distrib')
-rw-r--r-- | distrib/miniroot/install.sub | 92 |
1 files changed, 57 insertions, 35 deletions
diff --git a/distrib/miniroot/install.sub b/distrib/miniroot/install.sub index b514d2e2b4b..66c8ec3d31e 100644 --- a/distrib/miniroot/install.sub +++ b/distrib/miniroot/install.sub @@ -1,5 +1,5 @@ #!/bin/sh -# $OpenBSD: install.sub,v 1.171 2001/10/31 01:33:24 krw Exp $ +# $OpenBSD: install.sub,v 1.172 2001/11/17 20:23:23 krw Exp $ # $NetBSD: install.sub,v 1.5.2.8 1996/09/02 23:25:02 pk Exp $ # # Copyright (c) 1997,1998 Todd Miller, Theo de Raadt @@ -455,17 +455,13 @@ addhostent() { # $1 - IP address # $2 - symbolic name - # Create an entry in the hosts table. If no host table - # exists, create one. If the symbolic name already exists, - # replace its entry. - if [ ! -f /tmp/hosts ]; then - echo "127.0.0.1 localhost" > /tmp/hosts - fi + # Create an entry in the hosts file. If an entry with the + # same symbolic name already exists, delete it. - sed "/ $2.$FQDN $2\$/d" < /tmp/hosts > /tmp/hosts.new + sed "/ $2\$/d" < /tmp/hosts > /tmp/hosts.new mv /tmp/hosts.new /tmp/hosts - echo "$1 $2.$FQDN $2" >> /tmp/hosts + echo "$1 $2" >> /tmp/hosts } addifconfig() { @@ -485,7 +481,7 @@ addifconfig() { fi } -configurenetwork() { +configure_all_interfaces() { local _ifsdone= _ifs _ouranswer= _reprompt=1 _IFS=`get_ifdevs` @@ -2209,6 +2205,9 @@ local _fstab=$1 } get_fqdn() { + # $1 = resolv.conf file to search for FQDN + # $2 = hosts file to add FQDN information to + # Find LAST instance of DOMAIN or SEARCH and extract first domain name # on that line as FQDN. Then ask user, just to be sure. @@ -2219,13 +2218,19 @@ get_fqdn() { -e '${g;p;}' $1` fi - resp= # force at least one iteration - while [ "X${resp}" = X"" ]; do + if [ -f "$2" -a "X$FQDN" != "X" ]; then + # Add FQDN to hosts file entries created by addhostent, changing + # lines like + # 1.2.3.4 hostname + # to + # 1.2.3.4 hostname.$FQDN hostname + sed "s/\\(.*\\)[[:space:]]\\(.*\\)\$/\\1 \\2.$FQDN \\2/" < $2 > $2.new + mv $2.new $2 + else echo -n "Enter DNS domain name (e.g. \"bar.com\"): [$FQDN] " getresp "$FQDN" - done - - FQDN=$resp + FQDN=$resp + fi } donetconfig() { @@ -2242,21 +2247,48 @@ donetconfig() { hostname $resp echo $resp > /tmp/myname + # Always create new hosts file. If install.sh has been + # restarted, an existing one may contain information which + # will conflict with the information about to be entered. + # Also ensures logic to put FQDN in hosts file will create + # hosts file lines in correct format. + echo "::1 localhost\n127.0.0.1 localhost" > /tmp/hosts + + # Remove any existing hostname.* files. If install.sh has + # been restarted, this ensures a correct list of configured + # interfaces is displayed, and gives the user a chance to + # change which interfaces are to be configured. + rm -f /tmp/hostname.* + + # Revoke any previous decision on whether or not to use + # a nameserver during installation. + rm -f /tmp/resolv.conf.shadow + echo - echo "If you have any devices being configured by a DHCP server" - echo "it is recommended that you do not enter a default route or" - echo "any name servers." + echo "If any interfaces will be configured using a DHCP server" + echo "it is recommended that you do not enter a DNS domain name," + echo "a default route, or any name servers." echo - # Get FQDN before creation of hosts file entries in addhostent() + FQDN="" + get_fqdn /tmp/resolv.conf + + configure_all_interfaces + + # As dhclient will populate /etc/resolv.conf, a symbolic link to + # /tmp/resolv.conf.shadow, mv any such file to /tmp/resolv.conf + # so it will eventually be copied to /mnt/etc/resolv.conf and will + # not in the meantime remove the user's ability to choose to use it + # or not, during the rest of the install. if [ -f /tmp/resolv.conf.shadow ]; then - get_fqdn /tmp/resolv.conf.shadow - else - # If install is being re-run, save a few keystrokes - get_fqdn /tmp/resolv.conf + mv /tmp/resolv.conf.shadow /tmp/resolv.conf fi - configurenetwork + # Get any DHCP supplied FQDN, and in any case apply FQDN to + # the host names in /tmp/hosts, all without asking for any more + # user confirmation. This means DHCP supplied information will + # override a user supplied (or previous DHCP supplied) FQDN. + get_fqdn /tmp/resolv.conf /tmp/hosts resp=`route -n show | grep '^default' | @@ -2280,17 +2312,7 @@ donetconfig() { fi resp="none" - if [ -f /etc/resolv.conf ]; then - resp= - for n in `grep '^nameserver ' /etc/resolv.conf | \ - sed -e 's/^nameserver //'`; do - if [ "X${resp}" = "X" ]; then - resp="$n" - else - resp="$resp $n" - fi - done - elif [ -f /tmp/resolv.conf ]; then + if [ -f /tmp/resolv.conf ]; then resp= for n in `grep '^nameserver ' /tmp/resolv.conf | \ sed -e 's/^nameserver //'`; do |