Instalación rápida de PostgreSQL para Windows

Los siguientes son los pasos seguidos para instalar PostgreSQL bajo Windows en una unidad US

1. Descargar y descomprimir el archivo postgresql-8.3.1-1-binaries-no-installer.zip.

2. Mover el directorio pgsql a la unidad USB, g: para este ejemplo.

3. Crear el directorio g:pgsqldata.

4. Crear el repositorio de datos inicial.

dos> g:pgsqlbininitdb -D g:pgsqldata

5. Editar el archivo de configuración de acceso para permitir las conexiones externas.

dos> notepad g:pgsqldatapg_hba.conf

# Allow any user on the local system to connect to any database under
# any database user name using Unix-domain sockets (the default for local
# connections).
#
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
local   all         all                               trust

# The same using local loopback TCP/IP connections.
#
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
host    all         all         127.0.0.1/32          trust

host    all         all         0.0.0.0/0             md5

6. Editar el archivo de configuración de la base de datos para permitir conexiones a través de TCP/IP y SSL.

dos> notepad g:pgsqldatapostgresql.conf

listen_addresses = '*'
authentication_timeout = 1min		# 1s-600s
ssl = on				# (change requires restart)
ssl_ciphers = 'ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH'	# allowed SSL ciphers

7. Crear la llave primaria del servidor (server.key) y el certificado SSL (server.crt). Para esto es necesario contar con la distribución de OpenSSL y su directorio g:OpenSSLbin (o donde haya sido instalado) incluído en la variable de ambiente PATH. Tengase en cuenta que este paso es opcional y sólo deberá ejecutarse si se desea establecer el soporte para conexiones SSL con el motor de base de datos (ver parámetro ssl en el paso #6).

dos> cd g:pgsqldata
dos> openssl req -new -text -out server.req
PEM pass phrase: ***CLAVESECRETA***
Country Name (2 letter code) [AU]: CO
State or Province Name (full name) [Some-State]: Caldas
Locality Name (eg, city) []: Manizales
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Personal Development
Organizational Unit Name (eg, section) []: Sistemas
Common Name (eg, YOUR name) []: jorgeivan
Email Address []: jimezam@gmail.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Ténganse en cuenta las siguientes consideraciones para especificar los datos mencionados anteriormente.

  1. La frase PEM (***CLAVESECRETA***) es una contraseña de seguridad del certificado, elíjala de acuerdo a sus criterios de seguridad.
  2. Los valores de los campos Country Name, State Name, Locality Name, Organization Name, Organizational Unit Name e Email Address son informativos y deben personalizarse según su propio contexto.
  3. El campo Common Name debe corresponder con el hostname de la máquina que tendrá el certificado (importante).
  4. El Challenge Password y el Optional Company Name pueden obviarse (dejarse en blanco).

La llave generada se encuentra protegida con contraseña, para removerla y permitir el inicio automático del motor de base de datos junto con el sistema operativo se debe realizar la acción siguiente.

dos> openssl rsa -in privkey.pem -out server.key

PEM pass phrase: ***CLAVESECRETA***

dos> del privkey.pem

Para firmar (self-signed) el certificado recién creado ejecutar la acción siguiente.

openssl req -x509 -in server.req -text -key server.key -out server.crt

8. Iniciar el motor de base de datos.

dos> postgres -i -D g:pgsqldata

Si se desea redireccionar los mensajes de la base de datos a un archivo de log se deben agregar las siguientes modificaciones.

dos> postgres -i -D g:pgsqldata >logfile 2>&1

Si se desea enviar el proceso del motor de base de datos a background se debe anteponer el comando start de Windows.

dos> start postgres -i -D g:pgsqldata >logfile 2>&1

9. Modificar la contraseña de acceso del usuario de administración del motor de base de datos.

dos> psql -h 127.0.0.1 -c "ALTER USER USUARIO WITH PASSWORD 'CONTRASEÑA'" -d template1

Téngase en cuenta que debe reemplazarse a USUARIO con el nombre de usuario bajo el cual se ejecuta la base de datos, el mismo con el que se ejecutó initdb y postgres, así como CONTRASEÑA con la contraseña escogida para ese usuario.

10. Crear una base de datos.

dos> createdb.exe base_de_datos

11. Prueba de conexión a la base de datos.

dos> psql -W -U USUARIO base_de_datos

Enlaces de interés:

Aplicación SimpleAccesoDatosWs 0.1

El día de hoy desarrollé una aplicación extremadamente simple para obtener de manera rápida y fácil información de ciertas tablas del sistema de información de un cliente. La idea era hacer una aplicación muy simple pero flexible que permitiera incorporar nuevas consultas con relativa facilidad. El objetivo general era evitar la solicitud de permitir la conexión directa al motor de base de datos desde las oficinas del cliente hasta el servidor de producción para obtener la información y actualizar sus bases de datos internas. Está desarrollada en PHP utilizando la librería NuSOAP.

En el servidor donde se encuentra el servicio web se configuran cada uno de los servicios (orígenes de datos), estos se relacionan con una consulta SQL y con unas etiquetas que se reemplazarán dinámicamente según la información que se suministre durante el llamado.

El cliente para consumir el servicio debe especificar el URL del servicio web, el nombre del servicio solicitado y opcionalmente los parámetros a enviarse para personalizar la ejecución de la consulta SQL en la base de datos. El resultado obtenido del servidor es almacenado en el cliente como un archivo CSV. El cliente accede al servicio web a través de un script de línea de comando (CLI).

Para restringir el acceso al servicio web, el servidor puede limitar los rangos de direcciones IP desde los cuales es posible acceder a él.

Como mencioné, la aplicación es muy sencilla pero puede ser de utilidad para dar una solución rápida y simple a una situación similar o para basarse en ella y crear una solución mas elaborada y elegante.

Para mas información acerca del uso de la aplicación por favor consultar el Manual de usuario.

Enlace:

Aplicación UpTimeCheck 0.1

UpTimeCheck es una aplicación muy simple desarrollada en PHP para verificar y registrar que diferentes sitios web se encuentren en línea.

Esta aplicación corre como un script de CLI (command line interface) y puede ejecutarse por demanda o a través de un proceso cron como es más conveniente. En la configuración pueden especificarse los sitios a revisar sin ningún límite o restricción respecto a su cantidad y algunos parámetros adicionales para personalizar su funcionamiento.

Para más información acerca de la aplicación por favor consultar el archivo README de la misma.

Como para todo en la vida, se reciben sugerencias y reportes de problemas.

Enlace: uptime_0.1.zip

Acceso a MSSQL Server desde PHP en un servidor Linux

El día de hoy realicé la actualización del servidor de desarrollo (OpenSuse 10.2) para soportar las conexiones a un servidor de bases de datos MS SQL Server 2005. El servidor de bases de datos se encuentra en la red privada (192.168.1.5). El servidor de desarrollo tiene dos interfaces, una de ellas es privada también (192.168.1.3). La versión de PHP que se encuentra actualmente instalada es la 5.2.0.

Actualicé algunos paquetes que eran necesarios para instalar el software FreeTDS.

# rpm -i readline-devel-5.1-55.i586.rpm
# rpm -i  libxml2-devel-2.6.26-26.i586.rpm
# rpm -i  libapr1-devel-1.2.7-23.i586.rpm
# rpm -i  libapr-util1-devel-1.2.7-26.i586.rpm
# rpm -i  apache2-devel-2.2.3-20.i586.rpm

Otros paquetes que puedan llegar a necesitarse se pueden descargar de la siguiente dirección.

http://download.opensuse.org/distribution/10.2/repo/oss/suse/i586/.

Descargué y descomprimí la última versión de FreeTDS.

# wget ftp://ftp.ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-stable.tgz
# tar zxvf freetds-stable.tgz
# cd freetds-0.64

Se compila e instala en el directorio /usr/local/freetds-0.64 con soporte para la versión 8.0 del protocolo. Para consultar información adicional acerca del protocolo consulte la dirección siguiente: http://www.freetds.org/userguide/choosingtdsprotocol.htm.

# ./configure --prefix=/usr/local/freetds-0.64 --with-tdsver=8.0
# make
# make install

Creé un enlace dinámico desde /usr/local/freetds al directorio de instalación para facilitar el manejo de diferentes versiones en un futuro cercano cuando vaya a actualizar la librería.

# ln -s /usr/local/freetds-0.64 /usr/local/freetds

Edité el perfil general de los usuarios para añadir al final de este información de las variables de ambiente de FreeTDS .

# vi /etc/profile
###################################################
SYBASE=/usr/local/freetds
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$SYBASE/lib
export SYBASE LD_LIBRARY_PATH
###################################################

Descargué y descomprimí el código fuente de la versión de PHP instalada. Para descargar versiones históricas de PHP visite el siguiente enlace: http://www.php.net/releases/.

# wget http://museum.php.net/php5/php-5.2.0.tar.gz
# tar zxvf php-5.2.0.tar.gz
# cd php-5.2.0

Se crearon los scripts de compilación para realizar una instalación temporal en /root/tmp/php-5.2.0/installation y de allí obtener el módulo dinámico de soporte para MSSQL.

# SYBASE=/usr/local/freetds
# LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$SYBASE/lib

# export SYBASE LD_LIBRARY_PATH# ./configure --with-apxs2=/usr/sbin/apxs2 
--with-mssql=shared,$SYBASE 
--with-sybase=$SYBASE 
--with-libxml-dir=/usr/lib/ 
--prefix=/root/tmp/php-5.2.0/installation
# make

# make install

Se copió el módulo recién generado a la ubicación donde PHP almacena sus propios módulos.

# cp ./installation/modules/mssql.so /usr/lib/php5/extensions/
# chmod -x  /usr/lib/php5/extensions/mssql.so

Se creó el archivo mssql.ini para activar el módulo.

# vi /etc/php5/conf.d/mssql.ini
extension=mssql.so

Se reinicio el servicio de Apache2 para refrescar los cambios recién hechos.

# rcapache2 restart

Al consultar la información resultante de phpinfo ya aparece la sección de MSSQL.

Para realizar una prueba fiable de conexión entre PHP y MSSQL puede utilizar el script adjunto a continuación editando adecuadamente la información de conexión al inicio de este.

Enlace: prueba_mssql.php

CatalogoArchivos 0.1

 

Screenshot CatalogArchivos
Este script genera el catálogo de una carpeta determinada por el usuario especificando el nombre de las carpetas y de los archivos contenidos incluyendo su extensión y última fecha de modificación. Los archivos se colorean según unas extensiones predefinidas.
La finalidad de este simple programita era la de utilizar el lenguaje Ruby del cual he estado leyendo un poco en esta semana de reflexión y evitar que un humano hiciera este trabajo manualmente en el lugar donde trabajo actualmente 😛
Para ejecutar esta aplicación es necesario tener instalado el runtime de Ruby, descargar el script de la sección de enlaces y ejecutar el siguiente comando:

$ ruby CatalogoArchivo.rb <ruta orígen> <ruta destino> [titulo]

Donde CatalogoArchivo.rb es el script descargado y ubicado en la carpeta actual, ruta origen es la carpeta raíz desde la cual se realizará el catálogo de los archivos, ruta destino es la ubicación del archivo HTML donde se guardará el resultado y título (opcional) es el mensaje que aparecerá en la parte superior del reporte.

Actualizado a la versión 0.1.1 que soluciona ciertos bugs encontrados recientemente: problemas con la portabilidad respecto a los separadores de path y problemas con la clase DateTime.

Enlaces:

position:fixed en IE

Nada funciona bien en IE. La gente inteligente debería utilizar Firefox únicamente. Desarrollar para IE es totalmente frustrante, no se adhiere completamente a los estándares y lo que se desarrolla para Firefox de CSS y JavaScript casi nunca le funciona. Hoy tuve un capítulo mas de esta historia.

Mi IE 7.0.5730.11 no entiende la instrucción position:fixed de CSS!

Tuve que implementar la solución expuesta por http://www.gunlaug.no/contents/wd_additions_15.html.

* html div#miDivId
{
top:expression(eval(document.compatMode &&
document.compatMode=='CSS1Compat') ?
documentElement.scrollTop + 5: document.body.scrollTop + 5);
}

Véalo en vivo y a todo color siguiendo este enlace.

Skype en el puerto 80

Este mes decidí volver a reencontrarme con la parte técnica que vive en algún lado de mi. Decidí entonces instalar de nuevo Apache/PHP/MySQL para empezar a desempolvar mis neuronas. En esta ocasión decidí que ya había instalado suficientes veces estas aplicaciones de manera individual y que esta vez tomaría ventaja de esos muchos paquetes que incluyen todo el software en unos cuantos siguientes. Para esto elegí el paquete XAMMP de ApacheFriends.

Extrañamente después de instalar todo el software sin ningún problema, Apache no quiso funcionar. Al parecer alguien estaba utilizando el puerto 80. 😮

Esa semana no tuve mucho tiempo para ver que sucedía hasta hoy que decidí no irme a dormir hasta que el servidor de páginas funcionara.

Hace un tiempo utilicé un programita que listaba los puertos activos junto con las aplicaciones que acceden a ellos. Descargué fport y encontré con sorpresa que quien utilizaba mi puerto 80 para servir páginas en blanco era Skype.

FPort v2.0 – TCP/IP Process to Port Mapper
Copyright 2000 by Foundstone, Inc.
http://www.foundstone.com
Pid Process Port Proto Path
2172 Skype -> 80 TCP C:Archivos de programaSkypePhoneSkype.exe
2172 Skype -> 443 TCP C:Archivos de programaSkypePhoneSkype.exe

Modifiqué entonces a Skype para que no utilizara mas estos puertos.

Herramientas > Opciones > Avanzada > Conexión > (desactivar) Usar puertos 80 y 443 como alternativas para las conexiones entrantes.

Es necesario reiniciar Skype para que los cambios surtan efecto.

Revisando algunas páginas que había abierto durante mi búsqueda en Google, encontré que Matthew Mullenweg en su sitio hacía referencia al mismo problema en su post Windows Tip y que lo había diagnosticado únicamente con herramientas de Windows XP y me mas pareció interesante.

Con el comando netstat -a -o -n se listan los puertos activos junto con el PID de la aplicación propietaria.

Con tasklist se lista la información de las aplicaciones activas. Con tasklist /FI “PID eq 2172” se filtra la información de la aplicación cuyo PID sea 2172.

Finalmente, es posible con taskkill /PID 2172 matar el proceso 2172 para ahora si, hacer funcionar correctamente a Apache.