martes, 30 de diciembre de 2008

Error al arrancar máquinas virtuales


Dicen que una imagen vale más que mil palabras, así que por eso cuelgo esta imagen. Muestra un error que nos devuelve VirtualBox al intentar arrancar una máquina virtual.

Esto nos pasa cuando hemos actualizado el kernel del sistema. Así que tendremos que ejecutar sudo /etc/init.d/vboxdrv setup, al ejecutarlo verás que recompila un módulo de VirtualBox en el kernel.
* Stopping VirtualBox kernel module * done.
* Recompiling VirtualBox kernel module * done.
* Starting VirtualBox kernel module * done.

Una vez que se ha recompilado el módulo y se ha iniciado el servicio vboxdrv, vuelve a intentar arrancar la máquina virtual y verás que funciona sin problemas.

miércoles, 17 de diciembre de 2008

Borrar copias de seguridad antiguas con bash

Con este script en bash podrás borrar las copias de seguridad antiguas de tu disco duro.

Hay que configurar la ruta donde están el disco duro donde volvamos las copias de seguridad (DirectorioBackup=/BACKUP), una vez configurado esto ya podemos programar su ejecución periódica antes de que se lance la copia de seguridad nueva, para que cuando intente copiar los ficheros tenga espacio.

El script mira el espacio de la última copia de seguridad y irá borrando directorio desde el más antiguo al más moderno, hasta dejar el espacio suficiente para que entre una copia de seguridad con el mismo tamaño que la última copia.
#!/bin/bash
DirectorioBackup=/BACKUP
EspacioMaxQueOcupaUnaCopia=`du -s $DirectorioBackup/* | sort | tail -n1 | awk '{print $1}' `
EspacioDisponibleHDD=`df -P $DirectorioBackup | grep -v -i S.ficheros | awk '{print $4}'`
while [ $EspacioMaxQueOcupaUnaCopia -gt $EspacioDisponibleHDD ]; do
DirectiorABorrar=`ls -t $DirectorioBackup | tail -n1`
rm -fr "$DirectorioBackup/$DirectiorABorrar"
EspacioDisponibleHDD=`df -P $DirectorioBackup | grep -v -i S.ficheros | awk '{print $4}'`
done

Para el correcto funcionamiento del script, el directorio /BACKUP tendrá que almacenar un directorio por copia de seguridad, por ejemplo:
/BACKUP/20081217
/BACKUP/20081216
/BACKUP/20081215

Si el script se encuentra con esta casuística, borrará primero el directorio /BACKUP/20081215 y si aún así no le queda espacio suficiente, borrará /BACKUP/20081216.

Glade 3.4.3 para Windows

Para hacer correr el entorno de desarrollo de interfaces de escritorio Glade, tendrás que descargar gtk-2.12.9-win32-1.exe y glade-3.4.3-win32-1.zip. Estos ficheros los puedes encontrar en los siguientes enlaces.
http://sourceforge.net/project/showfiles.php?group_id=98754
http://surfnet.dl.sourceforge.net/sourceforge/gladewin32/gtk-2.12.9-win32-1.exe
http://kent.dl.sourceforge.net/sourceforge/gladewin32/glade-3.4.3-win32-1.zip

  1. Descargar los dos ficheros.

  2. Instalar gtk-2.12.9-win32-1.exe (c:\GTK)

  3. Descomprimir glade-3.4.3-win32-1.zip en un directorio

  4. Encontrarás un directorio /bin donde hay un fichero glade-3.exe

  5. Ejecutar glade-3.exe


Al ejecutar glade-3.exe tendrás que ver el entorno de desarrollo perfectamente.

jueves, 27 de noviembre de 2008

vdi is already registered

Es posible que algún día necesitemos restaurar una copia de una máquina virtual que teníamos instala. O simplemente pretendemos copiar una máquina virtual para tener dos y no tener que esperar el tiempo de instalación.

Para hacer esto tenemos que registrar el fichero.vdi en el servidor de VirtualBox. Para hacer esto haremos:
VBoxManage registerimage disk fichero.vdi -type normal

Si este fichero.vdi ya ha estado funcionando en este servidor de VirtualBox no mostrará el siguiente error.
VirtualBox Command Line Management Interface Version 1.6.6
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

[!] FAILED calling virtualBox->RegisterHardDisk(hardDisk) at line 6478!
[!] Primary RC = NS_ERROR_INVALID_ARG (0x80070057) - Invalid argument value
[!] Full error info present: true , basic error info present: true
[!] Result Code = NS_ERROR_INVALID_ARG (0x80070057) - Invalid argument value
[!] Text = A hard disk with UUID {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} or with the same properties ('fichero.vdi') is already registered
[!] Component = VirtualBox, Interface: IVirtualBox, {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}
[!] Callee = IVirtualBox, {xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}

Para solucionar esto podemos clonar el fichero.vdi, de forma que le asignará un nuevo identificador y podremos registrar el fichero.vdi resultante.
VBoxManage clonevdi DiscoAClonar.vdi DiscoResultante.vdi
VirtualBox Command Line Management Interface Version 1.6.6
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

Una vez terminado el proceso de clonación podremos registrar el nuevo fichero.vdi.
VBoxManage registerimage disk DiscoResultante.vdi -type normal

miércoles, 19 de noviembre de 2008

Tamaño máximo de correo Postfix / dbmail

Para controlar el tamaño de los correos que salen de nuestro servidor de correos dbmail/postfix simplemente tendremos que configurar la variable message_size_limit asignándole un valor. Esta variable tendremos que modificarla o añadirla si no la tenemos en el fichero /etc/postfix/main.cf.
message_size_limit = 5120000

En este caso el límite del correo a enviar es de 5MB.

martes, 18 de noviembre de 2008

Cliente VRDP para la consola de servidores virtuales

Recordaréis que en otro post publiqué como modificar los parámetros de una máquina virtual, pues ahora veremos para qué sirve el parámetro vrdpport.

Con este parámetro definimos el puerto que se usará en la máquina servidora para el volcado de la consola del sistema virtual. Es decir, en lugar de usar un entorno gráfico para usar la máquina virtual, lo volcaremos a este puerto para poder servir el sistema.

Este es el comando para modificar este puerto de escucha, como es lógico cada máquina virtual tendrá que tener su propio puerto, no podemos tener dos máquinas virtuales en el mismo puerto. Si intentamos lanzar dos máquinas en el mismo puerto, simplemente la segunda no iniciará.
VBoxManage modifyvm NombreDeMiMaquinaVirtual -vrdpport 3390

Cuando iniciamos la máquina virtual, tendremos que hacerlo con el -type vrdp, así se iniciará sin esperar a que nadie se conecte a la consola.
VBoxManage startvm NombreDeMiMaquinaVirtual -type vrdp

Para entrar desde un máquina GNU/Linux en la consola de administración de una máquina virtual, solo tendremos que hacer rdesktop -a 16 IP:PUERTO, usando la IP del servidor de máquinas virtuales, porque es ahí donde está corriendo el puerto de escucha.
rdesktop -a 16 xxx.xxx.xxx.xxx:3390

Además de hacer esto también podríamos configurar la máquina virtual con algún programa de administración para conectarnos a ella directamente. Sin necesidad de entrar desde la máquina servidora. Por ejemplo SSH, VNC o Terminal Server, en el caso de máquina Window$.

Para conectar con la consola de administración desde una máquina Window$ supongo que será usando del cliente de Terminal Server, pero no sé si se le podrá modificar el puerto al que ataque.

viernes, 14 de noviembre de 2008

Administración de máquinas virtuales

Encender máquinas virtuales


Para encender una máquina virtual desde línea de comandos en un servidor sin entorno gráfico.
VBoxManage startvm winxp -type vrdp

Apagar máquinas virtuales


Para apagar las máquinas virtuales tenemos varias opciones, he probado con una máquina virtual Debian y la opción acpipowerbutton hace como si en una máquina física apretásemos una vez el botón de encendido. Esto envía una señal al sistema para que detenga todos los procesos y ser apague correctamente.
VBoxManage controlvm Debian acpipowerbutton

Otra opción para apagar una máquina virtual es poweroff, yo llamo a esto "el botonazo", básicamente esto lo que hace es "cortarle la corriente eléctrica" a la máquina virtual y no deja que el sistema se apague correctamente.
VBoxManage controlvm winxp poweroff

Esto me llevó a buscar algún método para apagar una máquina Window$ que no responde a una petición acpipowerbutton y sin tener que usar el llamado "botonazo".
Pues encontré una solución muy buena. Con esta instrucción podemos apagar un servidor Window$ sin necesidad de estar conectado, simplemente ejecutando el comando desde el servidor de máquinas virtuales. Donde pongo "xxx.xxx.xxx.xxx" hay que poner la IP de la máquina Window$ que pretendemos apagar. Donde pongo "-U Administrador%1234", Administrador es el usuario con permisos para apagar la máquina y 1234 es la clave del usuario Administrador.
net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%1234

Registro de discos duros


Hay que tener mucho cuidado con el tipo de registro que hacemos de un disco duro virtual, porque si lo hacemos inmutable no se modificará su estado. Es decir, cuando instalemos algo y apaguemos y volvamos a encender la máquina virtual, todo se quedará como al principio.
Esto puede ser muy útil cuando tenemos una máquina virtual en la que queremos hacer alguna prueba de configuración pero queremos probar pudiendo volver al estado anterior.
VBoxManage registerimage disk winxp.vdi -type immutable
VBoxManage registerimage disk winxp.vdi -type normal

Montar una imagen ISO


Ya que tenemos una unidad virtual de DVD, podríamos montarla con una imagen ISO. Es sencillo, simplemente tenemos que decirle cual es la máquina virtual y donde está la ISO. Cuando volvamos a encender la máquina virtual veremos que dentro del lector de DVD tenemos los datos que contienen la ISO.
VBoxManage modifyvm winxp -dvd /home/usuario/misISOs/PoInT_v7.iso

jueves, 13 de noviembre de 2008

Creación de máquina virtual desde linea de comandos

Podréis encontrar en muchos sitios web como crear máquinas virtuales desde el asistente gráfico que incorpora VirtualBox. Dejo algunos enlaces para el que prefiera crearlas desde entorno gráfico.

crear-maquinas-virtuales-en-debian-etch-con-virtualbox
crear-una-maquina-virtual-virtual-box
crear-maquina-virtual-para-instalar

Yo personalmente prefiero administrar siempre los servidores desde linea de comandos, así que publico como crear máquinas virtuales desde la linea de comandos.

Lamentablemente necesitaba virtualizar una máquina window$ así que son los comandos que usaré para publicar este post.

Lo primero será crear la máquina virtual dándole un nombre y registrándola en nuestro VirtualBox.
VBoxManage createvm -name winxp -register

Una vez creada iremos lanzando modificaciones para tener una configuración más concreta de nuestra máquina virtual.

Yo ya tenía una imagen de un window$ XP, así que vamos a reciclarla en esta máquina. Y así nos ahoramos el tiempo de instalación.

Lo primero que hay que hacer para asociar un disco virtual a una máquina virtual es registrar el disco en nuestro VirtualBox.
VBoxManage registerimage disk winxp.vdi -type normal

Después asociamos el disco a la máquina virtual.
VBoxManage modifyvm winxp -hda winxp.vdi

Le asignamos a la máquina virtual 1GB de memoria RAM que cogerá de la máquina servidora.
VBoxManage modifyvm winxp -memory 1024

A mí personalmente no me gusta dejar el puerto de VRDP por defecto, así que lo modifico para que esta máquina virtual escuche en otro puerto distinto. Además si pretendemos tener más de una máquina virtual en el mismo servidor, no podremos iniciarlas a la vez si el puerto VRDP es el mismo.
VBoxManage modifyvm winxp -vrdpport 3390

Configuramos la tarjeta de red con NAT sobre la máquina servidora.
VBoxManage modifyvm winxp -nic1 nat -cableconnected1 on

Una vez hecho todo esto ya tendríamos la máquina preparada para correr. Y podríamos iniciarla ejecutando:
VBoxManage startvm winxp -type vrdp

Si queremos entrar dentro de la consola de nuestra máquina servidora usamos el comando rdesktop, donde pongo las xxx.xxx.xxx.xxx tendrás que poner la IP de tu servidor de VirtualBox.
rdesktop -a 16 xxx.xxx.xxx.xxx:3390

Ya puedes usar tu máquina Window$ corriendo en un servidor GNU/Linux con VirtualBox.

Todo esto está muy bien, pero será más cómodo la esa máquina virtual tenga su propia IP dentro de nuestra Red y que la máquina servidora sea transparente. Para esto tendremos que hacer algunas modificaciones en nuestro sistema y en nuestra máquina virtual.

Lo primero que haremos será modificar nuestro fichero /etc/network/interfaces. Tendremos la configuración una nueva tarjeta "virtual" que hará un puente entre nuestra tarjeta de red que utilicemos.
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto br0
iface br0 inet dhcp
bridge_ports eth0

Después de reiniciar las interfaces (/etc/init.d/networting restart) hacemos un ifconfig y veremos las dos tarjetas, la virtual con si propia IP asignada por el DHCP y la eth0 también con su propia IP.
usuario@maquina:~$ ifconfig
br0 Link encap:Ethernet direcciónHW XX:XX:XX:XX:XX:XX
inet dirección:xxx.xxx.xxx.xxx Difusión:xxx.xxx.xxx.xxx Máscara:xxx.xxx.xxx.xxx
dirección inet6: fe80::20a:5eff:fe5f:e275/64 Alcance:Vínculo
ARRIBA DIFUSIÓN CORRIENDO MULTICAST MTU:1500 Métrica:1
RX packets:7328 errors:0 dropped:0 overruns:0 frame:0
TX packets:6345 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:0
RX bytes:5590681 (5.3 MB) TX bytes:882468 (861.7 KB)

eth0 Link encap:Ethernet direcciónHW XX:XX:XX:XX:XX:XX
ARRIBA DIFUSIÓN MULTICAST MTU:1500 Métrica:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Bucle local
inet dirección:127.0.0.1 Máscara:255.0.0.0
dirección inet6: ::1/128 Alcance:Anfitrión
ARRIBA LOOPBACK CORRIENDO MTU:16436 Métrica:1
RX packets:3287 errors:0 dropped:0 overruns:0 frame:0
TX packets:3287 errors:0 dropped:0 overruns:0 carrier:0
colisiones:0 txqueuelen:0
RX bytes:155517 (151.8 KB) TX bytes:155517 (151.8 KB)

Ahora vamos a crear una nueva tarjeta de red de VirtualBox que estará enlazada con la br0 que hemos creado. Para ello tenemos que parar un servicio de VirtualBox que administra las conexiones de red de las máquinas virtuales. Crear la tarjeta VirtualBox y después volver a encender el administrador de redes VirtualBox.

Las tarjetas de red de VirtualBox están asociadas a un usuario, yo corro los servicios de VirtualBox con root, si preferís correrlos con otro usuario, tendréis que darles permisos al fichero /dev/net/tun.
/etc/init.d/vboxnet stop
VBoxAddIF vbox0 root br0
/etc/init.d/vboxnet start

Ahora al hacer ifconfig veremos además de nuestra lo, eth0 y br0 la nueva tarjeta vbox0.

Solo nos falta asignar esta vbox0 para que la use directamente nuestra máquina virtual.
VBoxManage modifyvm winxp -nic1 hostif -cableconnected1 on -hostifdev1 vbox0

vbox0 no puedes configurarla desde el servidor de máquinas virtuales, la configuración de IP y puerta de enlace tendrás que hacerla dentro de la máquina virtual.

Es posible que necesitemos tener un disco secundario para usar como almacen dentro de nuestra máquina virtual. Son un par de pasos muy sencillos.

Creamos el fichero .vdi con un tamaño máximo (30GB) y lo registramos dentro de nuestro servidor VirtualBox. Y después asociamos ese disco a la máquina virtual que prefiramos. Una vez hecho esto iniciamos la máquina virtual y será dentro de la máquina virtual donde tendremos que crearle una partición y formatearla.
VBoxManage createvdi -filename Almacen.vdi -size 30000 -register
VBoxManage modifyvm winxp -hdb Almacen.vdi

jueves, 6 de noviembre de 2008

Instalación de VirtualBox en Debian / Ubuntu

Simplemente tendremos que incluir la siguiente linea en el /etc/apt/sources.list.
deb http://download.virtualbox.org/virtualbox/debian etch non-free

Una vez incluida hacemos aptitude update para actualizar la lista de paquetes.

Posíblemente tengamos un error porque no tenemos guardada una clave publica del repositorio. Para solucionarlo ejecutaremos:
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -

aptitude update

Y por último instalaremos el paquete virtualbox
aptitude install virtualbox

Y ya tenemos instalado en nuestro sistema Debian VirtualBox.

Granja de Servidor VirtualBox

Dejaré aquí una relación de post que he creado para tener más organizado el blog. Es un pequeño manual sobre como instalar y administrar un servidor VirtualBox con una granja de servidores virtuales.

No es muy complicado de instalar.

martes, 14 de octubre de 2008

viola la llave foránea "dbmail_mail boxes_owner_idnr_fkey"

Tengo un dbmail corriendo en PostgreSQL y encontré este error en el log de PostgreSQL /var/log/postgresql/postgresql-8.1-main.log

DETALLE: La llave (owner_idnr)=(0) no está presente en la tabla «dbmail_users».
2008-10-14 13:25:12 CEST ERROR: inserción o actualización en la tabla «dbmail_mailboxes» viola la llave foránea «dbmail_mail
boxes_owner_idnr_fkey»


Pensé que podría haber algún error entre las relaciones de usuarios y alias y busqué algún error entre estas tablas. Ejecutando este SELECT no deberíamos obtener ningún resultado.

SELECT * FROM dbmail_aliases WHERE deliver_to NOT IN (SELECT user_idnr FROM dbmail_users);


Ya que todos los registros de aliases deberían tener su correspondiente en la tabla de usuarios, para localizar su mailbox correspondiente. El problema que tenía era que esa sentencia sí que me devolvía registros y esos registros no tenían usuarios asociados y por tanto tampoco mailbox asociados.

Así que no encontraba el buzón donde tenía que mandar los correos y ese es el error que ves en el log de PostgreSQL viola la llave foránea «dbmail_mail
boxes_owner_idnr_fkey»
.

Creo que el problema viene del administrador que he creado para crear y editar cuentas de correos desde web. Tendré que repararlo.

viernes, 12 de septiembre de 2008

Error:[db] db.c,db_usermap_resolve(+4699): could not select usermap

Creo recordar que es el mismo problema que tengo publicado en este enlace.

Error:[db] db.c,db_usermap_resolve(+4699): could not select usermap

http://josemanuelruizbaena.blogspot.com/2008/05/fatal-pgsqletcpostfixsql-pop-before.html

postfix/trivial-rewrite[9587]: warning: connect to pgsql server localhost: SSL SYSCALL error: No such file or directory?

Si tenemos este error es que Postfix no es capaz de conectar con el servidor de base de datos PostgreSQL porque solo está admitiendo conexiones SSL.

Simplemente tendrás que editar el fichero /etc/postgresql/8.1/main/postgresql.conf y en la linea que pone "ssl = true", poner "ssl = false" y reiniciar el servidor de base de datos (/etc/init.d/postgresql-8.1 restart).

dbmail con PostgreSQL Debian (Etch)

Supongo instalado el servidor de base de datos PostgreSQL y me centraré más en la instalación y configuración de dbmail.

Una cosa si tendremos en cuenta, en el fichero /etc/postgresql/8.1/main/pg_hba.conf tenemos que modificar el modo de identificación de los usuario md5, para ello modificaremos la linea:
local all all ident sameuser

Por:
local all all md5

Una vez hecho esto simplemente reiniciaremos PostgreSQL (/etc/init.d/postgresql-8.1 restart) y empezaremos por crear la base de datos dbmail y el usuario dbmail dentro del servidor de base de datos PostgreSQL.
#su postgres
$psql template1
CREATE USER dbmail PASSWORD '123456789';
CREATE DATABASE dbmail OWNER dbmail ENCODING = 'UNICODE';
\q

Probamos el acceso a la base de datos dbmail, por si hay algún problema.
# psql -U dbmail dbmail
Contraseña para usuario dbmail:
Bienvenido a psql 8.1.11, la terminal interactiva de PostgreSQL.

Digite: \copyright para ver los términos de distribución
\h para ayuda de comandos SQL
\? para ayuda de comandos psql
\g o or termine con punto y coma para ejecutar una consulta
\q para salir

dbmail=> \q

Instalaremos postfix, postfix-pgsql, para ello:
aptitude install postfix postfix-pgsql

General type of configuration? Internet Site
Nombre de correo? miservidor.midominio

Vamos a comenzar a instalar dbmail, editaremos el fichero /etc/apt/sources.list y añadimos la linea:
deb http://debian.nfgd.net/debian stable main

Después de actualizar la lista de paquetes (aptitude update) instalaremos el paquete dbmail-pgsql, que instalará por dependencia el paquete dbmail.
aptitude install dbmail-pgsql

Tenemos que crear la estructura de la base de datos, para ello:
cp /usr/share/doc/dbmail-pgsql/examples/create_tables.pgsql.gz .
gunzip create_tables.pgsql.gz .
psql -U dbmail dbmail < create_tables.pgsql

Ya tenemos instalada la aplicación, ahora empezamos a configurar. Editamos el fichero /etc/default/dbmail (nano /etc/default/dbmail) y añadimos:
START_POP3D=1
START_IMAPD=1
START_LMTPD=1

Editamos el fichero /etc/dbmail/dbmail.conf y modificamos estas lineas:
driver = pgsql
authdriver = sql
host = localhost
pass = 123456789
[POP] POP_BEFORE_SMTP = yes,
[IMAP] IMAP_BEFORE_SMTP = yes

Reiniciamos dbmail y tendremos que ver algo parecido a esto:
/etc/init.d/dbmail restart
Starting dbmail servers: dbmail-imapd dbmail-pop3d dbmail-lmtpd.

Tenemos que instalar clamsmtp clamav-daemon postgrey.
aptitude install clamsmtp clamav-daemon postgrey

Es el fichero de configuración de postfix tendremos que tocar algunas cosas.
nano /etc/postfix/main.cf

Añadiremos en la primera línea sin comentario esta variable y la inicializaremos con el nombre del dominio del cual estemos montando el servidor de correo electrónico. Es muy importante que este dominio sea un dominio valido, es decir que tenga todas las características de un dominio, .com .es .net ... algunos servidores de anti-spam se basan en el nombre del servidor de correo para definirlo como spam y lo último que queremos que ocurra es que nuestro nuevo servidor de correo sea marcado como servidor de spam.
myhostname = www.midominio.com

# resuelve en /etc/hosts (no solo dns)
smtp_host_lookup = dns, native

Definimos que busque en el fichero /etc/postfix/sql-pop-before-smtp.cf las IPs que tienen permiso para enviar correos desde nuestro servidor, así no necesitamos tener autenticación en nuestro servidor SMPT, porque siempre que hagamos una lectura antes del intento de envío, el servidor POP o IMAP capturará nuestra IP y gracias a la conexión del fichero /etc/postfix/sql-pop-before-smtp.cf nuestra IP aparecerá en la lista de IPs permitidas.
# utilizo POP BEFORE SMTP para no actuar de OpenRelay
mynetworks = 127.0.0.0/8, pgsql:/etc/postfix/sql-pop-before-smtp.cf

Igualmente utilizaremos una conexión a la base de datos para sacar el listado de dominios de los que debemos aceptar correos electrónicos. En esta ocasión la guardamos en una variable y después lo añadimos a la variable mydestination.
# se pueden añadir dominios en la base de datos
transport_maps = pgsql:/etc/postfix/sql-transport.cf
mydestination = localhost, localhost.localdomain, $transport_maps
smtpd_recipient_restrictions =
permit_mynetworks,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:60000
content_filter = scan:localhost:10026
receive_override_options = no_address_mappings

Ahora editaremos el fichero /etc/postfix/master.cf y verificamos que estas tres instrucciones está activas.
dbmail-lmtp unix - - n - - lmtp
-o disable_dns_lookups=yes
# AV scan filter (used by content_filter)
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# For injecting mail back into postfix from the filter
127.0.0.1:10025 inet n - n - 16 smtpd
-o content_filter=
-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks
-o smtpd_helo_restrictions=
-o smtpd_client_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o smtpd_authorized_xforward_hosts=127.0.0.0/8,pgsql:/etc/postfix/sql-pop-before-smtp.cf

Aún nos quedan crear los ficheros /etc/postfix/sql-pop-before-smtp.cf y /etc/postfix/sql-transport.cf
El primero le indica a Postfix las IPs que tienen permiso para enviar (SMTP) por haber leído correo previamente (POP3 o IMAP). Es el archivo /etc/postfix/sql-pop-before-smtp.cf y su contenido es:
user=dbmail
password=123456789
dbname=dbmail
hosts=localhost
table=dbmail_pbsp
select_field=since
where_field=ipnumber

El segundo nos va a permitir agregar nuevos dominios desde la base de datos. Es el archivo /etc/postfix/sql-transport.cf y su contenido:
user=dbmail
password=123456789
dbname=dbmail
table=dbmail_transport
select_field=transport
where_field=domain
hosts=localhost

Ahora tendremos que crear la tabla dbmail_transport en la base de datos dbmail si no existe. No podemos olvidarnos de hacer el INSERT que agregará el/los dominio a los que escuchará nuestro servidor de correo.
psql -U dbmail dbmail
Contraseña para usuario dbmail:
Bienvenido a psql 8.1.11, la terminal interactiva de PostgreSQL.

Digite: \copyright para ver los términos de distribución
\h para ayuda de comandos SQL
\? para ayuda de comandos psql
\g o or termine con punto y coma para ejecutar una consulta
\q para salir

dbmail=> select * from dbmail_transport;
ERROR: no existe la relación «dbmail_transport»
dbmail=> CREATE TABLE dbmail_transport (domain VARCHAR(100) NOT NULL, transport VARCHAR(100) NOT NULL DEFAULT 'dbmail-lmtp:localhost:24');
CREATE TABLE
dbmail=> INSERT INTO dbmail_transport (domain) VALUES ('midominio.com');
INSERT 0 1

Una vez hecho todo, reiniciaremos Postfix.
/etc/init.d/postfix restart

Aún queda un problema con Dbmail y PostgreSQL. Existe un problema con ciertas codificaciones. Es necesario editar el archivo /etc/init.d/dbmail y agregar un par de lineas. Se deben poner al principio ya que se trata de una variable de entorno utilizada en la conexión con PostgreSQL.
# Codificación que se lebantará con la base de datos PostgreSQL
PGCLIENTENCODING=UNICODE
export PGCLIENTENCODING

Así podemos dar de alta al usuario jmruiz con password jmruiz y correo electrónico jmruiz@midominio.com.
dbmail-users -a jmruiz -w jmruiz -s jmruiz@midominio.com
Adding INBOX for new user... ok.
[jmruiz@midominio.com]
Done
jmruiz:x:4:0:0.00:0.00:jmruiz@midominio.com

Para probar el usuario podemos hacer telnet al puerto POP y acceder como el usuario jmruiz.
telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK DBMAIL pop3 server ready to rock
user jmruiz
+OK Password required for jmruiz
pass jmruiz
+OK jmruiz has 0 messages (0 octets)
quit
+OK see ya later
Connection closed by foreign host.


Si ves en el log /var/log/mail.log este error "fatal: pgsql:/etc/postfix/sql-pop-before-smtp.cf(0,lock|fold_fix): table lookup problem". Seguro que te será de mucha ayuda este enlace.

jueves, 14 de agosto de 2008

ipcop backups

IpCop es una distribución muy sencilla de utilizar. Es una rápida solución para proxy y cortafuegos, con una muy cómoda interface web desde la que se puede hacer casi todo lo que necesites.

El problema lo encontré cunado intenté meter las copias de seguridad automáticamente en mi sistema de copias. El sistema de copias de seguridad está basado en claves publicas ssh, pero no sabía cual era el directorio donde IpCop deja las copias de seguridad cuando le dices desde la interface web que se generen.

Finalmente lo encontré, y los ficheros .dat que genera IpCop para su propia restauración los almacena en
/home/httpd/html/backup así que solo me quedaba añadir el directorio en el sistema de copias de seguridad.

martes, 12 de agosto de 2008

Error: Service check command 'check_nrpe' specified in service 'MyHost_sda' for host 'MyHost' not defined anywhere!

Con este error entendemos que Nagios no es capaz de encontrar (not defined anywhere!) el comando check_nrpe. Así que tenemos que definir el comando check_nrpe para que nuestro servidor Nagios sea capaz de ejecutarlo.

Para ello tendremos que abrir el fichero /usr/local/nagios/etc/objects/localhost.cfg y al final del todo añadir:
##########
# CHECK_NRPE #
##########

define command{
command_name check_nrpe
command_line /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$ $ARG3$ $ARG4$
}

Ten cuidado y observa que la ruta donde yo tengo check_nrpe es /usr/local/nagios/libexec/check_nrpe. Pudiera ser que en tu servidor Nagios no sea la misma ruta. Así que verifica que sea correcta y en el caso de que no lo sea modifica la línea de command_line para que Nagios pueda encontrar check_nrpe.

Una vez hecho todo esto ya podremos hacer de nuevo el testeo de los ficheros de configuración con:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Y no deberíamos tener errores.

lunes, 11 de agosto de 2008

Instalacion NRPE cliente/servidor

Os dejo el manual bajo el que me he regido para hacer este manual para instalaciones de NRPE, lo dejo tanto en pdf como en html.

Lo primero tendremos que diferenciar entre la instalación de NRPE en nuestro servidor Nagios o en los servidores que pretendemos monitorizar. Ya que según el esquema de NRPE podemos ver que nos hace falta en los dos sitios.









Primero veremos la instalación en nuestro servidor Nagios.



Para ello tendremos que descargar el fichero nrpe-2.12.tar.gz, descomprimir y configurar.
wget http://kent.dl.sourceforge.net/sourceforge/nagios/nrpe-2.12.tar.gz
tar xvzf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure

Una vez hecho esto solo nos queda compilar e instalar únicamente el plugin, porque en el servidor no necesitamos un demonio que corra, simplemente necesitamos el plugin para poder ejecutarlo.
make all
make install-plugin

Sabremos que todo fue correctamente porque en el /usr/local/nagios/libexec/ encontraremos el ejecutable check_nrpe que nos permitirá hacer peticiones a los servidores (los que pretendemos monitorizar) que tengan instalado nrpe.

Para terminar veremos la instalación en el servidor que monitorizaremos.



Lo primero es verificar que tenemos instalados los siguientes paquetes, que serán necesarios.
aptitude install build-essential
aptitude install xinetd
aptitude install libcurl3-openssl-dev

Si no tenemos instalado libcurl3-openssl-dev en la configuración del nrpe nos dará un error del tipo.
checking for SSL headers... configure: error: Cannot find ssl headers

Una vez que tenemos todos los prerequisitos instalados, ya podemos hacer:
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
make install-xinetd

Tenemos que hacer un último paso para terminar la instalación de nuestro NRPE, editar el fichero /etc/xinetd.d/nrpe y definir algún parámetro de configuración como "only_from = 127.0.0.1 < nagios_ip_address >" en el que tendremos que poner la IP de nuestro sevidor Nagios para que pueda preguntarle.

Bien, ya tenemos instalado NRPE como demonio que correrá escuchando las llamadas de nuestro servidor Nagios que le preguntará ¿estás ahí?

Añadiremos al /etc/services "nrpe 5666/tcp # NRPE" para identificar las conexiones 5666/tcp como de nuestro nuevo demonio NRPE.

Para hacer la prueba de funcionamiento, ejecutaremos desde el servidor donde estamos instalando NRPE algunos comandos que nos dirá si el demonio está corriendo o no. Pero antes deberíamos de reiniciar el servicio xinetd para ello ejecutaremos.
/etc/init.d/xinetd restart

Prueba de escucha que nos devolverá "tcp 0 0 *:nrpe *:* ESCUCHAR"
netstat -at | grep nrpe

También podemos ejecutar
/usr/local/nagios/libexec/check_nrpe -H localhost

Que si todo funcionó correctamente nos devuelve la versión de NRPE que estamos corriendo en localhost.

Muy bien para probar si nuestro servidor Nagios tiene conexión con nuestro servidor a monitorizar, tendremos que ejecutar:
/usr/local/nagios/libexec/check_nrpe -H < ip de nuestro servidor a monitorizar >

Con todo lo que hemos hecho podemos desde nuestro servidor Nagios hacer una petición al servidor que pretendemos monitorizar para ver si está o no activo. Pero realmente lo que queremos es sacarle toda la información que podamos pedirle. Para ello tendremos que instalar nagios-plugins en este servidor.

Seguiremos los mismos pasos que seguimos en nuestro servidor Nagios. Así a adelante; descargar, descomprimir, configurar, compilar e instalar.
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.12.tar.gz
tar xvzf nagios-plugins-1.4.12.tar.gz
cd nagios-plugins-1.4.12
./configure
make
make install

Una vez instalado veremos muchos más ejecutables en /usr/local/nagios/libexec/, esos son todos los ejecutables que podemos lanzar para hacerle más preguntas al servidor desde nuestro servidor Nagios.¿Qué tal te va ...tal o cual servicio...?

Instalacion de Nagios 3.0.3 Debian

He creado este manual siguiendo el manual de la página oficial, he modificado algunas cosas. Como la versión de descarga 3.0.3. Espero que os sea de ayuda.

Lo primero que tenemos que hacer es instalar los paquetes requeridos.
aptitude install apache2 build-essential libgd2-dev

Si tenemos una conexión a internet lenta deberíamos dejar descargando ya estos dos ficheros, que necesitaremos para dejar corriendo el servicio nagios en nuestro nuevo servidor Nagios 3.0.3.
wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.0.3.tar.gz
wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.12.tar.gz

Creamos el usuario que correrá el proceso.
/usr/sbin/useradd -m nagios
/usr/sbin/groupadd nagcmd
/usr/sbin/usermod -G nagcmd nagios
/usr/sbin/usermod -G nagcmd www-data

Descomprimimos el nagios-3.0.3.tar.gz y entramos en el directorio que nos creará.
tar xzf nagios-3.0.3.tar.gz
cd nagios-3.0.3

Ahora corremos el script de configuración pasando como parámetro el grupo que creamos para nagios y www-data para que compartan permisos.
./configure --with-command-group=nagcmd

Después de correo el script tenemos que compilar los fuentes.
make all

Ahora instalamos los binarios.
make install
make install-init
make install-config
make install-commandmode

Deberías editar el fichero /usr/local/nagios/etc/objects/contacts.cfg y modificar los parámetros que te interesen como por ejemplo el email del administrador principal (nagiosadmin).
nano /usr/local/nagios/etc/objects/contacts.cfg

Configuración de la interfaz web.
make install-webconf

Para crear el fichero de usuarios y claves para el acceso a la interfaz web, tenemos que ejecutar.
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Finalmente hacemos un reload de apache para que relea las modificaciones que ha sufrido en sus ficheros de configuración.
/etc/init.d/apache2 reload

Ahora vamos a instalar el plugin, para ello lo primero será descomprimirlo.
tar xvzf nagios-plugins-1.4.12.tar.gz
cd nagios-plugins-1.4.12

Corremos el script de configuración pasando como parámetros usuario nagios y grupo nagcmd. Después solo nos queda compilar e instalar.
./configure --with-nagios-user=nagios --with-nagios-group=nagcmd
make
make install

Para terminar solo nos queda programarlo para que se inicie con el arranque del sistema y verificar que todos los ficheros de configuración son correctos.
cd /etc/init.d/
update-rc.d nagios defaults
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Si la verificación de ficheros fue correcta veremos algo así al final de la salida.
Total Warnings: 0
Total Errors: 0

Ahora ya estamos preparados para iniciar el servicio.
/etc/init.d/nagios start

E identificarnos en http://< mi servidor nagios >/nagios
Si queremos que nuestro servidor nos envía mails notificándonos cualquier asunto, tendremos que montar un servidor SMTP. Yo particularmente prefiero usar postfix. Para instalarlo haremos:
aptitude install postfix

Cuando nos pregunte el tipo de servidor que somos le diremos Sitio de Internet, lo próximo que nos preguntará será el dominio con el que firmará la cabecera de los correos. Deberías de poner un nombre de dominio valido, por ejemplo nagios.josemanuelruizbaena.com, porque algunos filtros anti-spam cortan los correos cuyos dominios no son validos. Es decir, que no sería correcto poner servidornagios a secas.

Ya no queda más que hacer, ya tienes instalado un servidor Nagios. Ahora dedica un buen rato en añadir todos tus servidores para que sean monitorizados por tu nuevo servidor de monitorización.

lunes, 19 de mayo de 2008

fatal: pgsql:/etc/postfix/sql-pop-before-smtp.cf(0,lock|fold_fix): table lookup problem

Después de seguir el manual de instalación de dbmail con postgres para Ubuntu, no me funcionó correctamente. Después de mucho buscar soluciones a este problema.


May 19 12:41:43 druida postfix/smtpd[3826]: connect from fg-out-1718.google.com[72.14.220.156]
May 19 12:41:43 druida postfix/smtpd[3826]: warning: pgsql query failed: fatal error from host localhost: ERROR: la sintaxis de entrada no es v?lida para tipo inet: ?fg-out-1718.google.com??
May 19 12:41:43 druida postfix/smtpd[3826]: fatal: pgsql:/etc/postfix/sql-pop-before-smtp.cf(0,lock|fold_fix): table lookup problem
May 19 12:41:44 druida postfix/master[3787]: warning: process /usr/lib/postfix/smtpd pid 3826 exit status 1
May 19 12:41:44 druida postfix/master[3787]: warning: /usr/lib/postfix/smtpd: bad command startup -- throttling


Me dí cuenta de que en el fichero /var/log/postgresql/postgresql-8.1-main.log tenía el verdadero problema:

2008-05-19 12:41:43 CEST ERROR: la sintaxis de entrada no es válida para tipo inet: «fg-out-1718.google.com»


Al parecer la estructura de la tabla dbmail_pbsp no es totalmente correcta, es posible que es esta nueva versión de dbmail no esté bien definida. Para solucionarlo hay que cambiar el tipo de datos del campo ipnumber, con este script podrás cambiarlo sin perder los datos que ya tienes.

alter table dbmail_pbsp ADD after_ipnumber text;
update dbmail_pbsp set after_ipnumber = cast(ipnumber as text);
alter table dbmail_pbsp drop ipnumber;
alter table dbmail_pbsp rename after_ipnumber to ipnumber;
alter table dbmail_pbsp alter ipnumber set default('0.0.0.0');
commit;


Después de esto el servidor me funciona perfectamente.

viernes, 2 de mayo de 2008

Xampp Ubuntu/Debian problemas restart

He tenido problemas al iniciar un xampp en un core dos duo con Ubuntu con un kernel server (con SMP para dos procesadores). El problema es que la primera vez que iniciaba tardaba muy poco en iniciar Apache2, si intentaba un restart... tardaba algo así que que 5 min en admitir peticiones HTTP.

#/etc/init.d/xampp restart
Stopping XAMPP for Linux 1.6.6...
XAMPP: XAMPP-Apache is not running.
XAMPP: Stopping MySQL...
XAMPP: Stopping ProFTPD...
XAMPP stopped.
Starting XAMPP for Linux 1.6.6...
XAMPP: Another web server daemon is already running.
XAMPP: Starting MySQL...
XAMPP: Starting ProFTPD...
XAMPP for Linux started.


He intentado mil soluciones, pero ninguna fue la correcta. Intenté cambiar el kernel por kernels a 64bit...

Pero al parecer los cores duos o las placas con dos xeon tienen un problema cuando intentan generar RANDOM, así que hay que echarles una "manita".

Si ejecutas cat /proc/sys/kernel/random/entropy_avail te devolverá un valor. En mi Pc (un PIV) me da un valor de 3586. En el Core Duo me da un valor de 160, pero después de instalar y arrancar rng-tools me da un valor de aprox 2700 y arranca apache normalmente.

Instala el paquete rng-tools
aptitude install rng-tools

Tendrás que modificar el fichero /etc/init.d/rng-tools porque no es total mente correcto. Yo por menos cuando intenté iniciar el proceso (/etc/init.d/rng-tools start) me daba un error.
Starting Hardware RNG entropy gatherer daemon: (Hardware RNG device inode not found)
/etc/init.d/rng-tools: Cannot find a hardware RNG device to use.

Tendrás que modificar la linea HRNGDEVICE=/dev/hwrng y poner HRNGDEVICE=/dev/urandom. Después solo quedará hacer /etc/init.d/rng-tools start y ya tendremos corriendo el demonio.

miércoles, 9 de abril de 2008

Cortar un fichero en trozos

Después de mucho pelearme con los sitemas de ficheros y distintos sitemas operativos, he decidido montar en mis discos externos (USB) el sistema de ficheros FAT32. Hasta el momento lo tenía con ext2, que me tiene un límite de tamaño de fichero superior a FAT32.

Pero ahora con mi nuevo Mac Book Pro, no he conseguido montar ext2 con modo lectura y escritura. Se monta en modo solo lectura.

Después de buscar encontré la fantastica aplicación split, en los lenguajes de programación se usa para cortar. Pues en GNU/Linux es lo mismo. Usando el comando split podemos hacer que nuestros ficheros grandes pasen a ser varios ficheros pequeños y somos nosotros quien decidimos el tamaño.

De esta forma podemos meter "ficheros grandes" en un disco duro con sistema de ficheros FAT32 que solo admite ficheros menores de 4GB.
split -b100m MiFicheroGrande.tgz MisFicherosChicos.

Al ejecutar eso, creará una sucesión de ficheros de 100MB (-b100m) del estilo a:
MisFicherosChicos.aa
MisFicherosChicos.ab
MisFicherosChicos.ac
MisFicherosChicos.ad
MisFicherosChicos. ...

Para pegar esos trozos es aún más sencillo.
cat MisFicherosChicos.* > MiFicheroGrandore.tgz

Y volveremos a tener todos los trozos pegados en uno solo, eso sí recuerda ejecutar este último comando en un disco duro donde el sistema de ficheros soporte el tamaño de la suma total de todos los ficheros pequeños.

viernes, 28 de marzo de 2008

chm2pdf - Ubuntu 7.10

chm2pdf - Google Code

¿Como instalar chm2pdf?

aptitude install libchm-bin libchm-dev libchm1 libchm-bin libchm-dev python-chm libghc6-html-doc gri-html-doc htmldoc-common
wget http://chm2pdf.googlecode.com/files/chm2pdf-0.9.tar.gz
tar xvzf chm2pdf-0.9.tar.gz
cd chm2pdf-0.9/
python setup.py install


Después de hacer todo esto ya está instalado. Ahora solo queda ejecutarlo.

chm2pdf (--book o --webpage) MiFichero.chm MiFichero.pdf


Si el resultado no es exactamente lo que queríamos podemos utilizar pdfedit para retocar un poco el resultado. pdfedit lo podemos encontrar directamente en el repositorio de Ubuntu 7.10, su instalación es sencilla.

aptitude install pdfedit

jueves, 27 de marzo de 2008

bash: ./xampp-backup.sh: /bin/bash: intérprete incorrecto: Archivo demasiado grande

Me encontré con este error cuando intenté restaurar una copia de seguridad de un XAMPP. El fichero xampp-backup.sh ocupaba la friolera de 8,3GB. La verdad que es un poco grande :P, pero que le vamos a hacer si tenemos tantos datos.

Cuando conseguí descargarla, le di permisos de ejecución (chmod 700 xampp-backup.sh) y simplemente hice ./xampp-backup.sh y por alguna razón no se ejecutó y me dio ese error.

Pero intenté ejecutar el fichero haciendo /bin/bash xampp-backup.sh y sorprendentemente se está ejecutando. Ahora solo queda esperar.

lunes, 24 de marzo de 2008

ext3 ficheros grandes

Con el sistema de ficheros ext3 podemos almacenar ficheros muy grandes, pero ¿como sabemos el límite que soporta nuestro sistema y en función a qué va el límite del tamaño del fichero?

El límite del tamaño para un fichero muy grande que soporte nuestro sistema de ficheros en ext3 irá en función del tamaño de los blockes de nuestro sistema. Para saber qué tamaño tiene definido nuestro sistema ext3, podemos hacerlo con tune2fs.
# tune2fs -l /dev/sda1 | grep -i "Block size:"

SDA1 corresponde a la partición que tengamos en ext3 y queremos saber cuál es el tamaño de sus blockes.
Si el resultado es 1024 nuestro fichero más grande será de 16GB. Si es mayor podemos verlo en esta tabla.
1024 bytes = 1 KB => 16 GB
2048 bytes = 2 KB => 128 GB
4096 bytes = 4 KB => 1024 GB
8192 bytes = 8 KB => 8192 GB

martes, 18 de marzo de 2008

Problemas con el cotejamiento de MySQL

Siempre he tenido problemas con las importaciones de MySQL, las copias de seguridad se generan bien, pero cuando tengo que hacer una importación para recuperar una base de datos tengo problemas con el cotejamiento.

Si haces:


cat backup.sql | /opt/lampp/bin/mysql -u root -D BaseDeDatos -p


Te meterá la información que contenga backup.sql en BaseDeDatos, pero puedes tener problemas con el cotejamiento. Al añadirle --default-character-set=utf8 se solucionará el problema, porque fuerzas la conexión a UTF8 y volverás a ver las tildes correctamente.

cat backup.sql | /opt/lampp/bin/mysql -u root -D BaseDeDatos --default-character-set=utf8 -p

lunes, 17 de marzo de 2008

Bluetooth con Ubuntu o Debian

Para hacer funcionar mi Sharp con Ubuntu, he tenido que hacer:
aptitude install bluez-pin bluez-utils

Para scanear los dispositivos:
hcitool scan
Scanning ...
00:17:5C:12:58:38 DelorianMovil

Esto nos dará el identificador de nuestro móvil (00:17:5C:12:58:38).
Ahora tenemos que averiguar que canal de comunicacion usa el el movil con el pc , pero lo general es el 10. Para averiguarlo hacemos:
sdptool browse 00:17:5C:12:58:38

Buscamso en la salida generada “OBEX File Transfer” y estar al canal que usa.
Ahora configuraremos el demonio para que siempre use el canal 10 , en el fichero etc/bluetooth/rfcomn.conf y añadirel un bloque , viene comentado dentro , pero por si acaso
nano /etc/bluetooth/rfcomm.conf
---------------------------
rfcomn0 {
device 00:17:5C:12:58:38;
channel 10;
comment “cualquier texto identificatico”;
}
---------------------------

Ya tenemos la configuración hecha, ahora necesitamos la utilidad para recibir ficheros en el pc proveniente de un móvil.
aptitude install obexserver
sdptool add --channel=10 OPUSH

Después de hacer todo esto pude enlazar perfectamente mi móvil Sharp con mi Pc, pero ahora el problema era que el móvil no permite envío masivo de ficheros.

martes, 11 de marzo de 2008

Monitorización de servidores Linux

Los administradores siempre estamos detrás de aplicaciones que nos ayuden a monitorizar nuestros sistemas. He dado con esta aplicación que es muy útil para monitorizarlos.

Aquí está instalada en mi servidor.

http://delorianserver.dyndns.org/loadavg/

Su instalación es muy sencilla.


1º Descargamos y descomprimimos la aplicación en el directorio donde tengamos escuchando Apache.
wget http://www.labradordata.ca/downloads/loadavg.tar.gz
tar -zxf loadavg.tar.gz


2º modificar el fichero config.php que encontrarás en dentro del directorio loadavg. En este fichero hay que modificar dos parámetros:
$datadir <- tiene que tener la ruta completa del directorio loadavg/logs/.
$eth <- que debe de contener la interfaces que pretendemos monitorizar (eth0, eth1, ...)


3º Una vez hecho todo esto, solo nos falta incluir en el cron una tarea para que capture los logs. Yo modifiqué el /etc/crontab añadiendo la siguiente linea:
*/6 * * * * root php -q /opt/lampp/htdocs/loadavg/logger.php
Es importante que sea cada 6 minutos.


http://www.labradordata.ca

viernes, 15 de febrero de 2008

http://www.profesionalesdelweb.es

Estrenamos profesionales del web, un nuevo portal donde comentaremos las nuevas tecnologías y aportaremos un poco de luz a este mundo tan complejo de las validaciones web.

Intentaremos dar ayuda a quien la pida y sepamos darla.

Este proyecto nace con el afán de aprender y para no desaprovechar el esfuerzo, intentar que ese esfuerzo que le dediquemos llegue a más gente.

Así entre todos podríamos formar una comunidad donde ayudarnos los unos a los otros.

jueves, 14 de febrero de 2008

Iexploter vs Iceweasel


Desde luego que no porque todos usen iexplorer tenemos que usar iexplorer.

Usad iceweasel que es mucho mejor.

"This account is currently not available." Xampp Addons PostgreSQL en Fedora Core 6

/opt/lampp/lampp startpostgresql
Starting PostgreSQL
This account is currently not available.

Me pasó esto al intentar ejecutar el Addons para Xampp de PostgreSQL. El problema es que el usuario nobody (el que corre el servicio), no tiene definida shell en el /etc/passwd

Para definirla editamos en /etc/passwd la línea que define al usuario nobody:
nobody:x:99:99:Nobody:/:/sbin/nologin

Para dejarla así:
nobody:x:99:99:Nobody:/:/bin/bash

Una vez hecho esto ya podemos reiniciar Xampp que debería arrancar PostgreSQL perfectamente.

martes, 12 de febrero de 2008

Ejecutar XAMPP en Debian a 64bit

He conseguido hacer funcionar XAMPP en mi Debian a 64bit.

Lo primero es descargar la última versión de XAMPP para linux.
wget http://heanet.dl.sourceforge.net/sourceforge/xampp/xampp-linux-1.6.6.tar.gz

Después la descomprimimos en /opt/
tar xvzf xampp-linux-1.6.6.tar.gz

Por último antes de ejecutar XAMPP tendremos que instalar lib32gcc1
aptitude install lib32gcc1

Una vez hecho esto ya podemos ejecutar XAMPP normalmente con
/opt/lampp/lampp start

Y funcionará correctamente.

NO_PUBKEY

En ocasiones cuando añadimos en el /etc/apt/sources.list de nuestro Debian nuevas lineas al hacer apt-get update o aptitude update no encontramos con un error parecido a este:
W: GPG error: http://volatile.debian.org stable/volatile Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY EC61E0B0BBE55AB3
W: GPG error: http://volatile.debian.org stable/volatile-sloppy Release: Las firmas siguientes no se pudieron verificar porque su llave pública no está disponible: NO_PUBKEY EC61E0B0BBE55AB3
W: Tal vez quiera ejecutar 'apt-get update' para corregir estos problemas

Eso es porque el repositorio no es de total confianza. Para ello tenemos que agregar la clave "EC61E0B0BBE55AB3" (en este caso) en el listado de repositorios seguros.

Para ello, tendremos que escribir desde la línea de comandos:
gpg --keyserver subkeys.pgp.net --recv EC61E0B0BBE55AB3
gpg --export --armor KEY | apt-key add -

Después haz un aptitude update y verá que ya no tienes errores.

lunes, 11 de febrero de 2008

Montar disco de Red NFS

aptitude install portmap nfs-user-server


/etc/exports
Contiene una linea por directorio a compartir. La estructura de dicha linea es:

directorio equipo1(opcion11,opcion12) equipo2(opcion21,opcion22)

donde:

directorio: Es el directorio a compartir.
equipox: Clientes que tendrán acceso al directorio compartido. Estos equipos se podrán indicar por su IP o dirección DNS(por ejemplo: mi_equipo.ral.com o 192.168.0.69). Recomiendo usar la IP.
optionxx: Son las opciones que nos permitirán tener acceso a esos directorios con determinados privilegios.

* ro | rw : Con la opción ro el directorio será compartido de solo lectura. Esta opción está por defecto.y con la opción rw se permitirá tanto acceso de lectura como de escritura.
* sync | async : sync es la opción recomendada, ya que se ha de respetar el protocolo NFS, es decir, no se responden a las peticiones antes de que los cambios realizados sean escritos al disco. Con la opción async se permite mejorar el rendimiento y agilizar el funcionamiento global, pero supone un riesgo de corrupción de archivos o del sistemas de ficheros en casos de caidas del servidor y/o errores de éste.
* root_squash | no_root_squash | all_squash : root_squash indica que un cliente identificado como root tendrá acceso al directorio con privilegios de un usuario anónimo. Si seleccionamos la opción no_root_squash evitaremos esto, y si indicamos all_squash, entonces aplicaremos esto último a todos los usuarios, no sólo root.

Un ejempo de fichero /etc/exports es el siguiente:
/home/usuario/datos 192.168.0.0(ro,sync,root_squash)
/tmp 192.168.0.0(rw,sync,no_root_squash)

Los ficheros /etc/hosts.allow y /etc/hosts.deny tienen la siguiente estructura:
servicio: host [o red/mascara_subred], host [o red/mascara_subred]

servicio : Es el servicio que estará permitido o denegado para algunas IP’s, en nuestro caso serán portmap y rpc.nfsd.
host [o red/mascara_subred] : Indicará la IP del host de un posible cliente. También pueden indicarse redes con sus correspondientes mascaras de subred.

/etc/hosts.deny
En este fichero pondremos todas las restricciones posibles para hacer mas seguro el sistema. Para ello denegaremos el acceso a portmap, ya que si se deniega portmap, aunque permitas nfs, no se podrá compartir porque éste depende de portmap. Por lo que solo se tendrá acceso a portmap por aquellos equipos que estén definidos en el fichero /etc/hosts.allow. El fichero /etc/hosts.deny quedará:
portmap:ALL

/etc/hosts.allow
En este fichero debe indicar a quienes permitimos el acceso al servicio de nfs y portmap. Se pueden indicar hosts individuales o una red.
portmap:192.168.0.0/255.255.255.0
nfs:192.168.0.0/255.255.255.0


Después de configurarlo:
/etc/init.d/nfs-user-server restart
/etc/init.d/portmap restart

Para ver si está corriendo el server escribimos desde uno de los clientes:

rpcinfo -p < dirección IP >
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100003 2 udp 2049 nfs
100003 2 tcp 2049 nfs
100005 1 udp 745 mountd
100005 2 udp 745 mountd
100005 1 tcp 748 mountd
100005 2 tcp 748 mountd


Aquí podemos ver que postmapper está escuchando en el puerto 111, que el servidor nfs escucha en el 2049 y que muntd escucha en el 745 y 748. Este último cambiará de puerto de escucha cada vez que reiniciemos el servicio, así que si queremos conectar el disco a una máquina de internet, tendremos que abrir en el firewall un rango de puerto.

Yo no he visto en ningún sitio documentación donde explique que puertos son los que usa, pero en mi firewall he definido una regla que permita la conexión a la IP de mi servidor de NFS entre para los puertos 111, 2049 y desde el 700 hasta el 900. He visto que entre esos puerto siempre se levante mountd.

Para montar el disco desde el cliente simplemente hacemos:

mount -t nfs < dirección ip >:/directorio/definido/en/el/server/nfs /directorio/destino

miércoles, 6 de febrero de 2008

domingo, 27 de enero de 2008

Navegador predeterminado en Debian

Para definir el navegador que queramos como predeterminado para todos los usuarios del sistema, tendremos que ejecutar desde la línea de comandos como root:
#update-alternatives --config x-www-browser

En mi caso esta fue la salida.
Hay 3 alternativas que proveen `x-www-browser'.

Selección Alternativa
-----------------------------------------------
1 /usr/bin/epiphany
2 /usr/bin/iceweasel
*+ 3 /usr/bin/konqueror

Pulse para mantener el valor por omisión [*] o pulse un número de selección: 2
Se utiliza `/usr/bin/iceweasel' para proveer `x-www-browser'.

Ya está, el navegador predeterminado para mi Debian ahora es iceweasel (firefox).

jueves, 17 de enero de 2008

Debian Volatile

deb http://volatile.debian.org/debian-volatile etch/volatile main contrib non-free

Este repositorio es recomendable tenerlo en el:

/etc/apt/sources.list

Porque contiene paquetes cuya actualización es crítica, como por ejemplo las actualizaciones de antivirus de ClamAV.

ClamAV para Debian Etch

Para instalar.
#aptitude install clamav clamav-daemon


Comprobamos los permisos de la base de datos y los logs
# ls -al /var/lib/clamav/

total 11756
drwxr-xr-x 2 clamav clamav 4096 2008-01-17 13:50 .
drwxr-xr-x 38 root root 4096 2008-01-17 13:49 ..
-rw-r--r-- 1 clamav clamav 651282 2008-01-17 13:49 daily.cvd
-rw-r--r-- 1 clamav clamav 11347852 2008-01-17 13:49 main.cvd
-rw------- 1 clamav clamav 52 2008-01-17 13:49 mirrors.dat

# ls -al /var/log/clamav/

total 16
drwxr-xr-x 2 clamav clamav 4096 2008-01-17 13:49 .
drwxr-xr-x 14 root root 4096 2008-01-17 13:49 ..
-rw-r----- 1 clamav adm 1445 2008-01-17 13:50 clamav.log
-rw-r----- 1 clamav adm 1401 2008-01-17 13:49 freshclam.log


Configuramos el demonio clamav (este ejemplo es para una máquina con pocos recursos):
#nano /etc/clamav/clamd.conf

...
#ArchiveMaxFiles 1000
ArchiveMaxFiles 100
#ArchiveMaxFileSize 10M
ArchiveMaxFileSize 2M
#ArchiveMaxCompressionRatio 250
ArchiveMaxCompressionRatio 50
ArchiveLimitMemoryUsage false
ArchiveBlockEncrypted false
#MaxDirectoryRecursion 15
MaxDirectoryRecursion 6
FollowDirectorySymlinks false
FollowFileSymlinks false
#ReadTimeout 180
ReadTimeout 60
#MaxThreads 12
MaxThreads 10
#MaxConnectionQueueLength 15
MaxConnectionQueueLength 8
#StreamMaxLength 10M
StreamMaxLength 7M
...
MailFollowURLs false

Para saber si nuestro ClamAV está funcionando bien, creamos un fichero que contenga en la primera línea:
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Y le pasamos el ClamAV haciendo
clamdscan MiFicheroInfectado

Y nos tiene que decir:
infectado: Eicar-Test-Signature FOUND

martes, 8 de enero de 2008

Host Virtuales Xampp

Para crear un host virtual con xampp, tendremos que editar los ficheros de configuración del Apache que incluye xampp. Los ficheros son:

/opt/lampp/etc/httpd.conf

Donde tenemos que descomentar la línea que hace el "include" el siguiente fichero (Include etc/extra/httpd-vhosts.conf).
/opt/lampp/etc/extra/httpd-vhosts.conf
Ahora tendemos que escribir nuestro host virtual.
< VirtualHost *:80 >
ServerAdmin [mail del administrador]
DocumentRoot /opt/lampp/htdocs/[nombre de mi directorio]/
ServerName [nombre del subdominio ej:MiSubdominio.MiDominio.com blog.josemanuelruizbaena.com]
ErrorLog logs/blog.josemanuelruizbaena.com-error_log
CustomLog logs/blog.josemanuelruizbaena.com-access_log common
< / VirtualHost >

Una vez aquí simplemente tendremos que hacer un "restart" de xampp para que reinicie Apache con la nueva configuración.
/opt/lampp/lampp restart
Mucho cuidado con los proxy, aquí en la empresa tenemos un proxy y tenía cacheadas las redirecciones que pretendía hacer con los subdominios. Y no funcionaba las modificaciones que hacía en el servidor. Borrad la caché del proxy si lo tenéis, tardé un poco en darme cuenta de qué es lo que estaba pasando y porqué algunos subdominios funcionaban o otros no.

Claro, solo funcionaban los que antes de mis modificaciones el proxy no cacheó nunca.

lunes, 7 de enero de 2008

squid transparente

¿Qué es un proxy transparente? Es un proxy que no requiere configuración por parte del cliente en su navegador. Así podemos hacer que todos los clientes de nuestra red pasen por un proxy y no tendrás que pasar por cada uno de los navegadores configurándolos.

Para crear un proxy transparente, instalamos squid y empezamos a configurar.
aptitude install squid squid-common

Yo uso nano como editor, podéis usar con el que más cómodos estéis.

nano /etc/squid/squid.conf
http_port 3128 transparent

3128 es el puerto por defecto de escucha de squid, podemos cambiarlo, pero lo importante para hacer un proxy transparente es añadir transparent detrás del 3128.

En esta linea definimos la profundidad de directorios para cachear las webs. El 100 indica el tamaño máximo que ocupará el árbol de directorios. Si modificamos la variable cache_mem, tendremos que sustituir el 100 por el valor que le demos a cache_mem.
cache_mem 100 MB
cache_dir ufs /var/spool/squid 100 16 256

Tenemos que permitir el acceso a nuestra red.
acl our_networks src 192.168.0.0/22 # esto es lo mismo que 192.168.0.0/255.255.252.0
http_access allow our_networks # permitido el acceso a nuestra red
http_access allow localhost # permitido el acceso a localhost

Definimos el nombre de nuestro proxy
visible_hostname delorianserver

Una vez tenemos el squid configurado tendremos que reiniciarlo con /etc/init.d/squid restart

Si queremos podemos con squid -z crear la estructura de directorios para el cache, pero si no existe la crea la primera vez que reinicia.

Yo la borraría y la volvería a crear si modificas los parámetros de las lineas:
cache_mem 100 MB
cache_dir ufs /var/spool/squid 100 16 256

Para borrar el árbol de directorios del cache:
rm -fr /var/spool/squid

Para crear la estructura de directorios (tiene que estar parado el squid /etc/init.d/squid stop)
squid -z

Después lanzamos nuevamente el servicio.
/etc/init.d/squid start

Ahora solo nos queda añadir una regla de IPTABLES que haga una redirección del puerto 80 al 3128 (puerto por defecto del squid) para hacer de nuestro squid un proxy transparente.
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/255.255.252.0 -d 0.0.0.0/0.0.0.0 -p tcp --dport 80 -j REDIRECT --to-port 3128

Si todo ha ido bien podremos ver haciendo un tail -f de los log de squid que todos los clientes de nuestra red están pasando por el squid.
tail -f /var/log/squid/access.log