Solaris 10 Intel para Administradores Linux (0.14)

Historial de revisiones
Revisión 1.030/01/2007Diego
Bravo
Primera versión

Tabla de contenidos

1. Introito
1.1. Versiones
2. La Instalación
3. Inicio (boot) del Sistema Operativo
3.1. Opciones para el Kernel
3.2. Grub
3.3. Sistemas de archivo automáticamente montados
3.4. Inicio del entorno gráfico
4. Entorno Gráfico
5. Paquetes
6. Servicios
6.1. Niveles de ejecución
7. Servicios de red
7.1. Configuración de la interfaz de red
7.2. Web Server
7.3. Inetd
8. Acceso al hardware
8.1. El sistema de archivos /devices
8.2. Detección del hardware
8.3. Archivos de dispositivo de disco
8.4. Particionamiento
8.5. Creación de "slices"
8.6. Creación de Filesystems
8.7. Configuración de filesystems
9. Configuración del Sistema
9.1. El sistema en uso
9.2. El Entorno Gráfico
9.3. Listado de Parches Instalados
9.4. Hardware reconocido
9.5. Solaris Management Console 2.1
9.6. Módulos del kernel
10. Herramientas de desarrollo
10.1. Herramientas GNU
10.2. Sun Studio 11
11. Conclusiones

Resumen

Este documento presenta de manera sucinta un acercamiento al uso y administración de sistemas Solaris 10 en plataforma Intel, desde el punto de vista de un administrador con medianos conocimientos de Linux u otro Unix. Puede considerarse un "Tutorial de Solaris" para iniciados.

1. Introito

Este texto pretende ilustrar algunas de las tareas más comunes con las que se enfrenta un usuario relativamente nuevo en el mundo de Solaris en plataforma Intel, desde la instación, pasando por diversos aspectos de configuración notables, y terminando con algunas conclusiones muy subjetivas.

El lector debe comprender que los errores de este texto son involuntarios. De igual modo, los problemas relatados con respecto a la instalación del Sistema Operativo corresponden exclusivamente a la versión (snapshoot) particular descargada de Internet hacia Abril de 2006, los cuales podrían haberse superado en años posteriores.

Este documento se distribuye bajo la licencia Creative Commons Attribution-ShareAlike 3.0 Unported License http://creativecommons.org/licenses/by-sa/3.0/

1.1. Versiones

  • 0.10 Primera versión publicada
  • 0.11 Nota sobre teclado español. Corregida marca tarj. Ethernet. Pruebas con ambientes de desarrollo.
  • 0.12 Aclaraciones mímimas; afinando redacción
  • 0.13 Nota sobre GRUB
  • 0.14 Correcciones menores de estilo

2. La Instalación

Esta experiencia de instalación se realizó en un computador relativamente antiguo adquirido de segunda mano para hacer diversas pruebas. Tiene un procesador Intel Pentium III de 500Mhz (modelo DELL Optiplex GX1) con 256Mb de RAM, un disco duro de 15Gb y tres interfases de red fast Ethernet (una 3Com -integrada- y dos Via-Rhine en slots pci agregadas por mi cuenta.)

La instalación se inició con el CDROM #1 descargado del sitio web de SUN (en total son cuatro CD’s.) El BIOS de este computador puede realizar el boot desde el CDROM por lo que no hubo necesidad de generar diskettes.

Lo primero que nos llamó la atención (favorablemente) fue la aparición de un menú de GRUB (GRand Unified Bootloader) con el que tenemos bastante familiaridad (pero, ver nota Grub/Solaris sobre esta versión de GRUB más adelante.) Tras seleccionar la primera opción el kernel se carga y se inician las preguntas de rigor: idioma, teclado, etc. El sistema rápidamente intenta pasar a modo gráfico, y es allí donde hubo el primer inconveniente: se requiere 400Mb de RAM para una instalación gráfica, por lo que se proseguirá en modo texto (pues este computador sólo tiene 256Mb.)

La instalación en modo texto tiene un aspecto relativamente similar a las antiguas instalaciones de DOS (no de Windows) con pantalla azul y el uso de teclas de función F2, F3, etc. Vienen más preguntas, algunas relativamente triviales como la zona horaria y el password de "root", y otras menos sencillas como la configuración de red (en mi caso, configuración estática pues no deseo preparar un servidor DHCP), sin IPV6, sin NIS/LDAP/Kerberos…

Un menú nos interroga acerca de una instalación "flash" o algo similar (sin mayor explicación) a lo que simplemente respondemos "no". Se solicita además un conjunto de "opciones de software" a ser instaladas y que en realidad no son parte del sistema operativo (por ejemplo, Software para J2EE, Documentación, etc.) a lo cual también se debe responder negativamente (en caso contrario el instalador solicitará discos que no disponemos) y luego tenemos un menú donde se nos pregunta por el tipo de instalación ¿"total"? ¿"estación de desarrollo"? ¿"sólo lo básico (core)"?… Aquí sí podemos elegir cualquiera de las opciones pues sólo tienen relación con el software de los 4 CD’s del sistema operativo. En nuestro caso elegimos la instalación full (pues no había gran diferencia con las otras en cuanto al espacio de disco requerido.)

Y así se llega al "problemático" tema de los discos/particiones/sistemas de archivo.

El único disco (IDE) de 15Gb ya tenía instalado un sistema (Free/BSD) y había aproximadamente 5Gb sin asignar. Sin embargo, por más que se intentó todas las opciones del particionador, no se pudo crear una nueva "partición Solaris" en la zona libre. Esto lo consideramos un bug (entre otros) del instalador. Finalmente, se optó por eliminar el Free/BSD (pues sólo era para pruebas) y al fin el instalador permitió crear una "partición Solaris". Cabe hacer notar que en esta "partición Solaris" el sistema operativo efectúa una posterior subdivisión cuyas unidades se suelen denominar "slice", las cuales corresponden a los filesystems. Esto es similar a Free/BSD, pero no existe en los sistemas Linux en los que un filesystem normalmente corresponde a un a partición creada con "fdisk".

En un principio decidimos asignar sólo 4Gb (a modo de prueba); Sin embargo, al intentar "regresar" para reparticionar, el instalador ya no quería hacer su trabajo. Tuvimos que resetear el computador y reiniciar la instalación. Cabe advertir que tras reiniciar, el instalador descubre" la "¿dañada?" partición Solaris y astútamente nos pregunta si deseamos conservar el contenido o "inicializar el disco". Se debe elegir la segunda opción, o nuevamente se confundirá.

En esta segunda oportunidad se asigó el disco completo y pasamos a la selección de los sistemas de archivo a ser creados. Se ofrece (para marcar) diversos sistemas como "/", "/usr", "/var", "/opt". A modo de prueba, decidimos seleccionar todos. Asimismo, intentamos "personalizar" los tamaños de los mismos nuestros criterios; sin embargo, aparentemente esto hizo que una vez más el instalador se confundiera y dejara de trabajar… una vez más se tuvo que resetear el computador y reiniciar la instalación.

En el tercer intento obviamente permitimos que el instalador decidiera los tamaños de los sistemas de archivo (es decir, no se solicitó personalizar nada) y la instalación pudo proseguir. Sin embargo, antes de pasar a la siguiente etapa, debemos comentar que posteriormente se tuvo que volver a reinstalar todo puesto que el espacio asignado en "/var" resultó ser insuficiente para la instalación de las herramientas de desarrollo "Studio 11" que se quizo agregar posteriormente… así que en nuestra instalación definitiva sólo se solicitó la creación de "/". De todos modos el instalador creó el sistema de archivos "/export/home" (¡sin solicitarlo!). Los tamaños asignados (por el instalador) fueron:

Tabla 1. Sistemas de Archivos

Filesystem Tamaño

/

3.9Gb

/export/home

9.3Gb

swap

568Mb


Nota: El directorio /export/home es el lugar estándar de creación de los directorios de los usuarios (equivalente al /home de otros sistemas.) En el Solaris x86 FAQ se explica la utilidad real de /home el Solaris.

La siguiente etapa corresponde a la configuración del entorno gráfico. El instalador permite seleccionar entre los servidores Xorg (descendiente de XFree86) y Xsun (servidor nativo de Sun.) Quizá Sun pretende desechar sus productos en los que no hace dinero y existe un fácil reemplazo "open source", tal vez por esto sugieren el uso de Xorg, y quizá su Xsun tenga los días contados.

Al menos en modo texto, el sistema hace muy poco por ayudar en la configuración del X Server, teniéndose que especificar manualmente el tipo de mouse, de tarjeta de video y de monitor (recuérdese el antiguo programa xf86config.) A continuación se sugiere realizar un "test" a fin de probar los parámetros introducidos.

Sea por lo que fuere, en nuestro caso al intentar hacer el "test" del X Server, el instalador nunca más volvió a responder (aunque parecía que seguía trabajando a juzgar por el ruido del disco duro y la lectora de CD.) Una vez más tuvimos que reiniciar la instalación y solicitar "SALTAR EL TEST". Esto aparentemente confunde al instalador pues luego se queja de que no se ha configurado correctamente el sistema gráfico y solicita nuevamente configurar y lanzar el test. Por suerte, en la segunda oportunidad, el "SALTAR EL TEST" sí permite proseguir. Las preguntas y las opciones aquí ciertamente son desconcertantes.

Otra pregunta extraña que nos hace el instalador está referida al modo en que se va a hacer el reset del computador tras culminar de instalarse el primer CDROM: modo manual o automático. El modo manual aparentemente permite realizar manualmente algunas tareas (lanzar comandos) antes de que se reinicie el computador. En este punto se debe extraer el CD #1 para que la instalación continúe; de lo contrario, el BIOS se reiniciará desde el CD, y el instalador partiría de cero. Por el contrario, tras extraer el CD, el BIOS deberá hacer el boot desde el disco duro, en el cual el instalador ya debe haber configurado GRUB en el sector de arranque.

El resto es relativamente conocido. Intercambiar CD’s, un sencillo indicador del avance relativo, y esperar.

A modo de comentario, vemos que el instalador de Solaris 10 para Intel no está adecuamente depurado, especialmente en lo referente al modo texto. Cualquier cosa fuera de lo "estándar" lo confunde, las preguntas son confusas (como para que a fuerza debamos matricularnos en sus cursos de administración) y la interface es relativamente pobre (incluso en modo gráfico a juzgar por los manuales.) Esto nos hace pensar en una malentendida "política de diseño de software" que lamentablemente todavía cunde en el ambiente Unix: puesto que está dirigido a "profesionales capacitados", puede hacerse frágil, confuso y carente de explicación clara.

3. Inicio (boot) del Sistema Operativo

Tal como se indicó, el instalador coloca GRUB en el sector de arranque con las opciones:

  • Solaris 10 1/06 s10x\_u1wos\_19a X86
  • Solaris failsafe

La opción "Solaris failsafe" inicializa el sistema en "modo de reparación", con un kernel genérico en memoria y con el root filesystem del disco montado en "/a".

Por el contrario, la primera opción permite iniciar el kernel normal "de trabajo" y tras unos pocos mensajes (a lo más seis líneas de texto) el sistema muestra su mensaje clásico de "login:".

3.1. Opciones para el Kernel

Una de las cosas más sorprendientes es la prácticamente total carencia de mensajes de los servicios que se iniciaban en el sistema. Si se desea obtener los mensajes del kernel en la consola, debemos proporcionarle la opción "-v" durante la ejecución de Grub. Para esto basta presionar la tecla "e" (editar) sobre la primera opción (Solaris 10…), ubicarse en la directiva "kernel" y volver a presionar "e" para editarla, y agregar "-v" al final de la directiva kernel con lo que queda:

kernel /platform/i86pc/multiboot -v

Luego presionar "b" para "boot".

Por otro lado, para ver en la consola los mensajes de los servicios iniciados por smf, usar "-m debug" en lugar de "-v". Son demasiados mensajes!

Si se desea iniciar el sistema en modo "consola gráfica" (similar a la presentación VGA de los Wind*ws cuando se inician), especificar via Grub:

kernel /platform/i86pc/multiboot -B console=graphics

Esta opción (y otras más) se pueden configurar en el archivo /boot/solaris/bootenv.rc:

console='graphics'

Teclado

No obstante haber seleccionado idioma español durante la instalación, el teclado resulta tener disposición de un teclado USA. Tras buscar en muchos documentos en Internet, encuentramos (al fin) que esto se corrige modificando la línea en /boot/solaris/bootenv.rc:

setprop kbd-type US-English

por

setprop kbd-type Spanish

Extrañamente los manuales (man) parecen indicar que el comando "loadkeys" debería utilizarse con este fin [1]; sin embargo, a nosotros no nos surtió ningún efecto.

Log - Mensajes de Inicio

Una vez cargado el sistema operativo, el comando dmesg permite obtener los últimos mensajes enviados por syslog. Los mensajes pueden ser leídos en el archivo /var/adm/messages, lo cual es configurable en /etc/syslog.conf.

3.2. Grub

Como es usual, GRUB mantiene su archivo de configuración en el directorio /boot/grub/menu.lst. Nuestra partición "root", o mejor dicho, nuestro slice "root" se configura allí mediante:

root (hd0,0,a)

Evidentemente, "a" corresponde al primer "slice" de la primera partición (cero) del disco duro "hd0".

Grub/Solaris

En el sistema que estamos utilizando, GRUB se reporta con versión 0.95, por lo que nos pareció natural instalar otro sistema (un Linux Ubuntu) en un segundo disco duro y reemplazarlo por la versión más actualizada que este último proporciona (0.97.)

Tras efectuar esto, descubrimos (con cierto horror) que el GRUB 0.97 no reconoce el "slice" de solaris y no puede bootearlo' Investigando en el Internet, descubrimos que la versión de GRUB proporcionada por Solaris está especialmente parchada para reconocer sus slices y su sistema de archivos, y aparentemente se espera que el futuro la distribución central de GRUB incorpore este soporte.

Afortunadamente la solución indicada es sencilla: bastó agregar la siguiente entrada en el menu.lst del GRUB de Linux:

Title Acceso a Solaris
rootnoverify (hd0,0)
chainloader +1

Solaris instala su GRUB en el sector de boot de la primera partición (algo similar al DOS), gracias a lo cual el GRUB instalado por Linux en el MBR puede invocarlo (un GRUB llama a otro GRUB.)

Así, tras seleccionar esta opción, el sistema automáticamente accede al GRUB instalado por Solaris en la primera partición (obtenemos su menú GRUB original.) Es necesario emplear rootnoverify (en vez de root) pues el GRUB estándar no reconoce en absoluto la partición (hd0,0) en la que yace el Solaris.

3.3. Sistemas de archivo automáticamente montados

Los sistemas de archivo montados en el arranque se configuran en el archivo /etc/vfstab, el cual es análogo al popular /etc/fstab (aquí inexistente.) Por ejemplo, para mi "root filesystem" (/) la configuración es:

/dev/dsk/c0d0s0   /dev/rdsk/c0d0s0   /   ufs    1    no   -

Los archivos de dispositivo en "/dev/dsk" y "/dev/rdsk" corresponden a los discos, accesibles respectivamente mediante la interfaz "de bloque" o "de caracter (raw device, no usada en Linux)".

3.4. Inicio del entorno gráfico

Dependiendo de cómo le haya ido con el instalador en la sección de configuración de modo gráfico, luego unos quince segundos de mostrarse el indicador login:, el sistema automáticamente inicia el sistema de ventanas; nosotros seleccionamos Xorg durante la instalación, y este servidor tiene realmente una excelente detección de hardware por lo que prácticamente se autoconfiguró. Si no hay éxito, es menester ingresar con el usuario "root", y configurar el modo gráfico con el programa "kdmconfig". Aquí sí es conveniente hacer los tests sugeridos. Si todo va bien, a partir de ahora el sistema se iniciará con el modo gráfico en forma automática.

Téngase presente que si ingresamos en modo texto rápidamente (tras login:) entonces el modo gráfico no será iniciado.

4. Entorno Gráfico

Como se indicó, la configuración del servidor se realiza desde el instalador (problemático) o con kdmconfig. El sistema gráfico normalmente se iniciará automáticamente cuando se inicia el sistema operativo, y se hará evidente cuando aparezca la presentación a color de solaris solicitando la identificación. El programa encargado de llevar a cabo esta labor es normalmente "dtlogin", el "display manager" de CDE, aunque también están disponibles el "Gnome Display Manager" (gdm) y el clásico X Display Manager (xdm.)

Entre las opciones importantes de la presentación tenemos el idioma a emplearse así como el tipo de sesión (escritorio) que queremos utilizar:

  • CDE: Common Desktop Environment
  • Java Desktop System

CDE es el entorno gráfico estándar en la mayoría de sistemas Unix tradicionales, lo que garantiza un comportamiento y una apariencia extremadamente homogenea y portable entre estos sistemas; asimismo, puesto que fue diseñado para computadores de antiguas generaciones, para los actuales resulta muy liviano. El problema radica en que es obsoleto, limitado, y feo. Aunque esto puede ser subjetivo, el hecho concreto es que dicho escritorio no ha tenido practicamente ningún desarrollo importante en los últimos diez o quince años, por lo que hace tiempo quedó relegado tras los entornos gráficos de Apple y Micr*s*ft. Con todo, puede ser una experiencia interesante utilizarlo un rato… es como ir a un museo de historia. Sin embargo, varias aplicaciones de administración importantes están disponibles sólo desde los menús del CDE. Aunque debería ser posible, no hemos encontrado la manera de lanzar dichas aplicaciones desde el "Java Destop System".

Es esencial dar una mirada a las aplicaciones accesibles desde el "Application Manager", el cual (al menos en el sistema Solaris que hemos instalado) está oculto en un menú del panel cuyo ícono simboliza un editor de texto: como siempre, los Unix no brillan por su intuitividad, si siquiera en el entorno gráfico supuestamente amigable.

En cuanto al Java Desktop System, a nuestro parecer debería renombrarse a "Gnome Desktop System and some Java", pues es básicamente un escritorio Gnome, con aplicaciones Gnome, acompañadas de algunas aplicaciones Java típicamente tediosas de utilizar, las cuales usan los servicios de Gnome. Con todo, es un escritorio con un comportamiento y apariencia típica de estos días, especialmente para el antiguo usuario de Gnome.

5. Paquetes

Al igual que en muchos sistemas Unix, Solaris organiza el software instalado en paquetes. El comando pkginfo permite obtener un largo listado de los mismos (en nuestro caso, 1073 paquetes, teniendo en cuenta que hemos instalado software adicional al sistema operativo base.) El nombre del paquete aparece en la segunda columna:

bash-3.00# pkginfo | more
system      CADP160      Adaptec Ultra160 SCSI Host Adapter Driver
system      HPFC         Agilent Fibre Channel HBA Driver
system      NCRos86r     NCR Platform Support, OS Functionality (Root)
system      SK98sol      SysKonnect SK-NET Gigabit Ethernet Adapter SK-98xx
...

Para obtener información específica empleamos la opción "-l":

bash-3.00# pkginfo -l SK98sol
   PKGINST:  SK98sol
      NAME:  SysKonnect SK-NET Gigabit Ethernet Adapter SK-98xx
  CATEGORY:  system
      ARCH:  i386
   VERSION:  3.07,REV=2005.01.06.07.16
   BASEDIR:  /
    VENDOR:  SysKonnect, a business unit of Schneider & Koch & Co. GmbH
      DESC:  SysKonnect SK-NET Gigabit Ethernet Adapter SK-98xx
    PSTAMP:  gauthier20050106071602
  INSTDATE:  Apr 27 2006 15:23
   HOTLINE:  Please contact your local service provider
    STATUS:  completely installed
     FILES:        7 installed pathnames
                   4 shared pathnames
                   4 directories
                   2 executables
                 380 blocks used (approx)

En el entorno CDE está disponible la aplicación "Solaris Product Registry" (ingresar con el "application manager" al directorio "System_Admin"), la cual permite navegar entre los paquetes cómodamente sin necesidad de los comandos "pkg*". Una ventaja interesante radica en que los paquetes aparecen ordenados en un árbol por categoría, lo que facilita su ubicación.

Para buscar los archvos contenidos en un paquete, se puede emplear "pkgchk -l":

# pkgchk -l SUNWcsr | more
Pathname: /bin
Type: symbolic link
Source of link: ./usr/bin
Referenced by the following packages:
        SUNWcsr
Current status: installed

Pathname: /dev
Type: directory
Expected mode: 0755
Expected owner: root
Expected group: sys
Referenced by the following packages:
        SUNWcsr        SUNWcsd
Current status: installed
...

Para ubicar a qué paquete pertenece un archivo se puede buscar directamente en el log de los paquetes instalados:

# grep /etc/hosts /var/sadm/install/contents
/etc/hosts=./inet/hosts s none SUNWcsr

El comando pkgadd permite instalar paquetes individuales, aunque en muchos casos se proporcionan scripts o wizards de instalación, especialmente para productos grandes que contienen múltiples paquetes.

6. Servicios

Los "servicios" en la mayoría de Unixes y clones como Linux consisten esencialmente de procesos demonios que son ejecutados masivamente al iniciarse el sistema operativo, y posteriormente a pedido por el administrador. En muchos sistemas la manera de iniciar un servicio manualmente consiste en lanzar un script ubicado en un directorio especial (como /etc/init.d/) acompañado de la palabra "start" (o "stop" para detenerlo.) Asimismo, el orden de lanzamiento/parada de los mismos queda determinado automáticamente por el orden alfabético de los nombres de ciertos archivos (enlaces simbólicos) ubicados en divesos directorios correspondientes a los famosos "niveles de ejecución".

Este esquema siempre nos pareció limitado, pero tiene la gran ventaja de ser muy sencillo de utilizar; Sun lo ha mantenido en todas sus versiones de Solaris … hasta la número 9.

En Solaris 10 (se publicita como una de sus novedades) se proporciona un esquema totalmente distinto y más poderoso, aunque por ende más complicado. Se trata del "smf" (service management facility.) A fin de ilustrar su operación, tomemos un ejemplo sencillo: el servicio Sendmail.

Como se sabe, Sendmail es un MTA ampliamente difundido en los sistemas Unix. Por omisión Solaris 10 lo instala y "smf" es configurado para iniciarlo en el arranque del sistema operativo.

Cada servicio "smf" tiene un identificador conocido como "fault management resource identifier" o FMRI. Si desconocemos el servicio o FMRI asociado al programa sendmail (si es que lo hay) podemos intentar hallarlo del siguiente modo:

# svcs -a | grep sendmail
online         10:33:43 svc:/network/smtp:sendmail

el FMRI es "svc:/network/smtp:sendmail", el cual siempre tiene el prefijo "svc:", y a continuación le sigue el "nombre del servicio", que en este caso es "/network/smtp". La última sección ("sendmail") corresponde a la instancia del "servicio SMTP".

Otra manera de hacerlo es aprovechar la capacidad de reconocimiento de patrones de de svcs, lo que permite en algunos abreviar el FMRI:

# svcs sendmail
STATE          STIME    FMRI
online         10:33:43 svc:/network/smtp:sendmail

Es equivalente a:

# svcs svc:/network/smtp:sendmail
STATE          STIME    FMRI
online         10:33:43 svc:/network/smtp:sendmail

Con la opción "-p" nos informamos de los procesos asociados, si los hubiera:

# svcs -p svc:/network/smtp:sendmail
STATE          STIME    FMRI
online         10:33:43 svc:/network/smtp:sendmail
               10:33:46      361 sendmail
               10:33:46      362 sendmail

Lo que coincide con la salida de ps:

# ps -ef|grep sendmail
smmsp  362 1 0 10:33:46 ? 0:00 /usr/lib/sendmail -Ac -q15m
 root  361 1 0 10:33:46 ? 0:00 /usr/lib/sendmail -bd -q15m

Toda la información de configuración del servicio se puede obtener con la opción -l:

# svcs -l svc:/network/smtp:sendmail
fmri         svc:/network/smtp:sendmail
name         sendmail SMTP mail transfer agent
enabled      true
state        online
next_state   none
state_time   Mon May 08 10:33:43 2006
logfile      /var/svc/log/network-smtp:sendmail.log
restarter    svc:/system/svc/restarter:default
contract_id  52
dependency   require_all/refresh file://localhost/etc/mail/sendmail.c
dependency   require_all/refresh file://localhost/etc/nsswitch.conf (
dependency   optional_all/none svc:/system/filesystem/autofs (online)
dependency   require_all/none svc:/system/filesystem/local (online)
dependency   require_all/none svc:/network/service (online)
dependency   require_all/refresh svc:/milestone/name-services (online
dependency   optional_all/refresh svc:/system/identity:domain (online
dependency   optional_all/none svc:/system/system-log (online)

Podemos detener a Sendmail del siguiente modo:

# svcadm disable svc:/network/smtp:sendmail
bash-3.00# svcs -p svc:/network/smtp:sendmail
STATE          STIME    FMRI
disabled       11:52:25 svc:/network/smtp:sendmail
bash-3.00# ps -ef|grep sendmail

Esta deshabilitación se mantiene aún después de reiniciar el computador. La opción -t de svcadm genera una deshabilitación temporal (queda sin efecto tras el reinicio.)

Para reiniciar el servicio:

# svcadm enable svc:/network/smtp:sendmail
# svcs -p svc:/network/smtp:sendmail
STATE          STIME    FMRI
online         11:54:23 svc:/network/smtp:sendmail
               11:54:23      765 sendmail
               11:54:23      766 sendmail
# ps -ef|grep sendmail
 root 765 1 0 11:54:24 ? 0:00 /usr/lib/sendmail -bd -q15m
smmsp 766 1 0 11:54:24 ? 0:00 /usr/lib/sendmail -Ac -q15m

El sistema "smf" tiene muchas características notables, disponiendo de un "API" para desarrollar demonios compatibles que aprovechan sus recursos. Asimismo, permite establecer relaciones de dependencia a fin de que los procesos sean ejecutados coordinadamente, permite reiniciar los servcios automáticamente en caso de caída, etc:

 ps -ef |grep sendmail
 root 765 1 0 11:54:24 ? 0:00 /usr/lib/sendmail -bd -q15m
smmsp 766 1 0 11:54:24 ? 0:00 /usr/lib/sendmail -Ac -q15m
bash-3.00# kill 765 766
bash-3.00# kill 765 766
bash: kill: (765) - No such process
bash: kill: (766) - No such process
bash-3.00# ps -ef |grep sendmail
smmsp 824 1 0 12:10:26 ? 0:00 /usr/lib/sendmail -Ac -q15m
 root 821 1 0 12:10:26 ? 0:00 /usr/lib/sendmail -bd -q15m

6.1. Niveles de ejecución

El concepto de "niveles de ejecución" se mantiene, y sigue siendo administrado como en otros sistemas Unix mediante el proceso init. Sin embargo, init informa acerca de los cambios de nivel de ejecución al demonio svc.startd, el cual se encarga de administrar los servicios "smf". Los niveles de ejecución definidos son:

Tabla 2. Niveles de ejecución

Nivel Significado

S o S

Single-User, acceso únicamente por consola

0,5,6

Reservados para shutdown/reboot

1

Modo administrativo. Sólo se montan sistemas de archivo local y se inician procesos indispensables del kernel

2,3,4

Usados para niveles multiusuario


Para modificar el nivel de ejecución, utilizar el clásico comando telinit.

7. Servicios de red

7.1. Configuración de la interfaz de red

El comando "ifconfig -a" permite obtener un listado de las interfaces de red configuradas. En nuestro caso, el instalador sólo reconoció la tarjeta 3Com, a la que asignamos una dirección estática. Esta tarjeta es reconocida como la interfaz elxl0:

May  8 07:49:25 p3.gatogringo.com gld: [ID 944156 kern.info] elxl0:
  3Com 90XX LAN driver: type "ether" mac address 00:c0:XX:XX:XX:XX

Y puede ser modificada con un comando similar a:

ifconfig elxl0 192.168.1.10 netmask 255.255.255.0

Extrañamente, el log muestra un mensaje de error señalando que la dirección ya está en uso, pero el cambio funciona.

Para que este cambio sea permanente, hay que tener presente que cada tarjeta de red (en nuestro caso, sólo una detectada) tiene un "hostname" asociado. Por ejemplo, para nuestra interfaz 3Com "elxl0", existe un archivo llamado "/etc/hostname.elxl0" conteniendo:

$ cat /etc/hostname.elxl0
p3.gatogringo.com

Según se indica en el "solaris x86 FAQ", si este archivo estuviera vacío el sistema trata de obtener la dirección IP vía DHCP.

Puesto que en el archivo /etc/hosts a este host le corresponde la dirección ip 192.168.1.58, es ésta la que termina siendo asignada a la tarjeta:

$ cat /etc/hosts
#
# Internet host table
#
127.0.0.1       localhost
192.168.1.58    p3.gatogringo.com       loghost

Esto debe ser sincronizado con el archivo /etc/inet/ipnodes:

$ cat /etc/inet/ipnodes
#
# Internet host table
#
::1     localhost
127.0.0.1       localhost
192.168.1.58    p3.gatogringo.com       loghost

Aunque no es muy clara la razón de ser de ambos archivos, ipnodes tiene prioridad a la hora de hallar las direcciones IPV4 a partir de los nombres y soporta direcciones IPV6. En cualquier caso, las direcciones deben sincronizarse para evitar confusión.

7.2. Web Server

Apache 1.3 viene instalado por omisión. Sin embargo, no se inicia a no ser que exista el archivo /etc/apache/httpd.conf. En ese directorio existe el archivo /etc/apache/httpd.conf-example, el cual puede simplemente ser copiado como httpd.conf y será suficiente para que el servidor se inicie con el sistema operativo. Los documentos web por omisión (DocumentRoot) están localizados en el directorio /var/apache/htdocs. También está instalado Apache 2.0.52 (con su configuración en /etc/apache2.)

7.3. Inetd

La versión de Inetd proporcionada en Solaris 10 está fuertemente modificada para interactuar con "smf". En particular, casi todos los servicios tcp/ip están confugurados como servicios "smf" y no en el clásico /etc/inetd.conf (que se mantiene por compatibilidad.) Por ejemplo, el servicio "telnet" (que inconcebiblemente sigue siendo habilitado por omisión) tiene el FMRI "svc:/network/telnet:default":

# svcs -p telnet
STATE          STIME    FMRI
online         10:33:39 svc:/network/telnet:default
               12:16:23      856 in.telnetd
               12:16:24      859 login

8. Acceso al hardware

8.1. El sistema de archivos /devices

Esto corresponde a un sistema de archivos virtual que refleja la visión del kernel (y sus drivers) con respecto al hardware instalado. Sus archivos tienen una estructura que refleja la arquitectura del computador, y corresponden a los conocidos "archivos especiales de dispositivo" de otros Unixes o Linux.

Esto no significa que Solaris no cuente con archivos especiales de dispositivo en el directorio /dev; ciertamente los tiene, sin embargo, normalmente corresponden a simples enlaces simbólicos hacia el directorio devices.

8.2. Detección del hardware

A modo de prueba, desconectamos la lectora de CDROM del Ide Secundario y la reemplazamos con un disco duro adicional. Tras encender el computador descubrimos algunos cambios en el directorio /devices (se tuvo el cuidado de guardar la salida de "ls -lR /devices" antes del cambio):

/devices/pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0:a
/devices/pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0:b
/devices/pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0:c
/devices/pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0:d
...

Asumiendo que se trata del nuevo disco duro, nos encontramos con que todavía no lo podemos utilizar, pues el acceso normal se efectúa mediante los archivos especiales del directorio "/dev", los cuales todavía no existen.

Para crearlos, lanzamos:

# devfsadm -v -c disk
devfsadm[609]: verbose: symlink /dev/dsk/c1d0s0 ->
   ../../devices/pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0:a
devfsadm[609]: verbose: symlink /dev/dsk/c1d0s1 ->
   ../../devices/pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0:b
devfsadm[609]: verbose: symlink /dev/dsk/c1d0s2 ->
   ../../devices/pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0:c
devfsadm[609]: verbose: symlink /dev/dsk/c1d0s3 ->
   ../../devices/pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0:d
devfsadm[609]: verbose: symlink /dev/dsk/c1d0s4 ->
   ../../devices/pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0:e
...

Otra manera (más simple) de hacer esto consiste en pasar la opción "-r" al kernel en el momento del inicio (vía Grub), la cual instruye al sistema a regenerar todos los archivos de /dev que sean necesarios.

Los enlaces correpondientes al ahora inexistente lector de CDROM también deberían ser eliminados:

# devfsadm -C  -v -c disk
devfsadm[626]: verbose: removing file: /dev/dsk/c1t0d0s0
devfsadm[626]: verbose: removing file: /dev/dsk/c1t0d0s1
devfsadm[626]: verbose: removing file: /dev/dsk/c1t0d0s2
devfsadm[626]: verbose: removing file: /dev/dsk/c1t0d0s3
devfsadm[626]: verbose: removing file: /dev/dsk/c1t0d0s4
...

8.3. Archivos de dispositivo de disco

Cada disco posee un conjunto de archivos especiales de dispositivo en los directorios /dev/dsk y /dev/rdsk, los cuales se emplean en distintos contextos. Normalmente se empleará la interfaz en /dev/dsk (de bloque) cuando se monte el respectivo filesystem y se utilice para el almacenamiento de archivos, puesto que esto asegura la utilización del "caché" de disco. Por el contrario, para operaciones de bajo nivel que deben afectar directamente al disco (sin pasar por el caché) se emplea la interfaz "de caracter" en /dev/rdsk. La nomenclatura de los discos ide tiene la forma "c#d#s#", correspondiendo el primer dígito a la interfaz ide (controlador), el segundo a la unidad lógica en el controlador (0=master 1=slave), y el último al "slice". Asimismo posee archivos de la forma "c#d#p#" donde el último dígito corresponde a la "partición de tipo fdisk".

8.4. Particionamiento

Aquí nos referimos al particionamiento correspondiente a la tradicional tabla de particiones del disco duro (comando fdisk en la mayoría de sistemas operativos.) Los discos duros (en general, cualquier tipo de disco)

Para el nuevo disco (en el ide secundario) podemos manipular la tabla de particiciones mediante:

fdisk /dev/rdsk/c1d0p0
 Total disk size is 19846 cylinders
             Cylinder size is 1008 (512 byte) blocks

                                   Cylinders
Partition  Status    Type     Start   End   Length    %
=========  ======    =======  =====   ===   ======   ===
    1                BSD OS       0  6094    6095     31
    2                BSD OS    6095  6614     520      3

SELECT ONE OF THE FOLLOWING:
   1. Create a partition
   2. Specify the active partition
   3. Delete a partition
   4. Change between Solaris and Solaris2 Partition IDs
   5. Exit (update disk configuration and exit)
   6. Cancel (exit without updating disk configuration)
Enter Selection:

Solicitamos crear una nueva partición (opción 1), tipo "solaris" y ocupando "20%" del disco duro:

...
    3                Solaris2  6615  10583   3969    20

La nueva partición contiene 3969 cilindros en el rango [6615-10583].

8.5. Creación de "slices"

Para esto utilizamos el programa "format". Un lamentable inconveniente es que aquí se denominan "particiones" a los "slices". Esto se debe a que la plataforma Sparc utiliza un esquema distinto al de el BIOS de las PC’s (de fdisk). La solución de Solaris en Intel es un compromiso: crear una partición de "fdisk" y subparticionarla "ala Sparc" mediante los denominados "slices".

Desafortunadamente la herramienta "format" no toma en cuenta esto, y denomina particionamiento (tal como lo hace en Sparc con total exactitud) a lo que aquí llamamos "slices.

Lanzamos "format" y seleccionamos el segundo disco (en el que se acaba de crear una partición de tipo "fdisk en PC"):

# format
Searching for disks...done

AVAILABLE DISK SELECTIONS:
       0. c0d0 <DEFAULT cyl 29101 alt 2 hd 16 sec 63>
          /pci@0,0/pci-ide@7,1/ide@0/cmdk@0,0
       1. c1d0 <DEFAULT cyl 3967 alt 2 hd 16 sec 63>
          /pci@0,0/pci-ide@7,1/ide@1/cmdk@0,0
Specify disk (enter its number): 1
selecting c1d0
Controller working list found
[disk formatted, defect list found]

FORMAT MENU:
        disk       - select a disk
        type       - select (define) a disk type
        partition  - select (define) a partition table
        current    - describe the current disk
        format     - format and analyze the disk
        fdisk      - run the fdisk program
        repair     - repair a defective sector
        show       - translate a disk address
        label      - write label to the disk
        analyze    - surface analysis
        defect     - defect list management
        backup     - search for backup labels
        verify     - read and display labels
        save       - save new disk/partition definitions
        volname    - set 8-character volume name
        !<cmd>     - execute <cmd>, then return
        quit
format>

Y ahora crearemos los slices… para lo cual escribimos "partition":

format> partition


PARTITION MENU:
        0      - change `0' partition
        1      - change `1' partition
        2      - change `2' partition
        3      - change `3' partition
        4      - change `4' partition
        5      - change `5' partition
        6      - change `6' partition
        7      - change `7' partition
        select - select a predefined table
        modify - modify a predefined partition table
        name   - name the current table
        print  - display the current table
        label  - write partition map and label to the disk
        !<cmd> - execute <cmd>, then return
        quit
partition> print
Current partition table (original):
Total disk cylinders available: 3967 + 2 (reserved cylinders)

Part      Tag   Flag  Cylinders   Size          Blocks
  0 unassigned   wm    0          0       (0/0/0)          0
  1 unassigned   wm    0          0       (0/0/0)          0
  2     backup   wu    0 - 3966   1.91GB  (3967/0/0) 3998736
  3 unassigned   wm    0          0       (0/0/0)          0
  4 unassigned   wm    0          0       (0/0/0)          0
  5 unassigned   wm    0          0       (0/0/0)          0
  6 unassigned   wm    0          0       (0/0/0)          0
  7 unassigned   wm    0          0       (0/0/0)          0
  8       boot   wu    0 -    0   0.49MB  (1/0/0)       1008
  9 alternates   wm    1 -    2   0.98MB  (2/0/0)       2016

Como se aprecia, hay 10 "slices" automáticamente creados en el disco. El slice #2 (tercera fila) denominado "backup" convencionalmente corresponde al total del disco (en este caso, 3967 cilindros.) Los últimos "slices" (boot y alternates) corresponden a los primeros tres cilindros (0-2) y se emplean para contener boot loaders u otra información de ese estilo.

Crearemos dos slices en las posiciones cero y uno, cada uno conteniendo 500 mb (hay 1.91 Gb disponibles):

partition> 0
Part      Tag    Flag     Cylinders        Size            Blocks
  0 unassigned    wm       0               0         (0/0/0)          0

Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
Enter new starting cyl[0]: 3
Enter partition size[0b, 0c, 3e, 0.00mb, 0.00gb]: 500mb
partition> print
Current partition table (unnamed):
Total disk cylinders available: 3967 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders        Size            Blocks
  0 unassigned    wm       3 - 1018      500.06MB    (1016/0/0) 1024128
  1 unassigned    wm       0               0         (0/0/0)          0
  2     backup    wu       0 - 3966        1.91GB    (3967/0/0) 3998736
...

partition> 1
Part      Tag    Flag     Cylinders        Size            Blocks
  1 unassigned    wm       0               0         (0/0/0)          0

Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
Enter new starting cyl[0]: 1019
Enter partition size[0b, 0c, 1019e, 0.00mb, 0.00gb]: 500mb
partition> print
Current partition table (unnamed):
Total disk cylinders available: 3967 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders        Size            Blocks
  0 unassigned    wm       3 - 1018      500.06MB    (1016/0/0) 1024128
  1 unassigned    wm    1019 - 2034      500.06MB    (1016/0/0) 1024128
  2     backup    wu       0 - 3966        1.91GB    (3967/0/0) 3998736
...

partition>

Finalmente guardamos la tabla de slices:

partition> label
Ready to label disk, continue? y

partition> quit

8.6. Creación de Filesystems

El comando newfs permite crear un sistema de archivos en un slice (formatear.) Para nuestro caso, hemos preparado los slices 0 y 1 del disco "c1d0" y utilizaremos (siempre con la interfaz de caracteres rdsk:)

# newfs /dev/rdsk/c1d0s0
newfs: construct a new file system /dev/rdsk/c1d0s0: (y/n)? y
mkfs -F ufs /dev/rdsk/c1d0s0 1024128 63 16 8192 1024 16 10 60 2048 t 0 -1 8 7 n
/dev/rdsk/c1d0s0:       1024128 sectors in 1016 cylinders of 16 tracks, 63 sectors
        500.1MB in 64 cyl groups (16 c/g, 7.88MB/g, 3776 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
 32, 16224, 32416, 48608, 64800, 80992, 97184, 113376, 129568, 145760,
 871328, 887520, 903712, 919904, 936096, 952288, 968480, 984672, 1000864,
 1017056
# newfs  /dev/rdsk/c1d0s1
newfs: construct a new file system /dev/rdsk/c1d0s1: (y/n)? y
/dev/rdsk/c1d0s1:       1024128 sectors in 1016 cylinders of 16 tracks, 63 sectors
        500.1MB in 64 cyl groups (16 c/g, 7.88MB/g, 3776 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
 32, 16224, 32416, 48608, 64800, 80992, 97184, 113376, 129568, 145760,
 871328, 887520, 903712, 919904, 936096, 952288, 968480, 984672, 1000864,
 1017056

8.7. Configuración de filesystems

Creamos el punto de montaje para estos filesystems:

# mkdir /data1
# mkdir /data2

Montemos el primero directamente:

# df -h |grep data
/dev/dsk/c1d0s0        470M   1.0M   422M     1%    /data1

Se aprecia un tamaño aparente de 422Mb, debido a que siempre hay un porcentaje de seguridad reservado (configurable con la opción -m de newfs.)

Configuración en /etc/vfstab

Editamos el archivo:

# vi /etc/vfstab

Agregamos una línea para el otro slice recién formateado:

/dev/dsk/c1d0s1  /dev/rdsk/c1d0s1  /data2  ufs  2  yes   -

Nótese que se requiere especificar tanto la interfaz de bloque (dsk) como la de caracter (rdsk.) Podemos reiniciar el computador, o probar directamente:

# df -h|grep data
/dev/dsk/c1d0s0        470M   1.0M   422M     1%    /data1
/dev/dsk/c1d0s1        470M   1.0M   422M     1%    /data2

9. Configuración del Sistema

9.1. El sistema en uso

Para detalles sobre la versión del sistema operativo:

# showrev
Hostname: p3.gatogringo.com
Hostid: 1ccb4eb5
Release: 5.10
Kernel architecture: i86pc
Application architecture: i386
Hardware provider:
Domain:
Kernel version: SunOS 5.10 Generic_118844-26

9.2. El Entorno Gráfico

Versión de OpenWindows

# showrev -w

OpenWindows version:
Solaris X11 Version 6.6.2  9 September 2005

Log de Xorg:

Presenta numerosos detalles interesantes con respecto a la configuración del video, teclado y mouse:

# cat /var/log/Xorg.0.log
X Window System Version 6.8.2 (Sun Xorg Release 1.1 for Solaris 10)
Release Date: 9 February 2005
X Protocol Version 11, Revision 0, Release 6.8.2
Build Operating System: SunOS 5.10 Generic i86pc
Current Operating System: SunOS p3.gatogringo.com 5.10 Generic_118844-26 i86pc
Build Date: 09 September 2005
SUNWxorg-server package version: 6.8.0.5.10.7400,REV=0.2004.12.15
SUNWxorg-server patches applied: 118966-11 119062-01
SUNWxorg-graphics-ddx package version: 6.8.0.5.10.7400,REV=0.2004.12.15
SUNWxorg-graphics-ddx patches applied: 118966-11
...

9.3. Listado de Parches Instalados

# showrev -p
Patch: 118368-02 Obsoletes: Requires: Incompatibles: Packages: SUNWcsu
Patch: 118372-06 Obsoletes:119266-02 Requires: Incompatibles:
         Packages: SUNWcsu, SUNWcsl, SUNWtoo
Patch: 118374-01 Obsoletes: Requires: Incompatibles: Packages: SUNWcsu
...

9.4. Hardware reconocido

El comando prtconf muestra el hardware tal como el sistema lo ve:

System Configuration:  Sun Microsystems  i86pc
Memory size: 256 Megabytes
System Peripherals (Software Nodes):

i86pc
    System properties:
        name='acpi-status' type=int items=1
            value=00000013
        name='relative-addressing' type=int items=1
            value=00000001
...

9.5. Solaris Management Console 2.1

Este producto/herramienta se anuncia en la documentación como la solución definitiva que reemplaza a la mayoría de herramientas GUI de administración. Diversas herramientas (como el clásico "admintool") han sido removidas en favor del Solaris Management Console.

La idea no es nueva, y la mayoría de sistemas Unix tiene algo parecido. Los usuarios de Linux quizá lo encuentren afín al popular "Webmin", aunque no se trata de un sistema navegable con un web browser estándar sino con un cliente propietario.

Las herramientas de administración están ordenadas en un árbol de fácil acceso (toolboxes) y en teoría se pueden agregar (¿comprar?) o incluso crear nuevas. Asimismo, con el cliente SMC es posible acceder al "SMC server" de otro servidor y administrarlo remotamente con la misma interfaz.

Por omisión el juego de herramientas incluido es pequeño y sólo cubre tareas básicas y de manera rudimentaria. Comprende:

  • Información del sistema
  • Visor de logs
  • Administración de procesos (este sí es bueno)
  • Performance

— Resumen — Proyectos — Usuarios

  • Configuración del sistema

— Usuarios — Proyectos — Computadores y Redes — Parches

  • Servicios (sólo cron)
  • Almacenamiento

— Puntos de montaje — Recursos compartidos

  • Discos
  • Almacenamiento Mejorado (volúmenes)
  • Dispositivos y Hardware

Esto luce bien… sin embargo realmente es muy poco, particularmente en lo que corresponde a la configuración del sistema. La aplicación que debe crear y modificar usuarios simplemente no funciona. Los "Computadores y Redes" no permiten configurar casi nada más allá del hostname y la dirección IP. Los "Puntos de Montaje" sólo muestran el contenido de vfstab y no permiten agregar entradas; en cuanto a la administración de Discos, falla totalmente con un mensaje confuso de advertencia: "No hay partición solaris, si continúa se destruirá el contenido"; y luego ya no se puede hacer nada más. No hemos probado el tema de los volúmenes, y en cuanto al gran tópico de "Dispositivos y Hardware", lo ¡unico' configurable son los puertos seriales (COM1/COM2)!

9.6. Módulos del kernel

Los comandos modinfo, modload y modunload permiten listar, cargar y descargar módulos dinámicos del kernel. Típicamente esto lo hace el sistema de manera automática.

#    modinfo |more
 Id Loadaddr   Size Info Rev Module Name
  0 fe800000  accc0   -   0  unix ()
  1 fe86ce20  1276a   -   0  krtld ()
  2 fe87abd8 13c4f8   -   0  genunix ()
  4 fe981000   3b38   1   1  specfs (filesystem for specfs)
  6 fe9849a8   34a0  16   1  devfs (devices filesystem 1.13)
  7 fe987ba8   2aa4   1   1  TS (time sharing sched class)
  8 fe98a1ac    87c   -   1  TS_DPTBL (Time sharing dispatch table)
 10 fe98a208   5260   -   1  pci_autoconfig (PCI BIOS interface 1.42)
 11 fe98e588   220c   1   1  uppc (UniProcessor PC)
 12 fe9905e4  22d40   -   1  acpica (ACPI interpreter 1.1)
...

Los módulos usados en el inicio se encuentran tanto en /kernel/drv como en /platform/i86pc/kernel/drv. Otros drivers que se requieren más adelante se hallan en /usr/kernel/drv. En muchos casos los drivers son acompañados un archivo de configuración del mismo nombre pero con sufijo ".conf". En el manual de "driver.conf" se explica la sintaxis de los mismos.

En general la autodetección del hardware soportado es buena; el problema es que simplemente no hay mucho hardware soportado, particularmente de tipo "multimedia".

10. Herramientas de desarrollo

Actualmente la documentación online de Sun recomienda utilizar las herramientas de desarrollo del proyecto GNU. Este es un cambio de actitud significativo y bastante explicable, en gran medida porque Solaris es uno de los pocos Unixes que no distribuía un compilador de lenguaje C o C++, teniendo normalmente que comprarse adicionalmente de Sun. Esta situación cambió dramáticamente con la difusión y verificación de la calidad de las herramientas GNU, y en buena medida con la obsesión de Sun para que todo el mundo sólo programe en Java. Da la impresión que su "Sun Studio 11" (un IDE, compiladores y herramientas de desarrollo diversas) es ahora un producto marginal.

10.1. Herramientas GNU

Bajo el directorio /usr/sfw [2] están disponibles diversas aplicaciones "Open Source" tales como el compilador GCC (Gnu C Compiler.) A fin de probar su efectividad, decidimos agregar soporte PHP al servidor Apache 1.3. Lo primero que hago es agregar la ruta de los binarios:

PATH=/usr/sfw/bin:$PATH

Esta ruta normalmente no está incluida (se puede agregar en /etc/profile para que esté siempre disponible.)

Procedemos a desempacar un tar de PHP:

# gzip -d < /usr/users/diego/php-4.3.1.tar.gz | tar xvf -
# cd php-4.3.1

Configuramos con "Apxs":

# ./configure --with-apxs=/usr/apache/bin/apxs

Ejecutamos "make" … no hay "make"… pero sí hay "gmake" (GNU/Make, el "make" que se distribuye con Linux.)

# gmake
... muchos mensajes durante un buen rato ...

Luego, tras ejecutar "gmake install" observamos que el archivo de configuración de apache /etc/apache/httpd.conf es respaldado y se genera una nueva versión que incluye la carga del módulo PHP. Sin embargo, esto no es suficiente pues no se agrega automáticamente la detección del tipo de archivo por extensión. Para esto agregamos manualmente las siguientes líneas:

    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps

Esto es suficiente en cuanto a configuración. Reiniciamos el servidor:

# /etc/init.d/apache restart

Y creamos un pequeño script con extensión ".php" en /var/apache/htdocs:

<?php
phpinfo();
?>

Finalmente accedemos exitosamente con un web browser (http://direccion_ip/x.php), obteniendo la clásica pantalla descriptiva de PHP.

10.2. Sun Studio 11

Actualmente Sun permite la descarga de su producto Sun Studio 11, el cual incluye -entre muchas utilidades- un compilador de lenguaje C.

El paquete descargado consiste de un gran archivo:

studio11-sol-x86.tar.bz2: 348739381 bytes

Este paquete es descomprimido y desempacado en un directorio conveniente. En nuetro caso, dada la distribución del espacio en filesystems, optamos por crear un subdirectorio en /export/home:

# mkdir /export/home/studio11_src
# cd /export/home/studio11_src
# bzip2 -d < /ruta/studio11-sol-x86.tar.bz2 | tar xvf -
...
# ./installer

El desempacado ocupó 540 Mb. A continuación se debe lanzar el instalador "./installer" desde una consola en el entorno gráfico. Luego simplemente se siguen los menús (wizard) de instalación. Como mencionaba al inicio, en una oportunidad tuve que reinstalar el sistema completamente puesto que el instalador requiere un gran espacio temporal en /var.

Seleccionamos nuevamente el directorio /export/home como base para la instalación definitiva del Studio 11, con lo cual se crea un directorio llamado /export/home/SUNWspro el cual aloja el producto.

A fin de probar el compilador C de Studio 11, decidimos volver a construir el PHP tal como se hizo con el GCC. Para esto se debe eliminar la ruta /usr/sfw/bin del path (¡muy importante!), y en su lugar agregar otras dos:

PATH=/usr/ccs/bin:/export/home/SUNWspro/bin:$PATH

La primera ruta (/usr/ccs/bin) corresponde a diversas herramientas de desarrollo auxiliares (como "lex", "make", etc.) que vienen incluidas con el sistema operativo [3]. A continuación agregamos el subdirectorio "bin" de la ruta del producto Studio 11. Allí se encuentra el compilador de lenguaje C (comando cc.)

Tras repetir el proceso anterior (ejecutar "make" y luego "make install") encuentramos un error extraño acerca de un símbolo llamado "local_thr_alarm", el cual tiene relación con la librería incorporada de Mysql. En tanto no tenemos interés en Mysql, lo deshabilitamos [4]:

./configure --without-mysql --with-apxs=/usr/apache/bin/apxs

Esta vez el proceso termina sin problemas y tras reiniciar al Apache, nuevamente obtengemos la página informativa de mi script PHP.

11. Conclusiones

Debemos partir aceptando que Solaris es un sistema muy extenso y toma tiempo conocerlo adecuadamente. Como impresión general, consideramos que Sun está intentando exitosamente combinar lo mejor del mundo Open Source con su tradicional y reconocido sistema operativo. En algunos sitios web leíamos quejas referidas a una supuesta lentitud de Solaris con respecto a otros sistemas de PC, y por supuesto, otra gente decía que era más veloz, mientras que a nosotros nos ha parecido simplemente "normal" (a excepción del arranque de las aplicaciones Java -como el SCM- cuya inicialización tiene retardos inauditos.) No hemos hecho ninguna prueba consistente de "trabajo real" como para alegar más al respecto.

Aún persisten algunos defectos de la "ideosincracia Unix tradicional" en cuanto a una despreocupación por los detalles y por la explicación para el "no profesional". Por ejemplo, las páginas de manual están completas y actualizadas, pero son pobres o nulas en ejemplos prácticos. Es de notar que su tendencia es a eliminar la documentación de los CD’s; por ejemplo, su tradicional Answerbook ha sido descartado en favor del acceso al web, y ciertamente en la Web hay documentos muy completos (en formato PDF) directamente descargables.

En un contexto más general consideramos que Sun ha creado a lo largo de su historia diversos productos innovadores y hasta revolucionarios. Sin embargo, también han sabido procrear grandes fiascos (como sus Network Computers, el pico-Java, etc.) y aún en productos relativamente exitosos (como Solaris) se aprecian extrañas y contradictorias decisiones más o menos negativas tales como la reinvención de su propio sistema NFS y la constante reinvención de su sistema de impresión; ambos causando confusión y pérdida de tiempo a los usuarios y sin brindar mayores beneficios. A mi entender otra muestra de esta clase de decisiones discutibles radica en la eliminación de las conocidas (y útiles) consolas virtuales de modo texto que se encuentran en otros sistemas Unix en PC (típicamente accesibles con [alt+F#]) las cuales al parecer estuvieron anteriormente disponibles en Solaris.

Ya se ha mencionado la carencia de drivers para muchas clases de equipos (no he podido escuchar música a pesar que el computador que he utilizado tiene ya más de cuatro años en el mercado.) También nos hemos extendido acerca de los bugs del instalador.

Surge la pregunta ¿Por qué utilizar Solaris si disponemos de excelentes sistemas Open Source como Linux y Free/BSD?

La respuesta de Sun radica en su soporte, especialmente ahora que (tras demasiado tiempo) han decidido no cobrar por el software en sí. Este argumento realmente puede ser muy bueno o muy dañino, dependiendo de la impresión que hayan dejado los técnicos de Sun en el pasado en diversas partes del mundo.

El otro argumento técnicamente válido radica en la experiencia de Sun para soportar sistemas muy escalables (varios CPU’s, muchos arreglos de discos, mucha memoria, etc.) lo cual es muy importante para muchas compañías grandes. En cierto modo esto está por verse en la plataforma Intel, puesto que dicha escalabilidad tradicionalmente sólo se ha implementado en su plataforma propietaria Sparc/UltraSparc.

Todo esto, unido a los costos tremendamente inferiores de los computadores basados en Intel/Amd, hacen atractiva la oferta de Sun a muchas empresas… mas no a individuos o entusiastas, que posiblemente lo utilicen principalmente por la curiosidad de tener en casa un sistema típico de las grandes organizaciones.



[1] En Linux hay un comando con este mismo nombre y que efectivamente permite hacer esta modificación para la consola de modo texto

[2] Es un poco vergonzoso pero lo cierto es que descubrimos este directorio por casualidad. De seguro está documentado en alguna guía pero es del todo frustrante para un usuario recién llegado que asume la existencia del compilador de C como algo "normal" en cualquier sistema Unix.

[3] La necesidad de esto se hizo evidente cuando la configuración de PHP solicitaba el ejecutable de "lex".

[4] No se tome muy en serio este error. Es muy probable que ya no esté presente en las últimas versiones de PHP.