1 #!/sbin/sh
   2 #
   3 # CDDL HEADER START
   4 #
   5 # The contents of this file are subject to the terms of the
   6 # Common Development and Distribution License (the "License").
   7 # You may not use this file except in compliance with the License.
   8 #
   9 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10 # or http://www.opensolaris.org/os/licensing.
  11 # See the License for the specific language governing permissions
  12 # and limitations under the License.
  13 #
  14 # When distributing Covered Code, include this CDDL HEADER in each
  15 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16 # If applicable, add the following below this CDDL HEADER, with the
  17 # fields enclosed by brackets "[]" replaced with your own identifying
  18 # information: Portions Copyright [yyyy] [name of copyright owner]
  19 #
  20 # CDDL HEADER END
  21 #
  22 #
  23 # Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T.
  24 # All rights reserved.
  25 #
  26 #
  27 # Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  28 # Use is subject to license terms.
  29 #
  30 # ident "%Z%%M% %I%     %E% SMI"
  31 
  32 . /lib/svc/share/smf_include.sh
  33 . /lib/svc/share/net_include.sh
  34 
  35 # Make sure that the libraries essential to this stage of booting can be found.
  36 LD_LIBRARY_PATH=/lib; export LD_LIBRARY_PATH
  37 
  38 #
  39 # If DHCP was used on a primary interface then set the hostname
  40 # that was returned. If no hostname was returned, set the name
  41 # to be "unknown". The hostname must be set to something, because
  42 # tooltalk will hang unless the name can be locally resolved.
  43 # Sendmail also requires the name to be resolvable locally.
  44 # Later, in inetsvc, we create a name "unknown" and create a entry
  45 # in the local /etc/inet/hosts file pairing "unknown" with the IP
  46 # address assigned by DHCP.  The use of bootparams as a fallback
  47 # for all non-DHCP cases provides compatibility with the
  48 # behavior of the system before netstrategy was introduced.
  49 #
  50 # For non-global zones, fall back to the `uname -n` value provided by the
  51 # kernel if /etc/nodename does not exist, as is expected on an initial boot.
  52 #
  53 
  54 smf_netstrategy
  55 
  56 case "$_INIT_NET_STRATEGY" in
  57         "dhcp") hostname=`/sbin/dhcpinfo Hostname` ;;
  58         "rarp") hostname=`/sbin/hostconfig -h -p bootparams`
  59                 trap 'intr=1' 2 3
  60                 while [ -z "$hostname" -a ! -f /etc/.UNCONFIGURED -a \
  61                     -z "$intr" ]; do
  62                         echo "re-trying host configuration..."
  63                         # Restrict this to IPv4 interfaces.
  64                         /sbin/ifconfig -adD4 auto-revarp up
  65                         hostname=`/sbin/hostconfig -h -p bootparams`
  66                 done
  67                 trap 2 3 ;;
  68         "none") hostname="`shcat /etc/nodename 2>/dev/null`"
  69                 if [ -z "$hostname" ]; then
  70                         if smf_is_globalzone; then
  71                                 hostname=`/sbin/hostconfig -h -p bootparams`
  72                         else
  73                                 hostname=`/sbin/uname -n`
  74                         fi
  75                 fi ;;
  76 esac
  77 
  78 #
  79 # If the netstrategy was unsuccessful and we haven't got a locally configured
  80 # name, default to "unknown"
  81 #
  82 if [ -z "$hostname" ]; then
  83         hostname="`shcat /etc/nodename 2>/dev/null`"
  84         if [ -z "$hostname" ]; then
  85                 hostname="unknown"
  86         fi
  87 fi
  88 
  89 /sbin/uname -S $hostname
  90 
  91 echo "Hostname: `/sbin/uname -n`" > /dev/msglog
  92 
  93 # Reset the library path now that we are past the critical stage
  94 unset LD_LIBRARY_PATH
  95 
  96 exit $SMF_EXIT_OK