javoaxian cambió a: javoaxian.me
Este blog se mantendrá como histórico del nuevo javoaxian.me. Por tal motivo, sólo serán creados post que harán referencia a los del nuevo blog. Si hay dudas y comentarios, favor de hacerlos en javoaxian.me.
Mostrando entradas con la etiqueta UNIX. Mostrar todas las entradas
Mostrando entradas con la etiqueta UNIX. Mostrar todas las entradas

jueves, 28 de agosto de 2008

RapidSVN: Cliente gráfico para repositorios SVN en GNU/Linux

RapidSVN es un cliente gráfico que nos permite manipular nuestros repositorios de Subversion. Esta puede ser una muy buena alternativa para usar en lugar del ya conocido TortoiseSVN para Windows.

Si desean probarlo en Debian o Ubuntu es muy fácil, bastará con instalar el paquete rapidsvn desde sus repositorios. Cabe mencionar que para Ubuntu deberán tener agregados los repositorios universe, en este post menciono cómo activarlos.

Para instalarlo, nos convertiremos en root:

javoaxian@darthmaul:~$ su -

Ahora ejecutamos el siguiente comando:

root@darthmaul:~$ apt-get install rapidsvn

Listo, ha quedado instalado RapidSVN. Para usarlo, bastará con ejecutar el comando rapidsvn:

javoaxian@darthmaul:~$ rapidsvn

o podemos seleccionarlo del menú de Gnome desde: Aplicaciones -> Programación RapidSVN.

sábado, 24 de mayo de 2008

Borrar un archivo o directorio recursivamente usando el Shell

Hace casi dos meses escribí el post Borrar un archivo o directorio recursivamente en GNU/Linux en el cual creé un programa en perl que se encarga de borrar recursivame archivos o directorios.. Pues el día de hoy simplifico ese programa en una sola línea de Shell.

Pondré como ejemplo el borrar el directorio .svn, el cual para los que no lo conocen es un directorio que se crea cuando trabajamos proyectos con Subversion (SVN) en cada uno de los directorios existentes, por lo que al momento de crear una versión para entregar necesitamos remover el directorio .svn de todos los directorios en los que se encuentra.

Para borrarlo haremos uso del comando find, dicho comando nos permite buscar archivos o directorios y con la opción -exec podremos usar el comando rm para borrar los archivos que encuentra.

La estructura para ejecutar este comando será la siguiente:

javoaxian@darthmaul:~$ find /directorio/en/donde/buscar -name archivo_o_directorio_a_buscar -exec rm \-rf '{}' \;

Aquí pongo un ejemplo para borrar el directorio .svn.

javoaxian@darthmaul:~$ find /home/javoaxian/proyectos/javoaxian -name .svn -exec rm \-rf '{}' \;

El comando anterior buscará en el directorio /home/javoaxian/proyectos/javoaxian todos los directorios .svn y los borrará. Puede que mande mensajes de error que no encontró el directorio o archivo para borrar.

Si no quieren que les mande mensajes de error, pueden ejecutar esta otra forma de usar los comandos rm y find combinados:

javoaxian@darthmaul:~$ rm -rf `find /home/javoaxian/proyectos/javoaxian -name .svn`

Para verificar que funcionó, podemos ejecutar el mismo comando find pero de la siguiente manera:

javoaxian@darthmaul:~$ find /home/javoaxian/proyectos/javoaxian -name .svn -print

Ésto busca en la ruta especificada el archivo .svn y lo muestra en pantalla. No deberá mostrar nada la salida del comando si se ejecutó correctamente.

Espero que les sea de ayuda.

viernes, 23 de mayo de 2008

Borrar los archivos que se encuentra e una lista dentro de un archivo de texto con una sóla línea de Shell

El día de hoy en el trabajo, un compañero me pregunto si recordaba una manera de borrar los archivos que se encontraban indicados en un archivo de texto usando comandos de shell. Entonces me dí a la tarea de tratar de recordar un poco y les muestro aquí la solución.

Supongamos que tenemos el archivo de texto archivos_x_borrar.txt, en dicho archivo se encuentra una lista de los archivos que deseamos borrar. Por ejemplo, el contenido de archivo_x_borrar.txt tiene lo siguiente:

archivo1.log
archivo2.log
archivo3.log
archivo4.log
archivo5.log

Como podemos observar en el ejemplo, queremos borrar 5 archivos. Resultaría fácil borrarlos directamente con el comando rm cada uno, pero si fueran 100 archivos ya sería un poco pesado.

Para borrarlos con una sola línea de shell, lo único que tenemos que ejecutar es lo siguiente:

javoaxian@sky:~$ rm `cat archivos_x_borrar.txt`

Listo, ahora si observan su directorio, ya no tendrán los archivos que se indicaban en el archivo de texto.

Saludos!!!

viernes, 11 de abril de 2008

Instalar PHP desde fuentes en GNU/Linux

En artículos anteriores ya expliqué como instalar Apache y Postgresql, por lo tanto el día de hoy explicaré como instalar PHP.

Como primer pasó, instalaremos Apache como indico aquí.

Si queremos conectar PHP con un manejador de base de datos, como pueden ser Oracle, PostgreSQL, MySQL, Sybase, etc., deberemos tener instalados y configurados estos manejador para poder configurar PHP para que se conecte al que deseemos. Si quieren instalar PostgreSQL aquí está el artículo que hice para realizar su instalación.

Para comenzar, descargaremos PHP. En este momento la versión vigente es la 5.2.5, por lo tanto descargaremos el archivo PHP 5.2.5 (tar.bz2).

Una vez descargado el archivo, procederemos a instalarlo. Para ejemplificar ésto, realizaremos la instalación en el directorio /usr/local/php.

Nos convertiremos en usuario root.

javoaxian@darthmaul:~$ su -

Una vez que ya somos root, copiaremos el archivo que descargamos al directorio /usr/local/src y nos moveremos a dicho directorio:

root@darthmaul:~# cp /ruta/de/descarga/archivo/php-5.2.5.tar.bz2 /usr/local/src/
root@darthmaul:~# cd /usr/local/src

Descomprimiremos el archivo y entraremos al directorio creado:

root@darthmaul:~# tar -jxvf php-5.2.5.tar.bz2
root@darthmaul:~# cd php-5.2.5

Iniciaremos el proceso de configuración, para ésto, indicaremos en el siguiente comando si deseamos conectarlo con algún manejador de base de datos, por ejemplo, pondremós alguna de las siguientes opciones dependiendo el manejador de base de datos:
  • PostgreSQL: --with-pgsql=/ruta/donde/esta/instalado/postgres
  • MySQL: --with-mysql=/ruta/donde/esta/instalado/mysql
  • Oracle: --with-oci8=/ruta/donde/esta/instalado/oracle
  • Sybase: --with-sybase=/ruta/donde/esta/instalado/sybase

También deberemos indicarle donde puede encontrar el comando apxs de apache, para ésto supondré que apache está instalado en /usr/local/apache

root@darthmaul:~# ./configure --prefix=/usr/local/php --with-pgsql=/opt/pgsql --with-apxs2=/usr/local/apache/bin/apxs

Si aparece un error semejante a éste:

configure: error: xml2-config not found. Please check your libxml2 installation.

Deberán instalar el paquete libxml2-dev, ésto es en el caso de cualquier distribución basada en Debian como Ubuntu. En otras distribuciones deberán buscar este paquete o su correspondiente.

Para instalarlo en distribuciones basadas en Debian:

root@darthmaul:~# apt-get install libxml2-dev

Una vez instalado, volvemos a ejecutar el comando configure:

root@darthmaul:~# ./configure --prefix=/usr/local/php --with-pgsql=/opt/pgsql --with-apxs2=/usr/local/apache/bin/apxs

Si pasó la configuración, ejecutaremos los siguientes comandos:

root@darthmaul:~# make
root@darthmaul:~# make install

Copiamos el archivo php.ini-dist al directorio /usr/local/php/lib/ y le cambiaremos el nombre a php.ini

root@darthmaul:~# cp php.ini-dist /usr/local/php/lib/php.ini

Ahora deberemos editar el archivo httpd.conf de apache, el cual en este ejemplo se encuentra en el directorio /usr/local/apache/conf/. En dicho archivo deberemos buscar las siguientes líneas:

    #
# AddType allows you to add to or override the MIME configuration
# file specified in TypesConfig for specific file types.
#
#AddType application/x-gzip .tgz

Y arriba de éstas agregaremos las líneas respectivas de PHP para que nos quede esa sección de esta forma:

    #PHP5
AddType application/x-httpd-php .php .html .phtml .php3 .php4 .php5 .htm
AddType application/x-httpd-php-source .phps

#
# AddType allows you to add to or override the MIME configuration
# file specified in TypesConfig for specific file types.
#
#AddType application/x-gzip .tgz

Aquí le estamos indicando a apache que los archivos con extensiones .php .html .phtml .php3 .php4 .php5 .htm pueden interpretar el código de PHP.

Si tienen el proceso de apache funcionando, deberán darlo de baja:

root@darthmaul:~# /usr/local/apache/bin/apachectl stop

Y ahora deberán levantarlo:

root@darthmaul:~# /usr/local/apache/bin/apachectl start

Ahora apache ya puede interpretar nuestras páginas con código de PHP.

Si queremos probar que esté funcionando Apache con PHP, podemos poner un archivo llamado phpinfo.php dentro del directorio /usr/local/apache/htdocs/ (solo el usuario root puede escribir en este directorio para fines de este ejemplo) y agregarle la siguiente línea:

<? phpinfo(); ?>

Ahora en nuestra navegador ingresamos a la siguiente dirección: http://localhost/phpinfo.php

Recuerda que si tu apache está corriendo en otro puerto, como por ejemplo el 8080, deberás ingresar de la siguiente manera desde el navegador: http://localhost:8080/phpinfo.php

Donde nos aparecerá algo como ésto:


Ya tenemos instalado y funcionando PHP.

jueves, 10 de abril de 2008

Instalar PostgreSQL desde código fuente en GNU/Linux

El día de hoy he decidido crear este post referente a cómo podemos instalar PostgreSQL en una de nuestras distribuciones GNU/Linux.

Una de las razones por las cuales me decidí ha realizar este artículo, es para ayudar a una amiga del trabajo, el cual espero le sea de utilidad.

Pues manos a la obra. Como primer paso ha realizar, será descargar PostgreSQL. En el momento en que realizé este post, la versión vigente de PostgreSQL es la 8.3.1. Para lo cual, descargaremos el archivo postgresql-8.3.1.tar.bz2.

Una vez descargado el archivo, procederemos a instalarlo. Para ejemplificar ésto, realizaremos la instalación en el directorio /opt/pgsql.

Nos convertiremos en usuario root y crearemos el directorio /opt/src.

javoaxian@darthmaul:~$ su -
root@darthmaul:~$ mkdir /opt/src

Una vez que ya somos root, copiaremos el archivo que descargamos al directorio /opt/src y nos moveremos a dicho directorio:

root@darthmaul:~# cp /ruta/de/descarga/archivo/postgresql-8.3.1.tar.bz2 /opt/src/
root@darthmaul:~# cd /opt/src

Descomprimiremos el archivo y entraremos al directorio creado:

root@darthmaul:~# tar -jxvf postgresql-8.3.1.tar.bz2
root@darthmaul:~# cd postgresql-8.3.1

Iniciaremos el proceso de configuración:

root@darthmaul:~# ./configure --prefix=/opt/pgsql

Si aparece un error semejante a éste:

configure: error: readline library not found
If you have readline already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-readline to disable readline support.

Deberán instalar el paquete libreadline5-dev, ésto es en el caso de cualquier distribución basada en Debian como Ubuntu. En otras distribuciones deberán buscar este paquete o su correspondiente.

Para instalarlo en distribuciones basadas en Debian:

root@darthmaul:~# apt-get install libreadline5-dev

Una vez instalado, volvemos a ejecutar el comando configure:

root@darthmaul:~# ./configure --prefix=/opt/pgsql

Puede que nos aparezca el siguiente mensaje de error:

configure: error: zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.

Para resolver ésto, deberemos instalar el paquete zlib1g-dev en cualquier distribución basada en Debian como Ubuntu y su equivalente en otras distribuciones.

Para instalarlo en distribuciones basadas en Debian:

root@darthmaul:~# apt-get install zlib1g-dev

Volvemos a ejecutar el comando configure:

root@darthmaul:~# ./configure --prefix=/opt/pgsql

Si pasó la configuración, ejecutaremos los siguientes comandos:

root@darthmaul:~# make
root@darthmaul:~# make install

Crearemos el usuario postgres junto con el grupo postgres, además de asignarle como HOME, el directorio donde instalamos Postgresql.

root@darthmaul:~# adduser --home /opt/pgsql postgres

El comando anterior nos dirá que ya existe el directorio para el HOME y que no pertenece al usuario que estamos creando, además nos pedirá que ingresemos la contraseña del usuario, así cómo alguna información extra de la cuenta postgres y pondremos lo que queramos.

Cambiaremos el dueño y grupo al directorio donde realizamos la instalación:

root@darthmaul:~# chown -R postgres.postgres /opt/pgsql/

Ahora en el archivo /etc/profile agregaremos lo siguiente antes de la línea umask 022.

export PGSQL=/opt/pgsql
export PGLIB=$PGSQL/lib
export MANPATH=$MANPATH:$PGSQL/man
export LD_LIBRARY_PATH=$PGLIB
export PATH=$PATH:$PGSQL/bin

umask 022

La última 3 líneas que colocamos, puede que ya las téngamos configuradas con algunas otras rutas. Por ejemplo, en este momento, la línea de la variable PATH la tengo compuesta de la siguiente manera:

export PATH=$PATH:$PGSQL/bin:$MYSQL/bin:$ORACLE_HOME/bin:$SYBASE/bin:$JAVA_HOME/bin

Como se puede ver, tengo configuradas más rutas para mi variable PATH, ustedes también pueden ir agregando las rutas concatenando con : las rutas.

Para que surtan efecto los cambios en la variable PATH, deberemos reiniciar nuestra máquina o en la consola donde estemos trabajando ejecutar el siguiente comando (SOLO FUNCIONA EN LA CONSOLA EN QUE SE EJEUCTA EL COMANDO):

root@darthmaul:~# source /etc/profile

En otra consola nos convertiremos en el usuario postgres e inicializaremos la base de datos de Postgresql.

javoaxian@darthmaul:~$ su - postgres
postgres@darthmaul:~$ mkdir /opt/pgsql/data
postgres@darthmaul:~$ /opt/pgsql/bin/initdb -D /opt/pgsql/data/

Donde nos aparecerá algo semejante a ésto:

The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.

The database cluster will be initialized with locale es_MX.
The default database encoding has accordingly been set to LATIN1.
The default text search configuration will be set to "spanish".

fixing permissions on existing directory /opt/pgsql/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers/max_fsm_pages ... 24MB/153600
creating configuration files ... ok
creating template1 database in /opt/pgsql/data/base/1 ... ok
initializing pg_authid ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

/opt/pgsql/bin/postgres -D /opt/pgsql/data
or
/opt/pgsql/bin/pg_ctl -D /opt/pgsql/data -l logfile start

Ha quedado instalado Postgres, ahora para arrancarlo ejecutaremos lo siguiente como usuario postgres:

postgres@darthmaul:~$ /opt/pgsql/bin/postgres -D /opt/pgsql/data&

o también:

postgres@darthmaul:~$ /opt/pgsql/bin/postmaster -D /opt/pgsql/data&

Si queremos que arranque desde que iniciamos la máquina en una distribución basada en Debian, deberemos seguir las instrucciones que puse en este post.

Para probar el script postgresqld que acabamos de crear con este post, podemos ejecutar el siguiente comando como usuario root para levantar el servicio de postgres:

root@darthmaul:~# /etc/init.d/postgresqld start

Ahora ejecutaremos el siguiente comando para ver si se levantó el proceso:

root@darthmaul:~# ps -fea |grep postgres

Y nos aparecerá algo similar a ésto:

postgres 26543     1  0 17:52 pts/0    00:00:00 /opt/pgsql/bin/postmaster -i -D /opt/pgsql/data
postgres 26545 26543 0 17:52 ? 00:00:00 postgres: writer process
postgres 26546 26543 0 17:52 ? 00:00:00 postgres: wal writer process
postgres 26547 26543 0 17:52 ? 00:00:00 postgres: autovacuum launcher process
postgres 26548 26543 0 17:52 ? 00:00:00 postgres: stats collector process

Para detenerlo podemos ejecutar lo siguiente:

root@darthmaul:~# /etc/init.d/postgresqld stop

Para ingresar al manejador, podemos acceder como usuario postgres a la base de datos template1. Recuerda que deberá estar arriba el servicio de Postgres, ya sea usando el script que hicimos o ejecutando el comando postgres o postmaster como se indicó parrafos antes.

javoaxian@darthmaul:~$ psql -U postgres -d template1

Donde nos aparecerá algo similar a ésto:

Welcome to psql 8.3.1, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

template1=#


PONER CONTRASEÑA AL USUARIO POSTGRES
Como podemos ver, cuando nos conectamos a la base de datos template1 no se nos pidió contraseña, si deseamos que se nos pida una contraseña podemos realizar lo siguiente:

Dentro del prompt de postgres y como usuario postgres, le asignaremos una contraseña a este usuario:

template1=# ALTER USER postgres WITH PASSWORD 'CONTRASEÑADELUSUARIO';

Ya le creamos la contraseña al usuario postgres, pero ahora deberemos configurar el archivo pg_hba.conf, este archivo se encuentra en el directorio /opt/pgsql/data.

Abriremos el archivo /opt/pgsql/data/pg_hba.conf como usuario postgres y con el editor de nuestro agrado y buscaremos la siguientes líneas:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust

Y cambiaremos las palabras trust por md5. Lo cual nos quedará de la siguiente manera:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5

Guardaremos los cambios y si tenemos arriba el servicio de Postgres lo deberemos de matar ya sea usando el script que hicimos o matando el proceso ejecutando el siguiente comando como usuario postgres:

postgres@darthmaul:~$ kill -INT `head -1 /opt/pgsql/data/postmaster.pid`

Y volvemos arrancarlo con el script o con los comandos postgres o postmaster.

En este caso voy a usar postmaster:

postgres@darthmaul:~$ /opt/pgsql/bin/postmaster -D /opt/pgsql/data&

Ahora volvemos a entrar al prompt de Postgres como usuario postgres y nos deberá solicitar la contraseña que ingresamos con el comando ALTER USER:

postgres@darthmaul:~$ psql -U postgres -d template1
Password for user postgres:

Welcome to psql 8.3.1, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit

template1=#

Bueno, con ésto finalizo este artículo.
Saludos!!!

miércoles, 2 de abril de 2008

Instalar Apache desde código fuente en GNU/Linux

En este post exlicaré como instalar un servidor Apache en nuestra máquina GNU/Linux. Ésto deberá funcionar para cualquier distribución, ya sea para Debian, Ubuntu, Fedora, etc., e incluso hasta para equipos con sistema operativo UNIX.

Para fines prácticos la instalación la realizaré en el directorio /usr/local.

Lo primero que hay que hacer es bajar el archivo desde aquí.

En mi caso bajé el archivo httpd-2.2.8.tar.bz2.
Una vez que se haya descargado el archivo realizaremos los siguiente pasos como root. Para ello ejecutaremos ésto en una consola:

$ su -

Ahora que ya somos el usuario root, procederemos a instalar apache.

$ cp /ruta/donde/se/bajo/httpd-2.2.8.tar.bz2 /usr/local/src/
$ cd /usr/local/src/
$ tar -jxvf httpd-2.2.8.tar.bz2
$ cd httpd-2.2.8
$ ./configure --prefix=/usr/local/apache --enable-module=so
o
$ ./configure --prefix=/usr/local/apache --enable-so

Es posible que en esta parte, mande algunos errores de dependencia, como por ejemplo que no tienen instalado gcc, o los fuentes de GCC como es el paquete libc6-dev.

Para instalarlos en sistemas basados en Debian, como Ubuntu, simplemente ejecuten el comando apt-get install con los paquetes que vayan necesitando, por ejemplo:

$ apt-get install gcc libc6-dev

En el caso de otras distribuciones deberán usar sus herramientas para instalar los paquetes necesarios o en su defecto bajar los paquetes e instalarlos.

Una vez resueltos estos problemas seguiremos con la instalación.

$ make
$ make install

Con ésto ya tenemos instalado apache, ahora lo que haremos es configurar el usuario y grupo de trabajo que aparece como dueño de los procesos de apache.

Para ésto, primero crearemos el usuario apache y el grupo apache en caso de que no existan. Como esta cuenta no requiere un shell, la crearemos sin esta propiedad.

$ useradd -s /usr/sbin/nologin apache

o

$ useradd -s /sbin/nologin apache

Ahora editaremos el archivo /usr/local/apache/conf/httpd.conf con el editor de su preferencia. En mi caso me gusta usar vi pero como a algunos se les complica, usare como ejemplo nano.

$ nano /usr/local/apache/conf/httpd.conf

Deberán buscar dos líneas semejantes a éstas:

$ User daemon
Group daemon

Y cambiaremos daemon por apache en las dos líneas.

$ User apache
Group apache

Ahora guardamos los cambios y saldremos presionando Ctrl+S.

Listo, ahora lo único que nos resta es arrancar apache, para ésto, deberemos hacerlo como root siempre.

$ /usr/local/apache/bin/apachectl start

Abrimos nuestro navegador y teclamos la siguiente dirección: http://localhost/

Nos deberá aparecer algo como lo siguiente:


Para detenerlo ejecutaremos:

$ /usr/local/apache/bin/apachectl stop

Para quienes desean ejecutar apache desde que se inicia la máquina y usan Debian, Ubuntu o alguna distribución basada en Debian, pongo el siguiente script. Copien y peguen el código siguiente en un archivo llamado httpd.

#!/bin/sh
#
# description: startup and shutdown the Apache
#
echo "Apache start/stop"

APACHE2_HOME=/usr/local/apache

case "$1" in
'start')
# Start the Apache
echo -n "Starting the Apache Server... "
$APACHE2_HOME/bin/apachectl start
echo
;;
'stop')

# Stop the Apache
echo -n "Shutting down Apache Server... "
$APACHE2_HOME/bin/apachectl stop
echo
;;

'restart')
# Restart the Apache
echo -n "Restarting Apache Server... "
$0 stop
$0 start
echo
;;

*)
echo "Usage: httpd [ start | stop | restart ]"
exit 1
esac
exit 0

Ahora que se tiene el script, deberán colocarlo en el directorio /etc/init.d

$ cp httpd /etc/init.d/

Ahora ejecuten lo siguiente:

$ cd /etc/init.d
$ chmod 755 httpd
$ update-rc.d httpd defaults

Con esto el script se ejecutará apache cada vez que se inicie la máquina.

Con esto finalizamos la instalación de apache, pero como punto extra, pondré aquí cómo habilitar un directorio de nuestra cuenta de usuario para poder poner nuestras páginas y verlas en el navegador.

En este caso, yo habilitaré el directorio htdocs dentro del HOME de mi usuario, entonces para ésto usaré la ruta /home/javoaxian/htdocs.
Como usuario root abriremos el archivo /usr/local/apache/conf/httpd.conf

$ nano /usr/local/apache/conf/httpd.conf

Buscaremos la sección del módulo de alias

<IfModule alias_module>

En esta sección, buscaremos el siguiente párrafo:

    # If you include a trailing / on /webpath then the server will
# require it to be present in the URL. You will also likely
# need to provide a <Directory> section to allow access to
# the filesystem path.

Abajo de este párrafo, agregaremos las siguientes líneas para que quede de la siguiente manera:

    # If you include a trailing / on /webpath then the server will
# require it to be present in the URL. You will also likely
# need to provide a <Directory> section to allow access to
# the filesystem path.

Alias /javoaxian "/home/javoaxian/htdocs"
<Directory /home/javoaxian/htdocs>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS PROPFIND>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

Recuerden cambiar la ruta /home/javoaxian/htdocs a la ruta del directorio en su HOME que vayan a usar, y cambiar el alias que van a usar, que como podrán ver en la línea Alias /javoaxian "/home/javoaxian/htdocs" yo estoy usando el alias javoaxian.

Ahora guardamos el archivo y salimos de él. Posteriormente para que surtan efecto estos cambios, deberemos reiniciar apache en caso de estar activo y sino, en el momento que lo activemos deberán verse los cambios que hicimos.

Para reinicar el servidor de apache detendremos apache:

$ /usr/local/apache/bin/apachectl stop

Y ahora iniciamos apache:

$ /usr/local/apache/bin/apachectl start

Ha quedado configurado nuestro alias, ahora con nuestra cuenta de usuario crearemos el directorio htdocs dentro de nuestro HOME.

javoaxian@darthmaul:~$ mkdir htdocs

Ahora crearemos una página de prueba llamada index.html dentro del directorio htdocs, por ejemplo:

javoaxian@darthmaul:~$ cd htdocs
javoaxian@darthmaul:~$ nano index.html

Pondremos lo siguiente dentro del archivo:

Hola apache

Guardamos los cambios y salimos del archivo.

Para comprobar que se creó nuestro alias, abriremos nuestro navegador y teclearemos la dirección: http://localhost/javoaxian/index.html

Deberá mostrarse el mensaje Hola apache. Como podrán observar en la dirección http://localhost/javoaxian/index.html aparece el alias javoaxian, por lo cual, deberán cambiar éste por el que ustedes hayan puesto.

Con ésto concluyo este post.

martes, 11 de marzo de 2008

Borrar un archivo o directorio recursivamente en GNU/Linux

Existen ocasiones en las cuales deseamos borrar un archivo o un directorio que se encuentra en otro directorio y también dentro de sus subdirectorios. Un ejemplo de ésto, son los archivo .svn que usa Subversion.

Para ejemplificar lo antes mencionado pondré el siguiente ejemplo:

$ rm -rf /home/javoaxian/proyecto/.svn /home/javoaxian/proyecto/modulo1/.svn /home/javoaxian/proyecto/modulo2/.svn

Esto es muy tedioso y tardado, para lo cual, realizé este script en perl, donde le puedes indicar el archivo o directorio que deseas eliminar y en que directorio lo va a buscar.

Aquí les dejo el código del script:
#!/usr/bin/perl
# Creado por: JavoAxian
# Año: 2007

$elementoABorrar = $ARGV[0];
$directorio = $ARGV[1];

if($elementoABorrar eq "")
{
print "Ingresa el Archivo/Directorio a borrar\n";
exit(0);
}
elsif($directorio eq "")
{
print "Ingresa el Directorio donde se encuentra el Archivo/Directorio a " .
"borrar\n";
exit(0);
}

$buscar = `find $directorio -name $elementoABorrar -print`;

@directorios = split(/\n/,$buscar);

print "Iniciando la eliminación del archivo/directorio: $elementoABorrar en " .
"el directorio: $directorio\n";

for($contador=0;$contador<@directorios;$contador++)
{
$dir = $directorios[$contador];
`rm -rf "$dir"`;
print "Archivo/Directorio eliminado: $dir\n";
}

print "Finalizando la eliminación del Archivo/Directorio: $elementoABorrar\n";

Copien el código anterior y peguenlo en un archivo. Para ejemplificar le pondré al programa el nombre de borrarArchivosRecursivamente.pl.
Para usarlo, deberemos darle permisos de ejecusión y posteriormente correr el comando recibiendo como argumentos el archivo o directorio para borrar y el directorio donde se encuentra el archivo a borrar:

$ chmod 755 borrarArchivosRecursivamente.pl
$ ./borrarArchivosRecursivamente.pl .svn /home/javoaxian/proyecto

La salida sería algo como ésto:

Iniciando la eliminación del archivo/directorio: .svn en el directorio: proyecto
Archivo/Directorio eliminado: proyecto/.svn
Archivo/Directorio eliminado: proyecto/modulo2/.svn
Archivo/Directorio eliminado: proyecto/modulo1/.svn
Finalizando la eliminación del Archivo/Directorio: .svn

Espero que les pueda servir.

viernes, 29 de febrero de 2008

Instalar Eclipse en GNU/Linux

Actualización 2008-03-28:
Funciona para Debian y otras distribuciones pero deberán ejecutar los comandos como usuario root en donde se usa el comando sudo y omitiendo dicho comando.
Recuerden que el comando sudo sirve para ejecutar comandos de root con cualquier cuenta de usuario.

Esta guía está enfocada para explicar como instalar Eclipse en un sistema GNU/Linux.

Antes de iniciar la instalación deberemos tener instalado Java, puede existir en algunas distribuciones como por ejemplo Ubuntu, que ya tenga instalada una versión del "JDK", como puede ser el paquete "sun-java5-xxx" o "sun-java6-xxx", si ya contamos con alguno de estos paquetes no será necesario bajar el "JDK", en caso contrario deberemos de realizar lo indicado en el apartado Instalación de Java. Yo prefiero bajar el paquete, que usar el que está en los repositorios.
Otro caso que puede presentarse y éste es más común que el anterior es que exista el comando "java" en la máquina el cuál pertenece al paquete "gij", si éste es el caso pudiesemos renombral el comando "java" existente ya que es una liga en el sistema de archivos. Un ejemplo de como renombrarlo podría ser:
$ sudo mv /usr/bin/java /usr/bin/java.ubuntu

y ahora si podremos instalar el "JDK" sin problemas.

Instalación de Java
deberemos entrar al sitio oficial y bajarnos ya sea el Java SE o el Java EE 5 SDK, en nuestro caso bajaremos el primero. A la fecha en que se preparó esta guía la versión más reciente es el JDK 6 Update 4. Elegiremos el archivo: "Linux self-extracting file jdk-6u4-linux-i586.bin".

Una vez que terminó de bajarse el archivo procederemos a iniciar la instalación del mismo. Ésto lo realizaremos abriendo una consola para ejecutar los comandos necesarios.

En esta instalación colocaremos el "JDK" dentro del directorio /usr/local/, para lo cuál moveremos el archivo que descargamos al directorio /usr/local, de la siguiente manera:

$ sudo mv ~/Downloads/Java/jdk-6u4-linux-i586.bin /usr/local/

ahora que hemos movido el archivo, nos moveremos al directorio /usr/local y le daremos permisos de ejecusión al archivo:

$ cd /usr/local/
$ sudo chmod 755 jdk-6u4-linux-i586.bin

ya con los permisos necesarios, procederemos a ejecutar el archivo:

$ sudo ./jdk-6u4-linux-i586.bin

nos aparecerá la licencia del "JDK" y al final de leer todo tendremos las opción de aceptar o rechazar los términos, donde escribiremos "yes" y presionamos "Enter":

For inquiries please contact: Sun Microsystems, Inc., 4150
Network Circle, Santa Clara, California 95054, U.S.A.

Do you agree to the above license terms? [yes or no]

esto desempaquetará el archivo y nos creará el directorio "jdk1.6.0_04", el cuál contiene los archivos necesarios para ejecutar "Java".

Para que todos los comandos de "Java" funcionen correctamente agregaremos en el archivo "/etc/profile" la variable de ambiente JAVA_HOME, y a su vez agregaremos a la variable de ambiente PATH la ruta de los ejecutables de "Java".

En este caso usaremos el editor de texto "vi" para editar el archivo /etc/profile pero puede usarse el de su elección.

$ sudo vi /etc/profile

donde aparecerá algo parecido a esto:

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

if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\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

umask 022

Antes de la línea "umask 022" agregaremos las siguientes líneas:

export JAVA_HOME=/usr/local/jdk1.6.0_04
export PATH=$PATH:$JAVA_HOME/bin

guardamos los cambios y salimos del archivo.
Ahora para probar que nuestras variables están correctas ejecutaremos el siguiente comando para recargar las variables de ambiente:

$ source /etc/profile

y ejecutamos el siguiente comando:

$ java -version

el comando deberá arrojarnos la siguiente salida:

java version "1.6.0_04"
Java(TM) SE Runtime Environment (build 1.6.0_04-b12)
Java HotSpot(TM) Server VM (build 10.0-b19, mixed mode)

Para que funcione el comando "java" sin necesidad de ingresar la ruta completa de donde se encuentra alojado, será necesario reiniciar el ambiente gráficos, esto deberá hacerse cerrando tu sesión de usuario, el cual permite que reinicie el ambiente gráfico. En caso de que no funcione reinicia el equipo para que levante correctamente las variables de ambiente que configuramos anteriormente.

Con ésto queda instalado el "JDK", ahora iniciaremos la instalación de "Eclipse".

Instalación de Eclipse
Iniciaremos por descargar el archivo de Eclipse ingresando a su sección de Descargas. En esta sección nos aparecen diferentes sabores de configuraciones de "Eclipse", como son:
- Eclipse IDE for Java Developers
- Eclipse IDE for Java EE Developers
- Eclipse IDE for C/C++ Developers
- Eclipse for RCP/Plug-in Developers
- Eclipse Classic 3.3.1.1

De acuerdo a lo que queramos realizar podremos descargar la que más nos agrade según el enfoque que queramos darle, si tienes dudas te recomiendo que descarges la versión "Classic", en éste caso bajaré la "IDE for Java EE Developers" ya que estoy trabajando con aplicaciones en web con "Java".

Ya que hemos elegido que tipo de archivo bajar y que ya lo tengamos en nuestra máquina comenzaremos por instalarlo. Podemos instalarlo donde queramos, en este caso lo instalaremos en el "HOME" de mi usuario, para lo cual nos moveremos nuestro "HOME" y copiaremos el archivo de donde fue guardado al "HOME" del usuario.

$ cd ~/
$ cp ~/Downloads/Eclipse/eclipse-jee-europa-fall2-linux-gtk.tar.gz .

Hecho ésto, descomprimiremos el archivo:

$ tar -xzvf eclipse-jee-europa-fall2-linux-gtk.tar.gz

ahora simplemente entramos al directorio "eclipse" y ejecutamos el comando "eclipse":

$ cd eclipse/
$ ./eclipse &

Para lo cual aparecerá una pantalla donde te pregunta cuál es el directorio de tu espacio de trabajo:


Una vez indicado el directorio aparecerá la pantalla principal de "Eclipse".


Con esto ya tenemos instalado "Eclipse".

Si deseamos que el comando "eclipse" se ejecute si necesidad de especificar toda la ruta de en donde se encuentra, podemos agregar una variable de ambiente como lo hicimos con "Java" en el archivo /etc/profile, agregando la variable de ambiente ECLIPSE poniendole como valor la ruta donde fue instalado y agregando a la variable PATH la ruta de donde se encuentran los ejecutables de "Eclipse":

export ECLIPSE=/home/javoaxian/eclipse
export PATH=$PATH:$JAVA_HOME/bin:$ECLIPSE

Cabe mencionar que no es necesario crear una nueva declaración de la variable PATH, únicamente hay que colocar en la declaración que teníamos anteriormente ":$ECLIPSE" al final de la línea.

Recuerda que si no haz reiniciado tu ambiente gráfico o tu máquina deberas ejecutar el comando "source /etc/profile" para cargar las variables de ambiente definidas allí y que puedas usar el comando "eclipse" desde la consola que aplicaste el comando "source /etc/profile".

Ésto concluye la guía de instalación de Java y Eclipse.

jueves, 28 de febrero de 2008

Crear llaves con SSH

Este pequeño manual trata de explicar rápidamente como se pueden crear las llaves tanto pública como privada para poder comunicar a dos equipos por medio de estas llaves generadas sin necesidad de introducir una contraseña.

Como primer paso crearemos las dos llaves, esto se debe hacer a desde la máquina cliente:

javoaxian@cliente:~$ ssh-keygen -t dsa

si quisieramos usar el "RSA" ejecutaremos lo siguiente pero es recomendable usar "DSA" ya que es más segura:

javoaxian@cliente:~$ ssh-keygen -t dsa


el sistema nos pregunta donde queremos guardar el archivo, aquí podemos presionar "Enter":

Generating public/private dsa key pair.
Enter file in which to save the key (/home/javoaxian/.ssh/id_dsa):

ahora se nos pedirá una frase la cuál nos dá un nivel más de seguridad, en este caso no incrustaremos una frase, únicamente presionaremos "Enter", así como en su confirmación de la frase:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

después de ésto el sistema presentará algo similar a esto:

Your identification has been saved in /home/javoaxian/.ssh/id_dsa.
Your public key has been saved in /home/javoaxian/.ssh/id_dsa.pub.
The key fingerprint is:
ec:1a:27:90:d4:47:87:d3:23:fa:70:3a:7f:9b:d7:cf javoaxian@cliente

ya que están generadas las llaves deberemos transferir la llave pública a la cuenta de la máquina servidor, para lo cúal deberemos realizar los siguiente:

javoaxian@cliente:~$ scp ~/.ssh/id_dsa.pub javoaxian@servidor:.

ahora deberemos conectarnos a la cuenta de la máquina servidor:

javoaxian@cliente:~$ ssh javoaxian@servidor

ya que estamos conectados en la máquina servidor verificaremos si existe el directorio ".ssh", en caso de no existir ejecutaremos lo siguiente:

javoaxian@servidor:~$ mkdir ~/.ssh

y le cambiaremos los permisos para que únicamente pueda ingresar el usuario:

javoaxian@servidor:~$ chmod 600 .ssh

hecho esto, procederemos a agregar la llave al directorio de la siguiente manera:

javoaxian@servidor:~$ cat id_dsa.pub >> ~/.ssh/authorized_keys2

borraremos el archivo "id_dsa.pub":

javoaxian@servidor:~$ rm id_dsa.pub

ahora podremos conectarnos desde la cuenta de la máquina cliente a la cuenta de la máquina servidor sin que nos pida una contraseña:

javoaxian@cliente:~$ ssh javoaxian@servidor
javoaxian@servidor:~$

Hasta aquí por el momento.