Introducción
Hace unos días decidí cambiar algunos de mis equipos de pruebas de mi casa, y me "lancé" a comprarme componentes sueltos en App Informática -era en previsión de las días de fiesta ... :D-
Así que me compré diferentes componentes, aunque hoy vamos a hablar sólo de la tarjeta de red PCI-e EDIMAX y su Chipset RTL8168B.
El problema
Después de instalar OpenIndiana sin ningún problema, configurar y demás historias -todo ello utilizando la tarjeta de red integrada en la placa- me dispuse a activar la tarjeta PCI-e y configurar OpenIndiana como Router -para poner SQUID como Proxy Transparente-, pero ... cuál fue mi sorpresa que después de unas horas "OpenIndiana se colgaba 100%".
No respondía nada! Ni por consola!!
La Solución
Siento decir que me hubiese gustado poner aquí "la solución mágica", pero ... no fui capaz! Toqué cientos de parámetros, cambie de driver -utilizando gani- y muchas horas de pruebas, siempre con el mismo resultado: "colgada 100% de OpenIndiana"
Así que, al final, he cambiado esta tarjeta por una Intel PCI-e ...
Blog donde comento mis historias con el sistema operativo Sun Solaris durante todos estos años de lucha y placer.
viernes, 29 de abril de 2011
domingo, 17 de abril de 2011
Activar Salida por Consola Serie en OpenIndiana/Solaris 11
Introducción
Si queremos hacer que nuestro OpenIndiana/Solaris utilice nuestro puerto serie como salida en vez de la tarjeta gráfica, por ejemplo en servidores, simplemente deberemos incluir la opción "console=ttya" en nuestra entrada "kernel" del archivo <menu.lst> de GRUB.
Debemos recordar que si tenemos ZFS como sistema de archivos, el archivo <menu.lst> se encontrará en <POOL/boot/grub>, por ejemplo, en mi caso el nombre del POOL es "rpool".
Conclusión
No ha sido difícil activar nuestra salida de consola por puerto serie, y ya podemos gestionar de forma remota -y rápida- nuestro OpenIndiana.
Referencias
Si queremos hacer que nuestro OpenIndiana/Solaris utilice nuestro puerto serie como salida en vez de la tarjeta gráfica, por ejemplo en servidores, simplemente deberemos incluir la opción "console=ttya" en nuestra entrada "kernel" del archivo <menu.lst> de GRUB.
Debemos recordar que si tenemos ZFS como sistema de archivos, el archivo <menu.lst> se encontrará en <POOL/boot/grub>, por ejemplo, en mi caso el nombre del POOL es "rpool".
root@h100:/rpool/boot/grub# zpool statusEditaremos el archivo "menu.lst", e incluiremos la opción "console=ttya" teniendo en cuenta que debemos incluir un "," para separar la opción.
pool: rpool
state: ONLINE
scan: resilvered 4,10G in 0h1m with 0 errors on Sat Apr 16 13:30:56 2011
config:
NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c2d0s0 ONLINE 0 0 0
c3d1s0 ONLINE 0 0 0
errors: No known data errors
root@h100:/# vi /rpool/boot/grub/menu.lstAhora, la próxima vez que iniciemos nuestro OpenIndiana, la salida se producirá por nuestro puerto de serie 1 -ttya- y, por lo tanto, podremos acceder con nuestro programa favorito, por ejemplo <minicom>
title ASEngine Enterprise Platform
findroot (pool_rpool,0,a)
bootfs rpool/ROOT/solaris-1
kernel$ /platform/i86pc/kernel/$ISADIR/unix -B $ZFS-BOOTFS,console=ttya
module$ /platform/i86pc/$ISADIR/boot_archive
:wq
Conclusión
No ha sido difícil activar nuestra salida de consola por puerto serie, y ya podemos gestionar de forma remota -y rápida- nuestro OpenIndiana.
Referencias
lunes, 11 de abril de 2011
Qué es Crossbow y Cómo Utilizarlo en Solaris/OpenIndiana - Parte 1
Introducción
Una de las tecnologías que OpenSolaris nos dejó fue la "Virtualización de la Infraestructura de Red". Actualmente tanto OpenIndiana como Solaris 11 incorporan esta tecnología, que, aunque un poco desconocida, realmente muy potente.
En esta serie de artículos vamos a ver cómo podemos utilizar esta tecnología en nuestras máquinas de producción.
¿Virtualizar Infraestructura de Red?
Si, es correcto. Crossbow nos permite virtualizar nuestra infraestructura -switches, routers, tarjetas- por lo tanto, nos permite diseñar una "infraestructura virtual" completa.
Sin embargo, vamos a ver un enfoque más "práctico" a la virtualización de la infraestructura de Red, y, sobre todo, cómo utilizarlo en nuestro equipos de producción.
El uso de Solaris Zones es una ventaja importante, pero, si queremos "mover" nuestras máquinas virtuales de un host a otro, tenemos algunos problemas -por ejemplo el nombre de la tarjeta de red-. Utilizando una tarjeta virtual, eliminaremos este problema, y, además podremos añadir soporte IPFilter a nuestra zona ya que podemos poner <ip-type=exclusive> en vez de <shared>
Por último, crossbow incluye una nueva forma de manejar QoS, y sí, esta vez, es sencilla y muy eficiente.
El comando <dladm>
La gestión de la virtualización de red se encuentra en el comando </usr/sbin/dladm> que, nos proporciona los métodos para: crear, modificar y borrar elementos virtuales -vnic, etherstub, bridge, vlan-
Si ejecutamos el comando -teniendo en cuenta que debemos disponer de permisos suficientes- sin argumentos, se nos muestra las diferentes opciones
El primer paso es conocer nuestros interfaces físicos, y para ello utilizaremos el argumento <show-phys>
Ahora debemos conocer "cómo están conectados" nuestros enlaces, para ello, utilizaremos la opción <show-link>
Crossbow nos permite virtualizar los interfaces de red físicos, y asignarlos a una zona de Solaris como <ip-type=exclusive> de esta forma, podemos utilizar IPFilter de forma separada, y, también "mover" nuestra zona a otro host sin importarnos si la tarjeta de red es o no la misma.
Por defecto utilizaremos el nombre <vnicN> para definir nuestros interfaces virtuales, esto es debido a que en OpenSolaris existía un problema con la nomenclatura, y os recomiendo no cambiar a nombres "más complicados".
Para la creación de un interface virtual debemos seleccionar sobre que "interface físico" queremos montarlo, en nuestro caso lo haremos sobre <e1000g0> y lo llamaremos <vnic1>
Ver Interfaces Virtuales
Para ver que interfaces virtuales tenemos declarados en nuestro host, utilizaremos la opción <show-vnic> y para ver su estado utilizaremos <show-link>
Manejo de Interface Virtuales
La ventaja de uso de interfaces de red virtuales, radica en que se utilizan de igual forma que un interface físico, por lo tanto, podemos utilizar el comando <ifconfig> para asignarle una IP y "levantarlo", por ejemplo:
Para eliminar un interface de red virtual, deberemos utilizar la opción <delete-vnic> del comando <dladm>, por ejemplo,
Una de las opciones más interesantes que nos proporciona esta tecnología es tratar a los interfaces virtuales como "físicos" y, por lo tanto, podemos modificar los parámetros del enlace de forma similar.
Las propiedades de un enlace las obtendremos con la opción <show-linkprop> y el nombre del enlace, en nuestro caso <vnic1>.
El valor de PERM nos indicará si es posible modificarlo (rw), o por el contrario si es de sólo lectura (r-). Aunque hay muchas propiedades, hoy nos centraremos en dos: maxbw y priority.
Si la propiedad es de lectura y escritura (rw) entonces, podemos cambiar su valor utilizando la opción <set-linkprop -p OPCION=VALOR>, por ejemplo, vamos a modificar la velocidad de nuestro enlace <vnic1> y vamos a ponerlo a 10Mb en vez de 1000Mb:
Crear una Zona con <ip-type=exclusive>
Como es costumbre en el blog, después de un poco de teoría, viene la práctica "real". Esta vez vamos a crear una zona de Solaris/OpenIndiana y vamos a asignar la IP como "exclusiva" para poder incluir IPFilter y poder gestionar el ancho de banda que nos consume nuestra zona.
Para ello, primero crearemos un sistema ZFS donde alojaremos la zona -zonepath- llamado </export/zones> (En mi caso el zpool es "rpool1"). Si ya disponéis de un espacio ZFS para zonas, no es necesario crear uno nuevo.
Encender la zona
Para los que no tenemos un teclado en_US el carácter de escape de <zlogin> es un poco complicado, así que pongo un carácter más sencillo "#." de ahí la opción -e\#
Aquí os dejo la pantalla de resumen del asistente de configuración de la zona, y como podéis ver, para él (Solaris/OpenIndiana), el uso de una interface virtual no representa ningún cambio, la trata "igual"
Una vez finalizado el proceso de configuración de la zona, podemos realizar la Instalación de IPFilter en la Zona con un simple
En esta primera parte hemos visto cómo es muy sencillo crear interfaces virtuales y, como se comportan "igual" que los físicos. Además, al poder modificar las propiedades de una forma "sencilla", tenemos un control más exhaustivo.
En las siguientes entregas veremos un poco más sobre propiedades, flujos y, sobre todo, cómo aplicarlo a nuestros entornos de producción, pero hasta entonces ... a esperar.
Como siempre, cualquier duda o sugerencia es bienvenida,
Referencias
Una de las tecnologías que OpenSolaris nos dejó fue la "Virtualización de la Infraestructura de Red". Actualmente tanto OpenIndiana como Solaris 11 incorporan esta tecnología, que, aunque un poco desconocida, realmente muy potente.
En esta serie de artículos vamos a ver cómo podemos utilizar esta tecnología en nuestras máquinas de producción.
¿Virtualizar Infraestructura de Red?
Si, es correcto. Crossbow nos permite virtualizar nuestra infraestructura -switches, routers, tarjetas- por lo tanto, nos permite diseñar una "infraestructura virtual" completa.
Sin embargo, vamos a ver un enfoque más "práctico" a la virtualización de la infraestructura de Red, y, sobre todo, cómo utilizarlo en nuestro equipos de producción.
El uso de Solaris Zones es una ventaja importante, pero, si queremos "mover" nuestras máquinas virtuales de un host a otro, tenemos algunos problemas -por ejemplo el nombre de la tarjeta de red-. Utilizando una tarjeta virtual, eliminaremos este problema, y, además podremos añadir soporte IPFilter a nuestra zona ya que podemos poner <ip-type=exclusive> en vez de <shared>
Por último, crossbow incluye una nueva forma de manejar QoS, y sí, esta vez, es sencilla y muy eficiente.
El comando <dladm>
La gestión de la virtualización de red se encuentra en el comando </usr/sbin/dladm> que, nos proporciona los métodos para: crear, modificar y borrar elementos virtuales -vnic, etherstub, bridge, vlan-
Si ejecutamos el comando -teniendo en cuenta que debemos disponer de permisos suficientes- sin argumentos, se nos muestra las diferentes opciones
itily@openzooey:~$ pfexec /sbin/dladmVer los interfaces "físicos"
usage: dladm <subcommand> <args> ...
rename-link <oldlink> <newlink>
show-link [-pP] [-o <field>,..] [-s [-i <interval>]] [<link>]
create-aggr [-t] [-P <policy>] [-L <mode>] [-T <time>] [-u <address>]
-l <link> [-l <link>...] <link>
delete-aggr [-t] <link>
add-aggr [-t] -l <link> [-l <link>...] <link>
remove-aggr [-t] -l <link> [-l <link>...] <link>
modify-aggr [-t] [-P <policy>] [-L <mode>] [-T <time>] [-u <address>]
<link>
show-aggr [-pPLx] [-o <field>,..] [-s [-i <interval>]] [<link>]
scan-wifi [-p] [-o <field>,...] [<link>]
connect-wifi [-e <essid>] [-i <bssid>] [-k <key>,...] [-s wep|wpa]
[-a open|shared] [-b bss|ibss] [-c] [-m a|b|g] [-T <time>]
[<link>]
disconnect-wifi [-a] [<link>]
show-wifi [-p] [-o <field>,...] [<link>]
set-linkprop [-t] -p <prop>=<value>[,...] <name>
reset-linkprop [-t] [-p <prop>,...] <name>
show-linkprop [-cP] [-o <field>,...] [-p <prop>,...] <name>
show-ether [-px][-o <field>,...] <link>
create-secobj [-t] [-f <file>] -c <class> <secobj>
delete-secobj [-t] <secobj>[,...]
show-secobj [-pP] [-o <field>,...] [<secobj>,...]
create-vlan [-ft] -l <link> -v <vid> [link]
delete-vlan [-t] <link>
show-vlan [-pP] [-o <field>,..] [<link>]
create-iptun [-t] -T <type> [-a {local|remote}=<addr>,...] <link>]
delete-iptun [-t] <link>
modify-iptun [-t] -a {local|remote}=<addr>,... <link>
show-iptun [-pP] [-o <field>,..] [<link>]
delete-phys <link>
show-phys [-pP] [-o <field>,..] [-H] [<link>]
create-vnic [-t] -l <link> [-m <value> | auto |
{factory [-n <slot-id>]} | {random [-r <prefix>]} |
{vrrp -V <vrid> -A {inet | inet6}} [-v <vid> [-f]]
[-p <prop>=<value>[,...]] <vnic-link>
delete-vnic [-t] <vnic-link>
show-vnic [-pP] [-l <link>] [-s [-i <interval>]] [<link>]
create-part [-t] [-f] -l <link> [-P <pkey>]
[-R <root-dir>] <part-link>
delete-part [-t] [-R <root-dir>] <part-link>
show-part [-pP] [-o <field>,...][-l <linkover>]
[<part-link>]
show-ib [-p] [-o <field>,...] [<link>]
create-etherstub [-t] <link>
delete-etherstub [-t] <link>
show-etherstub [-t] [<link>]
create-bridge [-R <root-dir>] [-P <protect>] [-p <priority>]
[-m <max-age>] [-h <hello-time>] [-d <forward-delay>]
[-f <force-protocol>] [-l <link>]... <bridge>
modify-bridge [-R <root-dir>] [-P <protect>] [-p <priority>]
[-m <max-age>] [-h <hello-time>] [-d <forward-delay>]
[-f <force-protocol>] <bridge>
delete-bridge [-R <root-dir>] <bridge>
add-bridge [-R <root-dir>] -l <link> [-l <link>]... <bridge>
remove-bridge [-R <root-dir>] -l <link> [-l <link>]... <bridge>
show-bridge [-p] [-o <field>,...] [-s [-i <interval>]] [<bridge>]
show-bridge -l [-p] [-o <field>,...] [-s [-i <interval>]] <bridge>
show-bridge -f [-p] [-o <field>,...] [-s [-i <interval>]] <bridge>
show-bridge -t [-p] [-o <field>,...] [-s [-i <interval>]] <bridge>
show-usage [-a] [-d | -F <format>] [-s <DD/MM/YYYY,HH:MM:SS>]
[-e <DD/MM/YYYY,HH:MM:SS>] -f <logfile> [<link>]
El primer paso es conocer nuestros interfaces físicos, y para ello utilizaremos el argumento <show-phys>
itily@openzooey:~$ pfexec /usr/sbin/dladm show-physVer los estado de los "enlaces"
LINK MEDIA STATE SPEED DUPLEX DEVICE
e1000g0 Ethernet up 1000 full e1000g0
e1000g1 Ethernet unknown 0 half e1000g1
Ahora debemos conocer "cómo están conectados" nuestros enlaces, para ello, utilizaremos la opción <show-link>
itily@openzooey:~$ pfexec dladm show-linkVirtualizar Interfaces de Red
LINK CLASS MTU STATE BRIDGE OVER
e1000g0 phys 1500 up -- --
e1000g1 phys 1500 unknown -- --
Crossbow nos permite virtualizar los interfaces de red físicos, y asignarlos a una zona de Solaris como <ip-type=exclusive> de esta forma, podemos utilizar IPFilter de forma separada, y, también "mover" nuestra zona a otro host sin importarnos si la tarjeta de red es o no la misma.
Por defecto utilizaremos el nombre <vnicN> para definir nuestros interfaces virtuales, esto es debido a que en OpenSolaris existía un problema con la nomenclatura, y os recomiendo no cambiar a nombres "más complicados".
Para la creación de un interface virtual debemos seleccionar sobre que "interface físico" queremos montarlo, en nuestro caso lo haremos sobre <e1000g0> y lo llamaremos <vnic1>
itily@openzooey:~$ pfexec /sbin/dladm create-vnic -l e1000g0 vnic1
Ver Interfaces Virtuales
Para ver que interfaces virtuales tenemos declarados en nuestro host, utilizaremos la opción <show-vnic> y para ver su estado utilizaremos <show-link>
itily@openzooey:~$ pfexec /sbin/dladm show-vnicComo vemos, <vnic1> está "asociado" al link físico <e1000g0> y se encuentra como "up"
LINK OVER SPEED MACADDRESS MACADDRTYPE VID
vnic1 e1000g0 1000 2:8:20:cd:ad:34 random 0
itily@openzooey:~$ pfexec dladm show-link
LINK CLASS MTU STATE BRIDGE OVER
e1000g0 phys 1500 up -- --
e1000g1 phys 1500 unknown -- --
vnic1 vnic 1500 up -- e1000g0
Manejo de Interface Virtuales
La ventaja de uso de interfaces de red virtuales, radica en que se utilizan de igual forma que un interface físico, por lo tanto, podemos utilizar el comando <ifconfig> para asignarle una IP y "levantarlo", por ejemplo:
itily@openzooey:~$ pfexec ifconfig vnic1 plumbY desconectarlo ...
itily@openzooey:~$ pfexec ifconfig vnic1 192.168.1.20/24 broadcast + up
itily@openzooey:~$ pfexec ifconfig vnic1
vnic1: flags=1000843mtu 1500 index 3
inet 192.168.1.20 netmask ffffff00 broadcast 192.168.1.255
ether 2:8:20:cd:ad:34
itily@openzooey:~$ pfexec ifconfig vnic1 unplumbEliminar un Interface Virtual
itily@openzooey:~$ pfexec ifconfig -a
lo0: flags=2001000849mtu 8232 index 1
inet 127.0.0.1 netmask ff000000
e1000g0: flags=1004843mtu 1500 index 2
inet 192.168.1.12 netmask ffffff00 broadcast 192.168.1.255
ether 8:0:27:86:70:32
lo0: flags=2002000849mtu 8252 index 1
inet6 ::1/128
Para eliminar un interface de red virtual, deberemos utilizar la opción <delete-vnic> del comando <dladm>, por ejemplo,
itily@openzooey:~$ pfexec dladm delete-vnic vnic1Ver las propiedades de un Enlace
itily@openzooey:~$ pfexec dladm show-vnic
Una de las opciones más interesantes que nos proporciona esta tecnología es tratar a los interfaces virtuales como "físicos" y, por lo tanto, podemos modificar los parámetros del enlace de forma similar.
Las propiedades de un enlace las obtendremos con la opción <show-linkprop> y el nombre del enlace, en nuestro caso <vnic1>.
El valor de PERM nos indicará si es posible modificarlo (rw), o por el contrario si es de sólo lectura (r-). Aunque hay muchas propiedades, hoy nos centraremos en dos: maxbw y priority.
itily@openzooey:~$ pfexec dladm show-linkprop vnic1Modificar una propiedad de un enlace
LINK PROPERTY PERM VALUE DEFAULT POSSIBLE
vnic1 autopush rw -- -- --
vnic1 zone rw -- -- --
vnic1 state r- unknown up up,down
vnic1 mtu rw 1500 1500 1500
vnic1 maxbw rw -- -- --
vnic1 cpus rw -- -- --
vnic1 cpus-effective r- 0 -- --
vnic1 pool rw -- -- --
vnic1 pool-effective r- -- -- --
vnic1 priority rw high high low,
medium,
high
vnic1 tagmode rw vlanonly vlanonly normal,vlanonly
vnic1 protection rw -- -- mac-nospoof,
restricted,
ip-nospoof,
dhcp-nospoof
vnic1 allowed-ips rw -- -- --
vnic1 allowed-dhcp-cids rw -- -- --
vnic1 rxrings rw -- -- --
vnic1 rxrings-effective r- -- -- --
vnic1 txrings rw -- -- --
vnic1 txrings-effective r- -- -- --
vnic1 txrings-available r- 0 -- --
vnic1 rxrings-available r- 0 -- --
vnic1 rxhwclnt-available r- 0 -- --
vnic1 txhwclnt-available r- 0 -- --
Si la propiedad es de lectura y escritura (rw) entonces, podemos cambiar su valor utilizando la opción <set-linkprop -p OPCION=VALOR>, por ejemplo, vamos a modificar la velocidad de nuestro enlace <vnic1> y vamos a ponerlo a 10Mb en vez de 1000Mb:
itily@openzooey:~$ pfexec dladm set-linkprop -p maxbw=10m vnic1Y ahora la prioridad
itily@openzooey:~$ pfexec dladm show-vnic
LINK OVER SPEED MACADDRESS MACADDRTYPE VID
vnic1 e1000g0 10 2:8:20:74:9a:f3 random 0
itily@openzooey:~$ pfexec dladm set-linkprop -p priority=low vnic1
Crear una Zona con <ip-type=exclusive>
Como es costumbre en el blog, después de un poco de teoría, viene la práctica "real". Esta vez vamos a crear una zona de Solaris/OpenIndiana y vamos a asignar la IP como "exclusiva" para poder incluir IPFilter y poder gestionar el ancho de banda que nos consume nuestra zona.
Para ello, primero crearemos un sistema ZFS donde alojaremos la zona -zonepath- llamado </export/zones> (En mi caso el zpool es "rpool1"). Si ya disponéis de un espacio ZFS para zonas, no es necesario crear uno nuevo.
itily@openzooey:~$ pfexec zfs create rpool1/export/zonesAhora ya podemos crear la zona, utilizaremos como nombre <pkg-srv> -espero que intuyáis para que la utilizaremos-
itily@openzooey:~$ pfexec zonecfg -z pkg-srv
pkg-srv: No such zone configured
Use 'create' to begin configuring a new zone.
zonecfg:pkg-srv> create
zonecfg:pkg-srv> set zonepath=/export/zones/pkg-srv
zonecfg:pkg-srv> set ip-type=exclusive
zonecfg:pkg-srv> set scheduling-class=FSS
zonecfg:pkg-srv> add net
zonecfg:pkg-srv:net> set physical=vnic1
zonecfg:pkg-srv:net> end
zonecfg:pkg-srv> verify
zonecfg:pkg-srv> commit
zonecfg:pkg-srv> exit
itily@openzooey:~$ pfexec zoneadm -z pkg-srv install
Encender la zona
itily@openzooey:~$ pfexec /usr/sbin/zoneadm -z pkg-srv bootConectarse a la Consola
Para los que no tenemos un teclado en_US el carácter de escape de <zlogin> es un poco complicado, así que pongo un carácter más sencillo "#." de ahí la opción -e\#
itily@openzooey:~$ pfexec zlogin -C -e\# pkg-srvPantalla de Resumen de Red
[Connected to zone 'pkg-srv' console]
Aquí os dejo la pantalla de resumen del asistente de configuración de la zona, y como podéis ver, para él (Solaris/OpenIndiana), el uso de una interface virtual no representa ningún cambio, la trata "igual"
─ Confirm Information for vnic1 ──────────────────Instalar IPFilter
> Confirm the following information. If it is correct, press F2; to change any information, press F4.
Host name: pkg-srv
IP address: 192.168.1.20
System part of a subnet: Yes
Netmask: 255.255.255.0
Enable IPv6: No
Default Route: Specify one
Router IP Address: 192.168.1.1
────────────────────────────────────────────────
Esc-2_Continue Esc-4_Change Esc-6_Help
Una vez finalizado el proceso de configuración de la zona, podemos realizar la Instalación de IPFilter en la Zona con un simple
root@pkg-srv:~# pkg install ipfilterConclusiones
En esta primera parte hemos visto cómo es muy sencillo crear interfaces virtuales y, como se comportan "igual" que los físicos. Además, al poder modificar las propiedades de una forma "sencilla", tenemos un control más exhaustivo.
En las siguientes entregas veremos un poco más sobre propiedades, flujos y, sobre todo, cómo aplicarlo a nuestros entornos de producción, pero hasta entonces ... a esperar.
Como siempre, cualquier duda o sugerencia es bienvenida,
Referencias
viernes, 1 de abril de 2011
Instalar PostgreSQL 9.0.3 64bit en OpenIndiana con soporte UUID
Introducción
Continuando con algunas de las características de los módulos "contrib" que tenemos en PostgreSQL, y de algunas dependencias de OpenBravo, vamos a ver cómo podemos Instalar PostgreSQL 9.0.3 en 64bits sobre OpenIndiana con soporte para UUID.
Requisitos Previos
Antes de poder continuar, es necesario Instalar OSSP-UUID en OpenIndiana, en nuestro caso en 64bits -como vimos anteriormente-
Además, os recomiendo -si no lo sabéis ya- leer los post sobre Instalar PostgreSQL 9.x en OpenIndiana y Requisitos de Instalación de PostgreSQL 9.x en OpenIndiana
Instalación desde el Binario
Para aquellos que no tengáis tiempo -o ganas- os dejo una versión de PostgreSQL 9.0.3 64bits con soporte para OSSP UUID que simplemente hay que descargar e Instalar el módulo en PostgreSQL -ver más abajo-
Compilación de PostgreSQL
La compilación de PostgreSQL no supone mayor problema que añadir en el script de configuración la opción <--with-ossp-uuid> para que nos permita utilizar nuestro creador de UUID.
Sin embargo, tendremos que exportar nuestro <LD_LIBRARY_PATH> para que el script <configure> pueda "testear" correctamente el acceso a la biblioteca "uuid" que hemos compilado.
Una vez hecho esto, la compilación es, igual que siempre. Vamos a verlo:
Como siempre, ejecutaremos los comando <make> y <pfexec make install>
Compilación del Módulo UUID
Para compilar el módulo de UUID, será necesario tener instalado PostgreSQL y situarse en el directorio <contrib> del código fuente de PostgreSQL.
Además, tener en cuenta que debemos compilarlo con GNU Make y no con SVR4 Make. Para comprobar "cual tenéis en el path" simplemente se puede utilizar <which make> y ver cuál es, o, simplemente utilizamos <gmake>
Por último, sólo nos queda crear las funciones en nuestra DB de PostgreSQL, para ello, utilizaremos el script <uuid-ossp.sql> que encontraremos en $POSTGRES_HOME/share/contrib
Para poder desinstalarlo, simplemente utilizaremos el script <uninstall_uuid-ossp.sql> de la siguiente forma:
Si no hemos podido instalar correctamente el módulo dentro de PostgreSQL, se nos mostrará el siguiente error al tratar de usar la función:
Parece más complicado de lo que parece, pero al final, resulta bastante sencillo. Además, debemos recordar que a partir de ahora, tenemos que incluir OSSP-UUID como dependencia de nuestro PostgreSQL
Referencias
Continuando con algunas de las características de los módulos "contrib" que tenemos en PostgreSQL, y de algunas dependencias de OpenBravo, vamos a ver cómo podemos Instalar PostgreSQL 9.0.3 en 64bits sobre OpenIndiana con soporte para UUID.
Requisitos Previos
Antes de poder continuar, es necesario Instalar OSSP-UUID en OpenIndiana, en nuestro caso en 64bits -como vimos anteriormente-
Además, os recomiendo -si no lo sabéis ya- leer los post sobre Instalar PostgreSQL 9.x en OpenIndiana y Requisitos de Instalación de PostgreSQL 9.x en OpenIndiana
Instalación desde el Binario
Para aquellos que no tengáis tiempo -o ganas- os dejo una versión de PostgreSQL 9.0.3 64bits con soporte para OSSP UUID que simplemente hay que descargar e Instalar el módulo en PostgreSQL -ver más abajo-
root@openzooey:/# cd /
root@openzooey:/# wget http://blog.sfchildren.com/blogger/postgres/9.0.3/openindiana/postgresql-9.0.3-x86-64bit-openindiana-with-uuid.tar.gz
root@openzooey:/# gzip -dc postgresql-9.0.3-x86-64bit-openindiana-with-uuid.tar.gz | tar xpf -
root@openzooey:/# chown -R postgres:postgres /u01
root@openzooey:/# rm postgresql-9.0.3-x86-64bit-openindiana-with-uuid.tar.gz
Compilación de PostgreSQL
La compilación de PostgreSQL no supone mayor problema que añadir en el script de configuración la opción <--with-ossp-uuid> para que nos permita utilizar nuestro creador de UUID.
Sin embargo, tendremos que exportar nuestro <LD_LIBRARY_PATH> para que el script <configure> pueda "testear" correctamente el acceso a la biblioteca "uuid" que hemos compilado.
Una vez hecho esto, la compilación es, igual que siempre. Vamos a verlo:
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/ossp-uuid/lib/64Compilación e Instalación
$ 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 -R/opt/ossp-uuid/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:/opt/ossp-uuid/include \
--with-libs=/lib/64:/usr/lib/64:/usr/sfw/lib/64:/opt/ossp-uuid/lib/64 \
--with-ossp-uuid
Como siempre, ejecutaremos los comando <make> y <pfexec make install>
$ make
$ pfexec make install
NOTA: El proceso de instalación completo se encuentra detallado en Cómo Instalar PostgreSQL 9 64bits en OpenIndiana con SMF
Compilación del Módulo UUID
Para compilar el módulo de UUID, será necesario tener instalado PostgreSQL y situarse en el directorio <contrib> del código fuente de PostgreSQL.
Además, tener en cuenta que debemos compilarlo con GNU Make y no con SVR4 Make. Para comprobar "cual tenéis en el path" simplemente se puede utilizar <which make> y ver cuál es, o, simplemente utilizamos <gmake>
itily@openzooey:~/postgresql-9.0.3$ cd contribEsto nos creará una nueva biblioteca de enlace dinámico <uuid-ossp.so> en nuestro directorio <lib/64> de PostgreSQL:
itily@openzooey:~/postgresql-9.0.3/contrib$ cd uuid-ossp
itily@openzooey:~/postgresql-9.0.3/contrib/uuid-ossp$ gmake
itily@openzooey:~/postgresql-9.0.3/contrib/uuid-ossp$ pfexec gmake install
itily@openzooey:~$ cd /u01/app/postgres/9.0/db/lib/64Instalación en PostgreSQL
itily@openzooey:/u01/app/postgres/9.0/db/lib/64$ ls -ltrh uuid-ossp.so
-rwxr-xr-x 1 root root 16K mar 30 21:09 uuid-ossp.so
itily@openzooey:/u01/app/postgres/9.0/db/lib/64$ file uuid-ossp.so
uuid-ossp.so: ELF 64-bit LSB dynamic lib AMD64 Version 1, dynamically linked, not stripped
itily@openzooey:/u01/app/postgres/9.0/db/lib/64$ ldd uuid-ossp.so
libuuid.so.16 => /opt/ossp-uuid/lib/64/libuuid.so.16
libc.so.1 => /usr/lib/64/libc.so.1
libm.so.2 => /lib/64/libm.so.2
Por último, sólo nos queda crear las funciones en nuestra DB de PostgreSQL, para ello, utilizaremos el script <uuid-ossp.sql> que encontraremos en $POSTGRES_HOME/share/contrib
itily@openzooey:/$ cd /u01/app/postgres/9.0/db/share/contribDeberemos añadirlo a las DB que queramos, utilizando el comando <psql> y un usuario con permisos para "crear languages"
itily@openzooey:/u01/app/postgres/9.0/db/share/contrib$ ls -ltr
total 7
-rw-r--r-- 1 root mar 30 21:09 uninstall_uuid-ossp.sql
-rw-r--r-- 1 root mar 30 21:09 uuid-ossp.sql
postgres@openzooey:~$ /u01/app/postgres/9.0/db/bin/64/psql -U postgres -d testdb -f uuid-ossp.sqlDesinstalación del módulo
SET
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
CREATE FUNCTION
postgres@openzooey:~$ /u01/app/postgres/9.0/db/bin/64/psql -U test -d testdb
psql (9.0.3)
Type "help" for help.
testdb=> SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org');
uuid_generate_v3
--------------------------------------
cf16fe52-3365-3a1f-8572-288d8d2aaa46
(1 row)
testdb=> SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.havoctec.com/');
uuid_generate_v3
--------------------------------------
5f2f3ed0-ce36-3968-b065-4bbaf6684d22
(1 row)
testdb=> \q
Para poder desinstalarlo, simplemente utilizaremos el script <uninstall_uuid-ossp.sql> de la siguiente forma:
postgres@openzooey:~$ /u01/app/postgres/9.0/db/bin/64/psql -U postgres -d testdb -f uninstall_uuid-ossp.sqlAlgunos Errores
SET
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
DROP FUNCTION
Si no hemos podido instalar correctamente el módulo dentro de PostgreSQL, se nos mostrará el siguiente error al tratar de usar la función:
testdb=> SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org');Si intentamos crear las funciones con un usuario que no tiene permisos suficientes, tendremos el siguiente error:
ERROR: function uuid_ns_url() does not exist
LINE 1: SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresq...
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
postgres@openzooey:~$ /u01/app/postgres/9.0/db/bin/64/psql -U testuser -d testdb -f uuid-ossp.sqlConclusiones
SET
psql:uuid-ossp.sql:9: ERROR: permission denied for language c
psql:uuid-ossp.sql:14: ERROR: permission denied for language c
psql:uuid-ossp.sql:19: ERROR: permission denied for language c
psql:uuid-ossp.sql:24: ERROR: permission denied for language c
psql:uuid-ossp.sql:29: ERROR: permission denied for language c
psql:uuid-ossp.sql:34: ERROR: permission denied for language c
psql:uuid-ossp.sql:39: ERROR: permission denied for language c
psql:uuid-ossp.sql:44: ERROR: permission denied for language c
psql:uuid-ossp.sql:49: ERROR: permission denied for language c
psql:uuid-ossp.sql:54: ERROR: permission denied for language c
Parece más complicado de lo que parece, pero al final, resulta bastante sencillo. Además, debemos recordar que a partir de ahora, tenemos que incluir OSSP-UUID como dependencia de nuestro PostgreSQL
Referencias
Suscribirse a:
Entradas (Atom)