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
Anuncios
Categorías:apache, Debian Etiquetas: , , ,

Coloreando la Terminal de Mac OS X Lion

La terminal por defecto de Mac OS X Lion carece por completo de colores. Sin embargo para mi es muy útil el hecho de tener coloreado el prompt y ver el resultado del comando ls tambien coloreado, de manera que pueda distinguir de un simple vistazo, que fichero es un directorio, que fichero es fichero es ejecutable, etc.

Para lograr esto, debemos seguir los siguientes pasos:

1.- Colorear la salida de ls

Editamos el fichero /etc/bashrc:, y le añadimos al final las siguientes lineas:

export TERM=xterm-color 
export CLICOLOR=1 
export LSCOLORS=ExFxCxDxBxegedabagacad 

Con ello conseguimos que el comando ls nos muestre el resultado de los listados coloreados.

Salida de ls coloreada

2.- Personalizar el Prompt

A continuación personalizamos el Promt de la terminal, añadiendo colores y modificando su apariencia. Para ello, debemos editar el fichero /etc/bashrc y comentar la siguiente línea añadiendole el simbolo # al principio de la misma de forma que:

PS1='\h:\W \u\$ '

pasa a ser:

#PS1='\h:\W \u\$ '

A continuación añadimos justo debajo de la línea anterior la siguiente línea:

PS1='\[33[01;32m\]\u@\h\[33[00m\]:\[33[01;34m\]\w\[33[00m\]\$ '

con lo que obtenemos un Prompt muy similar al de Ubuntu:

Personificacion del Prompt

Al modificar el fichero /etc/bashrc estamos modificando los ajustes globales de la terminal, por o que los cambios que hagamos al prompt en este fichero afectarán en teoría (no lo he probado) a todos los usuarios del sistema con la excepción del usuario root.

Si se desea personalizar únicamente la terminal de nuestro usuario, debemos modificar el fichero .profile ubicado en nuestro directorio home. En este caso la linea a añadir a dicho fichero es la siguiente:

export PS1='\[33[01;32m\]\u@\h\[33[00m\]:\[33[01;34m\]\w\[33[00m\]\$ '

Además, desde este fichero, podremos modificar tambien el aspecto del prompt cuando accedamos como root usando el comando sudo su. Para ello, incluiremos a continuación de la línea anterior la sigueinte línea:

export SUDO_PS1='\[33[01;31m\]\u@\h\[33[00m\]:\[33[01;34m\]\w\[33[00m\]\$ '

El resultado será similar al de la siguiente captura de pantalla:

prompt del root personalizado

Finalmente dejo como referencia el significado de todos estos simbolos raros. Primero las variables que podemos usar para personalizar el Prompt:


\! Número de comandos en el historial
\# Número del comando actual
\d Fecha
\h Host
\n Nueva línea
\s Nombre de la Shell
\t Hora
\u Nombre del usuario
\W Directorio actual
\w Directorio actual con la ruta completa
\\ Barra invertida

Y por último los códigos de color:


 0;30 Negro
 1;30 Gris Oscuro
 0;34 Azul
 1;34 Azul Claro
 0;32 Verde
 1;32 Verde Claro
 0;36 Cyan
 1;36 Cyan Claro
 0;31 Rojo
 1;31 Rojo Claro
 0;35 Violeta
 1;35 Violeta Claro
 0;33 Marrón
 1;33 Amarillo
 0;37 Gris Claro
 1;37 Blanco
Categorías:Mac, Tecnología Etiquetas: ,

Instalar JDK 7.0 en Ubuntu 11.04

En el momento de escribir estas líneas, la última versión del kit de desarrollo Java (JDK) no se halla disponible en los repositorios de Ubuntu 11.04, ni existe en la página web de Java una versión en formato .deb para usar de manera fácil en nuestro Ubuntu. Por ello, los pasos a seguir para instalar esta versión del JDK son los siguientes:

1.- Obtener el JDK de la página oficial:

Para ello nos descargaremos la versión de linux que corresponda a nuestra máquina (32 o 64 bits) de la página oficial del Java.

Debemos descargar el dichero comprimido en formato tar.gz.

2.- Descomprimimos el fichero descargado:

Para descomprimir el fichero descargado tenemos dos opciones, bien usando la interfáz gráfica, bien usando la consola.

2.1 Descompresión usando la interfáz gráfica:

En mi caso particular que uso GNOME, basta con seleccionar el archivo jdk-7-linux-x64.tar.gz con el botón derecho del ratón y seleccionar la opción “Extraer aqui” en el menú contextual que aparece.

2.2 Descompresión desde la consola:

Para los fans de la terminal, he aqui los comandos que se deben ejecutar para descomprimir el archivo:

$gzip -d jdk-7-linux-x64.tar.gz

Con ello hemos obtenido el fichero jdk-7-linux-x64.tar, con lo que desempaquetamos el formato tar con el comando:

$tar -xvf jdk-7-linux-x64.tar

Con cualquiera de las dos opciones, el contenido del fichero se extrae en la carpeta ./jdk1.7.0

3.- Mover la carpeta que contiene los ficheros del JDK a una mejor ubicación.

Ubuntu por defecto coloca las distintas versiones de Java, ya sean kits de desarrollo (JDK) o entornos de ejecución (JRE) en la carpeta /usr/lib/jvm, por lo que no es mala idea colocar nuestro kit de desarrollo en su lugar natural. Para ello movemos la carpeta recien extraida con el comando:

$sudo mv ./jdk1.7.0/ /usr/lib/jvm/jdk1.7.0

4.- Comprobar las versiones de Java que hay instaladas en el sistema:

Debemos comprobar que versiones de Java tenemos instaladas en el sistema para poder determinar el número de opción que le asignaremos a nuestro nuevo JDK. Las opciones se numeran empezando en 0 hasta n-1, donde n es el número total de opciones registradas en el sistema.Para ver las opciones registradas usaremos el siguiente comando:

$sudo update-alternatives --config java

En mi caso particular, puesto que no tengo ninguna otra versión aparte del OpenJDK 6, la salida del comando es la siguiente:

En este caso la opción OpenJDK 6 es la opción 0,por lo que asignaré en el siguiente paso la opción 1 al JDK 7.

En caso de haber más opciones, usaremos como número de opción el siguiente al que tenga la última opción de la lista.

5.- Añadir JDK 7 la la lista de entornos Java:

El penúltimo paso de la instalación del JDK es añadir el Kit de desarrollo JDK 7.0 a la lista de entornos java del sistema. Para ello usaremos el siguiente comando:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.7.0/jre/bin/java 1

El número al final del comando es el número de opción que deseamos usar. Este número, es en realidad la prioridad que tiene ese entorno, en el modo automático. Cuanto mayor es este número, mas prioridad.

6.- Configurar JDK 7 como entorno por defecto:

Volveremos a ejecutar el comando del paso 4, y veremos que en esta ocasión, ya tenemos disponible la opción del JDK 7. Para hacer que sea el entorno por defecto del sistema, bastará con pulsar su número de opción seguido de la tecla intro:

$sudo update-alternatives --config java

La salida del sistema será algo similar a esta captura:

7.- Comprobar la máquina virtual:

Pro último comprobaremos que la configuración se ha realizado con éxito, para lo cual ejecutaremos el siguiente comando:

$java -version

El sistema deberá respondernos con algo similar a esta captura:

8.- Configurar el path de JAVAC

Finalmente debemos configurar el path de javac para utilizar por defecto el compilador del JDK 7.0.
Para ello ejecutamos en la consola el siguiente comando:

$sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.7.0/bin/javac" 1

A continuación establecemos la nueva alternativa, como la alternativa por defecto:

$sudo update-alternatives --set javac /usr/lib/jvm/jdk1.7.0/bin/javac

Por último, comprobamos que la instalación se ha realizado correctamente, para lo cual ejecutamos el comando:

$javac -version

9.- Referencias:

Guía en castellano para instalar el JDK 6.0 en Ubuntu.
Articulo con el que he completado el anterior.

Categorías:Java, Ubuntu Etiquetas: ,

Determinar la versión de Ubuntu instalada.

A veces no recodarmos que versión exacta de ubuntu tenemos. Esto sucede sobre todo si trabajamos con varias máquinas con diferentes versiones. Una forma rápida y fácil de averiguarlo es escribiendo el siguiente comando en la consola:

#lsb_release -a
Categorías:Tecnología, Ubuntu Etiquetas:

Evitar que Network Manager sobrescriba el fichero /etc/resolv.conf

A veces sucede que necesitamos hacer alguna configuración compleja con nuestras interfaces de red, como asignar múltiples IPs a una sola interfaz o asignar multiples interfaces a una sola IP. En cualquier caso si usamos un equipo de escritorio para tareas de este tipo, seguramente tendremos instalado un programita denominado “Network Manager”
Este programa coloca un icono en la barra de tareas de gnome para poder configurar las interfaces de red de forma rápida y fácil. Y lo hace bastante bien, siempre y cuando no le pidamos cosas raras.

Sin embargo, si necesitamos una configuración diferente y que haga uso de las interfaces definidas en el fichero  /etc/network/interfaces observaremos que nuestra configuración de red no es capaz de comunicarse con los servidores DNS definidos en /etc/resolv.conf . La razón es sencilla: Network Manager sobrescribe continuamente este fichero para adaptarlo a las configuraciones definidas en el mediante su interfaz gráfica. Si estamos usando el fichero  /etc/network/interfaces para configurar nuestra red, Network Manager supone que no hay redes configuradas, y sobrescribe el fichero /etc/resolv.conf con un fichero vacío, por lo que la resolución de nombres es imposible.

Después de dar muchas vueltas por internet, y ver un montón de soluciones mas o menos enrevesadas a este problema, encontré una que me pareció fácil, sencilla, y a la vez eficaz.

Se trata de activar el flag inmutable del fichero /etc/resolv.conf . Para ello basta con escribir el siguiente comando en la consola:

#chattr +i /etc/resolv.conf
Categorías:Tecnología, Ubuntu Etiquetas:

Ejecutar multiples instancias de PostgreSql en Ubuntu 10.04

Recientemente por motivos de trabajo me he visto obligado a ejecutar en la misma máquina y bajo ubuntu 10.04 dos versiones de PostgreSql. En concreto para mi nuevo proyecto necesitaba ejecutar la versión 9.0 de este RDBMS y la versión 8.4 que ya tenía instalada y funcionando para dar soporte a los proyectos más antiguos.

El proceso es el siguiente:

1.- Instalar la nueva versón de la base de datos a través de los repositorios:

Este primer paquete nos facilitará la tarea de añadir nuevos repositorios.

#aptitude install python-software-properties

A continuación añadimos el nuevo repositorio para obtener la versión 9.0:

#add-apt-repository ppa:pitti/postgresql

Actualizamos el gestor de paquetes:

#aptitude update

Instalamos la nueva versión de la Base de datos:

#aptitude install postgresql-9.0 libpq-dev pgadmin3

2.- Configurar la ejecución simultanea:

Si llegados a este punto intentamos acceder a la nueva instancia del RBDMS nos encontraremos con que el típico comando:

$sudo -u postgres plsl postgres

nos devuelve un error.
Por otra parte, el instalador nos configura la nueva instancia del RDBMS en el puerto 5433, con lo que no tendríamos problemas por ese lado.
El problema esta en la versión de las herramientas de configuración que se usan, ya que al estar configurada por defecto la versión 8.4, el sistema usará por defecto esta versión. En particular el ejecutable de psql es un script de perl que en teoría redirige a la versión correcta de la herramienta en función del contenido de los ficheros :

  • ~/.postgresqlrc : Donde se define que cluster se usará, que versión, que usuario, que base de datos etc.. a nivel del usuario logueado.
  • /etc/postgresql-common/user_clusters : Donde se define que cluster se usará, que versión, que usuario, que base de datos etc.. a nivel del sistema.

El script perl buscará primero en ~/.postgresqlrc y dentro de este fichero usará los datos definidos en la primera línea que encuentre. Si este fichero no existiese o no tuviese ninguna línea, el script perl usará los datos definidos en la primera línea del fichero /etc/postgresql-common/user_clusters

Si finalmente este fichero no existiese o no existiera ninguna línea en él, el script perl nos dirigirá al cluster que este escuchando en el puerto 5432 y a la base de datos cuyo nombre coincida con el nombre del usuario logueado.

Con esto en mente, y en mi caso particular decidí definir el fichero /etc/postgresql-common/user_clusters dejándolo de la siguiente manera:

# This file maps users against the database clusters to which they
# will connect by default.  Any user may create ~/.postgresqlrc which
# will supersede the defaults stored here.  If a database is
# specified, that will be the one connected to by client tools if none
# is specified on the command line.  If the database specified here is
# "*", this is interpreted as the database whose name is the same as
# the user's login.  (Setting the database to "*" will provide the
# current default upstream behaviour for command line tools.)
#
# When pg_wrapper scans this file, the first matching line is used.
# It is a good idea to provide a default explicitly, with a final line
# where both user and group are set to "*".  If there is no default,
# the implicit default is to connect to the cluster whose postmaster
# is listening on port 5432 and to the database matching the user's
# login name.
#
# In the context of this file, user and group refer to the Unix login
# or group, not to PostgreSQL users and groups.
#
# Please see user_clusters(5) and postgresqlrc(5) for more information.
#
# USER	GROUP	VERSION	CLUSTER	DATABASE
*     *    9.0     main      *
*     *    8.4     main      *

3.- Conectar a los diferentes clústeres

Finalmente ya podemos conectarnos a los diferentes clústeres.
Para conectar con el clúster de la versión 8.4 escribiremos:

#psql template1 postgres -h localhost -o 5432 --cluster "8.4/main"

y para hacerlo con la versión 9.0 usaremos algo similar a :

#psql template1 postgres -h localhost -o 5433 --cluster "9.0/main"

4.- Anexo: Contenido del fichero ~/.postgresqlrc


8.2 192.168.0.3:55514 alvherre
8.1 192.168.0.3:55513 alvherre

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

Instalar sun-jdk-6 en Ubuntu 10.04

Para poder instalar los paquetes de desarrollo de aplicaciones java de SUN en ubuntu, lo primero que hemos de hacer es añadir a los repositorios la fuente de paquetes “partner”:

#sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

a continuación actualizamos la lista de paquetes disponibles:

#sudo aptitude update

y finalmente instalamos los paquetes Java que necesitemos. En este caso los necesarios para ejecutar JBoss y desarrollar en Java SE

#sudo aptitude install sun-java6-bin sun-java6-jre sun-java6-jdk sun-java6-plugin sun-java6-fonts libcommons-el-java

Opcionalmente podemos instalar el openJDK en caso de que lo tuvieramos instalado.

#sudo aptitude remove --purge openjdk-6-jre
#sudo aptitude remove openjdk-6-doc openjdk-6-jre-headless openjdk-6-jre-lib

Si optamos por mantener ambas versiones instaladas, podemos elegir la versión deseada con el siguiente comando:

#sudo /usr/sbin/update-alternatives --config java
Categorías:Tecnología, Ubuntu Etiquetas: