martes, 25 de marzo de 2014

Configuración de un servidor web Apache en CentOS

Está Escrito:
Si confesamos nuestros pecados, él es fiel y justo para perdonar nuestros pecados, y limpiarnos de toda maldad. (1 Juan 1:9)
Tomado de : Desarrolloweb
Cuando contratamos un servidor a nuestro proveedor de servicios, podemos elegir el sistema operativo, la distribución y la configuración inicial. En nuestro caso optaremos por un servidor Linux con una distribución de la última versión de CentOS, configuración mínima y 64 bits. 

Una vez que el servidor este disponible podremos acceder por SSH. Nada mas conectar podremos empezar con la siguiente configuración:

1) Cambiamos el nombre de nuestra máquina

Podemos hacerlo editando el fichero “/etc/hosts”. Al final de la línea que empiece por 127.0.0.1 añadimos el nombre que queramos, quedando de la siguiente manera:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 minombre

 
También habrá que hacerlo en el fichero “/etc/sysconfig/ network”, cambiando el valor de la variable “HOSTNAME”. En este caso el fichero queda de la siguiente manera:
NETWORKING=yes
HOSTNAME=minombre

2) Actualizamos el sistema con el siguiente comando


#yum update
Si queremos que al instalar los grupos, que veremos mas adelante, se instalen también los paquetes opcionales, añadiremos entonces en el fichero "/etc/yum.conf" la siguiente línea:
group_package_types=mandatory,default,optional

3) Instalamos las herramientas de desarrollo, como el paquete de compiladores GCC, make, las fuentes del kernel y Perl


#yum install gcc make kernel-devel perl
Esto instala los mínimos paquetes para desarrollo. Si queremos instalar todos ellos, podremos hacerlo ejecutando el siguiente comando:
#yum groupinstall “Development tools”.

 
Si antes de instalarlos queremos sólo ver los paquetes que contiene el grupo de desarrollo, ejecutamos la siguiente línea:
#yum groupinfo "Development tools"

4) Instalamos PHP

Con el siguiente comando instalamos todo lo necesario:
 
#yum groupinstall "PHP Support”

 
Puede que nos falte alguna cosa, así que podemos correr la siguiente línea para completar la instalación de PHP:
#yum install php-mbstring php-devel php-mcrypt zlib zlib-devel zlib-static

 
Seguidamente, podemos configurar la zona horaria predeterminada usada por las funciones "date" y "time", para ello en el fichero "/ etc/php.ini" añadimos la siguiente línea:
date.timezone = "Europe/Madrid"

5) Instalamos y configuramos el servidor Apache


#yum groupinstall “Web Server”.
Como hemos dicho, si antes de instalar queremos ver todos los paquetes que contiene este grupo, haríamos "groupinfo" en lugar de "groupinstall".
Podemos completar la instalación del servidor Apache instalando las librerías de desarrollo:
#yum install httpd-devel

 
Para ver la versión de Apache instalada, ejecutamos:
#httpd -v

 
El fichero principal de configuración se encuentra en "/etc/ httpd/conf/httpd.conf", y el resto de ficheros de configuración en "/etc/httpd/conf.d".
Hay que decir que cualquier fichero con extensión .conf que coloquemos en el directorio "/etc/httpd/conf.d" será procesado por el servidor Apache. Tener en cuenta que los procesa por orden alfabético. Si hacemos un cambio en alguno de estos ficheros o añadimos uno nuevo, hay que recargar para que el servidor recoja los cambios y para ello hacemos:
#service httpd reload
Ahora daremos un nombre al servidor. Aunque no es necesario hacer esto, sí es recomendable para que no aparezcan problemas en los arranques. Para esto nos aseguramos de que en el fichero de configuración httpd.conf tengamos la siguiente línea:
ServerName localhost
También es recomendable eliminar la página de prueba que nos instala el servidor. Para ello editamos el fichero /etc/httpd/ conf.d/welcome.conf y comentamos todas las líneas, quedando de la siguiente manera:
#<LocationMatch "^/+$">
#Options -Indexes
#ErrorDocument 403 /error/noindex.html
#</LocationMatch>
Si queremos utilizar servidores virtuales (virtual hosts) y tener los ficheros organizados, podemos crearnos un fichero llamado por ejemplo "vhosts.conf" que contenga nuestros virtual hosts y colocar el fichero en "/etc/httpd/conf.d". El fichero quedaría con un contenido parecido al siguiente:
NameVirtualHost [IP]:80
<VirtualHost [IP]:80>
ServerName www.midominio.com
ServerAlias www.midominio.com midominio.com
DocumentRoot /var/www/html/midominio.com/www
CustomLog /etc/httpd/logs/midominio.com.access_log combined
ErrorLog /etc/httpd/logs/midominio.com.error_log
</virtualhost>

 
Sustituir [IP] por tu IP pública y “midominio” por el dominio que quieras dar servicio.
Ahora podemos arrancar el servidor Apache de la siguiente manera:
#service httpd start

 
Si queremos que el servicio se inicie al arrancar nuestra máquina, podemos habilitarlo con:
#chkconfig httpd on

 
Si en los servidores DNS de "midominio" tenemos las entradas correspondientes apuntadas correctamente a nuestra IP, ya podríamos verlo a través de un navegador entrando en http:// www.midominio.com 

1) Instalación de MySQL

Tal y como hicimos con Apache, instalamos MySQL de manera similar, es decir:
#yum groupinstall “MySQL Database server”

  Esto instalará el paquete mysql-server necesario para ejecutar el servidor de base de datos. A continuación instalamos las herramientas del cliente MySQL con:
#yum groupinstall “MySQL Database client”

  A continuación editamos el fichero de configuración de MySQL que podemos localizar en “/etc/my.cnf”.
Por cierto, el editor que suelo utilizar en el terminal es “nano”. No es tan potente como Vim o Emacs pero para ediciones sencillas, como en estos casos, es más que suficiente y su uso es muy simple: al editar cualquier fichero podemos ver en las dos líneas de abajo la ayuda.
Por tanto, hacemos:
#nano /etc/my.cnf

  El contenido de my.cnf podría ser algo tan sencillo como esto:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

  Otros ficheros con configuraciones diferentes podemos encontrarlos en “/usr/share/doc/mysql-server-x.x.x” (sustituir x.x.x por nuestra versión de MySQL). Aquí podremos encontrar ejemplos de configuraciones para sistemas muy grandes (my-huge.cnf), pequeños (my-small.cnf), etc.
Lo siguiente que debemos hacer es ponerle la clave al usuario root de MySQL, así como eliminar la base de datos “test” y el usuario anónimo que se instalan por defecto. Para ello arrancamos el servicio con:
#service mysqld start

  A continuación ejecutamos la siguiente línea:
#/usr/bin/mysql_secure_installation

  Después de contestar a una serie de preguntas que nos hace, ya tendremos nuestro servidor MySQL instalado y ejecutándose. Es recomendable poner que se inicie al arrancar nuestra máquina Linux, para ello basta con hacer:
#chkconfig mysqld on

  Si queremos ver la información de los servicios del sistema y comprobar que los que hemos instalado hasta ahora se inician al arrancar la máquina, podemos hacerlo ejecutando:
#chkconfig --list

  En este punto podremos ver los servicios httpd y mysqld configurados en los niveles 2, 3, 4 y 5.

2) Instalamos el servidor FTP

Actualmente existen varios servidores de FTP que podemos instalar en nuestro sistema. En nuestro caso hemos optado por instalar ProFTPD, ya que es bastante estable y seguro.
Lo primero es asegurarnos de que no tenemos ya instalado otro servidor FTP, como pudiera ser vsftpd; en tal caso habría que eliminarlo con:
#yum remove vsftpd

  Si queremos instalar proftpd con yum debemos habilitar EPEL, que es un repositorio con paquetes adicionales. Lo habilitamos de la siguiente manera:
#rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

  A continuación basta con instalar proftpd:
#yum install proftpd

  Seguidamente lo configuramos editando el fichero “/etc/proftpd.conf”. Algunas líneas útiles que deberíamos agregar al fichero de configuración y que no vienen en la instalación por defecto son:
#Para que no muestre los directorios superiores
DefaultRoot ~
#Para ocultar . y ..
ListOptions "" strict
#Permite continuar descargas incompletas
AllowRetrieveRestart on
#Permite continuar subidas incompletas
AllowStoreRestart on
Arrancamos el servicio:
#service proftpd start

  Lo habilitamos para que se inicie al arrancar la máquina:
#chkconfig proftpd on

  En este punto ya tendríamos el servidor listo para empezar a funcionar, pero antes de nada lo recomendable es asegurarlo. Aquí hay algunas cosas que hacer, pero para no alargar demasiado el artículo comento un par de puntos importantes para hacer ya mismo:
  • Si contamos con un firewall lo ideal es utilizarlo y cerrar todos los puertos excepto los que vayamos a utilizar: 80(http), 443(https), 20, 21(ftp), 22(ssh),…
  • Si accedemos a nuestra máquina por ssh podemos añadir una regla a las iptables para restringir el acceso por IP, lo mismo para el ftp (sustituimos las Xs por nuestra IP):
#/sbin/iptables --flush
#/sbin/iptables -A INPUT -s XXX.XXX.XXX.XXX -p tcp --dport 20:21 -j ACCEPT
#/sbin/iptables -A INPUT -s XXX.XXX.XXX.XXX -p tcp --dport 22 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp --dport 20:21 -j DROP
#/sbin/iptables -A INPUT -p tcp --dport 22 -j DROP
#/etc/rc.d/init.d/iptables save

  Sé que se puede profundizar mucho mas en cada uno de estos puntos, pero el objetivo era hacer una guía breve y sencilla para poder comenzar a trabajar con el servidor.

jueves, 6 de marzo de 2014

Instalando Oracle 11g Release 2 bajo FreeBSD 9

Está Escrito:
Examináis las Escrituras porque vosotros pensáis que en ellas tenéis vida eterna; y ellas son las que dan testimonio de mí; (Juan 5:39)

Tomado de:DiabloEnLosDetalles

Continuamos dotando de funcionalidad a nuestra Jaula Debian GNU/Linux recién instalada. Para ello me he decidido por instalar Oracle 11gR2 para Linux, por tratarse de uno de los paquetes de software mas exigentes que se pueden encontrar; me parece que es una buena  forma de explorar los limites de la solución propuesta.

Otra motivación es el hecho de que en el Manual de FreeBSD el capítulo dedicado a la instalación de Oracle se refiere a la versión Oracle 8.0.5, que es bastante antigua, y esta circunstancia estimuló mi curiosidad.

Esta plataforma no resulta idónea para un entorno de producción ya que no está certificada por Oracle, lo cual no le resta utilidad como entorno de pruebas e incluso entorno de desarrollo para pequeños proyectos; depende de la aventurado que sea uno.

Las ventajas de emplear FreeBSD como infraestructura para entornos virtualizados son:

  1. Sistema de Ficheros ZFS.
  2. Pila de TCP/IP virtual.
  3. Seguridad de red con pf.
  4. Análisis de rendimiento con Dtrace.


Las ventajas de emplear Debian GNU/Linux dentro de una Jaula son:

  1. Debian GNU es una de las distribuciones Linux mas fiables y con un ciclo de lanzamiento de versiones muy previsible. 
  2. Utilizar una distribución completa nos ahorra bastante trabajo a la hora de instalar Oracle.
  3. Disponer de documentación técnica actualizada.

Como no soy partidario de instalar entornos gráficos en los servidores, especialmente si tienen que dar soporte a un motor de bases de datos tan pesado como lo es Oracle, voy a realizar una instalación en modo texto, empleado un fichero de respuestas para el instalador de Oracle.



Tareas previas a la instalación de Oracle


En todas las instalaciones de la base de datos Oracle hay que preparar el S.O para que se puede instalar y ejecutar correctamente. Estas tareas previas son específicas de cada S.O y la versión de Oracle.


Tareas específicas en FreeBSD


Las siguientes tareas se deben ejecutar como root:

1.-  Clonamos la Jaula deb-master previamente definida, utilizando la versión Lenny, para crear la Jaula debora:

root@morsa:/root # zfs clone fbsdzpool1/jailz/deb-master@deboostrap fbsdzpool1/jailz/debora

2.- Configuramos semáforos, memoria compartida y E/S asíncrona conforme a los requerimientos de Oracle 11gR2, para ello editamos /boot/loader.conf y /etc/sysctl.conf.

// Comienza  el fragmento de /boot/loader.conf 

kern.ipc.shmmni=4096
kern.ipc.semmns=32000
kern.ipc.semmni=128
aio_load="YES"

// Fin del fragmento de /boot/loader.conf
  
// Comienza  el fragmento de /etc/sysctl.conf

security.jail.sysvipc_allowed=1
kern.ipc.shmall=2097152
kern.ipc.shmseg=128
kern.ipc.shmmin=1
kern.ipc.shmmax=1073741824
kern.ipc.semaem=16384
kern.ipc.semvmx=32767
kern.ipc.semusz=632
kern.ipc.semume=50
kern.ipc.semopm=100
kern.ipc.semmsl=340
kern.ipc.semmnu=150

// Fin del fragmento de /etc/sysctl.conf 

3.- Habilitamos la memoria compartida en la Jaula debora.
// Comienza fragmento de /jailz/etc/jail.conf

debora {
  path = /jailz/debora;
  allow.mount;
  allow.sysvipc;
  host.hostname = debora;
  mount.devfs;
  mount.fstab="/jailz/etc/fstab.debora";
  ip4.addr = 127.0.0.25;
  interface = lo0;
  exec.start = "/etc/init.d/rc 3";
  exec.stop = "/etc/init.d/rc 0";
}
// Fin del fragmento de /jailz/etc/jail.conf 



4.- Iniciamos la jaula y nos conectamos a ella.

root@morsa:/root # jail -f /jailz/etc/jail.conf -c debora
debora: created
Starting periodic command scheduler: crond.
root@morsa:/root # jls
   JID  IP Address      Hostname                      Path
     1  127.0.0.25      debora                        /jailz/debora
root@morsa:/root # jexec 1 /bin/bash
debora:/# uname -a
Linux debora 2.6.16 FreeBSD 9.1-RELEASE-p4 #0: Mon Jun 17 11:42:37 UTC 2013 i686
 GNU/Linux

Tareas específicas en Debian


Los siguientes pasos se ejecutan dentro de la Jaula debora como usuario root:

5 .- Instalamos los paquetes requeridos para Oracle 11gR2 en Debian:

debora:/# apt-get install gcc make binutils lesstif2 rpm libaio1 libdb4.6 libstdc++5 unzip openjdk-6-jdk

Nota: El paquete openjdk-6-jdk se instala para disponer un entorno jre alternativo al proporcionado por el instalador de Oracle.

6.- Creamos los siguientes enlaces simbólicos:

debora:/# ln -s /usr/bin/awk /bin/awk
debora:/# ln -s /usr/bin/rpm /bin/rpm
debora:/# ln -s /usr/bin/basename /bin/basename
7.- Creamos los grupos y usuarios dba, oinstall y oracle.
debora:/# groupadd oinstall -g 1000
debora:/# groupadd dba -g 1001
debora:/# useradd -m -g oinstall -G dba -p passwd -s /bin/bash -d /home/oracle -u 1000 oracle
debora:/# passwd oracle
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
8.- Creamos los directorios para el sofware y la base de datos y les asignamos como propietario el usuario oracle.
debora:/# mkdir -p /oracle/product/11.2.0
debora:/# mkdir -p /oracle/admin/ORATEST/create
debora:/# mkdir /oracle/admin/ORATEST/adump
debora:/# mkdir /oracle/admin/ORATEST/logbook
debora:/# mkdir /oracle/oraInventory
debora:/# mkdir /oracle/oradata
debora:/# mkdir /oracle/flash_recovery_area
debora:/# chown  oracle.oinstall /oracle
debora:/# chown -R oracle.oinstall /oracle/product
debora:/# chown oracle.oinstall /oracle/oraInventory
debora:/# chown -R oracle.dba /oracle/admin
debora:/# chown oracle.dba /oracle/oradata
debora:/# chown oracle.dba  /oracle/flash_recovery_area
9.- Añadimos el nombre de host al fichero /etc/hosts.
debora:/# echo '127.0.0.25 debora' >> /etc/hosts

10.-  Creamos el archivo /etc/oraInst.loc y le asignamos como propietario al usuario oracle:

 // Comienza /etc/oraInst.loc

inventory_loc=/oracle/oraInventory
inst_group=oinstall

 // Fin de  /etc/oraInst.loc


debora:/# chown oracle.oinstall /etc/oraInst.loc



Instalación del Software de Oracle

Los siguientes pasos se ejecutan dentro de la Jaula debora bajo el usuario oracle:

11.- Cambiamos el usuario root a oracle. 

debora:/# su - oracle
oracle@debora:~$ id
uid=1000(oracle) gid=1000(oinstall) groups=1000(oinstall),1001(dba)
oracle@debora:~$
12.- Copiamos al directorio /oracle (por ejemplo) los ficheroslinux_11gR2_database_1of2.zip y linux_11gR2_database_2of2.zip que contienen el instalador y los descomprimimos:
oracle@debora:/oracle $ unzip linux_11gR2_database_1of2.zip
oracle@debora:/oracle unzip linux_11gR2_database_2of2.zip 

13.- Para realizar la instalación desatendida creamos el fichero de respuestas/oracle/database/response/install_debora.rsp. Están marcados en negrita los valores que puede resultar útil modificar, el resto del fichero debe dejarse inalterado, pues esta versión del instalador es problemática y este es el formato que debe mantener el fichero de respuestas.

// Comienza el fichero install_debora.rsp

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=debora
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/oracle/oraInventory
SELECTED_LANGUAGES=en
ORACLE_HOME=/oracle/product/11.2.0
ORACLE_BASE=/oracle
oracle.install.db.InstallEdition=SE
oracle.install.db.isCustomInstall=false
oracle.install.db.customComponents=
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
oracle.install.db.CLUSTER_NODES=
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryOption=false
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=false
oracle.install.db.config.starterdb.enableSecuritySettings=true
oracle.install.db.config.starterdb.password.ALL=
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.SYSMAN=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.control=DB_CONTROL
oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=
oracle.install.db.config.starterdb.dbcontrol.enableEmailNotification=false
oracle.install.db.config.starterdb.dbcontrol.emailAddress=
oracle.install.db.config.starterdb.dbcontrol.SMTPServer=
oracle.install.db.config.starterdb.automatedBackup.enable=false
oracle.install.db.config.starterdb.automatedBackup.osuid=
oracle.install.db.config.starterdb.automatedBackup.ospwd=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=username@mailaddress.com
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=

// Fin del fichero install_debora.rsp

14.- Ejecutamos  el instalador con las opciones indicadas tal y como están: 

oracle@debora:~$ /oracle/database/runInstaller -silent  -ignorePrereq -jreloc /usr/lib/jvm/java-6-openjdk -responseFile /oracle/database/response/install_debora.rsp
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 80 MB.   Actual -2147483648 MB    Passed
Checking swap space: must be greater than 150 MB.   Actual 4096 MB    Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2013-09-01_08-30-45PM. Please wait ...
[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.
   CAUSE: The Central Inventory is located in the Oracle base.
   ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.
[WARNING] [INS-32055] The Central Inventory is located in the Oracle base.
   CAUSE: The Central Inventory is located in the Oracle base.
   ACTION: Oracle recommends placing this Central Inventory in a location outside the Oracle base directory.
You can find the log of this install session at:
 /oracle/oraInventory/logs/installActions2013-09-01_08-30-45PM.log
 
The following configuration scripts need to be executed as the "root" user.
 #!/bin/sh
 #Root scripts to run

/oracle/oraInventory/orainstRoot.sh
/oracle/product/11.2.0/root.sh
To execute the configuration scripts:
         1. Open a terminal window
         2. Log in as "root"
         3. Run the scripts
         4. Return to this window and hit "Enter" key to continue

Successfully Setup Software.
15.- Revisamos los logs del instalador.
debora:~# tail -10 /oracle/oraInventory/logs/installActions2013-09-01_08-30-45PM.log
INFO: Validating state <finish>
WARNING: Validation disabled for the state finish
INFO: Completed validating state <finish>
INFO: Terminating all background operations
INFO: Terminated all background operations
INFO: Successfully executed the flow in SILENT mode
INFO: Finding the most appropriate exit status for the current application
INFO: Exit Status is 0
INFO: Shutdown Oracle Database 11g Release 2 Installer
INFO: Unloading Setup Driver
16.- Si la instalación ha sido correcta, ejecutamos como usuario root los scriptsorainstRoot.sh y root.sh :
oracle@debora:~$ logout
debora:~# id
uid=0(root) gid=0(root) groups=5(tty)
debora:~# /oracle/oraInventory/orainstRoot.sh
Changing permissions of /oracle/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /oracle/oraInventory to oinstall.
The execution of the script is complete.

debora:~# /oracle/product/11.2.0/root.sh
Check /oracle/product/11.2.0/install/root_debora_2013-09-01_20-39-01.log for the
 output of root script

debora:~# more /oracle/product/11.2.0/install/root_debora_2013-09-01_20-39-01.log

Running Oracle 11g root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /oracle/product/11.2.0

Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
Finished product-specific root actions.
 

Creación de una base de datos de Pruebas


Antes de crear una base de datos necesitamos  un fichero de parámetros init.ora y un script con los comandos SQL que ejecutan la creación de la base de datos.


17.- Creamos el fichero /oracle/admin/ORATEST/create/initORATEST.ora:

// Comienza el fichero initORATEST.ora

db_name='ORATEST'
db_domain=''
sga_target=512M
sga_max_size=1G
pga_aggregate_target=1G
processes = 150
audit_trail ='db'
db_block_size=8192
db_recovery_file_dest='/oracle/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/oracle/'
#dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
compatible ='11.2.0'
db_create_file_dest='/oracle/oradata'
filesystemio_options = SETALL
disk_asynch_io = TRUE

// Fin del fichero initORATEST.ora

18.- Creamos los ficheros /oracle/admin/ORATEST/create/ORATEST.sh y/oracle/admin/ORATEST/create/cr_ORATEST.sh:
// Comienza el fichero ORATEST.sh
ORACLE_HOME=/oracle/product/11.2.0
ORACLE_SID=ORATEST

NLS_LANG=American_america.WE8ISO8859P15
ORA_NLS11=${ORACLE_HOME}/nls/data
PATH=$PATH:$ORACLE_HOME/bin
export PATH
export ORACLE_BASE
export ORACLE_HOME
export ORACLE_SID
export NLS_LANG
export ORA_NLS33 
// Fin del fichero ORATEST.sh

// Comienza el fichero cr_ORATEST.sh
#!/bin/bash

. ./ORATEST.sh

rm ${ORACLE_HOME}/dbs/orapw${ORACLE_SID}
orapwd file=${ORACLE_HOME}/dbs/orapw${ORACLE_SID} password=diablo entries=2

rm -r /oracle/oradata/${ORACLE_SID}

sqlplus /nolog << EOF
spool ../logbook/cr_${ORACLE_SID}.log
conn / as sysdba;
CREATE SPFILE
FROM   PFILE='/oracle/admin/${ORACLE_SID}/create/init${ORACLE_SID}.ora';

DISCONNECT;

conn / as sysdba;

STARTUP NOMOUNT;
CREATE DATABASE ${ORACLE_SID}
CHARACTER SET WE8ISO8859P15
NATIONAL CHARACTER SET UTF8
USER SYS IDENTIFIED BY diablo
USER SYSTEM IDENTIFIED BY diablo
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;

@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
@?/sqlplus/admin/pupbld.sql

SHUTDOWN IMMEDIATE;

EXIT
spool off

EOF 
// Fin del fichero cr_ORATEST.sh

19.- Concedemos a los scripts los permisos de ejecución:

oracle@debora:/oracle/admin/ORATEST/create$ chmod 750 *.sh
oracle@debora:/oracle/admin/ORATEST/create$ ls -la
total 31
drwxr-xr-x 2 oracle dba   5 Sep  1 21:04 .
drwxr-xr-x 5 oracle dba   5 Sep  1 20:11 ..
-rwxr-x--- 1 oracle dba 258 Sep  1 21:02 ORATEST.sh
-rwxr-x--- 1 oracle dba 782 Sep  1 21:04 cr_ORATEST.sh
-rw-r--r-- 1 oracle dba 490 Sep  1 21:01 initORATEST.ora
20.- Iniciamos la creación de la base de datos:
oracle@debora:/oracle/admin/ORATEST/create$ nohup ./cr_ORATEST.sh &
21.- Comprobamos que la creación de la base de datos a concluido correctamente:
oracle@debora:/oracle/admin/ORATEST/create$ tail -10 nohup.out
SQL> CREATE PUBLIC SYNONYM PRODUCT_USER_PROFILE FOR SYSTEM.PRODUCT_PRIVS;

Synonym created.

SQL>
SQL> -- End of pupbld.sql
SQL> SQL> Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SQL> Disconnected from Oracle Database 11g Release 11.2.0.1.0 - Production


22.- Arrancamos la base de datos y nos conectamos.

oracle@debora:/oracle/admin/ORATEST/create$  . ./ORATEST.sh
oracle@debora:/oracle/admin/ORATEST/create$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Sun Sep 1 22:09:58 2013

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

SQL>  conn / as sysdba;
Connected to an idle instance.

SQL> startup;
ORACLE instance started.

Total System Global Area 1071333376 bytes
Fixed Size                  1341312 bytes
Variable Size             750782592 bytes
Database Buffers          314572800 bytes
Redo Buffers                4636672 bytes
Database mounted.
Database opened.
SQL>
SQL> select * from v$instance;

INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION           STARTUP_T STATUS       PAR    THREAD# ARCHIVE LOG_SWITCH_WAIT
----------------- --------- ------------ --- ---------- ------- ---------------
LOGINS     SHU DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_ST BLO
---------- --- ----------------- ------------------ --------- ---
              1 ORATEST
debora
11.2.0.1.0        01-SEP-13 OPEN         NO           1 STOPPED
ALLOWED    NO  ACTIVE            PRIMARY_INSTANCE   NORMAL    NO


SQL> !uname -a
Linux debora 2.6.16 FreeBSD 9.1-RELEASE-p4 #0: Mon Jun 17 11:42:37 UTC 2013 i686
 GNU/Linux

SQL>



Conseguido.


Oracle 11gR2 ejecutándose en FreeBSD 9


23.- Paramos la base de datos ORATEST. 

SQL> SHUTDOWN IMMEDIATE;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SQL> Disconnected from Oracle Database 11g Release 11.2.0.1.0 - Production
24.- Paramos la jaula debora.
root@morsa:/root # jail -f /jailz/etc/jail.conf -r debora
Using makefile-style concurrent boot in runlevel 0.
Stopping device state change daemon: devd.
Asking all remaining processes to terminate...done.
All processes ended within 1 seconds....done.
Stopping enhanced syslogd: rsyslogd.
/etc/init.d/umountnfs.sh: 106: cannot open /etc/mtab: No such file
Deconfiguring network interfaces...done.
Cleaning up ifupdown....done. 
Deactivating swap...done.
mount: /: unknown special file or file system
Will now halt.
ifdown: shutdown usbus0: Operation not permitted
ifdown: shutdown ath0: Operation not permitted
ifdown: shutdown usbus1: Operation not permitted
ifdown: shutdown lo0: Operation not permitted
ifdown: shutdown wlan0: Operation not permitted
startpar: service(s) returned failure: umountnfs.sh ... failed!
deb-master: removed

23.- Hacemos un snapshot de la jaula debora para así disponer de una plantilla de unajaula configurada para bases de datos Oracle.


root@morsa:/root # zfs snapshot fbsdzpool1/jailz/debora@oracle11gR2

 

Consideraciones finales


La decisión de instalar en la Jaula la versión Lenny de Debian GNU/Linux está motivada por dos razones; por una parte, la versión de kernel de Linux que requiere el instalador de Oracle como requisito previo es la 2.6.9 y por otro lado la versión de kernel mínima para squeeze es la 2.6.18, que es superior a la admitida por el módulo de compatibilidad para Linux de FreeBSD 9. 

// Comienza el fragmento de installActions.log

INFO: *********************************************
INFO: OS Kernel Version: This is a prerequisite condition to test whether the system kernel version is at least "2.6.9".
INFO: Severity:CRITICAL
INFO: OverallStatus:SUCCESSFUL
INFO: -----------------------------------------------
INFO: Verification Result for Node:debora
INFO: Expected Value:2.6.9
INFO: Actual Value:2.6.16
INFO: -----------------------------------------------
INFO: *********************************************

// Fin del fragmento de installActions.log 

Durante el desarrollo de este Post, detecté un problema durante la ejecución del Instalador de Oracle, que de forma aleatoria fallaba en en arranque inicial. Una manera de evitar este problema consiste en utilizar un jre alternativo al suministrado con el instalador.

No he podido configurar la gestión automática de memoria (AMM) que es una de la nuevas características introducidas en la versión 11g. Esto es así por que no he conseguido configurar el dispositivo /dev/shm dentro de la Jaula.

En consecuencia, no queda mas remedio que emplear la gestión automática de memoria compartida (ASMM) dando valores a los parámetros SGA_TARGET y SGA_MAX_SIZE en el fichero initORATEST.ora.

El sistema de ficheros ZFS sobre el que se ha creado la base de datos no está optimizado para los ficheros de la base de datos, es un aspecto que debe mejorarse para un uso más intenso de la base de datos.