lunes, septiembre 15, 2008

Más sobre el cambio de nombre en HP-UX



En un post anterior
explicaba como cambiar el nombre a un servidor HP-UX.

Después ha habido un comentario de alexav8 y creo que conviene darle la razón y mejorar algo la explicación.

Tal y como explica el man, hostname sirve para "set or display name of current host system".
Si hacemos hostname nombre todo solucionado. Lo mismo podriamos hacer con uname -S nombre. Lo que ocurre es que si hacemos eso, al arrancar el sistema volverá a coger el antiguo nombre. Por eso conviene modificar el fichero /etc/rc.config.d/netconf. De esta forma el cambio es permanente.

En ese mismo fichero de configuración, puede aparecer o no una variable llamada NODENAME.
Si no existe o no tiene ningún valor asignado entonces perfecto.
Si tiene un valor asignado, también habrá que modificarlo para dejarlo igual que el HOSTNAME.

¿Que sentido tiene que haya dos variables para lo mismo?

Por una parte hay un tema de compatibilidad ya que mucho antes que hostnames había nodenames. Hace mucho tiempo, en una galaxias muy muy lejana no había redes Ethernet ni protocolos TCP/IP y el mecanismo para transferencia de ficheros y login remoto era uucp (Unix to Unix copy) utilizando conexiones series o modems. Para estas cosillas se usaba el nodename. 
Debido a ello, hay diferentes llamadas al sistema relacionadas (getuname, setuname) y (gethostname, sethostname) que se relacionan con esos dos nombres diferentes. Normalmente tendrán el mismo valor.

Para entender la relación entre los dos nombres podemos fijarnos en el script hostname que se ejecuta en el arranque.

Básicamente hace un hostname $HOSTNAME, y luego mira si hay $NODENAME.
Si hay $NODENAME, entonces hace uname -S $NODENAME.
Si no lo hay entonces uname -S $HOSTNAME.

Saludos y gracias por el comentario alexav8.

#!/sbin/sh
#
# @(#)B11.23_LR 
#
# NOTE:    This script is not configurable!  Any changes made to this
#          scipt will be overwritten when you upgrade to the next
#          release of HP-UX.
#
# WARNING: Changing this script in any way may lead to a system that
#          is unbootable.  Do not modify this script.
#

#
# Set hostname
#
PATH=/sbin:/usr/sbin:/usr/bin
export PATH

rval=0
set_return() {
x=$?
if [ $x -ne 0 ]; then
echo "EXIT CODE: $x"
rval=1
fi
}

case $1 in
start_msg)
echo "Setting hostname"
;;

start)
if [ -f /etc/rc.config ] ; then
. /etc/rc.config
else
echo "ERROR: /etc/rc.config defaults file MISSING"
fi
hostname $HOSTNAME
set_return

if [ -z "$NODENAME" ] ; then
  uname -S ${HOSTNAME%%.*}
else
  uname -S $NODENAME
fi
set_return

# JAGae29563 ( uname(1) is displaying -t as the OS name )
# Adding a condition to check OPERATING_SYSTEM, before sending it to
# setuname. previously setuname was called as "setuname -s
# $OPERATING_SYSTEM -t". If OPERATING_SYSTEM is not set, then -t
# is taken as argument to -s and OPERATING_SYSTEM is set to -t.
# The manpage of setuname clearly says, -s needs an argument.

if [ -z "$OPERATING_SYSTEM" ]; then
echo "WARNING: OPERATING_SYSTEM is not set."
echo "         using default value of HP-UX"
OPERATING_SYSTEM=HP-UX
fi
        setuname -t -s $OPERATING_SYSTEM
        set_return
;;

*)
echo "usage: $0 {start}"
;;
esac

exit $rval

No hay comentarios: