jueves, 11 de febrero de 2010

Instalación Apache-2.x 64bits + SSL + JK en Solaris 10

En este post vamos a ver la instalación de Apache2 con diferentes módulos, como mod_ssl, mod_expires, mod_deflate y mod_jk, en un solaris 10. La compilación la haremos en 64 bits.

Introducción


Mod_ssl es el módulo que se encarga de la encriptación para la navegación a través de https.
Mod_expires nos permite marcar en la cabecera HTTP la validez del documento, una vez se guarda en la caché, no volverá a solicitarlo hasta que haya expirado.
Mod_deflate nos permite comprimir el contenido antes de que nos sea devuelto a nuesto navegador.
Mod_jk establece la comunicación con un servidor de aplicaciones J2EE como puede ser Tomcat o GlassFish.

Requisitos

La compilación la haremos con el compilador cc de Sun, lo podemos obtener del paquete SunStudio.

El software que necesitaremos:
- Apr
bash-3.00# wget ftp://ftp.sunfreeware.com/pub/freeware/sparc/10/apr-1.2.2-sol10-sparc-local.gz
- OpenSSL
bash-3.00# wget ftp://ftp.sunfreeware.com/pub/freeware/SOURCES/openssl-0.9.8l.tar.gz
- Apache-2.2.14
bash-3.00# wget http://apache.ziply.com/httpd/httpd-2.2.14.tar.gz
- mod_jk
bash-3.00# wget http://www.poolsaboveground.com/apache/tomcat/tomcat-connectors/jk/source/jk-1.2.28/tomcat-connectors-1.2.28-src.tar.gz

Instalación


1.- Instalación apr
bash-3.00# pkgadd -d apr-1.2.2-sol10-sparc-local

2.- Instalación OpenSSL 64 bits
bash-3.00# export PATH=$PATH:/usr/local/bin:/usr/ccs/bin:/usr/sfw/bin:/opt/SUNWspro/bin
bash-3.00# CC="cc" CFLAGS="-O2 -m64" ./configure --prefix=/usr/local/64/libxml2
bash-3.00# make
bash-3.00# make install

3.- Instalación Apache-2.2.14
bash-3.00# CC="cc" \
CFLAGS="-O3 -m64" \
./configure \
"--prefix=/opt/www/apache-2.2.14" \
"--with-included-apr" \
"--enable-so" \
"--enable-rewrite" \
"--enable-headers" \
"--enable-expires" \
"--enable-status" \
"--enable-ssl" \
"--with-ssl=/usr/local/64/ssl" \
"--enable-deflate" \
"--enable-proxy" \
"--enable-proxy-http" \
"--enable-proxy-ajp" \
bash-3.00# make
bash-3.00# make install

4.- Instalación Mod_jk (con compilador GNU make)
bash-3.00# CC="cc" ./configure --with-apxs=/opt/www/apache-2.2.14/bin/apxs
bash-3.00# gmake
bash-3.00# gmake install

Configuraciones

1.- Configuración mod_deflate.
En el archivo /opt/www/apache-2.2.14/conf/http.conf debemos introducir las siguientes lineas:

################################################
# MOD DEFLATE
################################################

SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/plain text/xml
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
LogFormat '"%r" %{output_info}n/%{input_info}n (%{ratio_info}n%%)' deflate
CustomLog logs/deflate_log deflate


Con esta configuración comprimimos todo excepto las imágenes.

2.- Configuración mod_expires.
Creamos un nuevo archivo de configuración por ejemplo en la siguiente ruta:
bash-3.00# vi /opt/www/apache-2.2.14/conf/extra/modules/modexpires.conf.d/expires.conf

En esta configuración añadimos el tipo de objeto que queremos hacer que expire y el tiempo:
##############################################################
## MOD_EXPIRES
##############################################################

ExpiresActive on
ExpiresByType image/jpg "access 1 month"
ExpiresByType image/gif "access 1 month"
ExpiresByType image/jpg "access 1 month"
ExpiresByType image/ico "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType text/js "access 7 days"
ExpiresByType text/css "access 7 days"
ExpiresByType text/jsp "access plus 7 days"
ExpiresByType text/html "access plus 7 days"
ExpiresDefault "access 7 days"


En el archivo http-vhosts.conf añadimos la configuración sobre el VirtualHost que queramos.


ServerAdmin test@pruebas.es
DocumentRoot /www/test
ServerName www.test.es
# ModExpires
Include conf/extra/modules/modexpires.conf.d/expires.conf


3.- Configuración mod_jk
En primer lugar declararemos nuestros "workers" en el archivo de configuración mod_jk.conf.
Workers son los servidores de aplicaciones J2EE como Tomcat o GlassFish.

bash-3.00# vi /opt/www/apache-2.2.14/conf/extra/modjk.conf.d/modjk.conf
ps=/
worker.list=TEST1, TEST2, ClusterTEST

worker.TEST1.port=14101
worker.TEST1.host=192.168.1.1
worker.TEST1.type=ajp13
worker.TEST1.connect_timeout=10000
worker.TEST1.prepost_timeout=10000
worker.TEST1.reply_timeout=140000
worker.TEST1.max_reply_timeouts=3
worker.TEST1.retries=3
worker.TEST1.socket_timeout=5
worker.TEST1.lbfactor=1
#worker.TEST1.activation=D
worker.TEST1.redirect=workerTEST2


worker.TEST2.port=14102
worker.TEST2.host=192.168.1.2
worker.TEST2.type=ajp13
worker.TEST2.connect_timeout=10000
worker.TEST2.prepost_timeout=10000
worker.TEST2.reply_timeout=140000
worker.TEST2.max_reply_timeouts=3
worker.TEST2.retries=3
worker.TEST2.socket_timeout=5
worker.TEST2.lbfactor=1
worker.TEST2.activation=D
worker.TEST2.redirect=workerTEST1

worker.ClusterTEST.type=lb
worker.ClusterTEST.max_reply_timeouts=3
worker.ClusterTEST.sticky_session=1
worker.ClusterTEST.balance_workers=TEST1, TEST2

------------------------------------------
En este archivo se especifican las propiedades del servidor de aplicaciones con el que queremos conectar, como por ejemplo: La dirección Ip, el puerto AJP del servidor J2EE, el protocolo AJP13, y una serie de timeouts que podemos cambiar según cual sean nuestras necesidades.
Con esta configuración pretendemos atacar a un cluster de Servidores de aplicaciones activo-pasivo, el nodo TEST1 funcionará siempre y si en algún momento se cae se pondrá como primario automáticamente TEST2. Si lo que queremos es que funcionen los dos nodos a la vez sólo tenemos que comentar las propiedades:
#worker.TEST1.activation=D
#worker.TEST1.redirect=workerTEST2
#worker.TEST2.activation=D
#worker.TEST2.redirect=workerTEST1

Una vez ya hemos declarado los nodos o "workers" tendremos que apuntar la aplicación desde nuestro VirtualHost hacia nuestro servidor de aplicaciones.


ServerAdmin test@pruebas.es
DocumentRoot /www/test
ServerName www.test.es
# ModExpires
Include conf/extra/modules/modexpires.conf.d/expires.conf
# ModJK
JkMount /aplicacion ClusterTEST



Espero que os sirva de ayuda. ;D

jueves, 21 de enero de 2010

Creación de zonas con Solaris Containers

Introducción a Solaris Containers
Solaris containers es la implementación de un sistema operativo virtualizado sobre Solaris 10, proporciona la gestión de recursos del sistema y la virtualización de sistemas operativos a través de las zonas.
La zona global es la primaria, desde la que instalaremos otras zonas (no globales), así el administrador puede gestionar de una forma mas eficaz los recursos del servidor, ahorrando costes, espacio, tiempo ...
Las zonas actúan como un sistema operativo independiente, les podemos asignar una interfaz de red virtual, un sistema de archivos independiente, memoria, cpu ... Todo esto es personalizable y altamente recomendado ya que podemos optimizar el rendimiento del sistema según creemos conveniente.
Pooladm

Pooladm es un gestor de recursos de cpu, con esta herramienta podemos crear “pools” o procesadores virtuales que contienen un número deseado de cpu's, de este modo podemos asignarle a una zona muy importante unos recursos grandes y a otra zona menos importante unos recursos mas pequeños, también podemos igualar cargas ... etc.Pooladm por defecto está desactivado , si no se activa las zonas obtendrán los recursos de la zona global, éste no discriminará y tratará a todas las zonas por igual.
La configuración consta de un pool y un pset asociados entre ellos.
Pset es donde almacena las cpus mínimas y máximas que va a tener el pool, la carga que tiene, el tamaño en cpus...
Pool contiene parámetros como el id del pool en el sistema, si esta activado o desactivado, la importancia del pool o prioridad y además tiene asociado un pset que trabaja para el pool.

Primero habilitamos pooladm

bash-3.00# pooladm -e
bash-3.00# pooladm -s
Creamos un pset (este tendrá como mínimo una cpu y como máximo 4)
bash-3.00# poolcfg -c 'create pset pset1 (uint pset.min=1; uint pset.max=4)'

Creamos un pool
bash-3.00# poolcfg -c 'create pool pool1'

Asociamos el pool con el pset
bash-3.00# poolcfg -c 'associate pool pool1 (pset pset1)'
Zonas

Crearemos una zona de prueba llamada "test-zone" y le pondremos una configuración básica.

Primero creamos el directorio físico donde se almacenará en la zona global, y le asignamos permisos 700.
bash-3.00# mkdir -p /opt/zones/test-zone
bash-3.00# chmod 700 /opt/zones/test-zone

Empezamos con la configuración de la zona.
bash-3.00# zonecfg -z test-zone
test: No se ha configurado esa zona
Use 'create' para comenzar a configurar una zona nueva.

zonecfg:test> create

Definimos donde se creará el sistema de archivos de la zona global.
zonecfg:test> set zonepath=/opt/zones/test-zone

La configuramos para que sea autoarrancable.
zonecfg:test> set autoboot=true

Configuramos la red. En mi caso me interesa asignar la interfaz bge3 de la zona global.
zonecfg:test> add net
zonecfg:test:net> set address=192.168.1.35/24
zonecfg:test:net> set physical=bge3
zonecfg:test:net> end


Configuramos el pool que creamos anteriormente.
zonecfg:test:net> set pool=pool1


Podemos añadir discos.
zonecfg:test> add device
zonecfg:test:device> set match=/dev/dsk/c0t0d3s1
zonecfg:test:device> end

zonecfg:test> add device
zonecfg:test:device> set match=/dev/rdsk/c0t0d3s1
zonecfg:test:device> end

Verificamos y guardamos los cambios.
zonecfg:test:net> verify
zonecfg:test:net> commit
zonecfg:test:net> exit
Instalamos la zona.
bash-3.00# zoneadm -z test-zone install

Arrancamos la zona.

bash-3.00# zoneadm -z test-zone boot
La primera vez que accedemos a la zona lo haremos en modo consola. Nos preguntará por configuraciones básicas como el nombre del host.
bash-3.00# zlogin -C test-zone

Ya tenemos nuestra zona funcionando! ahora podemos acceder a ella desde la zona global con el comando zlogin o directamente con la ip que le hemos asignado.

Por último listo algunos comandos básicos para la administración de las zonas.
Listar todas las zonas
bash-3.00# zoneadm list -cv
Arrancar una zona
bash-3.00# zoneadm -z test-zone boot
Parar una zonabash-3.00# zoneadm -z test-zone halt
Reiniciar una zonabash-3.00# zoneadm -z test-zone reboot
Loguearse en una zonabash-3.00# zlogin test-zone

miércoles, 20 de enero de 2010

Instalación Jumpstart Server en Solaris 10

Supongamos que tenemos dos equipos, el primero es el que hace de servidor de instalaciones, y el segundo será el cliente, el que solicita la instalación remota. A partir de ahora estos serán los datos para estos dos equipos:

Servidor Jumpstart
Hostname: jumpstartserver
Ip: 192.168.5.1

Cliente
Hostname: chistau
Ip: 192.168.5.2

Antes de comenzar con la instalación hay que asegurarse que la máquina servidor y el cliente están en el mismo segmento de red y que son accesibles.

Los pasos a seguir son los siguientes:

1.- Configuración Ip del servidor jumpstart.

bash-3.00# ifconfig bge0 192.168.5.1 netmask 255.255.255.0 up

2.- Añadimos las ips del servidor y de los clientes remotos que queramos en el /etc/hosts

bash-3.00# vi /etc/hosts
#
# Internet host table
#
::1 localhost
127.0.0.1 localhost
192.168.5.1 jumpstartserver
192.168.5.2 chistau

3.- Montamos el DVD de Instalación de Solaris en el servidor Jumpstart.

4.- Creamos el directorio de instalación del jumpstart server, el que nosotros queramos.
bash-3.00# mkdir -p /opt/jumpstart

5.- Desde el DVD lanzar la instalación del servidor Jumpstart.
bash-3.00# cd /cdrom/sol_10_1009_sparc/Solaris_10/Tools/
bash-3.00# ./setup_install_server /opt/jumpstart

6.- Compartimos el directorio del jumpstart.
bash-3.00# vi /etc/dfs/dfstab
share -F nfs -o ro,anon=0 /opt/jumpstart
7.- Copiamos los archivos de configuración y reglas al directorio jumpstart.
bash-3.00# cp -R /cdrom/sol_10_1009_sparc/Solaris_10/Misc/jumpstart_sample/* /opt/jumpstart/.

8.- Creamos un profile.
bash-3.00# vi /opt/jumpstart/profile
install_type initial_install
system_type standalone
partitioning default
cluster SUNWCprog
filesys any 512 swap

9.- Creamos un archivo rules.
bash-3.00# vi /opt/jumpstart/rules
any - - profile -

10.- Verificamos las reglas, si son correctas se creará un archivo rules.ok
bash-3.00# /opt/jumpstart/check

11.- Añadimos la información del cliente al servidor jumpstart.
bash-3.00# cd /opt/jumpstart/Solaris_10/Tools
bash-3.00# ./add_instant_client -d -e 0:3:ba:19:13:a7 -s jumpstartserver:/opt/jumpstart -c jumpstartserver:/opt/jumpstart sun4u

-e = La mac de la tarjeta de red del cliente
-s = El directorio de arranque de Instalaciones del servidor
-c = El directorio del jumpstart del servidor

12.- Editamos el archivo /etc/ethers e insertamos la mac del cliente.
bash-3.00# vi /etc/ethers
0:3:ba:19:13:a7 chistau

13.- Desde el cliente mandamos un "send break" y desde la prompt lanzamos el siguiente comando.
ok boot net - install
Boot device: /pci@1f,0/ethernet@c File and args: - install
Timeout waiting for ARP/RARP packet
3a000 |

14.- A partir de aquí comenzará la instalación ...