martes, 9 de julio de 2013

Configurar SAMBA en Linux

© 1999-2006 Linux Para Todos. Algunos Derechos Reservados 2007 Factor Evolución SA de CV. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales. c) Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.

Introducción.

Acerca del protocolo SMB.

SMB (acrónimo de Server Message Block) es un protocolo, del Nivel de Presentación del modelo OSI de TCP/IP, creado en 1985 por IBM. Algunas veces es referido también como CIFS (Acrónimo de Common Internet File System, http://samba.org/cifs/) tras ser renombrado por Microsoft en 1998. Entre otras cosas, Microsoft añadió al protocolo soporte para enlaces simbólicos y duros así como también soporte para ficheros de gran tamaño. Por mera coincidencia esto ocurrió por la misma época en que Sun Microsystems hizo el lanzamiento de WebNFS (una versión extendida de NFS, http://www.sun.com/software/webnfs/overview.xml).
SMB fue originalmente diseñado para trabajar a través del protoclo NetBIOS, el cual a su vez travaja sobre NetBEUI (acrónimo de NetBIOS Extended User Interface, que se traduce como Interfaz de Usuario Extendida de NetBIOS), IPX/SPX (acrónimo de Internet Packet Exchange/Sequenced Packet Exchange, que se traduce como Intercambio de paquetes interred/Intercambio de paquetes secuenciales) o NBT, aunque también puede trabajar directamente sobre TCP/IP.

Acerca de Samba.

SAMBA es un conjunto de programas, originalmente creados por Andrew Tridgell y actualmente mantenidos por The SAMBA Team, bajo la Licencia Publica General GNU, y que implementan en sistemas basados sobre UNIX® el protocolo SMB. Sirve como reemplazo total para Windows® NT, Warp®, NFS® o servidores Netware®.

Sustento lógico necesario.

Los procedimientos descritos en este manual han sido probados para poder aplicarse en sistemas con Red Hat™ Enterprise Linux 4, o equivalentes o versiones posteriores, y al menos Samba 3.0.10 o versiones posteriores.
Necesitará tener instalados los siguientes paquetes, que seguramente vienen incluidos en los discos de instalación de su distribución predilecta:

•  samba: Servidor SMB.
•  samba-client: Diversos clientes para el protoclo SMB.
•  samba-common: Ficheros necesarios para cliente y servidor.

Consulte a la base de datos RPM del sistema si se encuentran instalados estos paquetes, utilizando el siguiente mandato:

rpm -q samba samba-client samba-common

Si se utiliza Red Hat™ Enterprise Linux, solo bastará realizar lo siguiente para instalar o actualizar la programática necesaria:

up2date -i samba samba-client

Si utiliza CentOS 4 o White Box Enterprise Linux 4, solo bastará realizar lo siguiente para instalar o actualizar la programática necesaria:

yum -y install samba samba-client

Configuración básica de Samba.

Para la mayoría de los casos la configuración de Samba como servidor de archivos es suficiente.

Alta de cuentas de usuario.

Es importante sincronizar las cuentas entre el servidor Samba y las estaciones Windows®. Es decir, si en una máquina con Windows® ingresamos como el usuario "paco" con clave de acceso "elpatito16", en el servidor Samba deberá existir también dicha cuenta con ese mismo nombre y la misma clave de acceso. Como la mayoría de las cuentas de usuario que se utilizarán para acceder hacia samba no requieren acceso al interprete de mandatos del sistema, no es necesario asignar clave de acceso con el mandato passwd y se deberá definir /sbin/nologin o bien /bin/false como interpete de mandatos para la cuenta de usuario involucrada.

useradd -s /sbin/nologin usuario-windows
smbpasswd -a usuario-windows

No hace falta se asigne una clave de acceso en el sistema con el mandato passwd puesto que la cuenta no tendrá acceso al interprete de mandatos.
Si se necesita que las cuentas se puedan utilizar para acceder hacia otros servicios como serían Telnet, SSH, etc, es decir, que se permita acceso al interprete de mandatos, será necesario especificar /bin/bash como interprete de mandatos y además se deberá asignar una clave de acceso en el sistema con el mandato passwd:

useradd -s /bin/bash usuario-windows
passwd usuario-windows
smbpasswd -a usuario-windows

El fichero lmhosts

Es necesario empezar resolviendo localmente los nombres NetBIOS asociándolos con direcciones IP correspondientes. Para fines prácticos el nombre NetBIOS debe tener un máximo de 11 caracteres. Normalmente tomaremos como referencia el nombre corto del servidor o el nombre corto que se asigno como alias a la interfaz de red. Este lo estableceremos en el fichero /etc/samba/lmhosts, en donde encontraremos lo siguiente:

127.0.0.1       localhost

Debemos añadir entonces el nombre que hayamos elegido asociado a la dirección IP que se tenga dentro de la red local. Opcionalmente podrá añadir también los nombres y dirección IP del resto de las máquinas que conformen la red local. La separación de espacios se hace con un tabulador. Ejemplo:

127.0.0.1       localhost
192.168.1.5     maquinalinux
192.168.1.6     isaac
192.168.1.7     finanzas
192.168.1.8     direccion

Parámetros principales del fichero smb.conf.

Modifique el fichero /etc/samba/smb.conf con cualquier editor de texto. Dentro de este notará que la información que le será de utilidad viene comentada con un símbolo # y los ejemplos con ; (punto y coma), siendo estos últimos los que tomaremos como referencia.
Empezaremos por establecer el grupo de trabajo editando el valor del parámetro workgroup asignando un grupo de trabajo deseado:

workgroup = MIGRUPO

Opcionalmente puede establecer con el parámetro netbios name otro nombre distinto para el servidor si acaso fuese necesario, pero siempre tomando en cuenta que dicho nombre deberá corresponder con el establecido en el fichero /etc/samba/lmhosts:

netbios name = maquinalinux

El parámetro server string es de carácter descriptivo. Puede utilizarse un comentario breve que de una descripción del servidor.

server string = Servidor Samba %v en %L

Parámetros útiles para la seguridad.

La seguridad es importante y esta se puede establecer primeramente estableciendo la lista de control de acceso que definirá que máquinas o redes podrán acceder hacia el servidor. El parámetro hosts allow sirve para determinar esto. Si la red consiste en la máquinas con dirección IP desde 192.168.1.1 hasta 192.168.1.254, el rango de direcciones IP que se definirá en hosts allow será 192.168.1. de modo tal que solo se permitirá el acceso dichas máquinas. Note por favor el punto al final de cada rango. Modifique ésta de manera que quede del siguiente modo:

hosts allow = 192.168.1. 127.

El parámetro interfaces permite establecer desde que interfaces de red del sistema se escucharán peticiones. Samba no responderá a peticiones provenientes desde cualquier interfaz no especificada. Esto es útil cuando Samba se ejecuta en un servidor que sirve también de puerta de enlace para la red local, impidiendo se establezcan conexiones desde fuera de la red local.

interfaces = 192.168.1.254/24

Impresoras en Samba.

Las impresoras se comparten de modo predeterminado, así que solo hay que realizar algunos ajustes. Si se desea que se pueda acceder hacia la impresora como usuario invitado sin clave de acceso, basta con añadir public = Yes en la sección de impresoras del siguiente modo:

[printers]
        comment = El comentario que guste.
        path = /var/spool/samba
        printable = Yes
        browseable = No
 writable = no
 printable = yes
        public = Yes

Windows NT, 2000 y XP no tendrán problema alguno para acceder e imprimir hacia las impresoras, sin embargo Windows 95, 98 y ME suelen tener problemas para comunicarse con Samba para poder imprimir. Por tanto, si se quiere evitar problemas de conectividad con dichos sistemas operativos hay que agregar algunos parámetros que resolverán cualquier eventualidad:

[printers]
        comment = Impresoras.
        path = /var/spool/samba
        printable = Yes
        browseable = No
 writable = no
 printable = yes
        public = Yes
        print command = lpr -P %p -o raw %s -r
        lpq command = lpstat -o %p
        lprm command = cancel %p-%j

Se pude definir también a un usuario o bien un grupo (@grupo_que_sea) para la administración de las colas de las impresoras:

[printers]
        comment = Impresoras.
        path = /var/spool/samba
        printable = Yes
        browseable = No
 writable = no
 printable = yes
        public = Yes
        print command = lpr -P %p -o raw %s -r
        lpq command = lpstat -o %p
        lprm command = cancel %p-%j
        printer admin = fulano, @opers_impresion

Con lo anterior se define que el usuario fulano y quien pertenezca al grupo opers_impresion podrán realizar tareas de administración en las impresoras.

Compartiendo directorios a través de Samba.

Para los directorios o volúmenes que se irán a compartir, en el mismo fichero de configuración encontrará distintos ejemplos para distintas situaciones particulares. En general, puede utilizar el siguiente ejemplo que funcionará para la mayoría:

[Lo_que_sea]
        comment = Comentario que se le ocurra
        path = /cualquier/ruta/que/desee/compartir

El volumen puede utilizar cualquiera de las siguientes opciones:

Opción Descripción
guest ok Define si ser permitirá el acceso como usuario invitado. El valor puede ser Yes o No.
public Es un equivalente del parámetro guest ok, es decir define si ser permitirá el acceso como usuario invitado. El valor puede ser Yes o No.
browseable Define si se permitirá mostrar este recurso en las listas de recursos compartidos. El valor puede ser Yes o No.
writable Define si ser permitirá la escritura. Es el parámetro contrario de read only. El valor puede ser Yes o No. Ejemplos: «writable = Yes» es lo mismo que «read only = No». Obviamente «writable = No» es lo mismo que «read only = Yes»
valid users Define que usuarios o grupos pueden acceder al recurso compartido. Los valores pueden ser nombres de usuarios separados por comas o bien nombres de grupo antecedidos por una @. Ejemplo: fulano, mengano, @administradores
write list Define que usuarios o grupos pueden acceder con permiso de escritura. Los valores pueden ser nombres de usuarios separados por comas o bien nombres de grupo antecedidos por una @. Ejemplo: fulano, mengano, @administradores
admin users Define que usuarios o grupos pueden acceder con permisos administrativos para el recurso. Es decir, podrán acceder hacia el recurso realizando todas las operaciones como super-usuarios. Los valores pueden ser nombres de usuarios separados por comas o bien nombres de grupo antecedidos por una @. Ejemplo: fulano, mengano, @administradores
directory mask Es lo mismo que directory mode. Define que permiso en el sistema tendrán los subdirectorios creados dentro del recurso. Ejemplos: 1777
create mask Define que permiso en el sistema tendrán los nuevos ficheros creados dentro del recurso. Ejemplo: 0644

En el siguiente ejemplo se compartirá a través de Samba el recurso denominado ftp, el cual está localizado en el directorio /var/ftp/pub del disco duro. Se permitirá el acceso a cualquiera pero será un recurso de solo lectura salvo para los usuarios administrador y fulano. Todo directorio nuevo que sea creado en su interior tendrá permiso 755 y todo fichero que sea puesto en su interior tendrá permiso 644.

[ftp]
 comment = Directorio del servidor FTP
 path = /var/ftp/pub
 guest ok = Yes
 read only = Yes
 write list = fulano, administrador
 directory mask = 0755
 create mask = 0644

Configuración avanzada de Samba.

Samba fue creado con un objetivo: ser en un reemplazo definitivo para Windows como servidor en una red local. Ésto, por supuesto, requiere algunos procedimientos adicionales dependiendo de las necesidades de la red local.

Re-asignación de grupos de Windows en Samba.

Los grupos que existen en Windows también se utilizan en Samba para ciertas operaciones, principalmente relacionadas con lo que involucra un Controlador Primario de dominio (o PDC que significa Primary Domain Controler). Estos grupos existen de modo predefinido en Samba. Sin embargo, si se ejecuta lo siguiente:

net groupmap list

Devolverá la siguiente información:

System Operators (S-1-5-32-549) -> -1
Domain Admins (S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-512) -> -1
Replicators (S-1-5-32-552) -> -1
Guests (S-1-5-32-546) -> -1
Domain Guests (S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-514) -> -1
Power Users (S-1-5-32-547) -> -1
Print Operators (S-1-5-32-550) -> -1
Administrators (S-1-5-32-544) -> -1
Account Operators (S-1-5-32-548) -> -1
Domain Users (S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-513) -> -1
Backup Operators (S-1-5-32-551) -> -1
Users (S-1-5-32-545) -> -1

Lo anterior corresponde al mapa de los grupos que, de modo predeterminado, utilizará Samba si éste fuese configurado como Controlador Primario de Dominio. XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX corresponde a un número generado aleatoriamente al iniciarse Samba por primera vez. Tome nota de dicho número, ya que lo requerirá más adelante para re-asignar los nombres al español en el mapa de grupos.
Los grupos anteriormente descritos trabajarán perfecta y limpiamente asociándolos contra grupos en el sistema, pero solo si utiliza alguna versión de Windows en ingles. Si utiliza alguna versión de Windows en español, habrá que re-asignar los nombres de los grupos a los correspondientes al español y asociarles a grupos en el sistema, esto a fin de permitir asignar usuarios a dichos grupos y de este modo delegar tareas de administración del mismo modo que en Windows.
Es por tal motivo que si se tiene la intención de configurar Samba como Controlador Primario de Dominio y al mismo tiempo poder hacer uso de los grupos del mismo modo que en Windows, es decir, por mencionar un ejemplo, permitir a ciertos usuarios pertenecer al grupo de administradores del dominio con privilegios de administrador, lo primero será entonces generar los grupos en el sistema ejecutando como root los siguientes mandatos:

groupadd -r administradores
groupadd -r admins_dominio
groupadd -r duplicadores
groupadd -r invitados
groupadd -r invs_dominio
groupadd -r opers_copias
groupadd -r opers_cuentas
groupadd -r opers_impresion
groupadd -r opers_sistema
groupadd -r usrs_avanzados
groupadd -r usuarios
groupadd -r usuarios_dominio

Una vez creados los grupos en el sistema, solo resta re-asignar los nombres al español en el mapa de grupo de Samba y asociarles a éstos los grupos recién creados en el sistema. El procedimiento se resume a ejecutar algo como lo siguiente:

net groupmap modify
ntgroup="Nombre grupo Windows en español"
sid="número-de-identidad-en-sistema"
unixgroup="grupo_en_linux"
comment="comentario descriptivo acerca del grupo"

Lo anterior establece que se modifique el registro del grupo que corresponda al sid (identidad de sistema) definido con el nombre establecido con ntgroup, asociándolo al grupo en el servidor con unixgroup y añadiendo un comentario descriptivo acerca de dicho grupo con comment.
De modo tal, y a fin de facilitar las cosas a quien haga uso de este manual, puede utilizar el siguiente guión para convertir los nombres al español y asociarlos a grupos en Linux, donde solo deberá definir el número de identidad del sistema que corresponda al servidor:

#!/bin/sh
SIDSAMBA=XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX

net groupmap modify ntgroup="Administradores"
sid="S-1-5-32-544" unixgroup=administradores
comment="Los administradores tienen acceso completo y sin restricciones al equipo o dominio"

net groupmap modify ntgroup="Admins. del dominio"
sid="S-1-5-21-$SIDSAMBA-512" unixgroup=admins_dominio
comment="Administradores designados del dominio"

net groupmap modify ntgroup="Duplicadores"
sid="S-1-5-32-552" unixgroup=duplicadores
comment="Pueden duplicar archivos en un dominio"

net groupmap modify ntgroup="Invitados del dominio"
sid="S-1-5-21-$SIDSAMBA-514" unixgroup=invitados
comment="Todos los invitados del dominio"

net groupmap modify ntgroup="Invitados"
sid="S-1-5-32-546" unixgroup=invitados
comment="Los invitados tienen de modopredeterminado el mismo acceso que los miembros del grupo Usuarios, excepto la cuenta Invitado que tiene mas restricciones"

net groupmap modify ntgroup="Operadores de copias"
sid="S-1-5-32-551" unixgroup=opers_copias
comment="Los operadores de copia pueden sobrescribir restricciones de seguridad con el unico proposito de hacer copias de seguridad o restaurar archivos"

net groupmap modify ntgroup="Opers. de cuentas"
sid="S-1-5-32-548" unixgroup=opers_cuentas
comment="Pueden administrar cuentas de usuarios y grupos del dominio"

net groupmap modify ntgroup="Opers. de impresión"
sid="S-1-5-32-550" unixgroup=opers_impresion
comment="Pueden operar impresoras del dominio"

net groupmap modify ntgroup="Opers. de servidores"
sid="S-1-5-32-549" unixgroup=opers_sistema
comment="Pueden administrar sistemas del dominio"

net groupmap modify ntgroup="Usuarios avanzados"
sid="S-1-5-32-547" unixgroup=usrs_avanzados
comment="Los usuarios avanzados tienen mas derechos administrativos con algunas restricciones. De este modo, pueden ejecutar aplicaciones heredadas junto con aplicaciones certificadas"

net groupmap modify ntgroup="Usuarios del dominio"
sid="S-1-5-21-$SIDSAMBA-513" unixgroup=usuarios_dominio
comment="Todos los usuarios del dominio"

net groupmap modify ntgroup="Usuarios"
sid="S-1-5-32-545" unixgroup=usuarios
comment="Los usuarios no pueden hacer cambios accidentales o intencionados en el sistema. Pueden ejecutar aplic. certificadas, pero no la mayoría de las heredadas"

exit 0

Nota: Este guión en esta incluido en el disco de “Extras de curso” de Linux Para Todos. Solo basta editarlo y definir la variable SIDSAMBA y ejecutarlo como root.
Una vez hecho lo anterior, al volver a realizar lo siguiente:

net groupmap list

Se deberá de mostrar ahora esto otro:

Opers. de servidores (S-1-5-32-549) -> opers_sistema
Admins. del dominio (S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-512) -> admins_dominio
Duplicadores (S-1-5-32-552) -> duplicadores
Invitados (S-1-5-32-546) -> invitados
Invitados del dominio (S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-514) -> invitados
Usuarios avanzados (S-1-5-32-547) -> usrs_avanzados
Opers. de impresión (S-1-5-32-550) -> opers_impresion
Administradores (S-1-5-32-544) -> administradores
Opers. de cuentas (S-1-5-32-548) -> opers_cuentas
Usuarios del dominio (S-1-5-21-XXXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX-513) -> usuarios_dominio
Operadores de copias (S-1-5-32-551) -> opers_copias
Usuarios (S-1-5-32-545) -> usuarios

De este modo, si por ejemplo, se agrega al usuario fulano al grupo admins_dominio, se tendrá el mismo efecto que si se hiciera lo mismo en Windows agregando al usuario al grupo Admins. del dominio. Esto por supuesto solamente tendrá utilidad si Samba se configura y utiliza como Controlador Primario de Dominio.

Alta de cuentas de usuario en Controlador Primario de Dominio.

Si se configuró Samba para funcionar como Controlador Primario de Dominio, será necesario asignar a root una clave de acceso en Samba, la cual por supuesto puede ser diferente a la del sistema, debido a que las estaciones de trabajo necesitan autenticar primero con el usuario root de Samba para poder unirse dominio y poder crear de este modo una cuenta de máquina en el sistema a través del parámetro add machine script ya descrito anteriormente.
Los usuarios es necesario darlos de alta de modo que queden agregados a los que correspondan en el sistema a grupos Usuarios y Usuarios del dominio de Windows, es decir a los grupos usuarios y usuarios_dominio.

useradd -s /sbin/nologin -G usuarios,usuarios_dominio usuario-windows
smbpasswd -a usuario-windows

Si el usuario ya existiese, solo será necesario agragarlo a los grupos usuarios y usuarios_dominio con gpassswd del siguiente modo:

gpasswd -a usuario-windows usuarios
gpasswd -a usuario-windows usuarios_dominio

En teoría en el directorio definido para el recurso Profiles se deben crear automáticamente los directorios de los usuarios donde se almacenarán los perfiles. De ser necesario es posible generar éstos directorios utilizando el siguiente guión:

cd /home
for user in *
do
mkdir -p /var/lib/samba/profiles/$user
chown $user.$user /var/lib/samba/profiles/$user
done

Parámetros de configuración avanzada en el fichero smb.conf

Anunciando el servidor Samba en los grupos de trabajo.

La opción remote announce se encarga de que el servicio nmbd se anuncie a si mismo de forma periódica hacia una red en particular y un grupo de trabajo específico. Esto es particularmente útil si se necesita que el servidor Samba aparezca no solo en el grupo de trabajo al que pertenece sino también otros grupos de trabajo. El grupo de trabajo de destino puede estar en donde sea mientras exista una ruta y sea posible la transmisión exitosa de paquetes.

remote announce = 192.168.1.255/MI-DOMINIO 192.168.2.255/OTRO-DOMINIO

El ejemplo anterior definió que el servidor Samba se anuncie a si mismo al los grupos de trabajo MI-DOMINIO y OTRO-DOMINIO en las redes cuyas IP de transmisión son 192.168.1.255 y 192.168.2.255 correspondientemente.

Ocultando y denegando acceso a ficheros.

No es conveniente que los usuarios acceder o bien puedan ver la presencia de ficheros ocultos en el sistema, es decir ficheros cuyo nombre comienza con un punto, particularmente si acceden a su directorio personal en el servidor Samba (.bashrc, .bash_profile, .bash_history, etc.). Puede utilizarse el parámetro hide dot files para mantenerlos ocultos.

hide dot files = Yes

En algunos casos puede ser necesario denegar el acceso a cierto tipo de ficheros del sistema. El parámetro veto files se utiliza para especificar la lista, separada por diagonales, de aquellas cadenas de texto que denegarán el acceso a los ficheros cuyos nombres contengan estas cadenas. En el siguiente ejemplo, se denegará el acceso hacia los ficheros cuyos nombres incluyan la palabra «Security» y los que tengan extensión o terminen en «.tmp»:

veto files = /*Security*/*.tmp/

Opciones para cliente o servidor Wins.

Puede habilitar convertirse en servidor WINS o bien utilizar un servidor WINS ya existente. Se puede ser un servidor WINS o un cliente WINS, pero no ambas cosas a al vez.

Si se va ser el servidor WINS, debe habilitarse lo siguiente:
wins support = Yes Si se va a utilizar un servidor WINS ya existente, debe descomentar la siguiente línea y especificar que dirección IP utiliza dicho servidor WINS:
wins server = 192.168.1.1

Opciones específicas para Controlador Primario de Dominio (PDC).

Si se va a configurar Samba como Controlador Primario de Dominio, se debe especificar todos los parámetros descritos a continuación.
Si se quiere que las claves de acceso del sistema y Windows se mantengan sincronizadas, es necesario descomentar las siguiente líenas:

unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*UNIX*password* %nn *ReType*new*UNIX*password* %nn
*passwd:*all*authentication*tokens*updated*successfully*

El parámetro local master define al servidor como examinador del dominio (o master browser); El parámetro domain master define al servidor maestro del dominio; El parámetro preferred master define al servidor como maestro del domino preferido en caso de haber más servidores presentes en el mismo dominio como controladores de dominio; El parámetro time server se utiliza para definir que las estaciones deberán sincronizar la hora con el servidor al unirse al dominio; El parámetro domain logons define que el servidor permitirá a las estaciones autenticar contra Samba.

local master = Yes
domain master = Yes
preferred master = Yes
time server = Yes
domain logons = Yes

La configuración de Controlador Primario de Dominio requiere además definir donde se almacenarán los perfiles de los usuarios. Windows 95, 98 y ME requieren se defina con el parámetro logon home, en tanto que Windows NT, 2000 y XP requieren se haga con el parámetro logon path. Para efectos prácticos y de previsión, utilice ambos parámetros y defina la unidad H para dicho volumen:

logon path = %LProfiles%U
logon home = %L%U.profile
logon drive = H:

Si se va a utilizar Samba como Controlador Primario de Dominio, es necesario establecer el guión que ejecutarán las estaciones Windows al conectarse hacia el servidor. Esto se hace a través del parámetro logon script el cual puede definir o bien un guión a utilizar por cada usuario (%u.bat) o bien por cada máquina (%m.bat) o bien de modo general para todos (logon.cmd). Para no complicar las cosas, defina inicialmente un guión general para todos del siguiente modo:

logon script = logon.cmd

El fichero /var/lib/samba/netlogon/logon.cmd deberá contener algo como lo siguiente:

REM windows client logon script
REM

net time mi-servidor /SET /YES
net use H: mi-servidorhomes /PERSISTENT:NO

El Controlador Primario de Dominio va a necesitar también se definan los guiones a ejecutar para distintas tareas como alta de máquinas, usuarios y grupos así como la baja de estos.

add user script = /usr/sbin/useradd %u
add machine script = /usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -c "Cuenta de máquina" -M %u
delete user script = /usr/sbin/userdel %u
delete group script = /usr/sbin/groupdel %g
add user to group script = /usr/bin/gpasswd -a %u %g
set primary group script = /usr/sbin/usermod -g %g %u

El parámetro add user script sirve para definir lo que se deberá ejecutar en el trasfondo en el sistema para crear una nueva cuenta de usuario. El parámetro add machine script es particularmente importante porque es el mandato utilizado para dar de alta cuentas de máquinas (trust accounts o cuentas de confianza) de modo automático. El parámetro delete user script es para definir lo propio para eliminar usuarios, delete group script para eliminar grupos, add user to group para añadir usuarios a grupos y set primary group script para establecer un grupo como el principal para un usuario.
Directorio para Netlogon y perfiles en Controlador Primario de Dominio (PDC).
Si se va a utilizar Samba como Controlador Primario de Dominio, es necesario definir los recursos donde residirá netlogon y también donde se almacenarán los perfiles de los usuarios:

[netlogon]
comment = Network Logon Service
path = /var/lib/samba/netlogon
write list = @administradores, @admins_dominio
guest ok = Yes
browseable = Yes

[Profiles]
path = /var/lib/samba/profiles
read only = No
guest ok = Yes
create mask = 0600
directory mask = 0700

Genere con el mandato mkdir los directorios /var/lib/samba/profiles y /var/lib/samba/netlogon. El directorio /var/lib/samba/profiles deberá pertenecer a root y al grupo users y tener permiso 1777 a fin de permitir crear el directorio de perfil correspondiente para cada usuario.

mkdir -p -m 1777 /var/lib/samba/profiles
mkdir -p /var/lib/samba/netlogon
chgrp users /var/lib/samba/profiles

Inciar el servicio y añadirlo al arranque del sistema.

Si iniciará Samba por primera vez realice lo siguiente:

/sbin/service smb start

Si va a reiniciar el servicio, realice lo siguiente:

/sbin/service smb restart

Para que Samba inicie automáticamente cada vez que inicie el servidor solo ejecute el siguiente mandato:

/sbin/chkconfig smb on

Accediendo hacia Samba.

Modo texto.

Smbclient.

Indudablemente el método más práctico y seguro es el mandato smbclient. Este permite acceder hacía cualquier servidor Samba o Windows® como si fuese el mandato ftp en modo texto.
Para acceder al cualquier recurso de alguna máquina Windows® o servidor SAMBA determine primero que volúmenes o recursos compartidos posee está. utilice el mandato smbclient del siguiente modo:

smbclient -U usuario -L alguna_maquina

Lo cual le devolvería más menos lo siguiente:

Domain=[MI-DOMINIO] OS=[Unix] Server=[Samba 3.0.7-1.3E]

        Sharename       Type      Comment
        ---------       ----      -------
        homes           Disk      Home Directories
        netlogon        Disk      Network Logon Service
        ftp             Disk      ftp
        IPC$            IPC       IPC Service (Servidor Samba 3.0.7-1.3E en mi-servidor)
        ADMIN$          IPC       IPC Service (Servidor Samba 3.0.7-1.3E en mi-servidor)
        epl5900         Printer   Created by redhat-config-printer 0.6.x
        hp2550bw        Printer   Created by redhat-config-printer 0.6.x
Anonymous login successful
Domain=[MI-DOMINIO] OS=[Unix] Server=[Samba 3.0.7-1.3E]

        Server               Comment
        ---------            -------
        mi-servidor          Servidor Samba 3.0.7-1.3E en mi-servidor

        Workgroup            Master
        ---------            -------
        MI-DOMINIO           MI-SERVIDOR

La siguiente corresponde a la sintaxis básica para poder navegar los recursos compartidos por la máquina Windows® o el servidor SAMBA:

smbclient //alguna_maquina/recurso -U usuario

Ejemplo:

smbclient //LINUX/FTP -U jbarrios

Después de ejecutar lo anterior, el sistema solicitará se proporcione la clave de acceso del usuario jbarrios en el equipo denominado LINUX.

smbclient //LINUX/FTP -U jbarrios
added interface ip=192.168.1.254 bcast=192.168.1.255 nmask=255.255.255.0
Password:
Domain=[miusuario] OS=[Unix] Server=[Samba 2.2.1a]
smb: >

Pueden utilizarse virtualmente los mismos mandatos que en el interprete de ftp, como serían get, mget, put, del, etc.

Por montaje de unidades de red.

Si necesita poder visualizar desde GNU/Linux a las máquinas con Windows® e interactuar con los directorios compartidos por estás, necesitará realizar algunos pasos adicionales. De manera predeterminada, y por motivos de seguridad, solo root puede utilizar los mandatos smbmnt y smbumount. Deberá entonces establecer permisos de SUID a dichos mandatos. Puede hacerlo ejecutando, como root lo siguiente:

chmod 4755 /usr/bin/smbmnt
chmod 4755 /usr/bin/smbumount

Para acceder hacia una máquina Windows® determine primero que volúmenes o recursos compartidos posee está. utilice el mandato smbclient del siguiente modo:

smbclient -N -L alguna_maquina

Lo cual le devolvería más menos lo siguiente:

Anonymous login successful
Domain=[MI-DOMINIO] OS=[Unix] Server=[Samba 3.0.7-1.3E]

        Sharename       Type      Comment
        ---------       ----      -------
        homes           Disk      Home Directories
        netlogon        Disk      Network Logon Service
        ftp             Disk      ftp
        IPC$            IPC       IPC Service (Servidor Samba 3.0.7-1.3E en mi-servidor)
        ADMIN$          IPC       IPC Service (Servidor Samba 3.0.7-1.3E en mi-servidor)
        epl5900         Printer   Created by redhat-config-printer 0.6.x
        hp2550bw        Printer   Created by redhat-config-printer 0.6.x
Anonymous login successful
Domain=[MI-DOMINIO] OS=[Unix] Server=[Samba 3.0.7-1.3E]

        Server               Comment
        ---------            -------
        mi-servidor          Servidor Samba 3.0.7-1.3E en mi-servidor

        Workgroup            Master
        ---------            -------
        MI-DOMINIO           MI-SERVIDOR

En el ejemplo anterior hay un volumen compartido llamado algún_volumen. Si queremos montar este, debemos crear un punto de montaje. Éste puede crearse en cualquier directorio sobre el que tengamos permisos de escritura. Para montarlo, utilizamos entonces la siguiente línea de mandato:

smbmount //alguna_maquina/algún_volumen /punto/de/montaje/

Si la máquina Windows® requiere un usuario y una clave de acceso, puede añadir a lo anterior las opciones -username=el_necesario -password=el_requerido -workgroup=MIGRUPO
Si la distribución de GNU/Linux utilizada es reciente, también puede utilizar el ya conocido mandato mount del siguiente modo:

mount -t smbfs -o username=el_necesario,password=el_requerido //alguna_maquina/algún_volumen /punto/de/montaje/

Si se genera una cuenta pcguest, similar a la cuenta nobody, podemos montar volúmenes SMB sin ingresar una clave de acceso pero con privilegios restringidos, o aquellos que definamos a un volumen accedido por un usuario invitado. Esto sería el método por elección para compartir volúmenes en una red de área local. Puede generarse una cuenta pcguest o bien dejar que el sistema tome al usuario nobody. Si opta por lo primero, solo de de alta la cuenta NO asigne clave de acceso alguna. Montar volúmenes remotos como usuarios invitado es muy sencillo. Un ejemplo real sería:

mount -t smbfs -o guest //LINUX/FTP //var/ftp

Lo anterior monta un volumen SAMBA de una máquina con GNU/Linux en otra máquina con GNU/Linux.
Puede añadirse también una entrada en /etc/fstab de modo que sólo tenga que ser tecleado mount /punto/de/montaje. Esta línea sería de modo similar al siguiente:

//LINUX/FTP   /var/ftp   smbfs   user,auto,guest,ro,gid=100   0 0

Recuérdese que el volumen compartido debe estar configurado para permitir usuarios invitados:

[FTP]
        comment = Programática libre (RPMS)
        path = /var/ftp/pub
        public = Yes
        guest ok = Yes

Modo gráfico

Desde el entorno de GNOME.

Si utiliza GNOME 2.x o superior, éste incluye un módulo para Nautilus que permite acceder hacia los recursos compartidos a través de Samba sin necesidad de modificar cosa alguna en el sistema. Solo hay que hacer clic en Servidores de red en el menú de GNOME.
Accesando hacia Samba a través de Nautilus

Desde Windows.

Por su parte, desde Windows deberá ser posible acceder sin problemas hacia Samba como si fuese hacia cualquier otra máquina con Windows. Vaya, ni Windows ni el usuario notarán siquiera la diferencia.

Uniendo máquinas al dominio del Controlador Primario de Dominio.

El controlador de dominio permite utilizar a Samba como servidor de autenticación y servidor de archivos que además permite almacenar el perfil, preferencias y documentos del usuario en el servidor automáticamente sin la intervención del usuario.

Creando manualmente cuentas de máquinas

Bajo algunas circunstancias será necesario crear cuentas de máquinas (trust accounts o cuentas de confianza) a fin de permitir unirse al dominio. el procedimiento es simple:

/usr/sbin/useradd -d /dev/null -g 100 -s /bin/false -c "Cuenta de máquina" -M maquina-windows$
smbpasswd -a maquina-windows$

Es de resaltar que las cuentas de máquinas deben incluir obligatoriamente un símbolo $ al final del nombre.

Windows 95/98/ME y Windows XP Home

Ya que los sistemas con Windows 95/98/ME y Windows XP Home no incluyen una implementación completa como miembros de dominio, no se requieren cuentas de confianza. El procedimiento para unirse al dominio es el siguiente:

•  Acceder hacia Menú de inicio → Configuraciones → Panel de control → Red
•  Seleccione la pestaña de Configuración
•  Seleccione «Cliente de redes Microsoft»
•  Haga clic en el botón de propiedades
•  Seleccione Acceder a dominio de Windows NT y especifique el dominio correspondiente.
•  Clic en todos los botones de «Aceptar» y reinicie el sistema
•  Acceda con cualquier usuario que haya sido dado de alta en el servidor Samba y que además cuente con una clave de acceso asignada con smbpasswd.

Windows NT


•  Crear manualmente la cuenta de máquina como se decribió anteriormente.
•  Acceder hacia Menú de inicio → Configuraciones → Panel de control → Red.
•  Seleccionar la pestaña de «Identificación».
•  Clic en el botón de «Cambiar».
•  Ingrese el nombre del dominio y el nombre del sistema. No selecione «Crear una cuenta de máquina en el Dominio».
•  Clic en «Aceptar»
•  Espere algunos segundos.
•  Deberá mostrarse un mensaje emergente de confirmación que dice «Bienvenido a MI-DOMINIO»
•  Reinicie el sistema
•  Acceda con cualquier usuario que haya sido dado de alta en el servidor Samba y que además cuente con una clave de acceso asignada con smbpasswd.

Windows 2000/2003 y Windows XP Profesional

•  Clic derecho en el icono de «Mi PC».
•  Seleccionar «Propiedades»
•  Haga clic en la pestaña de «Identificación de red» o «Nombre del sistema».
•  Clic en el botón de «Propiedades».
•  Clic en el botón «Miembro de dominio»
•  Ingrese el nombre del dominio y el nombre de la máquina y haga clic en el botón de «Aceptar»
•  Aparecerá un diálogo que preguntará por una cuenta y clave de acceso con privilegios de administración en el servidor. Especifique la root y la clave de acceso que asignó a la cuenta de root con el mandato smbpasswd (NO LA CLAVE DE ACCESO DE ROOT EN EL SISTEMA).
•  Espere algunos segundos.
•  Deberá mostrarse un mensaje emergente de confirmación que dice «Bienvenido a MI-DOMINIO»
•  Reinicie el sistema
•  Acceda con cualquier usuario que haya sido dado de alta en el servidor Samba y que además cuente con una clave de acceso asignada con smbpasswd.

Oracle Database 11g Release 2 RAC On Linux Using NFS

This article describes the installation of Oracle Database 11g Release 2 (11.2 64-bit) RAC on Linux (Oracle Enterprise Linux 5.4 64-bit) using NFS to provide the shared storage.
Introduction
NFS is an abbreviation of Network File System, a platform independent technology created by Sun Microsystems that allows shared access to files stored on computers via an interface called the Virtual File System (VFS) that runs on top of TCP/IP. Computers that share files are considered NFS servers, while those that access shared files are considered NFS clients. An individual computer can be either an NFS server, a NFS client or both.

We can use NFS to provide shared storage for a RAC installation. In a production environment we would expect the NFS server to be a NAS, but for testing it can just as easily be another server, or even one of the RAC nodes itself.

To cut costs, this articles uses one of the RAC nodes as the source of the shared storage. Obviously, this means if that node goes down the whole database is lost, so it's not a sensible idea to do this if you are testing high availability. If you have access to a NAS or a third server you can easily use that for the shared storage, making the whole solution much more resilient. Whichever route you take, the fundamentals of the installation are the same.

The Single Client Access Name (SCAN) should really be defined in the DNS or GNS and round-robin between one of 3 addresses, which are on the same subnet as the public and virtual IPs. In this article I've defined it as a single IP address in the "/etc/hosts" file, which is wrong and will cause the cluster verification to fail, but it allows me to complete the install without the presence of a DNS.

This article was inspired by the blog postings of
Kevin Closson.

Download Software
Download the following software.
Operating System Installation
This article uses Oracle Enterprise Linux 5.4. A general pictorial guide to the operating system installation can be found here. More specifically, it should be a server installation with a minimum of 2G swap (preferably 3-4G), firewall and secure Linux disabled. Oracle recommend a default server installation, but if you perform a custom installation include the following package groups:
  • GNOME Desktop Environment
  • Editors
  • Graphical Internet
  • Text-based Internet
  • Development Libraries
  • Development Tools
  • Server Configuration Tools
  • Administration Tools
  • Base
  • System Tools
  • X Window System
To be consistent with the rest of the article, the following information should be set during the installation:

RAC1:
  • hostname: rac1.localdomain
  • IP Address eth0: 192.168.2.101 (public address)
  • Default Gateway eth0: 192.168.2.1 (public address)
  • IP Address eth1: 192.168.0.101 (private address)
  • Default Gateway eth1: none
RAC2:
  • hostname: rac2.localdomain
  • IP Address eth0: 192.168.2.102 (public address)
  • Default Gateway eth0: 192.168.2.1 (public address)
  • IP Address eth1: 192.168.0.102 (private address)
  • Default Gateway eth1: none
You are free to change the IP addresses to suit your network, but remember to stay consistent with those adjustments throughout the rest of the article.

Once the basic installation is complete, install the following packages whilst logged in as the root user. This includes the 64-bit and 32-bit versions of some packages.
# From Enterprise Linux 5 DVD
cd /media/cdrom/Server
rpm -Uvh binutils-2.*
rpm -Uvh compat-libstdc++-33*
rpm -Uvh elfutils-libelf-0.*
rpm -Uvh elfutils-libelf-devel-*
rpm -Uvh gcc-4.*
rpm -Uvh gcc-c++-4.*
rpm -Uvh glibc-2.*
rpm -Uvh glibc-common-2.*
rpm -Uvh glibc-devel-2.*
rpm -Uvh glibc-headers-2.*
rpm -Uvh ksh-2*
rpm -Uvh libaio-0.*
rpm -Uvh libaio-devel-0.*
rpm -Uvh libgcc-4.*
rpm -Uvh libstdc++-4.*
rpm -Uvh libstdc++-devel-4.*
rpm -Uvh make-3.*
rpm -Uvh sysstat-7.*
rpm -Uvh unixODBC-2.*
rpm -Uvh unixODBC-devel-2.*
cd /
eject
Oracle Installation Prerequisites
Perform the following steps whilst logged into the RAC1 virtual machine as the root user.

Make sure the shared memory filesystem is big enough for Automatic Memory Manager to work.
# umount tmpfs
# mount -t tmpfs shmfs -o size=1500m /dev/shm
Make the setting permanent by amending the "tmpfs" setting of the "/etc/fstab" file to look like this.
tmpfs                   /dev/shm                tmpfs   size=1500m      0 0
If you are not using DNS, the "/etc/hosts" file must contain the following information.
127.0.0.1       localhost.localdomain   localhost
# Public
192.168.2.101   rac1.localdomain        rac1
192.168.2.102   rac2.localdomain        rac2
#Private
192.168.0.101   rac1-priv.localdomain   rac1-priv
192.168.0.102   rac2-priv.localdomain   rac2-priv
#Virtual
192.168.2.111   rac1-vip.localdomain    rac1-vip
192.168.2.112   rac2-vip.localdomain    rac2-vip
# SCAN
192.168.2.201   rac-scan.localdomain    rac-scan
#NAS
192.168.2.101   nas1.localdomain        nas1
Note. The SCAN address should not really be defined in the hosts file. Instead is should be defined on the DNS to round-robin between 3 addresses on the same subnet as the public IPs. For this installation, we will compromise and use the hosts file. If you are using DNS, then only the first line should be present in the "/etc/hosts" file. The other entries are defined in the DNS, as described here. Also, the NAS1 entry is actually pointing to the RAC1 node. If you are using a real NAS or a third server to provide your shared storage put the correct IP address into the file.

Add or amend the following lines to the "/etc/sysctl.conf" file.
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586
Run the following command to change the current kernel parameters.
/sbin/sysctl -p
Add the following lines to the "/etc/security/limits.conf" file.
oracle               soft    nproc   2047
oracle               hard    nproc   16384
oracle               soft    nofile  1024
oracle               hard    nofile  65536
Add the following lines to the "/etc/pam.d/login" file, if it does not already exist.
session    required     pam_limits.so
Disable secure linux by editing the "/etc/selinux/config" file, making sure the SELINUX flag is set as follows.
SELINUX=disabled
Alternatively, this alteration can be done using the GUI tool (System > Administration > Security Level and Firewall). Click on the SELinux tab and disable the feature.

Either configure NTP, or make sure it is not configured so the Oracle Cluster Time Synchronization Service (ctssd) can synchronize the times of the RAC nodes. In this case we will deconfigure NTP.
# service ntpd stop
Shutting down ntpd:                                        [  OK  ]
# chkconfig ntpd off
# mv /etc/ntp.conf /etc/ntp.conf.org
# rm /var/run/ntpd.pid
If you are using NTP, you must add the "-x" option into the following line in the "/etc/sysconfig/ntpd" file.
OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"
Then restart NTP.
# service ntpd restart
Start the Name Service Cache Daemon (nscd).
chkconfig --level 35 nscd on
service nscd start
Create the new groups and users.
groupadd -g 1000 oinstall
groupadd -g 1200 dba
useradd -u 1100 -g oinstall -G dba oracle
passwd oracle
Login as the oracle user and add the following lines at the end of the .bash_profile file.
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=rac1.localdomain; export ORACLE_HOSTNAME
ORACLE_UNQNAME=rac; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=rac1; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi
Remember to amend the ORACLE_SID and ORACLE_HOSTNAME on each server.

Create Shared Disks
First we need to set up some NFS shares. In this case we will do this on the RAC1 node, but you can do the on a NAS or a third server if you have one available. On the RAC1 node create the following directories.
mkdir /shared_config
mkdir /shared_grid
mkdir /shared_home
mkdir /shared_data
Add the following lines to the /etc/exports file.
/shared_config               *(rw,sync,no_wdelay,insecure_locks,no_root_squash)
/shared_grid                 *(rw,sync,no_wdelay,insecure_locks,no_root_squash)
/shared_home                 *(rw,sync,no_wdelay,insecure_locks,no_root_squash)
/shared_data                 *(rw,sync,no_wdelay,insecure_locks,no_root_squash)
Run the following command to export the NFS shares.
chkconfig nfs on
service nfs restart
On both RAC1 and RAC2 create the directories in which the Oracle software will be installed.
mkdir -p /u01/app/11.2.0/grid
mkdir -p /u01/app/oracle/product/11.2.0/db_1
mkdir -p /u01/oradata
mkdir -p /u01/shared_config
chown -R oracle:oinstall /u01/app /u01/app/oracle /u01/oradata /u01/shared_config
chmod -R 775 /u01/app /u01/app/oracle /u01/oradata /u01/shared_config
Add the following lines to the "/etc/fstab" file.
nas1:/shared_config /u01/shared_config  nfs  rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0  0 0
nas1:/shared_grid   /u01/app/11.2.0/grid  nfs  rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0  0 0
nas1:/shared_home   /u01/app/oracle/product/11.2.0/db_1  nfs  rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0  0 0
nas1:/shared_data   /u01/oradata  nfs  rw,bg,hard,nointr,tcp,vers=3,timeo=600,rsize=32768,wsize=32768,actimeo=0  0 0
Mount the NFS shares on both servers.
mount /u01/shared_config
mount /u01/app/11.2.0/grid
mount /u01/app/oracle/product/11.2.0/db_1
mount /u01/oradata
Make sure the permissions on the shared directories are correct.
chown -R oracle:oinstall /u01/shared_config
chown -R oracle:oinstall /u01/app/11.2.0/grid
chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01/oradata
Install the Grid Infrastructure
Start both RAC nodes, login to RAC1 as the oracle user and start the Oracle installer.
./runInstaller
Select the "Install and Configure Grid Infrastructure for a Cluster" option, then click the "Next" button.



Select the "Advanced Installation" option, then click the "Next" button.



Select the the required language support, then click the "Next" button.



Enter cluster information and uncheck the "Configure GNS" option, then click the "Next" button.



On the "Specify Node Information" screen, click the "Add" button.



Enter the details of the second node in the cluster, then click the "OK" button.



Click the "SSH Connectivity..." button and enter the password for the "oracle" user. Click the "Setup" button to to configure SSH connectivity, and the "Test" button to test it once it is complete. Click the "Next" button.



Check the public and private networks are specified correctly, then click the "Next" button.



Select the "Shared File System" option, then click the "Next" button.



Select the required level of redundancy and enter the OCR File Location(s), then click the "Next" button.



Select the required level of redundancy and enter the Voting Disk File Location(s), then click the "Next" button.



Accept the default failure isolation support by clicking the "Next" button.



Select the preferred OS groups for each option, then click the "Next" button. Click the "Yes" button on the subsequent message dialog.



Enter "/u01/app/oracle" as the Oracle Base and "/u01/app/11.2.0/grid" as the software location, then click the "Next" button.



Accept the default inventory directory by clicking the "Next" button.



Wait while the prerequisite checks complete. If you have any issues, either fix them or check the "Ignore All" checkbox and click the "Next" button. If there are no issues, you will move directly to the summary screen. If you are happy with the summary information, click the "Finish" button.



Wait while the setup takes place.



When prompted, run the configuration scripts on each node.



The output from the "orainstRoot.sh" file should look something like that listed below.
# cd /u01/app/oraInventory
# ./orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
#
The output of the root.sh will vary a little depending on the node it is run on. Example output can be seen here (Node1, Node2).

Once the scripts have completed, return to the "Execute Configuration Scripts" screen on RAC1 and click the "OK" button.



Wait for the configuration assistants to complete.



We expect the verification phase to fail with an error relating to the SCAN, assuming you are not using DNS.
INFO: Checking Single Client Access Name (SCAN)...
INFO: Checking name resolution setup for "rac-scan.localdomain"...
INFO: ERROR:
INFO: PRVF-4664 : Found inconsistent name resolution entries for SCAN name "rac-scan.localdomain"
INFO: ERROR:
INFO: PRVF-4657 : Name resolution setup check for "rac-scan.localdomain" (IP address: 192.168.2.201) failed
INFO: ERROR:
INFO: PRVF-4664 : Found inconsistent name resolution entries for SCAN name "rac-scan.localdomain"
INFO: Verification of SCAN VIP and Listener setup failed
Provided this is the only error, it is safe to ignore this and continue by clicking the "Next" button.

Click the "Close" button to exit the installer.



The grid infrastructure installation is now complete.

Install the Database
Start all the RAC nodes, login to RAC1 as the oracle user and start the Oracle installer.
./runInstaller
Uncheck the security updates checkbox and click the "Next" button.



Accept the "Create and configure a database" option by clicking the "Next" button.



Accept the "Server Class" option by clicking the "Next" button.



Make sure both nodes are selected, then click the "Next" button.



Accept the "Typical install" option by clicking the "Next" button.



Enter "/u01/app/oracle/product/11.2.0/db_1" for the software location. The storage type should be set to "File System" with the file location set to "/u01/oradata". Enter the appropriate passwords and database name, in this case "RAC.localdomain".



Wait for the prerequisite check to complete. If there are any problems either fix them, or check the "Ignore All" checkbox and click the "Next" button.



If you are happy with the summary information, click the "Finish" button.



Wait while the installation takes place.



Once the software installation is complete the Database Configuration Assistant (DBCA) will start automatically.



Once the Database Configuration Assistant (DBCA) has finished, click the "OK" button.



When prompted, run the configuration scripts on each node. When the scripts have been run on each node, click the "OK" button.



Click the "Close" button to exit the installer.



The RAC database creation is now complete.

Check the Status of the RAC
There are several ways to check the status of the RAC. The srvctl utility shows the current configuration and status of the RAC database.
$ srvctl config database -d rac
Database unique name: rac
Database name: rac
Oracle home: /u01/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile: /u01/oradata/rac/spfilerac.ora
Domain: localdomain
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Server pools: rac
Database instances: rac1,rac2
Disk Groups:
Services:
Database is administrator managed
$

$ srvctl status database -d rac
Instance rac1 is running on node rac1
Instance rac2 is running on node rac2
$
The V$ACTIVE_INSTANCES view can also display the current status of the instances.
$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Sat Sep 26 19:04:19 2009

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options

SQL> SELECT inst_name FROM v$active_instances;

INST_NAME
--------------------------------------------------------------------------------
rac1.localdomain:rac1
rac2.localdomain:rac2

SQL>
If you have configured Enterprise Manager, it can be used to view the configuration and current status of the database using a URL like "https://rac1.localdomain:1158/em".




Direct NFS Client
For improved NFS performance, Oracle recommend using the Direct NFS Client shipped with Oracle 11g. The direct NFS client looks for NFS details in the following locations:
  1. $ORACLE_HOME/dbs/oranfstab
  2. /etc/oranfstab
  3. /etc/mtab
Since we already have our NFS mount point details in the "/etc/fstab", and therefore the "/etc/mtab" file also, there is no need to configure any extra connection details.

For the client to work we need to switch the libodm11.so library for the libnfsodm11.so library, as shown below.
srvctl stop database -d rac

cd $ORACLE_HOME/lib
mv libodm11.so libodm11.so_stub
ln -s libnfsodm11.so libodm11.so

srvctl start database -d rac
With the configuration complete, you can see the direct NFS client usage via the following views:
  • v$dnfs_servers
  • v$dnfs_files
  • v$dnfs_channels
  • v$dnfs_stats
For example:
SQL> SELECT svrname, dirname FROM v$dnfs_servers;

SVRNAME        DIRNAME
-------------  -----------------
nas1           /shared_data

SQL>
The Direct NFS Client supports direct I/O and asynchronous I/O by default.