Ya hemos visto Cómo Instalar PostgreSQL en Solaris 10 utilizando los binarios que nos proporciona PostgreSQL, sin embargo, en esta ocasión vamos a ver Cómo Instalar PostgreSQL 9.0 en OpenIndiana
Desde la página de PostgreSQL, podemos descargarnos la versión ya compilada para Solaris 10, sin embargo, esta versión no funciona sobre OpenSolaris y OpenIndiana.
Problemas con los binarios para Solaris 10 en OpenIndiana
El principal problema de los binarios compilados para Solaris reside en el uso de la biblioteca <libssl.so.0.9.7> y <libcrypto.so.0.9.7> que en OpenIndiana son </usr/lib/64/libcrypto.so.0.9.8> y </usr/lib/64/libssl.so.0.9.8>
Es decir, en OpenIndiana -OpenSolaris- tenemos una versión superior, y por lo tanto, cuando verificamos las dependencias del inario utilizando <ldd> vemos que no se encuentran:
# ldd postgresPero ... que no cunda el pánico, que es un problema fácilmente solucionable. Tenemos tres opciones para ello, o instalamos la versión anterior de OpenSSL cosa que NO RECOMIENDO, o compilamos nuestra propia versión de PostgreSQL o ... podeis descargaros la versión compilada por mí, para OpenIndiana x86 en 64bits de PostgreSQL 9.0.
libxslt.so.1 => /usr/lib/64/libxslt.so.1
libxml2.so.2 => /lib/64/libxml2.so.2
libpam.so.1 => /lib/64/libpam.so.1
libssl.so.0.9.7 => (file not found)
libcrypto.so.0.9.7 => (file not found)
libgss.so.1 => /usr/lib/64/libgss.so.1
libnsl.so.1 => /lib/64/libnsl.so.1
librt.so.1 => /lib/64/librt.so.1
libsocket.so.1 => /lib/64/libsocket.so.1
libm.so.2 => /lib/64/libm.so.2
libc.so.1 => /lib/64/libc.so.1
libz.so.1 => /lib/64/libz.so.1
libpthread.so.1 => /lib/64/libpthread.so.1
libmp.so.2 => /lib/64/libmp.so.2
libmd.so.1 => /lib/64/libmd.so.1
Si os habéis decidido por la última opción -Instalar PostgreSQL desde el binario par a OpenIndiana-, entonces, podéis ignorar el paso de compilación pero debéis tener en cuenta lo siguiente:
- El binario debe ser instalado en </u01/app/postgres/9.0/db>
- Utilizaremos el role de <postgres> del sistema
- El <PGDATA> esta en </var/postgres/9.0/data>
Antes de poder compilar PostgreSQL 9.0 en OpenIndiana, debemos tener en cuenta que son necesarios algunos paquetes, para ello, deberemos instalarlos antes.
Aquí os dejo la lista de paquetes necesarios, para instalarlos, simplemente debemos ejecutar <pkg install _nombre_paquete_>
- sunstudio
- SUNWgmake
- SUNWbison
- SUNWgm4
- SUNWflexlex
# pkginfo |grep flex
system SUNWflexlex Flex Lexer
system SUNWrsync rsync - faster, flexible replacement for rcp
# pkginfo |grep bison
system SUNWbison bison - A YACC Replacement
# pkginfo |grep gm4
system SUNWgm4 GNU m4
# pkginfo |grep gmake
system SUNWgmake gmake - GNU make
# pkginfo |grep sunstudio
application sunstudio12u1 Sun Studio 12 update 1
Compilar PostgreSQL 9.0
Para la compilación he utilizado los mismos parámetros que Bjorn Munch utiliza en la versión "oficial" que es posible descargar desde PostgreSQL.
Lo primero que haremos, será descargarnos el fuente de PostgreSQL desde su página oficial, en cualquiera de los dos formatos: tar.gz, tar.bz2
# export CC=ccConfiguración de PostgreSQL
# 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
# make install
A diferencia del post sobre Cómo Instalar PostgreSQL 8.x en Solaris 10, en esta ocasión vamos a utilizar roles para ejecutar el servicio.
Ahora si que estamos en disposición de poder hablar de esta forma de instalación, ya que hemos introducido los conceptos de RBAC, Roles y Privilegios en post anteriores.
No es que la instalación de PostgreSQL 8.x en Solaris 10 no estuviese bien, sino que no utilizaba todos los mecanismos que Solaris nos proporciona -a nivel de seguridad-, para que os hagáis una idea, si ejecutamos el comando <ppriv> sobre el proceso de postgres ejecutado con un usuario normal veremos cuáles son sus privilegios
$ svcs -p postgresql_84
STATE STIME FMRI
disabled mar_04 svc:/application/database/postgresql_84:default_32bit
online jul_06 svc:/application/database/postgresql_84:default_64bit
jul_06 3082 postgres
jul_06 3084 postgres
jul_06 3085 postgres
$ ppriv 3082
3082: /u01/app/postgres/8.4/db/bin/64/postgres -D /var/postgres/8.4/data
flags =
E: basic
I: basic
P: basic
L: basic,contract_event,contract_observer,file_chown,file_chown_self,file_dac_execute,file_dac_read,
file_dac_search,file_dac_write,file_owner,file_setid,ipc_dac_read,ipc_dac_write,ipc_owner,
net_bindmlp,net_icmpaccess,net_mac_aware,net_privaddr,net_rawaccess,proc_audit,
proc_chroot,proc_lock_memory,proc_owner,proc_setid,proc_taskid,sys_acct,sys_admin,
sys_audit,sys_ip_config,sys_mount,sys_nfs,sys_resource
$ id
uid=90(postgres) gid=90(postgres)
$ pg_ctl start -l /var/log/postgres/server.log
server starting
$ ps -ef|grep postgre
postgres 794 1 1 09:39:22 pts/1 0:00 /u01/app/postgres/9.0/db/bin/64/postgres
postgres 799 794 0 09:39:22 ? 0:00 /u01/app/postgres/9.0/db/bin/64/postgres
$ ppriv 794
794: /u01/app/postgres/9.0/db/bin/64/postgres
flags = PRIV_PFEXEC
E: basic
I: basic
P: basic
L: all
Además, si queríamos que un usuario -persona- pudiese gestionar nuestro PostgreSQL debíamos entregarle la contraseña de root ya que sino, no podría operar con SMF. Si lo intentase, nos mostraría el siguiente error:
$ idConfiguración de PostgreSQL en SMF
uid=101(postgres) gid=90(postgres)
$ /usr/sbin/svcadm disable svc:/application/database/postgresql_84:default_64bit
svcadm: svc:/application/database/postgresql_84:default_64bit: Permiso denegado.
A continuación configuraremos nuestro servicio postgres para que sea controlado mediante SMF, para ello, debemos descargar el Manifest para Solaris SMF 10 PostgreSQL 9 y el Method para Solaris SMF 10 PostgreSQL 9
# cd /lib/svc/methodCreación Estructura de PGDATA
# wget http://blog.sfchildren.com/blogger/openindiana/postgresql/9.0/smf/postgres_9
# chown root:bin postgres_9
# chmod 555 postgres_9
# mkdir -p /var/svc/manifest/application/database
# cd /var/svc/manifest/application/database
# wget http://blog.sfchildren.com/blogger/openindiana/postgresql/9.0/smf/postgresql_9.xml
# svccfg
svc:> validate postgresql_9.xml
svc:> import postgresql_9.xml
svc:> quit
# svcs -p postgresql_9
STATE STIME FMRI
disabled 9:29:24 svc:/application/database/postgresql_9:default_32bit
disabled 10:24:40 svc:/application/database/postgresql_9:default_64bit
Antes de poder iniciar postgres debemos crear la estructura de almacenamiento necesaria, para ello, deberemos ejecutar el comando <initdb> con los parámetros oportunos. En nuestro caso, vamos a iniciar la estructura en formato <UTF-8> y lenguage <es_UTF8> y la opción <-W> para que nos solicite la password que vamos a asignar al usuario postgres de la base de datos
# mkdir -p /var/postgres/9.0/dataProject y Directorio de Logs
# chown -R postgres:postgres /var/postgres
# chmod 700 /var/postgres
# su - postgres
$ export PGDATA=/var/postgres/9.0/data
$ /u01/app/postgres/9.0/db/bin/64/initdb -E utf8 --locale=es.UTF-8 -U postgres -W
Al igual que hicimos con la Instalación de PostgreSQL en Solaris, debemos definir un project y un directorio donde queremos escribir nuestro log. En nuestro caso, el project será <group.postgres> y el directorio </var/log/postgres>
# projadd -c "Postgres Database" -G postgres group.postgresInicio y Parada de PostgreSQL
# projmod -sK "process.max-sem-nsems=(priv,256,deny)" group.postgres
# projmod -sK "project.max-sem-ids=(priv,100,deny)" group.postgres
# projmod -sK "project.max-shm-ids=(priv,100,deny)" group.postgres
# projmod -sK "project.max-shm-memory=(priv,8G,deny)" group.postgres
# mkdir -p /var/log/postgres
# chown -R postgres:postgres /var/log/postgres
# chmod 700 /var/log/postgres
Como siempre, vamos a utilizar el framework de Solaris SMF para gestionar el inicio y parada de PostgreSQL, sin embargo, en esta ocasión -a parte de poder utilizar root- podemos utilizar el role <postgres> para gestionarlo, por ejemplo:
$ idOtorgar privilegios de administración de PostgreSQL a un usuario
uid=90(postgres) gid=90(postgres)
$ svcs -p postgresql_9
STATE STIME FMRI
disabled 9:29:24 svc:/application/database/postgresql_9:default_32bit
disabled 9:38:51 svc:/application/database/postgresql_9:default_64bit
$ pfexec /usr/sbin/svcadm enable svc:/application/database/postgresql_9:default_64bit
$ svcs -p postgresql_9
STATE STIME FMRI
disabled 9:29:24 svc:/application/database/postgresql_9:default_32bit
online 9:55:13 svc:/application/database/postgresql_9:default_64bit
9:55:13 817 postgres
9:55:13 819 postgres
9:55:13 820 postgres
9:55:13 821 postgres
9:55:13 822 postgres
$ ppriv 817
817: /u01/app/postgres/9.0/db/bin/64/postgres -D /var/postgres/9.0/data
flags =
E: basic
I: basic
P: basic
L: all
Como hemos comenteado, al utilizar roles podemos delegar privilegios de administración a un usuario cualquiera sin que tengamos que proporciona la contraseña de root.
Por ejemplo, vamos a crear un usuario no privilegiado llamado <zooey> al cual, le vamos a otorgar permisos para poder administrar nuestro servicio PostgreSQL asignándole el role<postgres> y las autorizaciones <solaris.smf.value.postgres> y <solaris.smf.manage.postgres>
# useradd -g sysadmin -s /bin/bash -d /export/home/zooey -m -R postgres -A solaris.smf.manage.postgres,solaris.smf.value.postgres zooeyConclusiones
80 blocks
# passwd zooey
New Password:
Re-enter new Password:
passwd: password successfully changed for zooey
# su - zooey
OpenIndiana SunOS 5.11 oi_147 September 2010
zooey@openzooey:~$ roles
postgres
zooey@openzooey:~$ pfexec svcs -p postgresql_9
STATE STIME FMRI
disabled 9:29:24 svc:/application/database/postgresql_9:default_32bit
disabled 10:24:40 svc:/application/database/postgresql_9:default_64bit
zooey@openzooey:~$ pfexec /usr/sbin/svcadm enable svc:/application/database/postgresql_9:default_64bit
zooey@openzooey:~$ pfexec svcs -p postgresql_9
STATE STIME FMRI
disabled 9:29:24 svc:/application/database/postgresql_9:default_32bit
online 10:39:25 svc:/application/database/postgresql_9:default_64bit
10:39:24 1016 postgres
10:39:24 1018 postgres
10:39:24 1019 postgres
10:39:24 1020 postgres
10:39:24 1021 postgres
zooey@openzooey:~$ pfexec /usr/sbin/svcadm disable svc:/application/database/postgresql_9:default_64bit
zooey@openzooey:~$ pfexec svcs postgresql_9
STATE STIME FMRI
disabled 9:29:24 svc:/application/database/postgresql_9:default_32bit
disabled 10:43:51 svc:/application/database/postgresql_9:default_64bit
En esta ocasión hemos utilizado muchos más mecanismos para gestionar el servicio de PostgreSQL y, hemos aprendido a utilizar los roles como una herramienta muy potente y segura.
Aunque inicialmente la Instalación de PostgreSQL puede ser de la forma tradicional -utilizando un usuario no privilegiado y root para gestionarlo- Solaris nos proporciona un entorno mucho más seguro y rico para ello.
Espero que con este ejemplo -completo- de instalación podáis ver la potencia de los roles, y como nos pueden ayudar en nuestro día a día.
Referencias
Thanks, for that complete Pg9 / OpenIndiana tutorial. It would be very helpfull if you can translate it to English. For now I will try google translator ;)
ResponderEliminarDominik/Poland
Hi Dominik,
ResponderEliminarThanks about the comment.
Yes, I've been thinking about to translate to English some of my post, and, this is one that I'm going to translate on free weeks.
Urko,
Hola.
ResponderEliminarEstoy teniendo problemas para compilar, e el paso del ./configure me esta arrojando el siguiente error "configure:3369: error: C compiler cannot create executables"
Te agradezco si me puedes indicar que estoy haciendo mal.
Por cierto, estoy usando las fuentes del 9.0.3, ya que la 9.0 ya no esta disponible.
Gracias.
Hola Anónimo,
ResponderEliminarSobre el problema del compilador de C "compiler cannot create executables" puede deberse a varios motivos, aunque, por experiencia, creo que puede ser alguno de los siguientes:
1.- Comprueba que Solaris soporta una arquitectura de 64bis si estás utilizando el flag "-m64"
2.- Comprueba la ruta del compilador CC
$ which cc
$ which make
Para saber con más detalle el error, mira el archivo config.log para saber dónde ha fallado.
Además, aquí tienes una versión de Cómo actualizar PostgreSQL 9.x a 9.0.2 por si te sirve de ayuda.
Me vas contando,
Un Saludo,
Urko
Hola.
ResponderEliminarGracias por tu respuesta, efectivamente estoy usando el flag -m64, pero quedo con la duda de si tambien debo cambiar las partes donde hacen referencia al 64 por 32 "--bindir=/u01/app/postgres/9.0/db/bin/64"
Gracias.
Hola.
ResponderEliminarConoce alguna forma de activar el modo de 64bits en OpenIndiana ?
Ya estuve buscando en la documentacion de OI y no logre encontrar algo que indique como se logra.
Gracias.
Hola.
ResponderEliminarEstoy un poco confundido porque al ejecutar "uname -m" me dice que es i386, pero cuando ejecuto "isainfo -kv" me dice que es 64bits, no se supone que si es de 64bits el primer comando me debio arrojar x86_64 ?
Ya en esta situacion asumo que es de 64bits por lo cual descarto la primera opcion.
Pasando con la opcion 2 esto es lo que obtengo.
# which cc
/usr/bin/cc
# which make
/usr/gnu/bin/make
Adicionalmente este es el contenido del archivo config.log
http://pastebin.com/BmpcMVQn
Gracias.
Hola.
ResponderEliminarUsted por pura casualidad tiene conocimiento de como instalar PgAdmin en OI ?
Teniendo en cuenta que solo la ultima version del PgAdmin soporta Postgres 9.x
Gracias.
Hola Anónimo,
ResponderEliminarSi, como bien dices si estás compilando PostgreSQL 9.x sobre 32bit no se debe utilizar el directorio $POSTGRES_HOME/bin/64, ni tampoco los de $POSTGRES_HOME/lib/64.
Además, en el Linker debes decirle que quieres que te incluya las bibliotecas de 32 LD_FLAGS y no las de 64bits.
Por lo tanto, la configuración sería la siguiente:
# export CC=cc
# export CFLAGS="-xO3 -xspace -Xa -xildoff -m32 -xc99=none -xCC -fast -native"
# export LDFLAGS="-R/usr/sfw/lib/ -R/usr/lib/"
# ./configure
--prefix=/u01/app/postgres/9.0/db
--exec-prefix=/u01/app/postgres/9.0/db
--bindir=/u01/app/postgres/9.0/db/bin
--libexecdir=/u01/app/postgres/9.0/db/bin
--sbindir=/u01/app/postgres/9.0/db/bin
--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
--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/:/usr/lib/:/usr/sfw/lib/
Espero que te ayude,
Urko
Hola.
ResponderEliminarGracias por tus respuestas.
Al final opte por instalar el binario y realizar la actualizacion a 9.0.2, pero me encontre con 2 obstaculos.
1. No puedo desactivar el servicio con el usuario postgres.
2. No pude crear el usuario del ejemplo porque me dice que el rol postgres no es valido.
Pero a pesar de estos dos problemas la instalacion no tuvo problema alguno, ni siquiera tuvo problemas por el hecho de que aparentemente estoy funcionando en 32bits.
Por lo pronto voy a proceder a instalar el PgAdmin con las instrucciones que dan a ver si me camina.
Gracias.
Hola a Todos,
ResponderEliminarDebido a las diferentes dudas que, he decidido crear un post sobre Cómo Instalar PostgreSQL 9.0.3 en OpenIndiana utilizando SMF y RBAC. Requisitos de Instalación
Os animo a que le echéis un vistazo, y, como siempre, espero vuestros comentarios.
Un Saludo,
Urko
Hola Camcal,
ResponderEliminarSobre tu duda sobre PgAdmin, lo cierto es que no he probado a instalarlo en Solaris nunca, :'( así que no sé si hay muchos problemas -me imagino que no-
Siento no poder ayudarte,
Urko
Hola.
ResponderEliminarDesafortunadamente si estoy teniendo probleas ya que durante la instalacion del PgAdmin el busca la instalacion de Postgres.
El problema se da en que no la encuentra en la ruta predeterminada y cuando le doy el parametro
--with-pgsql=/u01/app/postgres/9.0/db/bin/64/
me dice que no logro encontrar la instalacion de Postgres en esa carpeta.
Alguna idea de cual pueda ser la carpeta ?
Gracias.
PS: Tan pronto logre completar la instalacion de PgAdmin hare el comentario aqui dando las indicaciones.
Hola a todos.
ResponderEliminarYa logre sortear el problema del pgAdmin3 pero desafortunadamente el comentario que hice no me lo acepto la pagina, no Urko, y se perdio.
Asi que en estos dias estare explicando como lo logre, lo unico que les puedo adelantar es que lo hice con phpPgAdmin.
Suerte.
Hola.
ResponderEliminarAhora llego con un nuevo problema, estoy tratando de agregar la libreria UUID a la instalacion de Postgres, pero hasta el momento todos mis intentos no han rendido frutos.
Esto es lo que he echo hasta el momento.
Instale uuid-1.6.2
Segui los pasos que estan dentro de la carpeta pgsql en el archivo uuid.txt, y hay es donde quedo barado, ya que al ejecutar el primer comando me indica que no puede eliminar varias funciones y demas porque son necesarias para el sistema.
Si alguien tiene idea de que puede ser les agradezco la ayuda.
Gracias.
PS: No se me olvida que tengo pendiente dar los pasos de la instalacion de phpPgAdmin.
Hola de nuevo.
ResponderEliminarSe me olvidaba decir que ya probe haciendo la instalacion de UUID usando las fuentes que se encuentran dentro de la carpeta contrib/uuid-ossp
pero me dice que no encuentra el archivo uuid.h
Hola Camcal,
ResponderEliminarLo cierto es que miré el problema de la compilación de PgAdmin, y bueno, el problema está en los directorios.
Cuando haces un "configure" de PgAdmin y le dices dónde está POSGRES_HOME, asumen que "pgconfig" está en "$POSTGRES_HOME/bin/pgconfig", sin embargo, en la instalación de PostgreSQL nosotros le hemos dicho que los binarios de 64bits están en $POSTGRES_HOME/bin/64 y, por eso no lo encuentra.
La solución pasa por utilizar PostgreSQL 32bit para compilarlo, aunque, es cierto que voy a escribir a la gente de PgAdmin para que incluyan la opción "--with-pgconfig" y de esta forma quedaría solucionado.
Urko
Hola Camcal,
ResponderEliminarSobre el comentario, ... lo siento :'( no sé que habrá pasado pero .. yo no he sido :D
Si quieres, mándamelo por correo y lo publico :D
Urko
Hola Urko.
ResponderEliminarEn este momento mi mayor problema es que no he podido instalar el UUID-OSSP y pues por obvias razones tu estas mas capacitado en el tema que yo, asi que te pregunto si es posible que te contacte por correo o por chat a ver si por fin logro completar la instalacion de Postgres en OI.
Necesito el UUID-OSSP porque estoy trabajando con un ERP, que debes conocer, llamado OpenBravo y este hace uso de ese modulo para generar los IDs.
Gracias.
Hola Camcal
ResponderEliminarComo podrás ver -y si no te lo digo- he creado un post sobre Cómo Instalar OSSP-UUID para PostgreSQL, y, aunque tu lo necesitas "de forma urgente" me ha parecido interesante, asi que lo he publicado.
Si esperas un poquito verás que también explico cómo compilar PostgreSQL con soporte para UUID,
Espero que te ayude,
Urko