SafeChildren Banner

Havoc Oracle Solaris Experts

martes, 25 de enero de 2011

Cómo Crear un FileSystem en Memoria utilizando TMPFS

Introducción
Vamos a ver cómo podemos utilizar el FileSystem TMPFS para crear un sistema de ficheros en Memoria en Solaris.

Ya hemos hablado en otras ocasiones sobre el sistema TMPFS y su relación con la swap en Solaris, vimos Cómo limitar el tamaño de /tmp en Solaris, sin embargo, hoy vamos a ver cómo podemos utilizarlo para crearnos un sistema de ficheros muy rápido.

Para ello, imaginando que nuestro directorio de montaje es </var/memory_fs> y que queremos asignarle un tamaño de 60Mb, haremos lo siguiente
itily@openzooey:/$ pfexec /usr/sbin/mount -F tmpfs -o size=60m -O swap /var/memory_fs
itily@openzooey:/$ pfexec df -h /var/memory_fs
Filesystem       size   used  avail capacity  Mounted on
swap             60M     0K    60M     0%    /var/memory_fs
Y ya podemos trabajar con nuestro sistema de ficheros en memoria de forma normal.

Par desmontarlo, simplemente haremos un <umount> como siempre
itily@openzooey:/$ pfexec /sbin/umount /var/memory_fs
Por último, si queremos que cada vez que nuestro sistema se inicie monte de forma automática el FileSystem, editaremos el archivo </etc/vfstab>
itily@openzooey:~$ pfexec vi /etc/vfstab
 swap   -  /var/memory_fs  tmpfs   -       yes     size=60m
:wq

Referencias

domingo, 16 de enero de 2011

Actualización a PostgreSQL 9.0.2 en OpenIndiana b148

Introducción
En anteriores post hemos hablado de Cómo Instalar PostgreSQL 9.x en OpenIndiana, así que este será un revisión mínima, por ello os animos a revisarlo.

La nueva versión de PostgreSQL 9.0.2 corrige algunos problemas de memory leak y por ello, es muy recomendable su actualización. Podéis encontrar todos los cambios en el ChangeLog de PostgreSQL

En este post veremos cómo actualizar PostgreSQL 9.0 64bits a la versión PostgreSQL 9.0.2 64bits.

Antes de Comenzar
Bueno, la actualización a PostgreSQL 9.0.2 no requiere hacer un "dump/restore" siempre que nos encontremos en la línea PostgreSQL 9.x, sin embargo, yo recomiendo SIEMPRE hacer un backup antes de comenzar.

Si nos encontramos en una versión diferente, deberemos realizar un "dump/restore" obligatoriamente, así como una instalación "limpia" de PostgreSQL 9.x y, por lo tanto, deberemos iniciar la estrucutra de PGDATA.

Lo cierto, es que cuando comencé a escribir el post, hice una pequeña prueba de actualización "ahí a lo bruto" sin copia de seguridad ni nada, Pensé ¿total por qué va a fallar? Pues ... falló! y me quedé sin mi DB, menos mal que teneía copia de seguridad del día anterior y, que siendo sinceros, es una PostgreSQL de pruebas y no supone mayor problema.

Por eso, antes de comenzar, ya sabéis, si tenéis alguna duda de cómo se hacen, aquí os dejo un post de Cómo Realizar Copias de Seguridad en PostgreSQL.


Para versiones anteriores a PostgreSQL 9.x
Para aquellos que estéis en una versión anterior, os recomiendo primero Instalar PostgreSQL 9.0 en OpenIndiana, y que luego continueis con este post. Recordar además, que es necesario realizar un "dump/restore"

Para versiones PostgreSQL 9.x
Para los demás, comenzamos ... podéis realizar la actualización desde el código fuente, o instalar directamente los binarios.

Obtener el Codigo Fuente
Lo primero que debemos hacer es obtener el código fuente de PostgreSQL 9.0.2 que descargaremos de su página oficial, aquí os dejo un enlace a la página de descargas de PosgreSQL.


Instalar desde el Binario
Para aquellos que o bien no tenéis la posibilidad de compilarlo, o no os apetece :D, aquí os dejo la version compilada para x86 en 64bits de PostgreSQL que he realizado.
Una vez descargado podéis ir al paso "Instalar PostgreSQL" para completar la actualización.

Preparar el Entorno
Debemos comprobar que tenemos  todos los binarios necesarios para poder compilar, es decir, compilador, make,  etc.

Si activamos la opción <--enable-dtrace> deberemos tener el directorio </usr/sbin> en nuestro PATH.
itily@openzooey:~/postgres/postgresql-9.0.2$ export PATH=$PATH:/usr/sbin:/sbin:/usr/ccs/bin/
itily@openzooey:~/postgres/postgresql-9.0.2$ which dtrace
/usr/sbin/dtrace
itily@openzooey:~/postgres/postgresql-9.0.2$ which cc
/usr/bin/cc
itily@openzooey:~/postgres/postgresql-9.0.2$ which make
/usr/bin/make
itily@openzooey:~/postgres/postgresql-9.0.2$ which ar
/usr/bin/ar
itily@openzooey:~/postgres/postgresql-9.0.2$ which python
/usr/bin/python
Compilar PostgreSQL
Para compilar esta versión de PostgreSQL utilizaremos las mismas opciones que antes, por lo tanto, podemos hacer un <copy and paste>, de nuestro archivo <config.log>. Para aquellos que no tenéis el <config.log>, aquí os dejo los pasos.

Recordar que, yo utilizo como $POSTGRES_HOME siempre el directorio </u01/app/postgres/> al puro estilo OFA, ...
$ export CC=cc  
$ export CFLAGS="-xO3  -xspace -Xa  -xildoff  -m64  -xc99=none -xCC -fast -native"
$ export LDFLAGS="-R/usr/sfw/lib/64 -R/usr/lib/64"
$ ./configure \
--prefix=/u01/app/postgres/9.0/db \
--exec-prefix=/u01/app/postgres/9.0/db \
--bindir=/u01/app/postgres/9.0/db/bin/64 \
--libexecdir=/u01/app/postgres/9.0/db/bin/64 \
--sbindir=/u01/app/postgres/9.0/db/bin/64 \
--datadir=/u01/app/postgres/9.0/db/share \
--sysconfdir=/u01/app/postgres/9.0/db/etc \
--mandir=/u01/app/postgres/9.0/db/man \
--libdir=/u01/app/postgres/9.0/db/lib/64 \
--includedir=/u01/app/postgres/9.0/db/include \
--sharedstatedir=/var/postgres/9.0 \
--localstatedir=/var/postgres/9.0 \
--enable-nls \
--docdir=/u01/app/postgres/9.0/db/doc \
--with-system-tzdata=/usr/share/lib/zoneinfo \
--with-python \
--with-pam \
--with-openssl \
--with-libedit-preferred \
--with-libxml \
--with-libxslt \
--with-gssapi \
--enable-thread-safety \
--enable-dtrace \
--disable-integer-datetimes \
--with-includes=/usr/include:/usr/sfw/include \
--with-libs=/lib/64:/usr/lib/64:/usr/sfw/lib/64 \
$ make

Instalación de PostgreSQL
Como es una actualización, antes de lanzar nuestro <make install> -o descomprimir el <tar.gz>- debemos realizar una copia de seguridad y detener nuestra PostgreSQL de forma correcta, para ello, deberemos asumir el <role> de <postgres> o uno que tengan privilegios para detenerlo e iniciarlo.

En mi caso, utilizaré el <role postgres> para realizar las tareas.

Si es la primera vez que oyes hablar de roles y privilegios, te animo a que leas RBAC, Roles y Privilegios de Solaris antes de continuar.

Comprobamos que nuestro servicio de PostgreSQL está activo, hacemos un backup y lo desactivamos.
postgres@openzooey:~$ pfexec svcs postgresql_9:default_64bit
STATE          STIME    FMRI
online         11:26:07 svc:/application/database/postgresql_9:default_64bit
postgres@openzooey:~$ /u01/app/postgres/9.0/db/bin/64/pg_dump -C -Z9 -f /export/home/postgres/backups-pre-upgrade.dump.gz mydatabase
postgres@openzooey:~$ gzip -dc /export/home/postgres/backups-pre-upgrade.dump.gz |head -3
--
-- PostgreSQL database dump
--
postgres@openzooey:~$ pfexec /usr/sbin/svcadm disable postgresql_9:default_64bit
postgres@openzooey:~$ pfexec svcs postgresql_9:default_64bit
STATE          STIME    FMRI
disabled       11:33:19 svc:/application/database/postgresql_9:default_64bit
Ahora ya estamos en disposición de realizar nuestro <make install> y proceder a la instalación de PostgreSQL en nuestro sistema o, si has optado por actualizar desde el binario, a descomprimirlo.

Lanzar &lt:make install>
itily@openzooey:~/postgres/postgresql-9.0.2$ pfexec make install
O descargarlo y descromprimirlo -hay que hacerlo como <root> o con un usuario con permisos suficientes-
root@openzooey:/# cd /
root@openzooey:/# wget http://blog.sfchildren.com/blogger/postgres/9.0.2/openindiana/postgresql-9.0.2-x86-64bits.tar.gz
root@openzooey:/# gzip -dc postgresql-9.0.2-x86-64bits.tar.gz | tar xpf -
root@openzooey:/# chown -R postgres:postgres /u01
root@openzooey:/# rm postgresql-9.0.2-x86-64bits.tar.gz

Activamos el Servicio
Vamos a utilizar SMF para gestionar nuestro servicio, por lo tanto, sólo nos queda hacer un <enable> del mismo
root@openzooey:/# svcadm enable postgresql_9:default_64bit
root@openzooey:/# svcs postgresql_9:default_64bit
STATE          STIME    FMRI
online         13:05:36 svc:/application/database/postgresql_9:default_64bit
Comprobamos nuestro PostgreSQL
postgres@openzooey:~$ /u01/app/postgres/9.0/db/bin/64/psql -U postgres
psql (9.0.2)
Type "help" for help.

postgres=# select count(1) from pg_index;
 count
-------
   101
(1 row)

postgres=# \q

Conclusiones
Bueno, como hemos visto, la actualización de PostgreSQL no supone mayores problemas, siempre que estemos en el mismo nivel de versión, es decir, 9.x. Hemos dejado en el tintero las diferentes formas de actualización desde otras versiones, ya que eso requiere todo un post para ello.

Recordar que las buenas práticas de SysAdmin nos obligan a realizar copias de seguridad, y, que si por agún momento se nos pasa, entonces aparecerá nuestro querido amigo "Murphy" y nos dará algún susto.


Referencias

lunes, 10 de enero de 2011

Feliz 2011 a todos los SysAdmin de Solaris

Introducción
Un nuevo año se ha asomado a nuestra vida, el 2011, con él comienzan los repasos del año que nos acaba de dejar, y las nuevas promesas y objetivos del año nuevo.

Si hacemos un repaso a nuestro 2010 se han producido muchas noticias -algunas importantes- como la "muerte de OpenSolaris", y el "nacimiento de OpenIndiana". Otras en referencia a mi carrera profesional con la creación de HavocTec como consultora de Solaris y PostgreSQL, de la que soy socio fundador :D

Pero si nos fijamos en la trayectoria del Blog, vemos que -creo- he evolucionado y hemos tocado muchos de los temas principales de Solaris, PostgreSQL y algo de Oracle.

Sin embargo, todavía queda mucho que contar. Con la introducción de OpenIndiana/OpenSolaris en el "juego" de Solaris, tenemos un nuevo sistema de paquetes, IPS. La maduración de la utilización de  BootEnviroment -ya que no es una cosa nueva-, Crossbow y la "explosión" de las zonas.

Qué me gustaría para este nuevo año
Lo cierto es que creo que debemos introducirnos en el mundo de IPS, ventajas e incovenientes, así como "repositorios personalizados", réplicas y técnicas de seguridad -gracias a la sugerencia de NocThulh-

Profundizar en el uso de BootEnviroment(s) para mejorar -o marcar unas buenas prácticas- el procedimiento de parcheo de un Solaris/OpenIndiana con el objeto de reducir el "downtime"

Crossbow como tecnología de virtualización de red, optimización y gestión de los recursos.

Un repositorio público
Además, crearemos un repositorio público donde se encuentren los binarios que vamos compilando en el blog, con el objeto de hacer un poco más sencilla la vida a los SysAdmin principiantes.

PostgreSQL
Creo que este año es la maduración de PostgreSQL como RDBMS "profesional", por ello, hablaremos de cómo implementarlo, cómo gestionarlo y administrarlo.

Veremos la replicación que -a partir de la 9.x- se ha introducido, y nos puede aportar gran escalado y seguridad


Vuestras Sugerencias
Y, cómo no, aquellas sugerencias que me hacéis llegar al blog y/o al correo. Por ello, os animo a sugerir diferentes temas y tratarlos de resolver en este nuevo año que comienza


Conclusiones
Veremos cómo se depara el año, pero promete que sea entretenido ...

Feliz 2011 
Bienvenido a Solaris BlackBox 
tu blog de Solaris