Archivo

Posts Tagged ‘Debian’

Compilar PostgreSQL 9.1.3 con soporte para edb_debugger en Debian 6

Nota importante: Este artículo ha quedado obsoleto, ya que algunos pasos han cambiado. Existe una versión revisada del mismo aqui:

Compilar PostgreSQL 9.2.4 con soporte para pldebugger en Debian 6

Recientemente en el trabajo, he tenido que desarrollar un triger para PostgresSQL algo complejo, así que la posibilidad de depurarlo paso a paso era muy desaeable. Sin embargo al intentar acceder al depurador desde pgAdminIII, resulta que la mayoría de las versiones de PostgreSQL para linux no disponen de esta funcionalidad.

Así pues, la única solución es compilar el plugin edb-debugger desde las fuentes y añadirlo a PostgresSQL.

Sin embargo, para compilar este plugin es necesario disponer del código fuente del PostgreSQL, así que.. una vez metidos en faena… ¿porque que no aprovechar para instalar desde las fuentes la base de datos también?

Las versiones del software que se usaran en el articulo son las siguientes:

  •           Debian 6.1
  •           PostgreSQL 9.1.3
  •           ebd-debugger 0.9.3

Para lograr nuestro objetivo, y partiendo de una instalación limpia de Debian 6 NetInstall seguiremos los siguientes pasos:

1.- Instalar los paquetes build-esentials

Lo primero que debemos hacer es instalar los paquetes esenciales para poder compilar en nuestra distribución. En el caso de Debian 6, deberemos ejecutar la siguiente instrucción:

# apt-get install build-essential

Además debemos bajarnos algunas bibliotecas extra que necesitaremos para realizar la compilación de PostgreSQL con éxito:

# apt-get install libreadline5 libreadline5-dev zlib1g zlib1g-dev openssl libssl-dev

Las bibliotecas instaladas y su propósito son las siguientes:

Además necesitaremos el cliente CVS para poder descargar directamente del repositorio de edb-debugger los fuentes del plugin:

# apt-get install cvs

2.- Obtener el código fuente de PostgreSQL

El siguiente paso es obtener el código fuente de PostgreSQL, para lo cual usaremos el comando wget:

#  wget http://ftp.postgresql.org/pub/source/v9.1.3/postgresql-9.1.3.tar.gz

A continuación descomprimimos el fichero tar.gz que nos hemos descargado con la instrucción:

#  tar xvzf ./postgresql-9.1.3.tar.gz

3.- Obtener el código fuente del edb_debugger

Obtendremos el código fuente del plugin edb_debugger desde los repositorios del proyecto con el comando cvs:

#  cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/edb-debugger login

Cuando el sistema nos pregunte por el password del usuario anonymous simplemente pulsaremos la tecla ENTER.
Con la siguiente orden, descargaremos los fuentes del repositorio:

#  cvs -d :pserver:anonymous@cvs.pgfoundry.org:/cvsroot/edb-debugger checkout server

Siguiendo las instrucciones de instalación del plugin, copiamos el directorio que acabamos de descargar al directorio /comtrib del arbol de directorios del código fuente de PostgresSQL:

#  cp ./server/ ./postgresql-9.1.3/contrib/server/ -R

4.- Establecer las opciones de compilación de PostgresSQL

EL siguiente paso es establecer las opciones de compilación. Para ello entraremos en el directorio donde están las fuentes de PostgreSQL:

#  cd ./postgresql-9.1.3

y escribiremos el siguiente comando:

# ./configure -with-openssl -enable-thread-safety

Las opciones de configuración establecidas son las siguientes:

  • -with-openssl: Permite conexiones encriptadas medieante SSL
  • -enable-thread-safety: Permite el uso seguro de concurrencia (hebras)

5.- Compliar el código fuente PostgreSQL

Una vez establecidas las opciones de configuración sin errores, procedemos a compilar el código fuente de PostgresSQL, para lo cual bastara llamar al comando make:

# make

6.- Instalar los binarios

Si la compilación se ha completado sin errores, procederemos a instalar los binarios de la aplicación:

# make install

Con ellos ya tenemos instalado PostgreSQL en nuestra máquina.

7.- Compilar edb-debugger

Para continuar , debemos compilar el pluging edb-debugger. Para ello debemos ingresar en el directorio dentro del árbol de fuentes de PostgreSQL donde copiamos el código fuente del pluging. Si hemos seguido al pie de la letra las instrucciones de este articulo, deberíamos estar en el directorio ./postgresql-9.1.3, por lo que continuaremos ejecutando los siguientes comandos:

# cd ./contrib/server/

y compilamos el plugin.

# make

7.- Instalar edb-debugger

Instalar el plugin es tan sencillo como ejecutar el siguiente comando:

# make install

8.- Configurar postgreSQL

8.1 Añadir binarios al path del sistema

El siguiente paso es editar el fichero de configuración de bash /etc/profile para añadir la ruta de los binarios de PostgresSQL a la variable PATH del sistema.Para ello añadiremos al fichero la línea:

PATH="/usr/local/pgsql/bin":$PATH

dejándolo de forma parecida a este:

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
PATH="/usr/local/pgsql/bin":$PATH
export PATH

if [ "$PS1" ]; then
  if [ "$BASH" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

# The default umask is now handled by pam_umask.
# See pam_umask(8) and /etc/login.defs.

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi

Si todo ha ido bien, el comando :

# echo $PATH

nos debe retornar algo parecido a esto:

/usr/local/pgsql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

donde vemos que en primer lugar esta incluida la ruta a los binarios de PostgresSQL.

8.2 Crear el usuario postgres

A continuación creamos el usuario postgres que será el usuario bajo el cual se ejecute la base de datos:

# adduser postgres

8.3 Crear e inicializar el directorio de datos

El siguiente paso será crear e inicializar el directorio de datos, donde PostgreSQL guardará la información:

# mkdir /usr/local/pgsql/data

Hacemos propietario de este directorio al usuario postgres:

# chown postgres /usr/local/pgsql/data

A continuación asumimos la indentidad del usuario postgres para inicializar el directorio de datos:

# su - postgres

y finalmente inicializamos el directorio de datos:

$ initdb -D /usr/local/pgsql/data

Llegados a este punto, y si todo ha ido bien, el deberemos ver en nuestr terminal algo parecido a esto

Success. You can now start the database server using:

    postgres -D /usr/local/pgsql/data
or
    pg_ctl -D /usr/local/pgsql/data -l logfile start

En este momento, tal y como indica el sistema podremos arrancar la base de datos en primer plano con:

#  postgres -D /usr/local/pgsql/data

y detenerla simplemente pulsando la combinación de teclas Ctr-C

Si deseamos arrancar la base de datos en segundo plano, lo haremos usando la segunda opción:

#   pg_ctl -D /usr/local/pgsql/data -l logfile start

y la detendremos con el siguiente comando:

$  pg_ctl -D /var/pgsql/data stop -m fast

8.4 Configurar contraseña de acceso a la base de datos para el usuario postgres

Para configurar la contraseña de acceso del usuario postgres a la base de datos, lo primero que habrá que hacer lógicamente es iniciar el servidor:

#   pg_ctl -D /usr/local/pgsql/data -l logfile start

Una vez iniciado el servidor, y manteniendo en el sistema la identidad del usuario postgres, accederemos al interprete de ordenes de PostgreSQL:

$psql

Una vez dentro, escribiremos:

postgres=# alter user postgres with password ‘passwd’;

donde passwd es la nueva contraseña que deseamos poner.El sistema debe responder con un:

 ALTER ROLE postgres=# 

Salimos del cliente de linea de ordenes con la orden:

postgres=#\q 

Y salimos de la cuenta en el sistema del usuario postgres con un simple:

$exit 

8.5 Crear script de arranque automático

Para hacer que PostgreSQL se ejecute automáticamente al iniciar el sistema, debemos copiar desde el directorio /contrib/start-scripts del arbol del código fuente de postgreSQL, el fichero denominado linux al directorio /etc/init.d. En este punto de la instalación, deberíamos estar en el directorio ./postgresql-9.1.3/contrib/server, por lo que ejecutaremos el siguiente comando:

#  cp ../start-scripts/linux /etc/init.d/postgresql

Una vez copiado el script, debemos editarlo para añadirle las etiquetas LSB. Para ello, añadiremos al comienzo del fichero /etc/init.d/posgresql, justo debajo de #! /bin/sh las siguientes líneas:

### BEGIN INIT INFO
# Provides:          PostgreSQL
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start Postgresql at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO

Además, debemos dar permisos de ejecución al script, con el siguiente comando:

#  chmod 755 /etc/init.d/postgresql

Con ello, podremos arrancar y parar postgresql con el tipico comando:

#  /etc/init.d/postgresql accion

donde accion representa alguna de las siguientes posibles acciones:

  • start Arranca el servidor de bases de datos.
  • stop Detiene el servidor de bases de datos.
  • restart Detiene el servidor de bases de datos, y lo vuelve a arrancar.
  • reload Recarga la configuración del servidor de bases de datos.
  • status Informa si el servidor de bases de datos se esta ejecutando o no.

Por último, debemos añadir el script de inicio de PostgreSQL a los scripts de arranque del sistema, para lo cual ejecutaremos el siguiente comando:

#  update-rc.d postgresql defaults

Si por alguna razón deseamos eliminar el script de la secuencia de arranque, deberemos ejecutar el comando:

#  update-rc.d -f postgresql remove

8.6 Editar el fichero postgresql.conf

El siguiente paso es editar el fichero /usr/local/pgsql/data/postgresql.conf para, por un lado permitir que el servidor escuche por todas las interfaces de red, y por otro lado, indicarle que cargue el plugin edb-debugger.

Para permitir que el servidor escuche por todas las interfaces de red, buscaremos la línea:

#listen-address = 'localhost' 

(suele ser la línea 59), la copiamos debajo, la descomentamos, y la modificamos quedando :

listen-address = '*' 

Si se quisera que PostgreSQL escuchase sólo las peticiones de determinadas IPs, bastaría con poner estas IPs separadas por comas, y todo el conjunto entre comillas simples. Por ejemplo:

listen-address = '192.168.0.2,192.168.0.3'

Nota: por custiones de seguridad no se recomienda permitir el acceso desde cualquier máquina.

Para indicarle a PostgreSQL que cargue el plugin edb-debugger al arrancar,buscaremos la línea:

#shared_preload_libraries = ''          # (change requires restart)

(suele ser la línea 127), la copiamos debajo, la descomentamos, y la modificamos quedando :

shared_preload_libraries = '$libdir/plugins/plugin_debugger' # (change requires restart)

8.7 Configurar permisos de acceso

8.7.1 Configurar permisos de acceso local:

Al compilar desde las fuentes, PostgreSQL es muy poco restrictivo a la hora de gestionar permisos, ya que por defecto, permite a todos los usuarios del sistema el acceso sin contraseña. Por ello deberemos restringir ciertos permisos locales.

Para ello debemos editar el fichero /usr/local/pgsql/data/pg_hba.conf
Buscaremos la línea cuyo contenido es:

local all all trust

y la modificamos de forma que quede:

local all all md5

Con ello permitimos el acceso a cualquier cuenta de usuario desde la maquina local siempre que se especifique una contraseña encriptada mediante md5. Ello implica que al reinicar el servidor
podremos acceder al cliente de linea de ordenes de PostgreSQL desde cualquier cuenta de usuario con la cuenta de postgres, escribiendo:

$psql -U postgres -W 
8.7.2 Configurar permisos de acceso remoto:

Por último, debemos configurar los permisos de acceso remoto. Se trata de responder a las siguientes preguntas:

  • ¿Que usuarios tienen permisos para conectarse?
  • ¿Desde que IPs se pueden conectar?
  • ¿A que bases de datos?
  • ¿Y.. que método de auteticación tienen que usar?

En este post, daremos permisos a todos los usarios de la base de datos, para concetarse a todas las bases de datos, desde cualquier IP, usando una contraseña encriptada con MD5.

Esto lo lograremos editando de nuevo el fichero /usr/local/pgsql/data/pg_hba.conf y localizando la línea:

host all all 127.0.0.1/32 trust

y la modificandola forma que quede:

host all all 0.0.0.0 0.0.0.0 md5

Una explicación sencilla de esta regla de permisos del fichero /etc/postgresql/9.1/main/pg_hba.conf seria:

  • host Indica que la regla se refiere a conexiones remotas
  • all Responde a la pregunta ¿Que usuarios tienen permiso para conectarse?. En este caso todos.Si quisieramos especificar un usuario determinado, bastaría con sustituir “all” por el nombre del usuario deseado. Si queremos aplicar la misma regla a varios usuarios, tendremos que copiar y pegar la regla, cambiando el nombre de usuario.
  • all Responde a la pregunta ¿A que bases de datos?. En este caso a todas .Si quisieramos especificar una base de datos determinada, bastaría con sustituir “all” por el nombre de la base de datos deseada. Si queremos aplicar la misma regla a varios bases de datos, tendremos que copiar y pegar la regla, cambiando el nombre de la base de datos.
  • 0.0.0.0 0.0.0.0 Responde a la pregunta ¿Desde que IPs se pueden conectar?. En este caso desde todas. el primer grupo de 4 digitos especifca la IP, mientras que el segundo es la mascara de red. Los valores 0.0.0.0 son valores comodin, cuyo significado es “cualquier IP” y “cualquier mascara” respectivamente.
  • md5Responde a la pregunta ¿Que método de auteticación tienen que usar?. En este caso una contraseña encriptada con MD5. Otros posibles valores son : “passowrd” para una contraseña sin encriptar o “trust” para permitir un acceso sin contraseña

Para una mayor información sobre como funciona el fichero /etc/postgresql/9.1/main/pg_hba.conf se puede consultar la documentación oficial en castellano en la dirección: http://www.postgresql.org/docs/9.1/interactive/auth-pg-hba-conf.html

Finalmente inhabilitaremos las conexiones locales a través de IP6, para lo cual, localizaremos la línea:

host all all ::1/128 trust

y la comentaremos de forma que quede:

#host all all ::1/128 trust

9.- Reiniciar el servidor

Para comprobar que todo ha ido bien, que el script de autoarranque esta correctamente instalado, y que las configuraciones definidas en la base de datos son correctas, Debemos reiniciar la máquina servidora. Para ello, ejecutaremos las siguiente instrucción:

# reboot

10.- Probar el depurador

para probar el depuraror, lo primero que hemos de hacer es crear una base de datos de prueba,con una tabla de prueba, y con un procedimiento almacenado de prueba que podamos depurar.

10.1.- Acceder al interprete de PostgreSQL

Accedemos al interprete de comandos de PostgresSQL con la siguiente instrucción:

$ psql -U postgres -W

10.2.- Crear base de datos de prueba

Una vez dentro del interprete de comandos de PostgresSQL creamos la base de datos con el siguiente comando:

postgres=# CREATE DATABASE prueba_debugger WITH ENCODING='UTF8';

10.3.- Crear tabla de pruebas

Nos conectamos a la base de datos que acabamos de crear:

postgres=# \c prueba_debugger

y el sistema responde con:

You are now connected to database "prueba_debugger".

A continuación creamos la la tabla de pruebas

prueba_debugger=# CREATE TABLE tabla_prueba (
	                                      Id		BIGSERIAL PRIMARY KEY ,
	                                      Valor		VARCHAR (255) default ''
                                             );

y el sistema responde con:

NOTICE:  CREATE TABLE will create implicit sequence "tabla_prueba_id_seq" for serial column "tabla_prueba.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tabla_prueba_pkey" for table "tabla_prueba"
CREATE TABLE

10.4.- Crear procedimiento almacenado de prueba

Seguimos creando objetos en la base de datos de prueba. En este punto crearemos un procedimiento almacenado:

prueba_debugger=#
CREATE OR REPLACE FUNCTION tabla_prueba_trigger() RETURNS TRIGGER AS $tabla_prueba_trigger$
  DECLARE
	sValor VARCHAR (255):= NEW.Valor;
	iId INTEGER:= NEW.Id;
	iCalculo INTEGER:= 0;
  BEGIN
   RAISE NOTICE '---------- INICIO prueba_debugger.tabla_prueba_trigger() ----------';
   RAISE NOTICE '---------- => El nuevo registro tiene un Id: %',iId;
   RAISE NOTICE '---------- => El nuevo registro tiene un Valor: %',sValor;
   iCalculo=iId +5;
   RAISE NOTICE '---------- => El Id del nuevo registro +5 es igual a: %',iCalculo;
   RAISE NOTICE '---------- FIN prueba_debugger.tabla_prueba_trigger() -------------';
  END;

y le indicamos a PostgreSQL el lenguaje en el que está escrito el procedimiento almacenado:

prueba_debugger=# $tabla_prueba_trigger$ LANGUAGE plpgsql;

10.5.- Crear disparador para lanzar el procedimiento almacenado de prueba

Crearemos un disparador que lanzará el procedimiento almacenado despues de cada inserción:

prueba_debugger=# CREATE TRIGGER update_tabla_prueba AFTER INSERT
                  ON tabla_prueba FOR EACH ROW EXECUTE PROCEDURE  tabla_prueba_trigger();

10.6.- Ejecutar el script de preparacion para la depuración

Para poder depurar los procedimientos almacenados, es necesario que antes hayamos ejecutado en la base de datos donde queremos hacer la depuración un script SQL que nos proporcionan los desarrolladores del plugin edb-debugger. Este script crea algunos tipos de datos y funciones necesarias para que el depurador funcione.

Este script se encuentra en el directorio de las fuentes del plugin, es decir en ./postgresql-9.1.3/contrib/server/pldbgapi.sql

Puesto que para hacer esta articulo he usado la cuenta de superusuario (root), la ruta absoluta donde se encuentra el script sql es /root/postgresql-9.1.3/contrib/server/pldbgapi.sql, y esta será la ruta que usaremos para ejecutar el script desde el interprete de postgreSQL ejecutaremos la siguiente orden:

prueba_debugger=# \i /root/postgresql-9.1.3/contrib/server/pldbgapi.sql
[/sourcecode]

Una vez ejecutado el script, ya podemos conectarnos a la base de datos desde pgAdminIII y usar la función de depuración.

Nota: Debemos ejecutar este script en cada base de datos donde deseemos usar la funcionalidad de depuración.

10.7.- Probar el depurador

Finalmente, obtendremos la recompensa a nuestro esfuerzo, al abrir pgAdminIII, abrir la base de datos de prueba que hemos creado, abrir el esquema public, abrir la tabla tabla_prueba desplegar la sección Trigger-Functions, y sobre nuestra función, hacer click con el boton derecho, y seleccionar la opción “Set breakpoint”

EstableciendoBreakPoint

Estableciendo breakpoit con pgAdminIII

En la siguiente captura podemos ver el depurador en acción:

DepuradorEnAccion

Depurador pgAdminIII en acción

Anuncios
Categorías:Debian, PostgresSql, Tecnología Etiquetas: ,

Definir la dirección MAC de las interfaces de Red en Debian 6

Note: You can see an english version of this post here

A veces sucede que se rompe tu interfaz ethernet o que simplemente la sustituyes por otra más moderna. En este caso, al reiniciar la máquina Debian detecta que la MAC de la nueva interfaz de red es diferente a la MAC de la interfaz que estaba instalada, por lo que asume que es una nueva interfaz y le asigna un nombre distinto.

Así, si antes teníamos eth0, al sustituir la tarjeta por una nueva, esta pasa a ser eth1. Este comportamiento tiene la ventaja de que permite añadir varias interfaces de red de forma fácil, pero en el caso de la sustitución de una interfáz de red por otra, rompe la configuración de red, ya que las directivas definidas en el fichero /etc/networt/interfaces
dejan de ser aplicables.

Para solucionar este inconveniente, debemos editar el fichero acabado en persistent-net.rules del directorio /etc/udev/rules.d/

En él, se asocia a cada dirección MAC un nombre de dispositivo (del tipo ethx), por lo que deberemos eliminar la línea que hacia referencia a eth0, y editar la línea que hace referencia a eth1, para que haga erferencia a eth0.
Así, si nuestro fichero de reglas tiene un aspecto como este:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:65:9a:9f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:37:bd:91", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

deberemos elminar las líneas 7, y 8, y modificar la línea 10, para dejar nuestro fichero como sigue:

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x100e (e1000)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:00:27:37:bd:91", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Finalmente reiniciamos la máquina con el típico

# restart

Con ello, nuestra configuración de red, debería quedar restablecida.

Referencias

Debian: MAC address changes: interface changes

Categorías:Debian, Tecnología Etiquetas: ,

Instalar Servidor Jboss 6.0 en Debian

JBoss es un servidor de aplicaciones J2EE desarrollado por Red Hat. Junto con GlashFish, es casi la única alternativa libre en el campo de los servidores de aplicaciones. Fue pensado y desarrollado para intergrarse con la distribución Red Hat Linux Enterprise, y asi poder dar una solución a los clientes corporativos de Red Hat. Esto hace que quizás la distribución mas adecuada para instalar Jboss AS sea CentOS, la versión de la comunidad de la distribución de Reh Hat Linux. Sin embargo, como soy fan de Debian, en este articulo, vamos a instalar este servidor de aplicaciones en Debian 6 utilizando las siguientes versiones de los distintos componentes:

  •           Debian 6.1
  •           Jboss 6.0
  •           JDK 1.6.0

Para ello, y partiendo de una instalación limpia de Debian 6 NetInstall  seguiremos los siguientes pasos:

1.- Instalar el kit de desarrollo java JDK 1.6

Para instalar el JDK 1.6 en Debian, lo primero que hay que hacer es habilitar los repositorios non-free de Debian. Esto lo conseguimos editando el fichero

/etc/apt/sources.list

y dejandolo como aparece a continuación:

# deb cdrom:[Debian GNU/Linux 6.0.3 _Squeeze_ - Official amd64 NETINST Binary-1 20111008-19:52]/ squeeze main
#deb cdrom:[Debian GNU/Linux 6.0.3 _Squeeze_ - Official amd64 NETINST Binary-1 2 0111008-19:52]/ squeeze main 
deb http://ftp.es.debian.org/debian/ squeeze main 
deb-src http://ftp.es.debian.org/debian/ squeeze main 
deb http://security.debian.org/ squeeze/updates main 
deb-src http://security.debian.org/ squeeze/updates main # squeeze-updates, previously known as 'volatile' 
deb http://ftp.es.debian.org/debian/ squeeze-updates main
deb-src http://ftp.es.debian.org/debian/ squeeze-updates main 
#contrib & non-free repos 
deb http://ftp.debian.org/debian/ squeeze contrib non-free 
deb-src http://ftp.debian.org/debian/ squeeze contrib non-free 
#deb http://security.debian.org/debian/ squeeze/updates contrib non-free 
#deb-src http://security.debian.org/debian/ squeeze/updates contrib non-freeroot 

Una vez descomentados (o añadidos según el caso) los repositorios non-free, debemos actualizar la lista de paquetes disponibles. Esto lo haremos con el siguiente comando:

$sudo apt-get update

y finalmente instalamos el kit de desarrollo:

$sudo apt-get install sun-java6-jdk

Una vez hecho esto, actualizamos las alternativas de Java, para que la que acabamos de descargar sea la usada por defecto:

$sudo  update-alternatives --config java

y debería salirnos algo como esto:

Sólo hay una alternativa en el grupo de enlaces java: 
/usr/lib/jvm/java-6-sun/jre/bin/java
Nada que configurar.

2.- Descargar y descomprimir JBoss

Para descargar JBoss, haremos uso del siguiente comando:

 
$wget http://downloads.sourceforge.net/project/jboss/JBoss/JBoss-6.0.0.Final/jboss-as-distribution-6.0.0.Final.zip

El siguiente paso es descomprimnir el fichero zip que acabamos de obtener. Para ello si la instalacion de Debian es totalmente nueva, es posible que tengamos que descargar el compresor:

$sudo  apt-get install unzip

Una vez instalado, procedemos a descomprimir:

$unzip ./jboss-as-distribution-6.0.0.Final.zip

Esto nos creará un un directorio llamado jboss-6.0.0.Final. A continuación moveremos este directorio a una ubicación más estándar. Primero creamos un subdirectorio de nombre jboss-6.0.0.Finaldentro del directorio /usr/local/:

$sudo mkdir /usr/local/jboss-6.0.0.Final

y por último, movemos el directorio de JBoss a su nueva ubicación:

$sudo mv ./jboss-6.0.0.Final/ /usr/local/jboss-6.0.0.Final/

3.- Crear el usuario con el que se ejecutará JBoss

Para prevenir problemas de seguridad, crearemos un usuario sin capacidad de login en el sistema que será el que ejecutará el servidor de aplicaciones JBoss AS. Para ello, ejecutamos los siguientes comandos:

$sudo groupadd jboss
$sudo useradd -s /bin/bash -d /home/jboss -m -g jboss jboss

y por último hacemos propietario de este directorio y sus subdirectorios al nuevo usuario jboss:

$sudo chown jboss:jboss /usr/local/jboss -R

4.- Configurar el arranque automático de JBoss

En este punto, haremos que JBoss se inicie automáticamente con el arranque de la máquina, como un servicio más.
Para ello debemos copiar el fichero jboss_init_redhat.sh al directorio /etc/init.d/jboss:

$sudo cp /usr/local/jboss/jboss-6.0.0.Final/bin/jboss_init_redhat.sh /etc/init.d/jboss 

El siguiente paso es modificar el fichero /etc/init.d/jboss para adecuarlo a los cambios que hemos hecho en los directorios. En este caso se debe modificar la línea 18, dejándola como se muestra a continuación:

JBOSS_HOME=${JBOSS_HOME:-"/usr/local/jboss-6.0.0.Final"}

Además, si queremos que JBoss escuche por todas las interfaces de red del sistema, deberemos modificar la línea 30, y dejarla como se muestra a continuación:

JBOSS_BIND_ADDR=${JBOSS_HOST:-"-b 0.0.0.0"}

Por ultimo actualizamos los servicios que se iniciarán automáticamente al arranque del sistema:

$sudo update-rc.d jboss defaults

Con ello, y tras reiniciar el sistema, tendremos acceso en la dirección de nuestro servidor, puerto 8080, a la interfaz de administración de JBoss AS 6.0:


P.D: El usuario y la contraseña por defecto para acceder a la interfaz web de administración del servidor son:

  • usuario: admin
  • contraseña: admin
Categorías:Debian, JBoss Etiquetas: ,

Instalar un Servidor LAPP (Linux , Apache, PostgreSQL, PHP) en Debian 6

Partiendo de una instalación limpia de Debian 6 NetInstall procederemos a instalar y configurar un servidor LAPP (Linux+Apache+PostgreSQL+Php).

Usaremos las siguientes versiones mayores de cada componente:

  • Debian 6
  • Apache 2
  • Postgresql 9.1
  • Php 5

Iniciaremos la instalación siguiendo estos pasos:

1.- Instalar Apache 2 como servidor Web:

Instalaremos Apache usando el siguiente comando de la consola:

$sudo apt-get install apache2 apache2.2-common apache2-utils ssl-cert

Tras la instalación comprobaremos que el servidor web esta correctamente configurado escribiendo en nuestro navegador la url del servidor que en la mayoría de los casos será:

http://localhost

2.- Instalar PHP5 como lenguaje del lado del servidor:

De nuevo desde la consola ejecutaremos:

$sudo apt-get install php5 libapache2-mod-php5 php5-common

A continuación comprobaremos que PHP se ha instalado correctamente y que Apache es capaz mostrar las páginas escritas en este lenguaje. Para ello debemos crear un fichero simple de texto al que llamaremos info.php con el siguiente contenido:

<?php
   phpinfo();
?>

La función phpinfo() simplemente nos devuelve una tabla resumen de la configuración del servidor, por lo que resulta ideal para nuestros propósitos.

El fichero que acabamos de generar se debe guardar en el directorio raiz de publicación del servidor web, que habitualmente será :

/var/www/

Finalmente, antes de probar el correcto funcionamiento de PHP, debemos reiniciar el servidor web, para lo cual escribimos en la consola:

$sudo /etc/init.d/apache2 restart 

Llegados a este punto, deberiamos ver una página mostrando la configuración de PHP al escribir en nuestro navegador:

http://localhost/info.php

3.- Instalar PostgreSQL 9 como sistema gestor de bases de datos:

Instalar la versión 9 de este RDMS en Debian 6 presenta una pequeña dificultad añadida, ya que esta versión no esta por defecto en los repositorios de la versión estable de debian. La versión usada por los repositorios es la 8.4, que ya empieza a ser algo antigua.

Por ello para poder instalar esta versión en particular debemos recurrir al proyecto denominado debian-backports que básicamente es un conjunto de aplicaciones en sus ultimas versiones, compiladas con las bibliotecas “antiguas” de la versión estable de debian.

Más información sobre el proyecto aqui:
debian-backports

Lo primero que hemos de hacer, es añadir el repositorio de debian-backports a nuestro fichero /etc/apt/sources.list
Esto se consigue editando dicho fichero y añadiendo la línea:

deb http://backports.debian.org/debian-backports squeeze-backports main

Una vez añadida la línea, actualizamos los repositorios de apt escribiendo en la terminal el siguiente comando:

$sudo apt-get update

Finalmente, iniciamos la instalación escribiendo el siguiente comando:

$sudo apt-get -t squeeze-backports install postgresql-9.1

3.1- Configurar la contraseña del usuario postgres:

Una vez instalado PostgreSQL, debemos establecer la contraseña del usuario postgres, que es el usuario con los máximos privilegios dentro de la base de datos, una especie de root.

Primero hemos de asumir la identidad del usuario postgres:

$sudo su postgres

A continuación, accedemos al cliente de linea de ordenes de PostgreSQL:

$psql

El sistema nos permitirá entrar sin pedirnos usuario, puesto que somos el usuario postgres, y sin pedir contraseña, puesto que el usuario postgres por defecto no tiene contraseña.
Una vez dentro, escribiremos:

postgres=# alter user postgres with password ‘passwd’; 

donde passwd es la nueva contraseña que deseamos poner.El sistema debe responder con un:

 ALTER ROLE postgres=# 

Salimos del cliente de linea de ordenes con la orden:

postgres=#\q 

Y salimos de la cuenta en el sistema del usuario postgres con un simple:

$exit 

3.2- Configurar permisos de acceso y acceso remoto a PostgreSQL:

3.2.1 Configurar iterfaces de acceso:

PostgreSQL por defecto, sólo atiende peticiones provenientes de la máquina local, es decir, de la máquina en la que esta instalada. Por ello, si estamos configurando un servidor remoto, deberemos habilitar el acceso desde otras IPs.

Para lograrlo debemos editar el fichero /etc/postgresql/9.1/main/postgresql.conf. Buscaremos la línea siguiente:

#listen-address = 'localhost' 

la copiamos debajo, la descomentamos, y la modificamos quedando :

listen-address = '*' 

Con ello le decimos a PostgreSQL que escuche las peticiones provenientes de cualquier máquina.
Si se quisera que PostgreSQL escuchase sólo las peticiones de determinadas IPs, bastaría con poner estas IPs separadas por comas, y todo el conjunto entre comillas simples. Por ejemplo:

listen-address = '192.168.0.2,192.168.0.3' 

Nota: por custiones de seguridad no se recomienda permitir el acceso desde cualquier máquina.

3.2.2 Configurar permisos de acceso local:

PostgreSQL es muy restrictivo a la hora de gestionar permisos, por lo que por defecto no deja conectarse a casi nadie, ni en local, ni en remoto. Por ello lo primero que hay que hacer es dar ciertos permisos locales.

Para ello debemos editar el fichero /etc/postgresql/9.1/main/pg_hba.conf.
Buscaremos la línea cuyo contenido es:

local all postgres peer

y la modificamos de forma que quede:

local all postgres md5

Con ello permitimos al usuario postgres conectarse desde la maquina local, usando una contraseña encriptada con md5. Ello implica que al reinicar el servidor
podremos acceder al cliente de linea de ordenes de PostgreSQL desde cualquier cuenta de usuario con la cuenta de postgres, escribiendo:

$psql -U postgres -W 

A continuación permitiremos el acceso a cualquier cuenta de usuario desde la maquina local siempre que se especifique una contraseña encriptada mediante md5.
Para lograrlo, buscaremos la línea cuyo contenido es:

local all all peer

y la modificamos de forma que quede:

local all all md5
3.2.2 Configurar permisos de acceso remoto:

Por último, debemos configurar los permisos de acceso remoto. Se trata de responder a las siguientes preguntas:

  • ¿Que usuarios tienen permisos para conectarse?
  • ¿Desde que IPs se pueden conectar?
  • ¿A que bases de datos?
  • ¿Y.. que método de auteticación tienen que usar?

En este post, daremos permisos a todos los usarios de la base de datos, para concetarse a todas las bases de datos, desde cualquier IP, usando una contraseña encriptada con MD5.

Esto lo lograremos editando de nuevo el fichero /etc/postgresql/9.1/main/pg_hba.conf
Al final del mismo añadiremos la línea

host all all 0.0.0.0 0.0.0.0 md5

Una explicación sencilla de esta regla de permisos del fichero /etc/postgresql/9.1/main/pg_hba.conf seria:

  • host Indica que la regla se refiere a conexiones remotas
  • all Responde a la pregunta ¿Que usuarios tienen permiso para conectarse?. En este caso todos.Si quisieramos especificar un usuario determinado, bastaría con sustituir “all” por el nombre del usuario deseado. Si queremos aplicar la misma regla a varios usuarios, tendremos que copiar y pegar la regla, cambiando el nombre de usuario.
  • all Responde a la pregunta ¿A que bases de datos?. En este caso a todas .Si quisieramos especificar una base de datos determinada, bastaría con sustituir “all” por el nombre de la base de datos deseada. Si queremos aplicar la misma regla a varios bases de datos, tendremos que copiar y pegar la regla, cambiando el nombre de la base de datos.
  • 0.0.0.0 0.0.0.0 Responde a la pregunta ¿Desde que IPs se pueden conectar?. En este caso desde todas. el primer grupo de 4 digitos especifca la IP, mientras que el segundo es la mascara de red. Los valores 0.0.0.0 son valores comodin, cuyo significado es “cualquier IP” y “cualquier mascara” respectivamente.
  • md5Responde a la pregunta ¿Que método de auteticación tienen que usar?. En este caso una contraseña encriptada con MD5. Otros posibles valores son : “passowrd” para una contraseña sin encriptar o “trust” para permitir un acceso sin contraseña

Para una mayor información sobre como funciona el fichero /etc/postgresql/9.1/main/pg_hba.conf se puede consultar la documentación oficial en castellano en la dirección: http://www.postgresql.org/docs/9.1/interactive/auth-pg-hba-conf.html

4.- Instalar ProFTP para acceder al directorio de publicación web de forma remota:

Desde la consola escribiremos el siguiente comando para iniciar la instalación:

$sudo apt-get install proftpd

Durante la instalación, se nos preguntará por modo de funcionamiento del servidor FTP. Elegiremos standalone.

A continuación debemos modificar la configuración básica del servidor para que el directorio raíz del servidor FTP sea le mismo que el directorio raíz del servidor web, permitiendo de esa forma subir y bajar los archivos publicados en Apache.

Para ello editamos el archivo /etc/proftpd.conf y añadimos las siguientes líneas:

 
<global> 
    DefaultRoot /var/www 
    <directory /var/www > 
        <limit All> AllowAll </limit> 
    </directory> 
</global> 
  • La directiva global, indica que los ajustes que se encuadran dentro de ella, se aplican a todos los servidores virtuales que tengamos definidos en nuestro fichero de configuración.
  • La directiva DefaultRoot indica el directorio raiz en el que se ubicaran los usuarios al conectarse. Los usuarios no podrán acceder a los directorios de nivel superior al que definimos con DefaultRoot.
  • La directiva Directory permite hacer ajustes específicos para el directorio indicado.
  • La directiva Limit Indica sobre que comandos FTP deseamos hacer ajustes de permismos. En este caso todos los comandos FTP.
  • La directiva AllowAll indica que los comandos a los que hace referencia la directiva Limit estan permitidos para todos los usuarios.

Así, estas líneas en el fichero de configuración de ProFtpd lo que hacen es hacer que todos los usuarios del servidor FTP accedan por defecto al directorio /var/www y dentro de este directorio, se les permiten todos los comandos de FTP (ls, rename, etc.).

4.1 Permitir el acceso al usuario root

Como normal general es muy desaconsejable permitir el acceso del usuario root al FTP, ya que entre otros riesgos, en el proceso de conexión la clave de dicho usuario viajaría por la red en texto plano, y cualquiera con un sniffer podría leerla. Sin embargo, en determinados entornos de pruebas, puede ser deseable permitir la conexión al FTP de dicho usuario.

Para lograrlo, en primer lugar debemos añadir la directiva RootLogin On a nuestro fichero de configuración de ProFtpd. Para permitir el acceso del root a todos los servidores definidos en el fichero, añadimos esta directiva dentro de la sección global, de forma que esta sección quedaría:

 
<global> 
     RootLogin On
     DefaultRoot /var/www 
     <directory /var/www > 
         <limit All> AllowAll </limit> 
     </directory> 
</global> 

Además, ProFtpd impide el acceso a los usuarios especificados en el fichero /etc/ftpusers por lo que debemos editar este fichero, y si el usuario root apareciera listado, debemos comentar la línea donde aparece, para lo cual añadimos el simbolo # al principio de la misma quedando la línea con el siguiente aspecto:

 
... 
...
#root 
... 
...

Finalmente, para que las nuevas directivas tengan efecto, debemos reiniciar el servidor FTP, para lo cual ejecutaremos en la terminal el siguiente comando:

 $sudo /etc/init.d/proftpd restart
Categorías:apache, Debian, PostgresSql, Tecnología Etiquetas: , , , ,

Instalar un Servidor LAMP (Linux , Apache, MySQL, PHP) en Debian 6

Partiendo de una instalación limpia de Debian 6 NetInstall procederemos a instalar y configurar un servidor LAMP (Linux+Apache+MySql+Php).

Usaremos las siguientes versiones mayores de cada componente:

  • Debian 6
  • Apache 2
  • MySql 5
  • Php 5

Iniciaremos la instalación siguiendo estos pasos:

1.- Instalar Apache 2 como servidor Web:

Instalaremos Apache usando el siguiente comando de la consola:

$sudo apt-get install apache2 apache2.2-common apache2-utils ssl-cert

Tras la instalación comprobaremos que el servidor web esta correctamente configurado escribiendo en nuestro navegador la url del servidor que en la mayoría de los casos será:
http://localhost

2.- Instalar PHP5 como lenguaje del lado del servidor:

De nuevo desde la consola ejecutaremos:

$sudo apt-get install php5 libapache2-mod-php5 php5-common

A continuación comprobaremos que PHP se ha instalado correctamente y que Apache es capaz mostrar las páginas escritas en este lenguaje. Para ello debemos crear un fichero simple de texto al que llamaremos info.php con el siguiente contenido:

<?php
   phpinfo();
?>

La función phpinfo() simplemente nos devuelve una tabla resumen de la configuración del servidor, por lo que resulta ideal para nuestros propósitos.

El fichero que acabamos de generar se debe guardar en el directorio raiz de publicación del servidor web, que habitualmente será :
/var/www/

Finalmente, antes de probar el correcto funcionamiento de PHP, debemos reiniciar el servidor web, para lo cual escribimos en la consola:

$sudo /etc/init.d/apache2 restart 

Llegados a este punto, deberiamos ver una página mostrando la configuración de PHP al escribir en nuestro navegador:
http://localhost/info.php

3.- Instalar MySQL 5 como sistema gestor de bases de datos:

Una vez más haremos uso de la consola, y escribiremos el siguiente comando:

$sudo apt-get install mysql-server mysql-client php5-mysql

3.1- Configurar la contraseña del root:

Una vez instalado MySQL, debemos establecer la contraseña del usuario root.Al hacer las pruebas para escribir este post, el configurador de paquetes de Debian, mostró una ventana de texto donde configurar esta contraseña. Por ello, si es vuestro caso, podéis omitir este paso, ya que la contraseña quedará establecida por el configurador de paquetes. Para aquellos que no han tenido tanta suerte, he aquí el método clásico:

Escribiremos en la consola los siguientes comandos como administrador del sistema:

#mysql -u root -p

Con este comando, accedemos al cliente de linea de ordenes de MySQL. Una vez dentro, escribiremos:

 mysql> USE mysql;
 mysql> UPDATE user SET Password=PASSWORD('nuevo-password') WHERE user='root';
 mysql> FLUSH PRIVILEGES;
 mysql> quit;

3.2- Configurar el acceso remoto a MySQL:

MySQL por defecto, sólo atiende peticiones provenientes de la máquina local, es decir, de la máquina en la que esta instalada. Por ello, si estamos configurando un servidor remoto, deberemos habilitar el acceso desde otras IPs.
Para lograrlo debemos editar el fichero /etc/mysql/my.conf. Buscaremos la línea siguiente:

bind-address = 127.0.0.1

y la comentaremos quedando :

#bind-address = 127.0.0.1

para permitir el acceso desde cualquier máquina.
Nota: por custiones de seguridad no se recomienda permitir el acceso desde cualquier máquina.

Con ello conseguimos que MySQL escuche todas las intefaces de red de la máquina donde esta instalado.
Finalmente debemos dar permisos a los usuarios que deseemos para acceder a las bases que queramos de forma remota. Para ello usaremos de nuevo el cliente de linea de comandos de MySQL:

#mysql -u root

y a continuación escribiremos:

 
 mysql> GRANT ALL PRIVILEGES ON *.* TO USERNAME@IP IDENTIFIED BY "PASSWORD";
 mysql> FLUSH PRIVILEGES;
 mysql> quit;

Donde USERNAME se refiere al usuario al que se quiere garantizar el acceso, IP es la ip desde la que el usuario se podrá conectar, y PASSWORD es la clave de dicho usuario.
Si deseamos que el usuario se pueda conectar de manera remota desde cualquier ubicación, sustituiremos la ip por sel simbolo % entre comillas simples.
Por otro lado *.* se refiere a todos los objetos del a base de datos, si deseamos permitir sólo el acceso a una determinada tabla, sustituiremos *.* por el nombre de dicha tabla.
Asi pues, para garantizar el acceso del usuario root a todas las tablas de la base de datos desde cualquier ubicación, usaremos los siguientes comandos:

 mysql> GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY "PASSWORD";
 mysql> FLUSH PRIVILEGES;
 mysql> quit;

4.- Instalar ProFTP para acceder al directorio de publicación web de forma remota:

Desde la consola escribiremos el siguiente comando para iniciar la instalación:

$sudo apt-get install proftpd

Durante la instalación, se nos preguntará por modo de funcionamiento del servidor FTP. Elegiremos standalone.

A continuación debemos modificar la configuración básica del servidor para que el directorio raíz del servidor FTP sea le mismo que el directorio raíz del servidor web, permitiendo de esa forma subir y bajar los archivos publicados en Apache.

Para ello editamos el archivo /etc/proftpd.conf y añadimos las siguientes líneas:

<global>
     DefaultRoot /var/www
    <directory /var/www >
         <limit All>
              AllowAll
          </limit>
     </directory>
</global>
  • La directiva global, indica que los ajustes que se encuadran dentro de ella, se aplican a todos los servidores virtuales que tengamos definidos en nuestro fichero de configuración.
  • La directiva DefaultRoot indica el directorio raiz en el que se ubicaran los usuarios al conectarse. Los usuarios no podrán acceder a los directorios de nivel superior al que definimos con DefaultRoot.
  • La directiva Directory permite hacer ajustes específicos para el directorio indicado.
  • La directiva Limit Indica sobre que comandos FTP deseamos hacer ajustes de permismos. En este caso todos los comandos FTP.
  • La directiva AllowAll indica que los comandos a los que hace referencia la directiva Limit estan permitidos para todos los usuarios.

Así, estas líneas en el fichero de configuración de ProFtpd lo que hacen es hacer que todos los usuarios del servidor FTP accedan por defecto al directorio /var/www y dentro de este directorio, se les permiten todos los comandos de FTP (ls, rename, etc.).

4.1 Permitir el acceso al usuario root

Como normal general es muy desaconsejable permitir el acceso del usuario root al FTP, ya que entre otros riesgos, en el proceso de conexión la clave de dicho usuario viajaría por la red en texto plano, y cualquiera con un sniffer podría leerla. Sin embargo, en determinados entornos de pruebas, puede ser deseable permitir la conexión al FTP de dicho usuario.

Para lograrlo, en primer lugar debemos añadir la directiva RootLogin On a nuestro fichero de configuración de ProFtpd. Para permitir el acceso del root a todos los servidores definidos en el fichero, añadimos esta directiva dentro de la sección global, de forma que esta sección quedaría:

<global>
     RootLogin On
     DefaultRoot /var/www
    <directory /var/www >
          <limit All>
              AllowAll
         </limit>
     </directory>
</global>

Además, ProFtpd impide el acceso a los usuarios especificados en el fichero /etc/ftpusers por lo que debemos editar este fichero, y si el usuario root apareciera listado, debemos comentar la línea donde aparece, para lo cual añadimos el simbolo # al principio de la misma quedando la línea con el siguiente aspecto:

...
...

#root

...
...

Finalmente, para que las nuevas directivas tengan efecto, debemos reiniciar el servidor FTP, para lo cual ejecutaremos en la terminal el siguiente comando:

$sudo /etc/init.d/proftpd restart
Categorías:apache, Debian Etiquetas: , , ,