Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Guia Del Estudiante de Open Solar Is
Guia Del Estudiante de Open Solar Is
0a
Community Edition
Comunidad OpenSolaris Hispano
es.opensolaris.org
Licencia
Esta obra está bajo una licencia de Creative Commons. Para ver
una copia de esta licencia, visite
http://creativecommons.org/licenses/by-sa/2.5/ o envíe una carta a
Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305,
USA.
Usted es libre de:
Referencias
2
Comunidad OpenSolaris Hispano
Changelog
3
Comunidad OpenSolaris Hispano
OpenSolaris
OpenSolaris nace en Junio de 2005 y es el resultado de la
liberación de la mayor parte del código fuente de Solaris pasando a
ser un proyecto de software libre. Desde este nuevo enfoque nacen
nuevas distribuciones que aportan mejoras al sistema además de
enriquecerlas con más software.
Distribuciones OpenSolaris
4
Comunidad OpenSolaris Hispano
OpenGrok
OpenGrok es el motor de búsqueda de código fuente, con OpnGrok
podemos descargar el fuente de OpenSolaris y examinar su código ademas
de poder hacer modificaciones para realizar modificaciones al ya
existente.
Para entrar en OpenGrok entre en la dirección:
http://cvs.opensolaris.org/source
Las comunidades
Las comunidades son puntos de encuentro dentro de OpenSolaris.org
donde puedes encontrar otras personas con las mismas inquietudes sobre
una tecnología o apliación. Hay comunidades alrededor de ZFS, DTrace,
SMF, Virtualización etc..
Algunas de las comunidades:
• Teoría e investigación:
http://www.opensolaris.org/os/community/edu
• DTrace: http://www.opensolaris.org/os/community/dtrace
• ZFS : http://www.opensolaris.org/os/community/zfs
• Redes: http://www.opensolaris.org/os/community/networking
• Zonas: http://www.opensolaris.org/os/community/zones
• Documentación:
http://www.opensolaris.org/os/community/documentation
• Controladores de dispositivos:
http://www.opensolaris.org/os/community/device_drivers
• Herramientas: http://www.opensolaris.org/os/community/tools
5
Comunidad OpenSolaris Hispano
• Impulsores: http://www.opensolaris.org/os/community/advocacy
• Seguridad: http://www.opensolaris.org/os/community/security
• Rendimiento: http://www.opensolaris.org/os/community/performance
• Almacenamiento: http://www.opensolaris.org/os/community/storage
Proyectos
Los proyectos alojados en www.opensolaris.org albergan las
contribuciones de código, documentos, gráficos o productos de varios
autores. Los proyectos disponen de espacio para alojar código.
Participa
Puedes participar en la comunidad OpenSolaris Hispano de formas
diferentes y da igual tu nivel de experiencia con OpenSolaris.
6
Comunidad OpenSolaris Hispano
Instalando OpenSolaris
2008.05
Novedades de OpenSolaris
OpenSolaris 2008.05 incorpora importantes novedades sobre sus
antecesores inmediatos. Veamos algunas de ellas:
• Solaris Service Manager es una nueva infraestructura que viene a
sustituir al clásico inicio secuencial de Unix System V. Esta
nueva infraestructura permite arrancar los servicios de forma
paralela acorde a sus relaciones de dependencia. Permite al
administrador observar, deshabilitar, arrancar y parar de una
manera sencilla y eficiente.
• Solaris Containers es una tecnología de virtualización que
permite la ejecución de servicios y aplicaciones de forma
totalmente aisladas.
• ZFS (Solaris Zeta File System) nuevo sistema de archivos de
128bits. Su capacidad de almacenamientos es practicante
ilimitada. Su implantación y administración comparada con los
sistemas anteriores muy sencilla. Implementa un nuevo modelo de
ACL sencillo de administrar utilizando los comandos chmod y ls.
• DTrace es una potente herramienta que permite a los
administradores observar procesos del núcleo y de los usuarios.
Se compone de más de 30.000 sensores que aportan información
sobre las aplicaciones asociadas a estos.
• Image Packaging System es el nuevo sistema de paquetes de
OpenSolaris 2008.05 que permite la instalación de paquetes de
repositorios de una forma sencilla resolviendo problemas como
dependencias. IPS instalar, actualizar y eliminar aplicaciones.
7
Comunidad OpenSolaris Hispano
• Reiniciar.
Iniciando el LiveCD
Comenzamos el proceso de instalación arrancando desde CD con el
LiveCD de OpenSolaris 2008.05 , lo primero que veremos será el gestor
de arranque GRUB.
8
Comunidad OpenSolaris Hispano
9
Comunidad OpenSolaris Hispano
10
Comunidad OpenSolaris Hispano
11
Comunidad OpenSolaris Hispano
12
Comunidad OpenSolaris Hispano
13
Comunidad OpenSolaris Hispano
14
Comunidad OpenSolaris Hispano
GRUB
15
Comunidad OpenSolaris Hispano
16
Comunidad OpenSolaris Hispano
Arranque y Parada
Introducción
17
Comunidad OpenSolaris Hispano
# /usr/sbin/reboot
ok power-off
# /usr/sbin/halt
# /usr/sbin/poweroff
18
Comunidad OpenSolaris Hispano
# /usr/sbin/reboot
Introducción a GRUB
19
Comunidad OpenSolaris Hispano
#---------------------END BOOTADM--------------------
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris failsafe
root (hd0,0,a)
kernel /boot/multiboot kernel/unix -s
module /boot/x86.miniroot-safe
#---------------------END BOOTADM--------------------
#
# default menu entry to boot
default 0
#
# menu timeout in second before default OS is booted
# set to -1 to wait for user input
timeout 10
20
Comunidad OpenSolaris Hispano
Service Management
Facility (SMF)
Introducción a SMF
Características de SMF:
21
Comunidad OpenSolaris Hispano
Beneficios de SMF:
22
Comunidad OpenSolaris Hispano
Los servicios pueden tener varios estados en los que podemos ver
si el servicio esta parado, arrancado, degradado o en mantenimiento.
Anteriormente se utilizaba el comando “ps –ef” para ver si un servicio
estaba arrancado, ahora podemos utilizar los comandos de SMF para ver
el estado del servicio además de poder continuar haciéndolo con el
comando “ps –ef” para buscar el proceso.
Estados en los se puede encontrar un servicio SMF:
• online: la instancia del servicio esta disponible y se esta
ejecutando correctamente.
• offline: la instancia del servicio esta disponible pero no esta
ejecutandose.
• disabled: la instancia del servicio no esta disponible y no esta
ejecutándose.
• maintenance: la instancia del servicio tiene un error y esta
siendo resuelto por el administrador.
• degraded: la instancia del servicio esta disponible pero esta
funcionando al límite de su capacidad.
• uninitialized: este es el estado inicial de todos los servicios
antes de iniciar su ejecución.
• legacy_run: este estado solo se utiliza para guardar la
compatibilidad con los viejos niveles de arranque y nos índica
que el estado en el que se encuentran. Los niveles de arranque
solo pueden ser observados con SMF son se pueden editar.
Dependencias
Cuando definimos un servicio podemos definir dependencias,
estableciendo que no arranque el servidor Apache hasta que no este
arrancado el sistema en multiusuario (run level 3) y la bbdd MYSQL
23
Comunidad OpenSolaris Hispano
24
Comunidad OpenSolaris Hispano
boot
bbdd
Init (pid 1)
configurac
ión SMF
init lee
/etc/initta
svc.startd svc.confif.d
svc:/platform
svc:/site
svc:/mileston
e
svc:/system
Figura 3.1
Milestone Services
27
Comunidad OpenSolaris Hispano
# svcs –a
# svcs -d svc:/network/http:apache2
STATE STIME FMRI
online 10:10:12 svc:/milestone/network:default
online 10:10:33 svc:/system/filesystem/local:default
online 10:10:48 svc:/system/filesystem/autofs:default
Figura 3.2
28
Comunidad OpenSolaris Hispano
Diagnostico de fallos
# svcs -x svc:/network/http:apache2
svc:/network/http:apache2 (Apache 2 HTTP server)
Estado: disabled desde Thu Dec 28 10:10:08 2006
Motivo: Un administrador lo ha inhabilitado.
Consulte: http://sun.com/msg/SMF-8000-05
Consulte: httpd(8)
Impacto: Este servicio no está funcionando.
29
Comunidad OpenSolaris Hispano
La salida del comando nos indica que el servicio fue parado por
un administrador, en que momento lo hizo y el impacto sobre el
servicio.
También nos remite a una url de Sun donde se nos amplia
información sobre la causa por la que no esta arrancado el servicio.
Sea cual sea el error siempre nos dará una url para obtener
información que nos ayude a diagnosticar y solucionar el problema.
Parada de un servicio
Arrancar un servicio
#
# svcs -p svc:/network/http:apache2
STATE STIME FMRI
online 12:31:23 svc:/network/http:apache2
12:31:23 1559 httpd
12:31:24 1560 httpd
12:31:24 1561 httpd
12:31:24 1562 httpd
12:31:24 1563 httpd
12:31:24 1564 httpd
Figura 3.3
30
Comunidad OpenSolaris Hispano
Reiniciar un servicio
# svcs -p svc:/network/http:apache2
STATE STIME FMRI
online 12:37:27 svc:/network/http:apache2
12:37:27 1577 httpd
12:37:28 1578 httpd
12:37:28 1579 httpd
12:37:28 1580 httpd
12:37:28 1581 httpd
12:37:28 1582 httpd
# svcprop svc:/network/http:apache2
…………
………..
restarter/state_timestamp time 1167305847.133954000
general_ovr/enabled boolean true
restarter_actions/restart integer
Figura 3.4
# inetadm
ENABLED STATE FMRI
enabled online svc:/application/x11/xfs:default
enabled online svc:/application/font/stfsloader:default
enabled offline svc:/application/print/rfc1179:default
enabled online svc:/network/rpc/mdcomm:default
32
Comunidad OpenSolaris Hispano
#inetadm -l ftp
SCOPE NAME=VALUE
name="ftp"
endpoint_type="stream"
proto="tcp6"
isrpc=FALSE
wait=FALSE
exec="/usr/sbin/in.ftpd -a"
user="root"
default bind_addr=""
33
Comunidad OpenSolaris Hispano
default bind_fail_max=-1
default bind_fail_interval=-1
default max_con_rate=-1
default max_copies=-1
default con_rate_offline=-1
default failrate_cnt=40
default failrate_interval=60
default inherit_env=TRUE
default tcp_trace=FALSE
default tcp_wrappers=FALSE
y lo verificamos con:
# inetadm -l ftp
SCOPE NAME=VALUE
name="ftp"
endpoint_type="stream"
proto="tcp6"
isrpc=FALSE
wait=TRUE
exec="/usr/sbin/in.ftpd -a"
user="root"
default bind_addr=""
default bind_fail_max=-1
default bind_fail_interval=-1
default max_con_rate=-1
default max_copies=-1
default con_rate_offline=-1
default failrate_cnt=40
default failrate_interval=60
default inherit_env=TRUE
default tcp_trace=FALSE
default tcp_wrappers=FALSE
Cambios en inetd.conf
34
Comunidad OpenSolaris Hispano
3. Ejecutamos el comando:
o /software/binarios/webserversunone/https-
aulaunix.aulaunix.org/start
o /software/binarios/webserversunone/https-
aulaunix.aulaunix.org/stop
o /software/binarios/webserversunone/https-
aulaunix.aulaunix.org/restart
• La documentación la ubicamos en /software/documentacion
36
Comunidad OpenSolaris Hispano
<service
name='application/servidoresweb/AulaUnix'
type='service'
version='1'>
svcs Método
svcadm enable start
nombredelservicio
svcadm disable stop
nombredelservicio
svcadm restart restar
nombredelservicio t
37
Comunidad OpenSolaris Hispano
<exec_method
type='method'
name='start'
exec='/software/binarios/webserversunone/https-aulaunix.aulaunix.org/start'
timeout_seconds='30' >
</exec_method>
<documentation>
# svcs -l svc:/application/servidoresweb/AulaUnix
fmri svc:/application/servidoresweb/AulaUnix:default
nombre Servicio SMF de ejemplo sobre SunONE
habilitada Falso
estado disabled
next_state none
state_time Tue Jan 02 17:56:41 2007
reiniciador svc:/system/svc/restarter:default
dependency require_all/none svc:/milestone/multi-user-server (online)
38
Comunidad OpenSolaris Hispano
# svcs -p svc:/application/servidoresweb/AulaUnix:default
STATE STIME FMRI
online 10:41:16 svc:/application/servidoresweb/AulaUnix:default
10:41:06 3986 webservd-wdog
10:41:06 3987 webservd
10:41:07 3988 webservd
<?xml version='1.0'?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<!--
XML de ejemplo de ejemplo creado por David Galan
dgalan@aulaunix.org
www.aulaunix.org
wikilaris.aulaunix.org
blog.aulaunix.org
-->
<service
name='application/servidoresweb/AulaUnix'
type='service'
version='1'>
39
Comunidad OpenSolaris Hispano
<single_instance/>
<exec_method
type='method'
name='start'
exec='/software/binarios/webserversunone/https-
aulaunix.aulaunix.org/start'
timeout_seconds='30' >
</exec_method>
<exec_method
type='method'
name='stop'
exec='/software/binarios/webserversunone/https-
aulaunix.aulaunix.org/stop'
timeout_seconds='60' />
<exec_method
type='method'
name='restart'
exec='/software/binarios/webserversunone/https-
aulaunix.aulaunix.org/restart'
timeout_seconds='120'>
</exec_method>
<template>
<common_name>
<loctext xml:lang='C'>
Servicio SMF de ejemplo sobre SunONE
</loctext>
</common_name>
<documentation>
<manpage title='Documentos Web Server' section='1M'
manpath='/software/documentacion' />
</documentation>
</template>
</service>
</service_bundle>
Figura 3.6
40
Comunidad OpenSolaris Hispano
aulaunix::::type=normal;auths=solaris.smf.manage
# su - aulaunix
bash-3.00$ /usr/sbin/svcadm disable /application/servidoresweb/AulaUnix
bash-3.00$ /usr/sbin/svcadm enable /application/servidoresweb/AulaUnix
41
Comunidad OpenSolaris Hispano
Gestión de usuarios
Las cuentas de usuario para el acceso al
sistema no difieren en Solaris de otros
sistemas unix, en el siguiente capitulo
aprenderemos a:
• Ficheros de inicialización
Ficheros de configuración
Los ficheros de configuración contienen la información sobre las
cuentas de usuario, los grupos y contraseñas. Los ficheros son:
/etc/passwd
aulaunix:x:65535:1:Nombre y apellidos:/export/home/aulaunix:/bin/bash
IDlogin:x:UID:GID:comentario:home_directory:login_shell
/etc/shadow
root:SbEPJrMu/wMTw:6445::::::
daemon:NP:6445::::::
bin:NP:6445::::::
sys:NP:6445::::::
adm:NP:6445::::::
lp:NP:6445::::::
uucp:NP:6445::::::
nuucp:NP:6445::::::
dladm:*LK*:::::::
smmsp:NP:6445::::::
listen:*LK*:::::::
gdm:*LK*:::::::
webservd:*LK*:::::::
postgres:NP:::::::
nobody:*LK*:6445::::::
noaccess:*LK*:6445::::::
nobody4:*LK*:6445::::::
aulaunix:nMF64Wg9ff/HU:13570::::::
43
Comunidad OpenSolaris Hispano
IDlogin:pwd:lastchg:min:max:warn:inactivo:expiracion:
Los datos que contiene cada línea del fichero shadow son:
• IDlogin: identificador de entrada al sistema.
/etc/group/
Todos los usuarios del sistema tienen que pertenecer a un
grupo principal definido en el fichero /etc/passwd. Adicionalmente un
usuario puede pertenecer más grupos disponibles en el sistema
denominados grupos secundarios definidos en el fichero /etc/group. El
siguiente ejemplo muestra las entradas por defecto en el fichero
group:
root::0:
other::1:root
bin::2:root,daemon
sys::3:root,bin,adm
adm::4:root,daemon
uucp::5:root
mail::6:root
tty::7:root,adm
lp::8:root,adm
nuucp::9:root
staff::10:
daemon::12:root
sysadmin::14:
smmsp::25:
gdm::50:
webservd::80:
postgres::90:
44
Comunidad OpenSolaris Hispano
nobody::60001:
noaccess::60002:
nogroup::65534:
nonmbredelgrupo:group-password:GID:listausuarios
Los datos que contiene cada línea del fichero group son:
Gestión de usuarios
Crear usuario
useradd [–u uid] –g [gid] –G [gid1,gid2, …] [-d dir] –m [–s shell] [–c
comment] [–e expire] usuario
45
Comunidad OpenSolaris Hispano
Crear usuario:
aula:x:109:100:usuarios de pruebas:/export/home/aulaunix:/bin/ksh
Modificar un usuario
Si ya tenemos un usuario en el sistema y deseamos cambiar alguna
de sus propiedades utilizamos el comando usermod:
passwd [usuario]
Gestión de grupos
Hemos visto como crear, modificar y eliminar usuarios. Ahora
vamos a realizar el mismo recorrido pero esta vez gestionando grupos,
para ello utilizaremos los comandos:
• groupadd
• groupmod
• groupdel
47
Comunidad OpenSolaris Hispano
Lo verificamos:
Eliminar un grupo
Eliminar un grupo existente es muy facil con el comando groupdel.
groupdel [nombre del grupo]
Ejemplo:
Cambio de grupos
Siempre que entramos al sistema lo hacemos perteneciendo al grupo
principal, pero un usuario que pertenece a varios grupos puede
necesitar operar en cada uno de ellos en diferentes momentos de su
sesión en el sistema.
Para cambiar de grupo recurrimos al comando newgrp, veamos un
ejemplo practico:
Hemos entrado al sistema con el usuario dgalan tal como se puede ver
en el siguiente ejemplo:
48
Comunidad OpenSolaris Hispano
$ id
uid=109(dgalan) gid=1(other)
Lo verificamos:
$ id
uid=109(dgalan) gid=1(other) gid=45(admins)
El comando who
• usuario
• conexión
• fecha de entrada
$ who
root console Sep 1 19:41
aula pts/1 Sep 1 19:45 (192.168.1.33)
$
El comando w
El comando finger
Muestra información detallada de los usuarios conectados al
sistema y detalles de usuarios de forma individual, es un comando
basado
49
Comunidad OpenSolaris Hispano
finder: no encontrado
$ finger
Login Name TTY Idle When Where
root Super-User console 1:30 Sat 19:41
aula ??? pts/1 Sat 19:45 192.168.1.33
$
50
Comunidad OpenSolaris Hispano
Procesos y señales
Introducción
En este capitulo veremos como gestiona Solaris los procesos que
no difiere mucho del resto de unix existentes en el mercado.
Igualmente si provienes de Linux te resultará fácil adaptarte a las
singularidades de Solaris.
Cada programa que se ejecuta en el sistema se corresponde con uno o
varios procesos.
Solaris como cualquier sistema multiusuario permite a cualquier
usuario ejecutar más de un proceso simultáneamente, los procesos de
un mismo usuario pueden comunicarse entre si pero no con los procesos
de otro usuario. El usuario root es el único que puede comunicarse con
todos los procesos en ejecución.
Cada proceso está identificado por un PID único y a su vez
tienen asociado un identificador de usuario (UID) y su grupo (GID).
51
Comunidad OpenSolaris Hispano
Parámetro Función
-a Muestra los procesos mas
solicitados.
-e Muestra todos los procesos en
ejecución.
-f Muestra información ampliada
de los procesos.
-p Muestra el ID de la CPU
asociada al proceso.
-u Muestra todos los procesos de
un usuario específico.
-c Muestra los datos con formato
planificación y prioridad de
procesos.
-G Muestra los procesos
ejecutados por un grupo.
52
Comunidad OpenSolaris Hispano
bash-3.00$ ps -G 100
PID TTY TIME CMD
712 pts/1 0:00 bash
742 pts/1 0:00 ps
682 ? 0:01 sshd
684 pts/1 0:00 sh
bash-3.00$ prstat
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
668 noaccess 159M 80M sleep 59 0 0:00:29 0,5% java/24
744 aulaunix 4492K 2644K cpu0 39 0 0:00:00 0,4% prstat/1
682 aulaunix 7952K 2100K sleep 59 0 0:00:00 0,0% sshd/1
712 aulaunix 2484K 1612K sleep 49 0 0:00:00 0,0% bash/1
131 root 3824K 2360K sleep 59 0 0:00:00 0,0% nscd/24
535 root 4444K 1724K sleep 59 0 0:00:00 0,0% dtlogin/1
670 root 7096K 2076K sleep 59 0 0:00:00 0,0% sendmail/1
1 root 2024K 1120K sleep 59 0 0:00:00 0,0% init/1
269 root 4416K 3052K sleep 59 0 0:00:03 0,0% inetd/4
278 root 2820K 1140K sleep 59 0 0:00:00 0,0% sh/1
214 root 2272K 900K sleep 59 0 0:00:00 0,0% cron/1
143 daemon 3932K 1968K sleep 59 0 0:00:00 0,0% kcfd/3
111 root 2156K 1296K sleep 59 0 0:00:00 0,0% snmpdx/1
258 root 1700K 896K sleep 59 0 0:00:00 0,0% sac/1
71 root 6556K 4572K sleep 59 0 0:00:00 0,0% snmpd/1
Total: 43 processes, 180 lwps, load averages: 0,02, 0,03, 0,31
53
Comunidad OpenSolaris Hispano
Señales
Formato de kill:
kill –señal pidproceso
Ejempo de kill
Matar una sesión ssh:
# adtasweb01 /var/opt/aat/d#ps -ef | grep ssh
root 449 1 0 Aug 20 ? 1:01 /usr/local/sbin/sshd
root 25618 449 0 17:51:52 ? 0:00 /usr/local/sbin/sshd -R
ora9 18084 18082 0 20:25:28 ? 0:00 /usr/local/sbin/sshd -R
ora9 8645 8476 0 20:22:26 ? 0:00 /usr/local/sbin/sshd –R
# kill -9 25618
#
La señal SIGHUP comúnmente conocida como interrumpir una conexión
telefónica o de Terminal, esta señal puede provocar en servicios como
inetd que relean el fichero de configuración.
Señal en curso
En algún momento puede interesarnos ver todas las señales
enviadas a un proceso en ejecución para ello recurrimos al comando
psig.
Formato:
psig pid
Ejemplo de psig:
#psig 13936
54
Comunidad OpenSolaris Hispano
13936: /usr/lib/ssh/sshd
HUP default
INT default
QUIT default
ILL default
TRAP default
ABRT default
EMT default
FPE default
KILL default
BUS default
SEGV default
SYS default
PIPE ignored
ALRM caught 0x2d7fc RESETHAND,NODEFER
TERM default
USR1 default
USR2 default
CLD caught 0x40f14 0
PWR default
WINCH default
URG default
Señales de proceso:
55
Comunidad OpenSolaris Hispano
SIGALRM 14 Finalizada
Árbol de procesos
# pldd 6717
6717: ../../bin/https/bin/Cgistub -f /tmp/https-admserv-98ccc083/.cgistub_88
/usr/lib/libsocket.so.1
/usr/lib/libnsl.so.1
/usr/lib/libC.so.5
/usr/lib/libm.so.1
/usr/lib/libw.so.1
56
Comunidad OpenSolaris Hispano
/usr/lib/libc.so.1
/usr/lib/libdl.so.1
/usr/lib/libmp.so.2
/usr/platform/sun4u-us3/lib/libc_psr.so.1
# pfiles 6717
6717: ../../bin/https/bin/Cgistub -f /tmp/https-admserv-98ccc083/.cgistub_88
Current rlimit: 1024 file descriptors
1: S_IFCHR mode:0666 dev:85,1 ino:72269 uid:0 gid:3 rdev:13,2
O_RDWR
2: S_IFCHR mode:0666 dev:85,1 ino:72269 uid:0 gid:3 rdev:13,2
O_RDWR
0/bin/https/bin/Cgistub
00026000 8K read/write/exec [ heap ]
FF080000 688K read/exec /usr/lib/libc.so.1
FF13C000 32K read/write/exec /usr/lib/libc.so.1
FF1B0000 224K read/exec /usr/lib/libm.so.1
FF1F6000 8K read/write/exec /usr/lib/libm.so.1
FF200000 312K read/exec /usr/lib/libC.so.5
FF25C000 32K read/write/exec /usr/lib/libC.so.5
FF264000 64K read/write/exec /usr/lib/libC.so.5
FF280000 576K read/exec /usr/lib/libnsl.so.1
FF310000 40K read/write/exec /usr/lib/libnsl.so.1
FF31A000 24K read/write/exec /usr/lib/libnsl.so.1
FF330000 16K read/exec /usr/lib/libmp.so.2
FF344000 8K read/write/exec /usr/lib/libmp.so.2
FF350000 8K read/write/exec /usr/lib/libdl.so.1
FF360000 8K read/exec /usr/platform/sun4u-us3/lib/libc_psr.so.1
FF370000 8K read/write/exec [ anon ]
FF380000 40K read/exec /usr/lib/libsocket.so.1
57
Comunidad OpenSolaris Hispano
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
1 7 1 120 412 309 168 4 21 3 0 638 1 4 0 95
3 7 1 13 115 107 179 7 21 3 0 633 1 3 0 96
#psrinfo
58
Comunidad OpenSolaris Hispano
Trabajos planificados
El comando at
Sintaxis:
Parámetro Función
-m Cuando termina el trabajo envía un
correo al usuario.
-r Elimina un trabajo programado.
-q Establece nombre de cola.
-l Muestra los procesos en cola.
hora Establece la hora de ejecución.
fecha Establece la fecha de ejeución.
Programar un trabajo.
# at -l
user = root 1195653600.a Wed Nov 21 15:00:00 2007
#
# cat /etc/cron.d/at.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess
60
Comunidad OpenSolaris Hispano
# cat /etc/cron.d/at.allow
web
ldap
dgalan
Logs de at
Crontab
1 2 3 4 5 /usr/local/bin/iniciobackup.sh
Campo Descripción
1 El primer campo contiene los minutos.
Valores entre 0 y 59.
2 El segundo campo tiene la hora. Valores
entre 0 y 23.
3 Día del mes, valore entre 1 y 31.
4 El mes del año, valores entre 1 y 12.
5 Día de la semana, valores entre 0 y 6.
Usando crontab
61
Comunidad OpenSolaris Hispano
# crontab -l
#ident "@(#)root 1.20 01/11/06 SMI"
#
# The root crontab should be used to perform accounting data collection.
#
# The rtc command is run to adjust the real time clock if and when
# daylight savings time changes.
#
10 3 * * * /usr/sbin/logadm
15 3 * * 0 /usr/lib/fs/nfs/nfsfind
1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
30 3 * * * [ -x /usr/lib/gss/gsscred_clean ] && /usr/lib/gss/gsscred_clean
#10 3 * * * /usr/lib/krb5/kprop_script ___slave_kdcs___
crontab –l nombre_de_usuario
EDITOR=vi
export EDITOR
62
Comunidad OpenSolaris Hispano
# cat /etc/cron.d/at.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess
# cat /etc/cron.d/at.allow
web
ldap
dgalan
63
Comunidad OpenSolaris Hispano
Gestión de discos
El siguiente capitulo comprende la gestión de discos con
OpenSolaris 2008.05 aprendiendo a configurar y dividir el disco en
particiones. También aprenderemos el nuevo sistema de ficheros ZFS
(Zettabyte) incorporado a OpenSolaris 2008.05 .
Nombres de Dispositivos
bash-3.00# cd /dev/dsk
bash-3.00# ls –l
64
Comunidad OpenSolaris Hispano
SUNW,Ultra-1
options, instance #0
sbus, instance #0
zs, instance #0
zs, instance #1
SUNW,fas, instance #0
sd, instance #0
sd, instance #6
SUNW,hme, instance #0
SUNW,ffb, instance #0
pseudo, instance #0
65
Comunidad OpenSolaris Hispano
66
Comunidad OpenSolaris Hispano
67
Comunidad OpenSolaris Hispano
• Seleccionar el disco
• Crear las particiones
• Etiquetar el nuevo disco
• Crear el sistema de ficheros
• Montar el disco
# format
Searching for disks...done
selecting c1d1
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
68
Comunidad OpenSolaris Hispano
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>
partition> print
Current partition table (original):
Total disk cylinders available: 2044 + 2 (reserved cylinders)
o stand
o home
o alternates
• Flag: etiqueta predefinida. Los valores posibles son:
o wm: la partición se puede leer y escribir. Se puede
montar
o wu: la partición es solo de lectura y no se pude
montar.
o rm: la partición es solo de lectura y se puede montar.
o ru: la partición es solo de lectura y no se puede
montar
70
Comunidad OpenSolaris Hispano
partition> print
Current partition table (unnamed):
Total disk cylinders available: 2044 + 2 (reserved cylinders)
partition> label
Ready to label disk, continue? y
format> partition
Please run fdisk first.
format> fdisk
No fdisk table exists. The default partition for the disk is:
Type "y" to accept the default partition, otherwise type "n" to edit the
partition table.
y
La VTOC
Backup la VTOC
Restaurar la VTOC
# newfs /dev/rdsk/c0d1s0
newfs: construir un nuevo sistema de archivos /dev/rdsk/c0d1s0: (y/n)? y
/dev/rdsk/c0d1s0: 8368128 sectores en 2043 cilindros de 128 pistas, 32
sectores
4086,0MB en 79 grupos de cilindros (26 c/g, 52,00MB/g, 6400 i/g)
copias de seguridad super-bloque (para fsck -F ufs -o b=#) en:
32, 106560, 213088, 319616, 426144, 532672, 639200, 745728, 852256, 958784,
7350464, 7456992, 7563520, 7670048, 7776576, 7883104, 7989632, 8096160,
72
Comunidad OpenSolaris Hispano
8202688, 8309216
# mkdir /nuevodisco
# mount /dev/dsk/c0d1s0 /nuevodisco/
# cd /nuevodisco/
# ls
lost+found
73
Comunidad OpenSolaris Hispano
El comando mount
#umount /nuevodisco
74
Comunidad OpenSolaris Hispano
75
Comunidad OpenSolaris Hispano
Ejemplo:
bash-3.00# df -k
Sistema de archivos kbytes usados aprovechar capacidad Montado en
bash-3.00#
bash-3.00# umount /nuevodisco
76
Comunidad OpenSolaris Hispano
ZFS
Introducción a ZFS
ZFS (Zettabyte File System ) es el nuevo sistema de archivos
incorporado a OpenSolaris. Es un sistema de archivos de 128 bits y su
límite de tamaño máximo es de 256 cuatrillones de zettabytes1.
En la wikipedia se hace la siguiente referencia sobre la capacidad de
ZFS:
1
Información detallada sobre la unidad de medida en la wikipedia:
http://es.wikipedia.org/wiki/Zettabyte
77
Comunidad OpenSolaris Hispano
Forma ZFS
F F Z Z Z
V V
O O
STORAGE
POOL
Crear un pool
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
babilonia 3,88G 59,5K 3,87G 0% ONLINE -
#
78
Comunidad OpenSolaris Hispano
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 138K 3,81G 27,5K /babilonia
babilonia/aplicaciones 24,5K 3,81G 24,5K /babilonia/aplicaciones
babilonia/datos 24,5K 3,81G 24,5K /babilonia/datos
Propiedades de un ZFS
79
Comunidad OpenSolaris Hispano
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 138K 3,81G 27,5K /babilonia
babilonia/aplicaciones 24,5K 1024M 24,5K /babilonia/aplicaciones
babilonia/datos 24,5K 3,81G 24,5K /babilonia/datos
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 1,00G 2,81G 27,5K /babilonia
babilonia/aplicaciones 24,5K 1024M 24,5K /babilonia/aplicaciones
babilonia/datos 24,5K 3,81G 24,5K /babilonia/datos
80
Comunidad OpenSolaris Hispano
#cd /
# zfs set mountpoint=/aulaunix babilonia/datos
82
Comunidad OpenSolaris Hispano
Eliminar un pool
La ejecución del comando creara un mirror formado por los discos c0d1
ya existente y el nuevo disco c1d1.
Reemplazar un disco del mirror
Y lo verificamos:
zpool status
conjunto: almoroz
estado: ONLINE
limpiar: resilver completed con 0 errores en Wed Jan 31 16:46:57 2007
config:
Crear RAID-Z
85
Comunidad OpenSolaris Hispano
Snapshots
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
babilonia 500M 3,42G 27,5K /babilonia
babilonia/prueba1 500M 3,42G 500M /babilonia/prueba1
babilonia/prueba2 24,5K 3,42G 24,5K /babilonia/prueba2
El sistema de ficheros babilonia/prueba1 contiene los siguientes
archivos:
# ls -lrt
total 1024223
-rw------T 1 root root 104857600 Feb 2 13:10 fichero1
-rw------T 1 root root 104857600 Feb 2 13:10 fichero2
-rw------T 1 root root 104857600 Feb 2 13:10 fichero3
-rw------T 1 root root 104857600 Feb 2 13:10 fichero4
-rw------T 1 root root 104857600 Feb 2 13:10 fichero5
Ejecutamos el comando:
86
Comunidad OpenSolaris Hispano
#zfs list
# rm fichero4 fichero5
# ls -lrt
total 614541
-rw------T 1 root root 104857600 Feb 2 13:10 fichero1
-rw------T 1 root root 104857600 Feb 2 13:10 fichero2
-rw------T 1 root root 104857600 Feb 2 13:10 fichero3
Ejecutamos el comando:
#zfs rollback -r babilonia/prueba1@nombredelafoto
# ls -lrt
total 1024223
-rw------T 1 root root 104857600 Feb 2 13:10 fichero1
-rw------T 1 root root 104857600 Feb 2 13:10 fichero2
-rw------T 1 root root 104857600 Feb 2 13:10 fichero3
-rw------T 1 root root 104857600 Feb 2 13:10 fichero4
-rw------T 1 root root 104857600 Feb 2 13:10 fichero5
#zfs list
87
Comunidad OpenSolaris Hispano
Estados de ZFS
88
Comunidad OpenSolaris Hispano
89
Comunidad OpenSolaris Hispano
c0d1 ONLINE 0 0 0
90
Comunidad OpenSolaris Hispano
Zonas
Zonas con OpenSolaris 2008.05
91
Comunidad OpenSolaris Hispano
/lib /lib
/sbin /sbin
/platform /platform
/var /var
/etc /etc
4GB 100MB
Zona Global 0
BIG ZONE
/dev/dsk/c0d0 /dev/dsk/c1d0
/usr /usr
/lib /lib
/sbin /sbin
/platform /platform
/var /var
/etc /etc
4GB 3GB
92
Comunidad OpenSolaris Hispano
Control de recursos
Cuando creamos una zona tenemos que asignarlas recursos como red,
memoria, CPU etc..
Asignar CPU
- CPU fija: una zona puede tener asignada una o mas CPUs de forma
fija. Esta forma puede ser útil cuando licenciamos aplicaciones
por el numero de CPU. Esta opción tiene una desventaja si la
zona no requiere mucho uso de CPU ya que perdemos capacidad de
procesamiento estando la CPU solamente asignada una zona.
- CPUs dinamicas: se asigna un mínimo y un máximo de CPU´s para una
zona. El demonio poold se encarga de balancear el numero de CPUs
disponibles según la necesidades de cada zona.
- CPUs compartidas: consiste en un pool de CPUs asignado a todas
las zonas. El sistema repartirá las CPU según las necesidades de
cada zona.
Memoria
Espacio en disco
RED
93
Comunidad OpenSolaris Hispano
# zonecfg -z mizona
zonecfg:mizona> create
zonecfg:mizona> set autoboot=true
zonecfg:mizona> set zonepath=/babilonia/mizona
zonecfg:mizona> add net
zonecfg:mizona:net> set address=10.73.111.25
zonecfg:mizona:net> set physical=pcn1
zonecfg:mizona:net> end
zonecfg:mizona> info
zonename: mizona
zonepath: /babilonia/mizona
autoboot: true
pool:
limitpriv:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
net:
94
Comunidad OpenSolaris Hispano
address: 10.73.130.25
physical: pcn1
zonecfg:mizona> verify
zonecfg:mizona> commit
zonecfg:mizona> exit
# more mizona.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN"
"file:///usr/share/lib/xml/dtd/zonecfg.dtd.1">
<!--
DO NOT EDIT THIS FILE. Use zonecfg(1M) instead.
-->
<zone name="mizona" zonepath="/babilonia/mizona" autoboot="true">
<inherited-pkg-dir directory="/lib"/>
<inherited-pkg-dir directory="/platform"/>
<inherited-pkg-dir directory="/sbin"/>
<inherited-pkg-dir directory="/usr"/>
<network address="10.73.130.25" physical="pcn1"/>
</zone>
Arrancar la zona
96
Comunidad OpenSolaris Hispano
• Nombre de la máquina
• Idioma del sistema
• Idioma del teclado
• Tipo de Terminal
• Zona geográfica
• Contraseña de root
• Compatibilidad NTFS v4
Select a Language
0. English
1. Spanish
2. it
Sobre el Terminal:
¿Qué tipo de terminal esta usando?
1) Est√°ndar ANSI CRT
2) DEC VT52
3) DEC VT100
4) Heathkit 19
5) Lear Siegler ADM31
6) Consola PC
7) Herramienta de comandos Sun
8) Estación de Trabajo (Workstation) Sun
9) Televideo 910
10) Televideo 925
11) Wyse, modelo 50
12) Emulador X Terminal (xterms)
13) Emulador de terminal CDE (dtterm)
14) Otros
Introduzca el número seleccionado y presione Intro:
98
Comunidad OpenSolaris Hispano
# zonecfg -z mibigzone
mibigzone: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.
zonecfg:mibigzone> create
zonecfg:mibigzone> remove inherit-pkg-dir dir=/sbin
zonecfg:mibigzone> remove inherit-pkg-dir dir=/usr
zonecfg:mibigzone> remove inherit-pkg-dir dir=/platform
zonecfg:mibigzone> remove inherit-pkg-dir dir=/lib
zonecfg:mibigzone> set autoboot=true
zonecfg:mibigzone> set zonepath=/bigzone
zonecfg:mibigzone> add net
zonecfg:mibigzone:net> set address=127.0.0.100
zonecfg:mibigzone:net> set physical=lo0
zonecfg:mibigzone:net> end
zonecfg:mibigzone> info
zonename: mibigzone
zonepath: /bigzone
autoboot: true
pool:
limitpriv:
net:
address: 127.0.0.100
physical: lo0
zonecfg:mibigzone> verify
zonecfg:mibigzone> commit
zonecfg:mibigzone> exit
Arrancamos la zona:
99
Comunidad OpenSolaris Hispano
0 global running /
- nocompartida installed /bigzone
# zoneadm -z nocompartida boot
# zoneadm list -cv
ID NAME STATUS PATH
0 global running /
2 nocompartida running /bigzone
Y finalizamos el proceso de instalación estableciendo el nombre
de máquina, contraseña de root, zona geográfica etc..:
Select a Language
0. English
1. Spanish
2. it
100
Comunidad OpenSolaris Hispano
Uptime:
FileSystems:
#
# zlogin -S nocompartida "df -k"
Filesystem kbytes used avail capacity Mounted on
/ 5783070 2964445 2760795 52% /
/dev 5783070 2964445 2760795 52% /dev
proc 0 0 0 0% /proc
ctfs 0 0 0 0% /system/contract
swap 513036 260 512776 1% /etc/svc/volatile
mnttab 0 0 0 0% /etc/mnttab
/usr/lib/libc/libc_hwcap1.so.1 5783070 2964445 2760795 52% /lib/libc.so.1
fd 0 0 0 0% /dev/fd
swap 512812 36 512776 1% /tmp
swap 512796 20 512776 1% /var/run
Uname –a:
101
Comunidad OpenSolaris Hispano
Introducción
Privilege Description
103
Comunidad OpenSolaris Hispano
Existen dos nuevos procesos por cada zona no global que tenemos
en el sistema, su función gestionar los recursos de ellas:
105
Comunidad OpenSolaris Hispano
La estructura zone_t
Por cada zona existente en el sistema hay una estructura zone_t
en el kernel, en ella tenemos información acerca del estado y
configuración de esta.
Podemos ver su definición en el fichero zone.h de nuestro sistema:
typedef struct zone {
/*
* zone_name is never modified once set.
*/
char *zone_name; /* zone's configuration name */
/*
* zone_nodename and zone_domain are never freed once allocated.
*/
char *zone_nodename; /* utsname.nodename equivalent */
char *zone_domain; /* srpc_domain equivalent */
/*
* zone_lock protects the following fields of a zone_t:
* zone_ref
* zone_cred_ref
* zone_ntasks
* zone_flags
* zone_zsd
*/
kmutex_t zone_lock;
/*
[...]
106
Comunidad OpenSolaris Hispano
107
Comunidad OpenSolaris Hispano
Brandz y Linux
Introducción
108
Comunidad OpenSolaris Hispano
Caso Práctico
Crear un Brandz es sencillo, el procedimiento es identico a como
crear una zona, solo que al ejecutar el create debemos espcificar que
use el módulo lx, por otro lado, cuando hacemos el install debemos
especificar la fuente de donde se deben copiar los binarios.
Para ir rápido podeís descargar un tar de Centos 3.5 directamente
de la web de la comidad OpenSolaris, os dejo una captura de la shell
de todo el proceso:
# zonecfg -z linux
linux: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:linux> create -t SUNWlx
zonecfg:linux> set zonepath=/linux-zone
zonecfg:linux> commit
zonecfg:linux> exit
# mkdir /linux-zone
# chmod 700 /linux-zone
bash-3.2# zoneadm -z linux install -d /centos_fs_image.tar
Installing zone 'linux' at root directory '/linux-zone'
from archive '/centos_fs_image.tar'
This process may take several minutes.
Setting up the initial lx brand environment.
System configuration modifications complete.
Setting up the initial lx brand environment.
System configuration modifications complete.
linux login: ~.
[Connection to zone 'linux' console closed]
110
Comunidad OpenSolaris Hispano
111
Comunidad OpenSolaris Hispano
• Uso de la memoria
• Entrada/Salida
Particiones físicas.
En una máquina realizamos una serie de particiones a nivel físico de
forma que se reparten los recursos disponibles entre los distintos SO
que van a ser ejecutados en la máquina. A todos los efectos disponemos
de varias máquinas, esa es la visión que tiene el SO.
Máquinas virtuales.
En una máquina podemos tener corriendo varias máquinas virtuales con
distintos SO. En este caso los recursos son asignados mediante la
utilización de un Hypervisor que se encarga de gestionar el acceso al
112
Comunidad OpenSolaris Hispano
Virtualización de SO.
La virtualicación de SO, consiste en que un SO anfitrión ejecuta
varias instancias del mismo SO, asignando y gestionando los recursos
del sistema. La impresión es de disponer varios sistemas con el mismo
SO.
Control de recursos.
Solaris dispone de una serie de herramientas para controlar los
recursos del sistema. CPU, memoria, tiempo de CPU, de esta forma los
recursos no son asignados a un SO invitado, sino que se asigna
mediante políticas a los procesos o grupos de procesos que están
ejecutándose en el sistema.
xVM se encuentra dentro del nicho de máquinas virtuales y sería
para x86 lo mismo que LDoms para SPARC.
Arquitectura
113
Comunidad OpenSolaris Hispano
Red
• Fichero
disk = [‘file:file_dom0, disp_domU, rw’]
114
Comunidad OpenSolaris Hispano
115
Comunidad OpenSolaris Hispano
Directorios
Entre los directorios utilizados por xVM, vamos a destacar los
siguientes, por que son donde se almacenan los ficheros que vamos a
necesitar cuando comencemos a trabajar con xVM:
• /var/log/xen, se utiliza para almacenar los logs, es importante
echar un vistazo a este directorio, ya que los errores que
devuelven los distintos comandos no son demasiado descriptivos.
• /var/lib/xend/domains, cada dominio que creemos disponde de un
directorio, identificado con el ID del dominio. Existe un
directorio por cada dominio.
• /var/xen/dump, en este directorio se almacenan, por defecto, los
ficheros cores que se crean cuando los solicitamos con el
subcomando dump-core de xm.
116
Comunidad OpenSolaris Hispano
• -s 5, tamaño en GB de disco.
• –nographics, no queremos configurar la consola gráfica para el
nuevo dominio.
• –paravirt, vamos a utilizar la paravirtualización
• –os-type=linux, el SO que vamos a instalar en el domU es de tipo
linux.
• -l /export/home/root/Desktop/CentOS-5.1-x86_64-bin-DVD.iso, es el
fichero con la imagen de un SO que utilizaremos para instalar.
Starting install...
Creating storage file... 100% |=========================| 5.0 GB 00:00
Creating domain... 0 B 00:06
Bootdata ok (command line is method=/export/home/root/Desktop/CentOS-5.1-x86_64-
bin-DVD.iso)
Linux version 2.6.18-53.el5xen (mockbuild@builder6.centos.org) (gcc version 4.1.2
20070626 (Red Hat 4.1.2-14)) #1 SMP Mon Nov 12 02:46:57 EST 2007
BIOS-provided physical RAM map:
Xen: 0000000000000000 - 0000000020800000 (usable)
No mptable found.
Built 1 zonelists. Total pages: 133120
Kernel command line: method=/export/home/root/Desktop/CentOS-5.1-x86_64-bin-
DVD.iso
Initializing CPU#0
PID hash table entries: 4096 (order: 12, 32768 bytes)
Xen reported: 2194.498 MHz processor.
Console: colour dummy device 80x25
Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
Software IO TLB disabled
Memory: 500480k/532480k available (2357k kernel code, 23224k reserved, 1326k data,
172k init)
Calibrating delay using timer specific routine.. 5489.47 BogoMIPS (lpj=10978940)
Security Framework v1.0.0 initialized
SELinux: Initializing.
....
Welcome to CentOS
117
Comunidad OpenSolaris Hispano
| |
| +----+ |
| | OK | |
| +----+ |
| |
| |
+---------------------------------------+
118
Comunidad OpenSolaris Hispano
119
Comunidad OpenSolaris Hispano
Parando un domU
Pausando un domU
Tenemos dos formas de suspender la ejecución de un domU y volver a
ejecutarla cuando nosotros deseemos:
• xm pause, provoca una pausa en la ejecución del domU. Para que el
dominio vuelva a ejecutarse utilizaremos el comando xm unpause.
(huelva@dom0)# xm pause centos_x64
(huelva@dom0)# xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1485 2 r----- 256.9
centos_x64 6 512 1 --p--- 40.7
solaris_11_x64 750 1 64.8
(huelva@dom0)#
120
Comunidad OpenSolaris Hispano
121
Comunidad OpenSolaris Hispano
122
Comunidad OpenSolaris Hispano
sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl est tm2 cx16 xtpr
lahf_lm
bogomips : 5489.33
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management:
[trantor@domU ~]
124
Comunidad OpenSolaris Hispano
• -f /export/home/xen/Solaris_11/solaris_11_x64.img, fichero de
imagen se se utilizará como disco root del nuevo dominio.
• -s 5, tamaño en GB de disco.
Starting install...
Creating storage file... 100% |=========================| 5.0 GB 00:00
Creating domain... 0 B 00:07
v3.0.4-1-xvm chgset 'Mon Nov 12 23:09:42 2007 -0800 13228:ed897008a4c9'
SunOS Release 5.11 Version snv_78 64-bit
Copyright 1983-2007 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
Configuring /dev
Solaris Interactive Text (Console session)
Using install cd in /dev/dsk/c0d1p0
Using RPC Bootparams for network configuration information.
Attempting to configure interface xnf0...
Skipped interface xnf0
Reading ZFS config: done.
Setting up Java. Please wait...
Y tanto que esperé, de aquí no pasó la instalación, tuve que subir a 750MB la
memoria asignada para que la instalación pudiera continuar.
bash-3.2# virt-install -n solaris_11_x64 -r 750
-f /export/home/xen/Solaris_11/solaris_11_x64.img -s 5
--nographics --paravirt --os-type=solaris
-l /export/home/IMAGES/Solaris_11_x86_1.iso
Starting install...
Creating domain... 0 B 00:06
v3.0.4-1-xvm chgset 'Mon Nov 12 23:09:42 2007 -0800 13228:ed897008a4c9'
SunOS Release 5.11 Version snv_78 64-bit
125
Comunidad OpenSolaris Hispano
Select a Language
1. English
2. French
3. German
4. Italian
5. Japanese
6. Korean
7. Simplified Chinese
8. Spanish
9. Swedish
10. Traditional Chinese
About navigation...
- The mouse cannot be used
- If your keyboard does not have function keys, or they do not
respond, press ESC; the legend at the bottom of the screen
will change to show the ESC keys to use for navigation.
--------------------------------------------------------------------------------
F2_Continue F6_Help
Specify whether or not this network interface should use DHCP to configure
itself. Choose Yes if DHCP is to be used, or No if the network interface is
to be configured manually.
NOTE: DHCP support will not be enabled, if selected, until after the system
reboots.
--------------------------------------------------------------------------------
Esc-2_Continue Esc-6_Help
126
Comunidad OpenSolaris Hispano
Networked: Yes
Use DHCP: No
Host name: mordor
IP address: 192.168.0.190
System part of a subnet: Yes
Netmask: 255.255.255.0
Enable IPv6: No
Default Route: Specify one
Router IP Address: 192.168.0.1
--------------------------------------------------------------------------------
Esc-2_Continue Esc-4_Change Esc-6_Help
On this screen you must specify your default time zone. You can specify a
time zone in three ways: select one of the continents or oceans from the
list, select other - offset from GMT, or other - specify time zone file.
> To make a selection, use the arrow keys to highlight the option and
press Return to mark it [X].
--------------------------------------------------------------------------------
Esc-2_Continue Esc-6_Help
- Profile ----------------------------------------------------------------------
The information shown below is your profile for installing Solaris software.
It reflects the choices you've made on previous screens.
NOTE: You must change the BIOS because you have changed the default boot
device.
============================================================================
127
Comunidad OpenSolaris Hispano
--------------------------------------------------------------------------------
Esc-2_Begin Installation F4_Change F5_Exit F6_Help
Pausing for 90 seconds at the "Reboot" screen. The wizard will continue to
the next step unless you select "Pause". Enter 'p' to pause. Enter 'c' to
continue. [c]
Unable to run Launcher without Java.
The following CDs will not be installed:
Solaris Software 2 for x86 Platforms
Creating ram disk for /a
updating /a/platform/i86pc/boot_archive...this may take a minute
updating /a/platform/i86pc/amd64/boot_archive...this may take a minute
syncing file systems... done
rebooting...
mordor# df -k
Filesystem kbytes used avail capacity Mounted on
/dev/dsk/c0d0s0 1125599 595232 474088 56% /
/devices 0 0 0 0% /devices
/dev 0 0 0 0% /dev
ctfs 0 0 0 0% /system/contract
proc 0 0 0 0% /proc
mnttab 0 0 0 0% /etc/mnttab
swap 1073356 376 1072980 1% /etc/svc/volatile
objfs 0 0 0 0% /system/object
sharefs 0 0 0 0% /etc/dfs/sharetab
/usr/lib/libc/libc_hwcap3.so.1
1125599 595232 474088 56% /lib/libc.so.1
fd 0 0 0 0% /dev/fd
swap 1072980 0 1072980 0% /tmp
swap 1072992 12 1072980 1% /var/run
/dev/dsk/c0d0s7 3494494 3489 3456061 1% /export/home
mordor#
128
Comunidad OpenSolaris Hispano
Navegando en el /proc
Todos los sistemas Unix disponen de una serie de ficheros, los
cuales mantienen información sobre los distintos procesos que se están
ejecutando en la máquina, Solaris utiliza un pseudo sistemas de
ficheros llamado Procfs, en el cual, el kernel mantiene información
sobre los procesos que está corriendo.
129
Comunidad OpenSolaris Hispano
130
Comunidad OpenSolaris Hispano
132
Comunidad OpenSolaris Hispano
133
Comunidad OpenSolaris Hispano
me en el segmento.
pr_mflag
Atributos del segmento.
s
pr_pages
Tamaño de página del segmento.
ize
50 else
51 {printf("-");}
52
53 if(pmap.pr_mflags & MA_SHARED)
54 {printf("s");}
55 else
56 {printf("-");}
57
58 if(pmap.pr_mflags & MA_ANON)
59 {printf("A");}
60 else
61 {printf("-");}
62
63 printf("t%s",pmap.pr_mapname);
64 }
65
66 close(fd);
67 printf("n");
68 }
Una vez que compilemos el programa, la salida de su ejecución será algo parecido a
esto:
(root@huelva)# ./proc_lwp_map 520
136
Comunidad OpenSolaris Hispano
(root@huelva)#
La salida está compuesta por una serie de líneas, una por cada
segmento que formen el espacio de direcciones del proceso, la primera
es la dirección de memoria en la que podemos localizar el segmento, la
última columna presenta el nombre del fichero que se ha mapeado en el
segmento, el tamaño de un segmento no tiene por qué coincidir con el
tamaño del fichero que se mapea, ya que puede que el segmento se mapee
un trozo del fichero. El nombre el nombre del objeto está formado con
el inodo del fichero que se está utilizando, podemos buscar el fichero
cuyo inodo es 2794.
137
Comunidad OpenSolaris Hispano
10 for(;;)
11 {
12 printf("n Contador: %d",*cont);
13 sleep(5);
14 *cont=*cont+1;
15 }
16
17 return;
18 }
Contador: 0
Contador: 1
Contador: 2
Contador: 3
Contador: 4
Contador: 5
Contador: 6
Contador: 7
Contador: 8^C
(root@huelva)#
Presenta la dirección de memoria de la variable cont, la cual
como podemos ver en la línea 5 de ejemplo1.c es de tipo puntero a un
entero. Cada 5 segundos se incrementará el contenido de la dirección
donde apunta *cont. Podemos dejar corriendo ejemplo1.
proc_as_wr.c
Este programa aceptará como parámetros el PID de un proceso y una
dirección de memoria, el PID lo utilizará para abrir el fichero del
espacio de direcciones del proceso y la dirección de memoria, para, en
primer lugar leer su contenido y posteriormente incremetar dicho
contenido en 100.
1 #include < stdio.h >
2 #include < sys/types.h >
3 #include < sys/stat.h >
4 #include < fcntl.h >
5
6 #define _STRUCTURED_PROC 1
7 #include < sys/procfs.h >
8
9 main(int argc, char **argv)
10 {
11
12 long puntero,addr;
13 int i_cont;
14 int fd;
15 char cadena[80];
16 int pid;
17
18 if (argc<2)
19 {printf("nn Uso: %s < pid > < addr >nn",argv[0]);return;}
20
21 pid=atoi(argv[1]);
22 addr=atol(argv[2]);
138
Comunidad OpenSolaris Hispano
23
24 printf("n PID:%d Direccion de memoria: 0x%lx (%ld)n",pid,addr,addr);
25
26 sprintf(cadena,"/proc/%d/as",pid);
27 fd=open(cadena,O_RDWR);
28
29 if (fd<0)
30 {printf("n Error: Abriendo el fichero %sn",cadena);return;}
31 printf("n Abriendo el fichero %sn",cadena);
32
33 if (lseek(fd,addr,SEEK_SET)<0)
34 {printf("nError: Leyendo el fichero %sn",cadena);return;}
35
36 if(read(fd,&i_cont,sizeof(i_cont))<0)
37 {printf("nError: Escribiendo el fichero %sn",cadena);return;}
38
39 printf("n La direccion de memoria 0x%lx (%ld) = %dn",addr,addr,i_cont);
40
41 i_cont=i_cont+100;
42
43 if (lseek(fd,addr,SEEK_SET)<0)
44 {printf("nError: Leyendo el fichero %sn",cadena);return;}
45
46 if (write(fd,&i_cont,sizeof(i_cont))<0)
47 {printf("nError: Escribiendo el fichero %sn",cadena);return;}
48
49 printf("n Se ha escrito corretamente en la posicion 0x%lx
(%ld)nn",addr,addr);
50
51 close(fd);
52 }
Contador: 0
Contador: 1
Contador: 2
Contador: 3
...
139
Comunidad OpenSolaris Hispano
(root@huelva)#
Comando truss
El primer paso consiste en realizar un pequeño estudio sobre el
número de llamadas al sistema, su frecuencia y el tipo, para esta
tarea podemos utiliza el comando truss, con la opción -c obtendremos
las estadísticas de las llamadas a sistema.
140
Comunidad OpenSolaris Hispano
(root@huelva)#
int fd;
char s_dir[16];
char cadena[80];
char HEX[]="0123456789ABCDEF";
141
Comunidad OpenSolaris Hispano
int pid;
int n,i;
long long addr;
char c;
int nelem;
pollfd_t dato;
if (argc<3)
{printf("nn Uso: %s
0x nn”,argv[0]);return;}
pid=atoi(argv[1]);
nelem=atoi(argv[3]);
/*
* Se lee la dir de memoria en formato HEX
* y se convierte en una dir de tipo “long long”
*/
if(argv[2][1]==’x')
argv[2][1]=’0′;
else
{printf(”nn Uso: %s
0x “);
printf(”nnLa direccion de memoria tiene que estar en formato hex
0xnn”,argv[0]);return;}
sprintf(s_dir,”%016s”,argv[2]);
addr=0;
for(n=0;n< sizeof(s_dir);n++)
{
i=0;
while((HEX[i]!=toupper(s_dir[n]))&&(i<16))
{i++;}
if (i>15)
{printf(”nError: La direccion contiene caracteres no
validosnn”);return;}
addr|=i;
addr=addr<<4;
}
addr=addr>>4;
/*
* La variable addr contiene la dir de memoria
* convertida de HEX -> long long
*/
fd=open(cadena,O_RDONLY);
if (fd<0)
{printf(”n Error: Abriendo el fichero %sn”,cadena);return;}
printf(”n Abriendo el fichero %sn”,cadena);
for(n=0;n< nelem;n++)
{
142
Comunidad OpenSolaris Hispano
if (lseek(fd,addr,SEEK_SET)<0)
{printf(”nError: Moviendo el puntero %sn”,cadena);return;}
if(read(fd,&dato,sizeof(dato))<0)
{printf(”nError: Escribiendo el fichero %sn”,cadena);return;}
printf(”n———————-n”);
addr=addr+(sizeof(pollfd_t));
}
close(fd);
}
PID: 25089
Dir. de memoria: 0x27dfee10
- Procesos y procesadores
- Entrada/Salida
- Memoria
144
Comunidad OpenSolaris Hispano
Rendimiento/Tuning
Procesos y procesadores
145
Comunidad OpenSolaris Hispano
146
Comunidad OpenSolaris Hispano
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 737 0 172 229 3 2429 143 500 72 0 3903 40 10 0 50
1 627 0 185 235 7 2461 152 519 95 0 4429 42 12 0 46
2 342 0 414 222 4 2872 140 608 109 0 3818 23 8 0 69
3 492 0 691 2252 2139 2258 52 447 191 1 3815 31 9 0 60
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 1046 0 556 234 2 2494 155 504 95 0 10747 44 11 0 46
1 844 0 882 225 7 2327 162 556 114 0 10418 43 15 0 43
2 619 0 842 236 3 3055 164 693 126 0 4954 32 9 0 59
3 816 0 913 2053 1933 1795 96 449 203 0 10199 54 11 0 35
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 795 0 255 361 3 3249 290 772 81 0 5503 60 6 0 34
1 868 0 556 353 11 2789 307 745 72 0 5091 54 20 0 26
2 654 0 1049 358 2 3131 320 847 95 0 5175 55 14 0 31
3 1161 0 1187 2673 2543 2319 203 646 210 0 5291 59 20 0 21
De todas las columnas vamos a centrar nuestro análisis únicamente en
las siguientes:
147
Comunidad OpenSolaris Hispano
crtime 147.6276642
device_ID 209202519330
fpu_type sparcv9
implementation UltraSPARC-IIIi
snaptime 25738067.4963142
state on-line
state_begin 1154200415
153
Comunidad OpenSolaris Hispano
(root@huelva)# cpustat -h
Usage:
cpustat [-c events] [-nhD] [interval [count]]
events pic0=,pic1=[,sys][,nouser]
154
Comunidad OpenSolaris Hispano
Re_DC_missovhd
(root@huelva)#
La utilización del comando es bastante sencilla, acepta un evento
en cada contador, solo le tenemos que decir qué eventos queremos
monitorizar, el intervalo en segundos y el número de repeticiones.
Vamos a ejecutar el comando cpustat, cada segundo, 5 veces, para que
nos devuelva el contador Cycle_cnt, el cual almacena el número de
ciclos de CPU y Instr_cnt que nos dice cuantas instrucciones se han
ejecutando, el comando devuelve una línea por cada CPU.
(root@huelva)# cpustat -c pic0=Cycle_cnt,pic1=Instr_cnt 1 5
time cpu event pic0 pic1
1.006 1 tick 5253507 2214596
1.006 0 tick 5906614 1840943
2.006 1 tick 751843 173146
2.006 0 tick 694595 118216
3.006 1 tick 557997 194365
3.006 0 tick 1166984 271610
4.006 1 tick 5253396 2321969
4.006 0 tick 4473184 1284188
5.006 1 tick 781913 223580
5.006 0 tick 474001 70561
5.006 2 total 25314034 8713174
(root@huelva)#
Como ya hemos comentado, los contadores que se pueden monitorizar
con el comando cpustat dependen del tipo de procesador que tenga
nuestro sistema, por lo tanto, tendremos que recurrir a la
documentación especifica de cada procesador. En nuestro ejemplo, el
procesador que está utilizando la máquina es un UltraSPARC-IIIi y
algunos de los contadores son los siguientes:
Contador Descripción
Cycle_cn
Contador de cilclos
t
Instr_cn Instrucciones
t ejecutadas
Fallos en la cache de
IC_miss
instrucciones
DC_rd_mi Fallos de lectura en
ss la cache
DC_rw_mi Fallos de escritura en
ss la cache
Fallos de
ITLB_mis
instrucciones en la
s
TLB
DTLB_mis Fallos de datos en la
s TLB
EC_misse Fallos en la cache
s externa
155
Comunidad OpenSolaris Hispano
156
Comunidad OpenSolaris Hispano
Introducción a DTrace
Hace tiempo que estoy detrás de intentar escribir una pequeña
entrada en el blog sobre DTrace, pienso que ha sido una de las
herramientas más interesante que han aparecido para el estudio del
rendimiento de los sistemas y no solo para eso, tambien puede ayudar a
todos aquellos que deseen profundizar en la compresión de cómo
funciona el Kernel de Solaris. Creo que cualquier persona que bien
vaya a desarrollar, bien administre sistemas Solaris, debería conocer
DTrace, sino en profundidad, al menos conocer las posibilidades que
nos ofrece. En este artículo veremos una breve introducción a DTrace,
de todas formas es imprescindible, para todos aquellos que deseen
profundizar más, la lectura de Solaris Dynamic Tracing Guide.
¿Qué es DTrace?
157
Comunidad OpenSolaris Hispano
Lenguaje D
Es una mezcla de C y awk, la característica mas notable es que
este lenguaje no dispone de instrucciones para el control de fujo, no
tenemos ni if … then, ni while, for, etc.
Los programas son compilados con el comando dtrace(1M), de una
forma parecida a como se hace en Java, una vez probado que no contiene
errores es enviado a Kernel para que lo ejecute DTrace.
La estructura básica de un programa en D es:
158
Comunidad OpenSolaris Hispano
Descripción de la sonda
/ predicado /
{
Acciones;
}
Descripción de la sonda
La descripción de la sonda, está formada por una o más cadenas de
la forma:
provider:module:funcition:name
Predicado
La única forma de controlar el flujo de un programa en D es mediante
los predicados.
Son expresiones encerradas en / / y que se evaluan como verdaderas o
falsas.
Ejemplo:
/ pid == 78 / El PID es igual a 78
/ execname == "bash"/ El nombre del programa sea bash
/ x <= 1 / El valor de la variable x sea menor o igual a 1
Acciones
La lógica de la sonda que estamos definiendo, se describe
mediante una serie de acciones, las cuales estarán encerradas entre
{}. Estas acciones nos permitiran medir, imprimir, contar, modificar,
los datos que la sonda obtenga.
Disponemos de una serie de funciones, que podemos utilizar para
definir el comportamiento de nuestra sonda. Alguna de las cuales son:
• trace, toma una exprecion y la pasa directamente al buffer.
• printf, nos permite formatear una salida.
• stack, almacena el stack.
• stop, para el proceso.
• system, ejecuta un programa.
• panic, genera un kernel panic.
• exit, termina la ejecución de la sonda.
159
Comunidad OpenSolaris Hispano
Ejemplo 1
Este primer ejemplo muestra el sencillo “Hola mundo” en lenguaje D.
dtrace:::BEGIN{
trace(“Hola mundo”);
}
dtrace:::END
{
trace(“Adios!!”);
}
Ejemplo 2
Este ejemplo muestra una versión en lenguaje D del comando truss.
syscall:::entry/ pid == $1 /
{
printf("%s (%d, 0x%x, %4d)n",probefunc,arg0,arg1,arg2);
}
160
Comunidad OpenSolaris Hispano
Ejemplo 3
En este ejemplo vamos a crear un programa en D que nos devuelva el tiempo que se
ha tardado en ejecutar cada syscall, para obtener el tiempo utilizaremos la
variable timestamp, la cual da los nanosegundos desde que se inicio el sistema.
syscall:::entry
/ pid == $1 /
{
array_sc[probefunc] = timestamp;
}
syscall:::return
/ pid == $1 /
{
printf("time %d t %s (%d, 0x%x, %4d) n",timestamp-array_sc[probefunc], probefunc,
arg0, arg1, arg2);
}
Agregaciones
El lenguaje D, dispone de una serie de funciones de agregación, que
nos ayudarán a analizar los datos obtenidos tras el lanzamiento de una
sonda.
• count(), cuenta el número de veces.
Ejemplo 4
En este ejemplo hemos construido un programa en D, el cual cuenta
con 3 probes:
• El primer probe almacena en el array @array_sc_count la veces que
se inicia cualquier syscall del proceso pid == $1, también se
161
Comunidad OpenSolaris Hispano
syscall::read:entry
/ pid == $1 /
{
@array_time_lq[probefunc]=lquantize(arg0,0,100,1);
}
syscall::read:return
/ pid == $1 /
{
@array_time_q[probefunc]=quantize(timestamp-array_sc[probefunc]);
}
read
value ------------- Distribution ------------- count
11 | 0
12 | 2
13 |@@@@ 37
14 | 0
41 |@@@@@@@@ 74
42 | 0
43 |@@@@@@@@@@@@@@@@@@@@@@@@@@@ 252
44 | 0
read
value ------------- Distribution ------------- count
512 | 0
1024 |@@ 19
2048 |@@@@@@@@@@@@@@@@@@@@@@@@@@ 241
4096 |@@@@@@@@@ 86
8192 |@@ 23
16384 | 1
162
Comunidad OpenSolaris Hispano
32768 | 0
dtrace(1M)
Es el comando que nos permite compilar nuestros programas en D.
Dispone de una serie deparámetros entre los que podemos destacar:
o -l listado de todos los probes disponibles.
o -s compila un programa en D.
o -P lista los probes de un provider específico.
o -32/64 compila los programas D en 32 o 64 bits.
o -G genera un fichero ELF que podemos usar para linkar con
otros programas.
o -n especifica el nombre de un probe.
bash-3.2# dtrace -l
Providers
Las sondas (probes) son generadas por unos módulos del kernel que
se denominan providers. Con el comando dtrace(1M) podemos ver la lista
de providers que tiene nuestro sistema, de esta lista podemos
destacar:
o fbt (Function Boundary Tracing) nos permiten tracear la
mayoría de las funciones del Kernel. Con el comando dtrace -
l -P fbt podemos ver la lista de los probes disponibles.
o lockstat, con este provider podemos tracear posibles
problemas de contención en locks.
o mib, nos da acceso a los contadores MIBs de Solaris.
o proc, obtenemos información sobre el estado de los procesos
y los threads.
o syscall, nos permite tracear todas las llamadas a systema.
o sysinfo, obtenemos información sobre el sistema.
o vminfo, obtenemos información sobre el VM.
163
Comunidad OpenSolaris Hispano
Un ejemplo:
En cualquier SMTP de código abierto, podríamos modificar el fuente,
para que nos devuelva información de cuanto tarda en procesar un
mensaje o el tiempo medio que se utiliza para almacenar un mensaje en
disco.
Cómo crear nuestro propio provider
provider myprovider
{
probe op_entry(string);
probe op_return();
};
Nuestro provider tendrá dos probes:
o op_entry, el cual acepta una parámetro como entrada.
o op_return, este probe no acepta parámetros.
164
Comunidad OpenSolaris Hispano
main()
{
int sp;
for(;;)
{
DTRACE_PROBE1(myprovider,op_entry,"Entrada en op");
sp=rand()%5;
printf("Inicio Op: sleep (%d) n",sp);
sleep(sp);
printf("Fin Opn");
DTRACE_PROBE(myprovider,op_return);
}
}
myprovider$1:::op_entry
{
ts = timestamp;
}
myprovider$1:::op_return
{
printf("n probename: %s t time: %d ns",probename, (timestamp - ts));
}
bash-3.2#
165
Comunidad OpenSolaris Hispano
166
Comunidad OpenSolaris Hispano
¿Qué es DTrace?
167
Comunidad OpenSolaris Hispano
Primero necesitas ser root ó tener algún privilegio DTrace para poder
emplear la herramienta.
168
Comunidad OpenSolaris Hispano
169
Comunidad OpenSolaris Hispano
leonidas ~ # dtrace -l | wc -l
48722
170
Comunidad OpenSolaris Hispano
Las funciones son los nombres de las funciones del código en las
que están situados los probes. El nombre es el componente final del
probe nos da una idea de cuando se ejecuta el probe, como por ejemplo
BEGIN ó END
171
Comunidad OpenSolaris Hispano
fcntl 1
getpid 1
mmap 1
open 1
schedctl 1
fstat64 2
so_socket 2
stat64 2
close 3
sysconfig 3
sigaction 5
brk 6
xstat 10
lwp_sigmask 11
setcontext 11
172
Comunidad OpenSolaris Hispano
nanosleep 13
gtime 14
write 15
writev 16
setitimer 19
p_online 32
read 56
lwp_park 66
pollsys 239
ioctl 495
173
Comunidad OpenSolaris Hispano
sched
256 |
0
512 |@@@@@@@@@
9
1024 |@@@@@@@@@@@@
13
2048 |@@@@@@@@@@@@@@@ 16
4096 | 0
8192 | 0
16384 |@@@@ 4
32768 | 0
174
Comunidad OpenSolaris Hispano
BEGIN
{
trace(“Hola, mundo!);
exit(0);
CPU ID FUNCTION:NAME
0 1 :BEGIN Hola, mundo!
175
Comunidad OpenSolaris Hispano
176
Comunidad OpenSolaris Hispano
– Perfiles
Basicamente en su definición lo asociamos a la ejecución de un
determinado/s binario con un identificador de usurios. En el ejemplo
posterior se relacciona el comando format con el uid=0 del usuario
root.
Posteriormente asignaremos a un usuario en particular (victor),
este nuevo atributo de tipo perfil “Format” y comprobaremos el
resultado de esta asociación, ejecutando esa orden de linea de
comandos.
pluton ~ # vi /etc/security/prof_attr
...
Format:::Allow Users to run format command::
pluton ~ # vi /etc/security/exec_attr
...
Format:suser:cmd:::/usr/sbin/format:uid=0
pluton ~ # su – victor
pluton ~ # pfexec /usr/sbin/format
– Roles
Basicamente en su definición es similar el la parte de asignación
de perfiles, pero en este caso la diferencia reside en la asociación
de diferentes perfiles a un determinado rol/es.
pluton ~ # vi /etc/security/prof_attr
Snoop:::Allow Users to run snoop command::
pluton ~ # vi /etc/security/exec_attr
Snoop:suser:cmd:::/usr/sbin/snoop:uid=0
pluton ~ # su – victor
pluton ~ # su usrsnoop
pluton ~ # /usr/sbin/snoop
177
Comunidad OpenSolaris Hispano
178
Comunidad OpenSolaris Hispano
179
Comunidad OpenSolaris Hispano
180
Comunidad OpenSolaris Hispano
RAID 0 (Concat)
Metadispositivo resultante como distribución secuencial de al
menos dos particiones, cuyo tamaño consiste en la suma del de sus
componentes.
pluton ~ # metastat -p
d11 3 1 c0d1s4 \
1 c1d1s5 \
1 c2t0d0s6
RAID 0 (Stripe)
Metadispositivo resultante como distribución NO secuencial (es
decir en paralelo) de al menos dos particiones, cuyo tamaño consiste
en la suma del de sus componentes (deben ser iguales sino se pierde la
diferencia).
pluton ~ # metastat -p
d11 1 3 c0d1s4 c1d1s5 c2t0d0s6
pluton ~ # metastat -p
d10 -m d11 d12 1
d11 1 1 c0d1s4
d12 1 1 c0d2s4
181
Comunidad OpenSolaris Hispano
RAID 5 (Parity)
Metadispositivo resultante como distribución en paridad NO
secuencial (es decir en paralelo) de al menos 3 particiones del mismo
tamaño. En este caso la información se guarda en bandas donde uno de
los componentes de la misma alberga la paridad. Con tres particiones
implicadas se pierde un tercio del tamaño total, pero se gana en
tolerancia a fallos.
pluton ~ # metastat -p
d10 -r c0d1s4 c1d1s5 c2t0d0s6 -k -i 32b
182
Comunidad OpenSolaris Hispano
183
Comunidad OpenSolaris Hispano
IPFilter (IPF)
A diferencia de RBAC y otras herramientas de Seguridad Lógica,
desde el punto de vista de la Seguridad Perimetral (a nivel de red y a
nivel de host) en la antigua version 8 (independientemente de la
release) de la distribución comercial Sun Solaris se incluia como
utilidad (gratuita) de Firewall local y remoto el producto SunScreen
Lite v3.1 y todavia comptible con Sun Solaris. Actualmente dicho
producto esta discontinuado (deprecated) y se ha incluido de forma
estandard este nuevo componente del sistema, el cual esta 100%
integrado con otros componentes como SMF, etc.. y ademas no es
incompatible con otros productos de mercado que ofrecen la misma
fucnionalidad o más.
¿Qué es IPF?
Es una herramienta que permite el filtrado de tráfico local y
remoto de tipo TCP / UDP junto con el enmascaramiento o traducción de
direcciones IPv4/6 (Network Address Translation: NAT), incluyendo la
redirección por puertos TCP (Network Addess Translatioon Port: NATP).
pluton ~ # ipf -E
Una vez comprobado que todo esta OK, es el momento para comenzar
con su configuración. En este sencillo ejemplo se puede observar el
filtrado de todo el tráfico TCP y UDP, unicamente permitiendo el
acceso a nuestro sistema por ssh desde la Ipv4 especificada en el
fichero de configuración.
pluton ~ # ifconfig -a
lo0: flags=2001000849 mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
pcn0: flags=201000843 mtu 1500 index 2
inet 10.73.130.68 netmask ffffff00 broadcast 10.73.130.255
ether 0:c:29:ef:ed:da
pluton ~ # vi /etc/ipf/pfil.ap
P Filter pfil autopush setup
#
# See the autopush(1M) manpage for more information.
#
# Format of the entries in this file is:
#
#major minor lastminor modules
#iprb -1 0 pfil
#elxl -1 0 pfil
pcn0 -1 0 pfil
#e1000g -1 0 pfil
#bge -1 0 pfil
#nf -1 0 pfil
#fa -1 0 pfil
#ci -1 0 pfil
#el -1 0 pfil
#ipdptp -1 0 pfil
#lane -1 0 pfil
#dnet -1 0 pfil
#pcelx -1 0 pfil
#spwr -1 0 pfil
pluton ~ # vi /etc/ipf/ipf.conf
#
# ipf.conf
#
# IP Filter rules to be loaded during startup
185
Comunidad OpenSolaris Hispano
186
Comunidad OpenSolaris Hispano
187
Comunidad OpenSolaris Hispano
188
Comunidad OpenSolaris Hispano
pluton ~ # pkginfo
...
system SUNWtcatr Tomcat Servlet/JSP Container (root)
system SUNWtcatu Tomcat Servlet/JSP Container
pluton ~ # pkgrm
pluton ~ # pkginfo -l
...
PKGINST: SUNWtcatr
NAME: system
ARCH: i386
VERSION: 11.11.0,REV=2008.03.19.13.46
VENDOR: Sun Microsystems
DESC: Tomcat Servlet/JSP Container (root)
HOTLINE: Please contact your local service provider
STATUS: Completely installed
PKGINST: SUNWtcatu
NAME: system
ARCH: i386
VERSION: 11.11.0,REV=2008.03.19.13.46
VENDOR: Sun Microsystems
DESC: Tomcat Servlet/JSP Container
HOTLINE: Please contact your local service provider
STATUS: Completely installed
PHASE ACTIONS
Install Phase 1268/1268
190
Comunidad OpenSolaris Hispano
191
Comunidad OpenSolaris Hispano
pluton ~ # pkgadd -d .
pluton ~ # pkgchk
192
Comunidad OpenSolaris Hispano
193