verificación google

lunes, 30 de diciembre de 2013

Proxmox "Error: VM is locked (backup)"

Encontré este error "Error: VM is locked (backup)" en mi servidor de virtualización Proxmox; al intentar arrancar una de las máquinas virtuales. Realmente no había ningún backup en ejecución. La solución es bastante simple, con el siguiente comando:
qm unlock
Se desbloquea la máquina virtual y se puede ejecutar normalmente. El "vmid" es el número que identifica a la máquina virtual dentro del sistema.

jueves, 26 de diciembre de 2013

The PostgreSQL server failed to start. Please check the log output

Hace poco con un PostgreSQL 8.4 tuve este problema; devolvía este error "The PostgreSQL server failed to start. Please check the log output" en el arranque del sistema. Pero después PostgreSQL funcionaba correctamente, y en los log no conseguí encontrar nada.

Finalmente descubrí que en el fichero "pg_hba.conf" había una IP fuera de rango y esto parece que confundía al servidor PostgreSQL, le quité esa linea e inició sin devolver ningún error en el inicio de PostgreSQL.

jueves, 19 de diciembre de 2013

Problemas con teclado en Ubuntu 13.10

No sabría decir porqué, pero en ocasiones cuando inicio mi nuevo Ubuntu 13.10 no tiene la misma configuración de teclado que cuando lo apagué. El problema está que mueve las teclas de sitio, es decir, el teclado que tiene configurado no es el mismo que el que tengo físicamente en mi pc y por ejemplo al intentar escribir una "/" el carácter que me aparece es un "&", también tengo problemas con los signos de puntuación o los caracteres "* } { [ ] < >".

Esto tiene una fácil y rápida solución, ejecutamos el siguiente comando y ya está:
sudo setxkbmap -layout 'es,es' -model pc105
Nuestro teclado volverá a ser el de siempre.

viernes, 22 de noviembre de 2013

RAID status not OK. Exiting Debian 7.2


Jugando con un RAID software montado en Debian 7.2 me encontré que todo funcionaba bien, pero uno de los RAID que tenía montado no funcionaba bien. El RAID donde estaba montado el sistema funcionaba perfectamente porque tras unas pruebas de ruptura, lo había recuperado. Pero el que me producía el error correspondía al RAID destinado a la memoria de intercambio (swap).


Me di cuenta del error en el arranque del sistema, justo cuando comenzaba a arrancar Debian lo primero que hace es montar los RAID y este proceso devolvía un error. Puesto que el problema estaba en el RAID destinado a memoria de intercambio no notaba nada en el sistema. Para confirmar el error monté "bootlogd" para ver algo más de información, en la pantalla de carga no me daba tiempo a leer nada, simplemente vi un "FAIL" y me puse a investigar de donde venía.

Para el que no esté familiarizado con "bootlogd" en su día escribí un pequeño artículo sobre como instalarlo y configurarlo.

Tras la instalación simplemente tienes que ver el contenido de "/var/log/boot" y yo me encontré con "RAID status not OK. Exiting", así que efectivamente algo no estaba cargando bien en el RAID.

Para verificar el estado de los RAID utilizaremos el comando "mdadm" indicando el RAID que queremos verificar, en mi caso tengo dos RAID; /dev/md0 y /dev/md1. Cuando verifiqué el estado de /dev/md1 efectivamente encontré "State : clean, resyncing (PENDING)" en lugar de un simple "State : clean".
root@debian:~# mdadm --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Thu Nov 14 12:13:46 2013
     Raid Level : raid1
     Array Size : 14744448 (14.06 GiB 15.10 GB)
  Used Dev Size : 14744448 (14.06 GiB 15.10 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Thu Nov 14 12:39:40 2013
          State : clean, resyncing (PENDING)  Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
           Name : debian:1  (local to host debian)
           UUID : 58db8a25:19229d31:ec4eb31f:6dc16a4a
         Events : 3
    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       1       8       18        1      active sync   /dev/sdb2
Así pues hay que lanzar un "mdadm --readwrite /dev/md1" para que comience el proceso de recuperación. Este comando lanzará un proceso backgrund, es decir, no nos bloqueará el terminal desde el que lancemos el proceso con el consecuente miedo de que se cierre y perdamos el proceso.
root@debian:~# mdadm --readwrite /dev/md1
Para tener una estimación del tiempo que va a tardar en terminar el proceso debemos visualizar el contenido del fichero "/proc/mdstat":
root@debian:~#  cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1]
      14744448 blocks super 1.2 [2/2] [UU]
      [====>................]  resync = 22.6% (3337408/14744448) finish=2.9min speed=64360K/sec
   
md0 : active raid1 sda1[3] sdb1[2]
      473500480 blocks super 1.2 [2/2] [UU]
   
unused devices:
Finalmente el proceso llegará a su fin; sin hace nada más el RAID funcionará correctamente, ya no volveremos a ver errores en el inicio del sistema. Nuestro RAID ha sido recuperado.
root@debian:~#  cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1]
      14744448 blocks super 1.2 [2/2] [UU]
   
md0 : active raid1 sda1[3] sdb1[2]
      473500480 blocks super 1.2 [2/2] [UU]
   
unused devices:


jueves, 21 de noviembre de 2013

Crear RAID 1 Software Debian

Esta entrada en mi blog no es original mía. La he sacado de "http://www.lintips.com/?q=node/88" pero no es la primera vez que hago referencia a algún manual externo y éste termina por desaparecer por una u otra razón, ya sea por problemas temporales en el servidor donde está alojado o porque el dueño del documento decidió eliminarlo. 

Para evitar estos problemas que puede ser bastante incómodo, replicado el post dentro de mi blog. Esta replica la realizo para apoyar mi entrada sobre recuperación de RAID software. Y que siempre que alguien acceda a la recuperación de RAID software, también pueda tener acceso a este manual sobre como montar el RAID desde la instalación de Debian.

Iniciamos la instalación de Debian como siempre y al llegar a la pantalla "Particionado de discos" seleccionamos el modo Manual.

Seleccionamos el primer disco duro y he indicamos que cree una nueva tabla de particiones.



Repetimos el mismo paso para el disco secundario.
Creamos, en el primer disco, las particiones que necesitemos y las definimos de tipo "volumen físico para RAID". En este caso los discos son de 85.9GB y voy a crear 2 particiones primarias: sda1 de 83,9 GB (será el volumen donde irá la /) y sda2 de 2GB (será el volumen swap o "área de intercambio").

Repetimos los mismos pasos para el segundo disco, asegurándonos que las particiones las definimos exactamente con el mismo tamaño. Tras este paso nos quedará algo como esto:
Ahora desde esa misma pantalla seleccionamos la primera opción "Configurar RAID por software"
y indicamos que escriba los cambios en los dispositivos.
Nos aparecerá el menú de configuración de multi-discos (MD) y RAID por software, donde seleccionamos la acción Crear un dispositivo MD
De tipo RAID 1, con 2 dispositivos activos y 0 libres (spare discs).
Y selecciono la partición de cada disco físico que se va a utilizar para este primer MD (md0).
Repito estos pasos para el segundo volumen (md1) y una vez definidos todos los MD, seleccionamos Terminar para que se creen. Con lo que en la utilidad de Particionado ya aparecen los dos dispositivos RAID.
Solo faltara definir en estos volúmenes el sistema de ficheros a utilizar, el uso que le vamos a dar (punto de montaje) y formatearlos. Con ello ya hemos terminado y continuamos la instalación de Debian como si fuese un disco real.
Como nota final deciros que es muy importarte que la partición swap también este en un volumen raid, como he definido aquí, si solo esta en un disco y este falla el sistema se bloquearía.

miércoles, 20 de noviembre de 2013

Virtualizar máquina física

Para virtualizar una máquina física, únicamente necesitamos pasar el disco duro físico a un estándar de virtualización. Esto es suficiente para sistemas operativos GNU/Linux, pero para otros sistemas operativos el proceso puede ser algo más complicado y existen herramientas especificas para este fin.

Desde GNU/Linux necesitamos clonar el disco del sistema de la máquina física al disco duro del sistema de la máquina virtual. Esto es tan simple como ejecutar el comando:
dd if=/dev/sda | ssh root@ dd of=/dev/sda
Es decir, clonamos de un disco principal (dd if=/dev/sda) al disco principal de una máquina remota (ssh root@ dd of=/dev/sda). Pero claro, esto no podemos ejecutarlo tal cual en un sistema que está ejecutándose, porque no podemos copiar directamente un disco duro mientras el sistema lo está utilizándolo. Corremos el riesgo de que se modifiquen cosas que ya hemos copiado y el disco no sería consistente.

Este proceso es recomendable hacerlo en frio, es decir, con el sistema parado. Utilizaremos un CD Live que nos permite tener funciones de red y que disponga de servidor SSH instalado. Yo he utilizado Clonezilla, lo puedes descargar desde la web oficial de clonezilla o te dejo aquí el enlace de la versión que yo utilicé clonezilla-live-2.2.0-29-i686-pae.iso

Para el que no tenga experiencia con clonezilla, os comento algunas peculiaridades; el usuario root no tiene clave de acceso, para acceder como root necesitamos entrar como usuario "user" con clave "live" y después ejecutar "sudo -s" para pasar a ser "root". Necesitarás utilizar la cuenta de "root" directamente en una conexión SSH, cambia la clave de "root" con el comando "password".

Para virtualizar una máquina física necesitaremos; por una lado la máquina física y por otro lado una máquina virtual. Las dos deben iniciarse con clonezilla, activar la red y levantar el servidor ssh.

  • Activar la red: para meter la máquina dentro de nuestra red. Si tenemos corriendo un DHCP en nuestra red, podemos solicitarle que le asigne una IP a la tarjeta de red de nuestra máquina iniciada con el CD live. Para esto utilizaremos el comando "dhclient eth0".
  • Servidor SSH: una vez tenemos la máquina dentro de la red vamos a iniciar el servidor SSH ejecutando el comando "/etc/init.d/ssh start". Ahora podemos conectarnos desde una máquina remota a esta.
Ahora desde la máquina que pretendemos virtualizar ejecutaremos el siguiente comando:
dd if=/dev/sda | ssh root@< ip &gt dd of=/dev/sda
Esto nos pedirá la clave de root de la máquina destino. Y comenzará con el proceso de clonado enviando los datos por la red, son devolver ningún tipo información sobre el estado del proceso.

Este proceso puede tardar algunas horas, dependiendo de la velocidad de nuestra red y del tamaño del disco a copiar. Recomiendo utilizar el comando "pv" entre el "dd" y "ssh" para que nos informe sobre la transferencia de datos.

"pv" nos mostrará tanto la transferencia actual, como el total de datos transferidos. Esto será bastante cómodo y nos ayuda a hacer una estimación del tiempo que le queda al proceso. El resultado es algo parecido a esto:
1,32GB 0:02:06 [10,9MB/s] [                            <=>                         ]
Cuando el proceso ha terminado tiene que mostrar un resumen total como este:

156301488+0 records in
156301488+0 records out
80026361856 bytes (80 GB) copied, 7069.71 s, 11.3 MB/s

Asegúrate de tener instalado el comando "pv" antes de lanzar el proceso. Si no lo tienes instalado no funcionará. Finalmente así queda el comando:
dd if=/dev/sda | pv | ssh root@< ip &gt dd of=/dev/sda
Recordad que este proceso es bastante largo, si lanzas el proceso desde una consola SSH es muy probable que pierdas la conexión y no puedas volver a consultar el estado del proceso. Para evitar este problema recomiendo siempre utilizar "screen" para lanzar este tipos de proceso que presumiblemente tardarán mucho en terminar. Hace ya algún tiempo que escribí un artículo sobre el uso de "screen", pero sigue estando en vigor y os puede servir de ayuda.

También es importante destacar que este proceso cargará en gran medida en hardware donde lancemos el comando "dd if=/dev/sda | ..."; ya que recorrerá por completo el disco duro y lo transferirá por la red. Si hemos decidido virtualizar una máquina física es probable que se trate de una máquina vieja y puede que este proceso termine de matarla y no sobreviva.

Para evitar matar a la máquina que pretendáis virtualizar y no hacer que toda la espera sea una perdida de tiempo, os recomiendo sacar el disco de la máquina a virtualizar y o bien montarlo en una unidad usb externa y lanzar el "dd" desde otra máquina o conectarlo directamente en la maquina que hospedará a la máquina virtual.

lunes, 18 de noviembre de 2013

Proxmox "The requested URL returned error: 401"

Como ya sabréis Proxmox ha dejado de ser gratuito, ahora si no estas suscrito, tienes que utilizar los repositorios de test, no recomendados para servidores en explotación. Pero no obstante yo tenía configurado el servidor de test en mi /etc/apt/sources.list y tenía este error al ejecutar un "aptitude update" o "apt-get update".
Err https://enterprise.proxmox.com wheezy/pve-enterprise amd64 Packages
  The requested URL returned error: 401
Ign https://enterprise.proxmox.com wheezy/pve-enterprise Translation-es_ES
Ign https://enterprise.proxmox.com wheezy/pve-enterprise Translation-es
Ign https://enterprise.proxmox.com wheezy/pve-enterprise Translation-en
94% [Trabajando]W: Se produjo un fallo al descargar https://enterprise.proxmox.com/debian/dists/wheezy/pve-enterprise/binary-amd64/Packages: The requested URL returned error: 401
E: Some index files failed to download. They have been ignored, or old ones used instead.
E: No se pudo reconstruir el almacén de paquetes
Al final el error está en la carga del fichero "/etc/apt/sources.list.d/pve-enterprise.list" por alguna razón ha cargado el repositorio enterprise y hay que comentarlo para evitar este error 401.

Simplemente comentamos la linea que aparece en el fichero "/etc/apt/sources.list.d/pve-enterprise.list" y volvemos a ejecutar el "update" y todo funcionará correctamente.
#deb https://enterprise.proxmox.com/debian wheezy pve-enterprise

sábado, 16 de noviembre de 2013

Selección kernel por defecto inicio grub Debian

¿Alguna vez has necesitado seleccionar un nuevo kernel en el arranque de tu Debian y no estás frente a la máquina para poder seleccionar con los cursores en la pantalla de selección de kernels de grub? Pues durante la instalación de Proxmox yo lo he necesitado.

Es bastante simple, en primer lugar tenemos que ver cuál es el kernel que queremos iniciar. Con el comando "grep menuentry /boot/grub/grub.cfg" podemos ver los que tenemos disponibles en la pantalla de carga de grub.

En mi ejemplo aparecen dos kernel; 3.2.0 amd64 y 2.6.32 pve, con sus correspondientes "recovery mode"; si contamos tenemos 4 lineas.
root@debian:~# grep menuentry /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-26-pve' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-26-pve (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
Desde el fichero "/etc/default/grub" podemos modificar el parámetros "GRUB_DEFAULT=2" donde definiremos el kernel que queremos que se seleccione por defecto. Cuando abrimos el fichero por primera vez "GRUB_DEFAULT" tendrá valor "0", que corresponde con el primer kernel de la lista.

Por tanto el contador de kernel comienza a contar en "0"; si queremos seleccionar el kernel "Debian GNU/Linux, with Linux 2.6.32-26-pve" que está en la tercera linea, tendremos que darle valor "2".
Tras modificar el fichero únicamente nos queda refrescar la configuración de grub con el comando "update-grub". Ahora cuando reiniciemos nuestro sistema aparecerá la tercera opción seleccionada por defecto.
root@debian:~# update-grub
Tenemos que tener cuidado con futuras actualizaciones o instalaciones/desinstalaciones de kernels. Estas acciones modificarán el orden de nuestros kernels en el listado de carga y es muy probable que el valor de "GRUB_DEFAULT" no corresponda con el kernel que queremos iniciar.

En mi caso tras cargar el kernel "Debian GNU/Linux, with Linux 2.6.32-26-pve" voy a desinstalar "Debian GNU/Linux, with Linux 3.2.0-4-amd64" y ahora "2.6.32-26-pve" pasará a la primera posición de la lista. Es muy importante volver a poner el valor de "GRUB_DEFAULT=0" para que cargue correctamente.

viernes, 15 de noviembre de 2013

bootlogd Debian 7.2

En más de una ocasión he necesitado leer detenidamente lo que se carga en el arranque del sistema sin estar delante de la pantalla del servidor. Con bootlogd se puede solucionar este problema. Devuelve a un fichero de log todo lo que sucede en el inicio del sistema. Con esta herramienta podemos averiguar si tenemos algún problema en la carga inicial del sistema.

Para ponerlo en funcionamiento es bastante simple. Simplemente instalamos el paquete "bootlogd":
aptitude install bootlogd
Después creamos el fichero "/etc/default/bootlogd" con añadiendo la linea "BOOTLOGD_ENABLE=yes", ahora solo nos falta reiniciar y ver el contenido del fichero "/var/log/boot" para ver qué ha pasado en el inicio del sistema.

https://wiki.debian.org/bootlogd

miércoles, 30 de octubre de 2013

Calcular día par o impar #!/bin/bash

Hace poco necesité una acción dentro de un script que se ejecutase únicamente los días pares del calendario. Calculando el módulo 2 del número del día se puede calcular fácilmente.
#!/bin/bash
dia=`date +%_d`
check=$(($dia % 2))
if [ $check = 0 ]; then
        echo "es un día par";
fi

martes, 29 de octubre de 2013

Menús de NetBeans 7.3 en negrita tras actualizar Ubuntu 13.10

Tras la actualización de Ubuntu 13.10, su última versión más reciente, el IDE  Netbeans (versión 7.3.1) comienza a hacer de las suyas; poniendo todos los menús y títulos de archivos abiertos (en la pestaña correspondiente al fichero) en negrita.

Algo un poco incomodo, ahora no sé los ficheros que están modificados, pues cuando antes modificabas un fichero el título del fichero aparecía en negrita.

Pues esto tiene fácil solución; desinstalar el paquete fonts-unfonts-core y listo.
sudo apt-get remove fonts-unfonts-core

Parece que las actualizaciones de Ubuntu fuerzan la instalación de este paquete desde hace ya varias versiones.

Fuente: http://josemanuelruizbaena.blogspot.com.es/2012/09/netbeans-72-linux-menus-negrita.html

lunes, 7 de octubre de 2013

Descargar Java con wget

Cuando descargamos JAVA desde la web oficial, necesitamos aceptar la licencia para poder descargar el fichero. Alguna vez ha necesitado descargar un jre en un servidor que no tenía entorno gráfico, lo único que tenía era wget para hacer descargas http. ¿Como podemos hacer esto con wget?


Pues no es muy complicado, simplemente tenemos que incluir algunos parámetros en el wget para que descargue sin problemas:
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http://www.oracle.com/"
Ejemplo para "jre-6u25-linux-x64.bin":
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http://www.oracle.com/" http://download.oracle.com/otn-pub/java/jdk/6u25-b06/jre-6u25-linux-x64.bin

martes, 27 de agosto de 2013

MacBook Pro 2008 pantalla en negro y no responde [2/2]

Todo comenzó con MacBook Pro 2008 pantalla en negro y no responde [1/2].

De esto ya hace bastante tiempo, pero no quería dejar pasar la oportunidad de dejar rastro en Internet sobre lo sucedido con mi MacBook Pro del 2008.

Tras mucho buscar y buscar me decidí por llevarlo al servicio técnico Appel oficial en Sevilla (http://www.fotiste.com/ ADVERTENCIA: la página es fantástica, si no tiene instalado flash te salta un javascript que fuerza a descargarlo y si no lo instalas no puedes ver la web). Allí me dieron un presupuesto de reparación que rondaba los 500€; la reparación consistía en sustituir la placa base del portátil (así también arreglo yo las cosas, lo montas nuevo y listo).

Les pregunté por un reballing, un resumen para el que no conozca el termino y no quiera perder el tiempo en leer un tostón; el reballing consiste en volver a soldar las conexiones de un micro. Me dijeron que eso a los Macs no se le puede hacer porque "llevan soldados de 4 capas". No encontré información sobre ese supuesto soldado de 4 capas en Internet y me extrañó bastante.

Me dispuse a probar con un reballing. Para esto es necesaria una máquina especial; casualmente tengo un colega con una tienda de informática que tiene la máquina (http://www.conecta-pc.es/ Dos Hermanas, Avd de España).

Tras desmontar la placa base del Mac, meterla en la máquina, realizar el proceso y volver a montarla... FUNCIONA... jaque mate al servicio técnico de Appel.




lunes, 26 de agosto de 2013

Estadísticas del servidor de correo con mailgraph

Pues mailgraph es muy útil para obtener información sobre el funcionamiento de nuestros servidores de correo, nos da bastante información sobre la carga que tiene el servidor y las horas punta de carga. Además es muy simple de instalar, apenas necesita un simple "apt-ge install" o "aptitude install" lo que más os guste y listo.
~# aptitude install mailgraph
Se instalarán los siguiente paquetes NUEVOS:  
  fontconfig{a} fontconfig-config{a} libcairo2{a} libdatrie1{a} libdbi1{a} libfile-tail-perl{a} libfontconfig1{a} libpango1.0-0{a}
  libpixman-1-0{a} libpng12-0{a} librrd4{a} librrds-perl{a} libthai-data{a} libthai0{a} libxcb-render0{a} libxcb-shm0{a} libxft2{a}
  libxrender1{a} mailgraph ttf-dejavu{a} ttf-dejavu-core{a} ttf-dejavu-extra{a}
0 paquetes actualizados, 22 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 6.554 kB de ficheros. Después de desempaquetar se usarán 16,6 MB.
¿Quiere continuar? [Y/n/?]
Des: 1 http://ftp.rediris.es/debian/ wheezy/main ttf-dejavu-core all 2.33-3 [1.021 kB]
Des: 2 http://ftp.rediris.es/debian/ wheezy/main fontconfig-config all 2.9.0-7.1 [233 kB]
Des: 3 http://ftp.rediris.es/debian/ wheezy/main libfontconfig1 amd64 2.9.0-7.1 [300 kB]
Des: 4 http://ftp.rediris.es/debian/ wheezy/main libpixman-1-0 amd64 0.26.0-4 [427 kB]                                                    
Des: 5 http://ftp.rediris.es/debian/ wheezy/main libpng12-0 amd64 1.2.49-1 [190 kB]                                                      
Des: 6 http://ftp.rediris.es/debian/ wheezy/main libxcb-render0 amd64 1.8.1-2 [18,5 kB]                                                  
Des: 7 http://ftp.rediris.es/debian/ wheezy/main libxcb-shm0 amd64 1.8.1-2 [10,3 kB]                                                      
Des: 8 http://ftp.rediris.es/debian/ wheezy/main libxrender1 amd64 1:0.9.7-1 [32,2 kB]                                                    

Des: 9 http://ftp.rediris.es/debian/ wheezy/main libcairo2 amd64 1.12.2-3 [912 kB]                                                        

Des: 10 http://ftp.rediris.es/debian/ wheezy/main libdatrie1 amd64 0.2.5-3 [28,6 kB]                                                      

Des: 11 http://ftp.rediris.es/debian/ wheezy/main libthai-data all 0.1.18-2 [154 kB]                                                      
Des: 12 http://ftp.rediris.es/debian/ wheezy/main libthai0 amd64 0.1.18-2 [42,3 kB]                                                        
Des: 13 http://ftp.rediris.es/debian/ wheezy/main libxft2 amd64 2.3.1-1 [61,0 kB]                                                        
Des: 14 http://ftp.rediris.es/debian/ wheezy/main fontconfig amd64 2.9.0-7.1 [348 kB]                                                    
Des: 15 http://ftp.rediris.es/debian/ wheezy/main libpango1.0-0 amd64 1.30.0-1 [461 kB]                                                  
Des: 16 http://ftp.rediris.es/debian/ wheezy/main ttf-dejavu-extra all 2.33-3 [1.759 kB]                                                  
Des: 17 http://ftp.rediris.es/debian/ wheezy/main ttf-dejavu all 2.33-3 [30,6 kB]                                                        
Des: 18 http://ftp.rediris.es/debian/ wheezy/main libfile-tail-perl all 0.99.3-5 [23,3 kB]                                                
Des: 19 http://ftp.rediris.es/debian/ wheezy/main libdbi1 amd64 0.8.4-6 [31,7 kB]                                                        
Des: 20 http://ftp.rediris.es/debian/ wheezy/main librrd4 amd64 1.4.7-2 [322 kB]                                                          
Des: 21 http://ftp.rediris.es/debian/ wheezy/main librrds-perl amd64 1.4.7-2 [116 kB]                                                    
Des: 22 http://ftp.rediris.es/debian/ wheezy/main mailgraph all 1.14-11 [34,6 kB]                                                          
Descargados 6.554 kB en 32seg. (204 kB/s)                                                                                                
Preconfigurando paquetes ...
Seleccionando el paquete ttf-dejavu-core previamente no seleccionado.
(Leyendo la base de datos ... 34481 ficheros o directorios instalados actualmente.)
Desempaquetando ttf-dejavu-core (de .../ttf-dejavu-core_2.33-3_all.deb) ...
Seleccionando el paquete fontconfig-config previamente no seleccionado.
Desempaquetando fontconfig-config (de .../fontconfig-config_2.9.0-7.1_all.deb) ...
Seleccionando el paquete libfontconfig1:amd64 previamente no seleccionado.
Desempaquetando libfontconfig1:amd64 (de .../libfontconfig1_2.9.0-7.1_amd64.deb) ...
Seleccionando el paquete libpixman-1-0:amd64 previamente no seleccionado.
Desempaquetando libpixman-1-0:amd64 (de .../libpixman-1-0_0.26.0-4_amd64.deb) ...
Seleccionando el paquete libpng12-0:amd64 previamente no seleccionado.
Desempaquetando libpng12-0:amd64 (de .../libpng12-0_1.2.49-1_amd64.deb) ...
Seleccionando el paquete libxcb-render0:amd64 previamente no seleccionado.
Desempaquetando libxcb-render0:amd64 (de .../libxcb-render0_1.8.1-2_amd64.deb) ...
Seleccionando el paquete libxcb-shm0:amd64 previamente no seleccionado.
Desempaquetando libxcb-shm0:amd64 (de .../libxcb-shm0_1.8.1-2_amd64.deb) ...
Seleccionando el paquete libxrender1:amd64 previamente no seleccionado.
Desempaquetando libxrender1:amd64 (de .../libxrender1_1%3a0.9.7-1_amd64.deb) ...
Seleccionando el paquete libcairo2:amd64 previamente no seleccionado.
Desempaquetando libcairo2:amd64 (de .../libcairo2_1.12.2-3_amd64.deb) ...
Seleccionando el paquete libdatrie1:amd64 previamente no seleccionado.
Desempaquetando libdatrie1:amd64 (de .../libdatrie1_0.2.5-3_amd64.deb) ...
Seleccionando el paquete libthai-data previamente no seleccionado.
Desempaquetando libthai-data (de .../libthai-data_0.1.18-2_all.deb) ...
Seleccionando el paquete libthai0:amd64 previamente no seleccionado.
Desempaquetando libthai0:amd64 (de .../libthai0_0.1.18-2_amd64.deb) ...
Seleccionando el paquete libxft2:amd64 previamente no seleccionado.
Desempaquetando libxft2:amd64 (de .../libxft2_2.3.1-1_amd64.deb) ...
Seleccionando el paquete fontconfig previamente no seleccionado.
Desempaquetando fontconfig (de .../fontconfig_2.9.0-7.1_amd64.deb) ...
Seleccionando el paquete libpango1.0-0:amd64 previamente no seleccionado.
Desempaquetando libpango1.0-0:amd64 (de .../libpango1.0-0_1.30.0-1_amd64.deb) ...
Seleccionando el paquete ttf-dejavu-extra previamente no seleccionado.
Desempaquetando ttf-dejavu-extra (de .../ttf-dejavu-extra_2.33-3_all.deb) ...
Seleccionando el paquete ttf-dejavu previamente no seleccionado.
Desempaquetando ttf-dejavu (de .../ttf-dejavu_2.33-3_all.deb) ...
Seleccionando el paquete libfile-tail-perl previamente no seleccionado.
Desempaquetando libfile-tail-perl (de .../libfile-tail-perl_0.99.3-5_all.deb) ...
Seleccionando el paquete libdbi1 previamente no seleccionado.
Desempaquetando libdbi1 (de .../libdbi1_0.8.4-6_amd64.deb) ...
Seleccionando el paquete librrd4 previamente no seleccionado.
Desempaquetando librrd4 (de .../librrd4_1.4.7-2_amd64.deb) ...
Seleccionando el paquete librrds-perl previamente no seleccionado.
Desempaquetando librrds-perl (de .../librrds-perl_1.4.7-2_amd64.deb) ...
Seleccionando el paquete mailgraph previamente no seleccionado.
Desempaquetando mailgraph (de .../mailgraph_1.14-11_all.deb) ...
Procesando disparadores para man-db ...
Configurando ttf-dejavu-core (2.33-3) ...
Configurando fontconfig-config (2.9.0-7.1) ...
Configurando libfontconfig1:amd64 (2.9.0-7.1) ...
Configurando libpixman-1-0:amd64 (0.26.0-4) ...
Configurando libpng12-0:amd64 (1.2.49-1) ...
Configurando libxcb-render0:amd64 (1.8.1-2) ...
Configurando libxcb-shm0:amd64 (1.8.1-2) ...
Configurando libxrender1:amd64 (1:0.9.7-1) ...
Configurando libcairo2:amd64 (1.12.2-3) ...
Configurando libdatrie1:amd64 (0.2.5-3) ...
Configurando libthai-data (0.1.18-2) ...
Configurando libthai0:amd64 (0.1.18-2) ...
Configurando libxft2:amd64 (2.3.1-1) ...
Configurando fontconfig (2.9.0-7.1) ...
Regenerating fonts cache... done.
Configurando libpango1.0-0:amd64 (1.30.0-1) ...
Configurando ttf-dejavu-extra (2.33-3) ...
Configurando ttf-dejavu (2.33-3) ...
Configurando libfile-tail-perl (0.99.3-5) ...
Configurando libdbi1 (0.8.4-6) ...
Configurando librrd4 (1.4.7-2) ...
Configurando librrds-perl (1.4.7-2) ...
Configurando mailgraph (1.14-11) ...
Creating config file /etc/default/mailgraph with new version
[ ok ] Starting : mailgraph.
Tras instalarlo simplemente vais a un navegado, poneis la dirección de vuestro servidor añadiendo "/cgi-bin/mailgraph.cgi" (http://xxx.xxx.xxx.xxx/cgi-bin/mailgraph.cgi) y disfrutáis de la información pasados unos minutos.

Os dejo una captura de ejemplo sobre lo que podéis ver.



domingo, 25 de agosto de 2013

Modo recuperación Debian

Recientemente he necesitado recuperar un servidor y descubrí una grata sorpresa que no había visto antes o la han incorporado recientemente. Es un modo recuperación en los CDs de instalación de Debian.

Las capturas que adjunto las he sacado del cd netinstall de debian 7.1, pero supongo que en cualquier debian 7.1 también podréis encontrar estas opciones.


En la primera pantalla que nos aparece cuando iniciamos el cd netinstall, seleccionamos la tercera opción "Avanced options" y en la siguiente pantalla "Rescue mode".




Esto da la sensación de que está comenzando una instalación de Debian estándar, pero no es así. Está recogiendo datos básicos de configuración del sistema para la consola de recuperación.







Aquí vemos algo diferente al instalador de Debian, no pide una partición donde montar el sistema raíz. En la máquina donde estaba haciendo las pruebas no tenía disco duro, así que no me muestra ningún sistema raíz disponible.

De todos modos esto no es necesario para entrar en la consola de recuperación. Y si lo que quieres es pasar un fsck al disco principal, este no debe estar montado.

Simplemente no montamos ningún sistema y continuamos.




Y finalmente se ejecuta la consola de recuperación, ahora ya podemos entrar en el sistema como si de un cdlive se tratara para realizar nuestras tareas de administración.


sábado, 24 de agosto de 2013

Cifrar particiones GNU/Linux

Pues el título lo dice todo, un pequeño manual sobre como cifrar particiones bajo GNU/Linux, como siempre yo los experimentos los hago bajo Debian, pero casi seguro que con algunas modificaciones funciona en otras distribuciones.

En primer lugar es necesario cargar los siguientes módulos, para ello utilizamos el comando "modprobe", recordad que tenemos el comando "lsmod" para ver los módulos cargados y que en el fichero "/etc/modules" definimos los módulos que queremos cargar en el inicio del sistema.
modprobe aes
modprobe dm-crypt
modprobe dm-mod
modprobe sha256
También necestiamos instalar el paquete "cryptsetup".
apt-get install cryptsetup
Y a continuación ejecutamos el siguiente grupo de comandos. Que en primer lugar encripta el dispositivo, accede a la información encriptada, crea el sistema de ficheros ext4 y finalmente monta el dispositivo.
cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 luksFormat /dev/sdb1
cryptsetup luksOpen /dev/sdb1 decrypt
mkfs.ext4 /dev/mapper/decrypt
mount /dev/mapper/decrypt /mnt
Para montar el dispositvo simplemtne tendremos que ejecutar estas dos. Tras el primer comando nos pedirála clave que utilizamos para cifrar la partición y poder acceder al contenido. El segundo comando simplemente monta el dispositivo para poder leer o escribir.
cryptsetup luksOpen /dev/sdb1 decrypt
mount /dev/mapper/decrypt /mnt
Se pueden utilizar modificardores para que NO solicite la clave y se la pasemos directamente, pero no recomiendo para nada, las claves NUNCA deben estar escritas en ningún sitio, las claves se memorizan y puto. Si el sistema se cae ahí tiene que estar el administrador para volver a iniciarlo.

Este es un pequeño script que podemos dejar a mano para montar el sistema si se cae.
#!/bin/bash
cryptsetup luksOpen /dev/sdb1 decrypt
mount /dev/sdb1 /opt

viernes, 23 de agosto de 2013

Iniciar máquina virtualbox desde usb

En una ocasión necesité iniciar una máquina virtual virtualbox desde un dispositivo de almacenamiento usb; finalmente encontré como hacerlo http://agnipulse.com/2009/07/boot-your-usb-drive-in-virtualbox/ 

Realmente es bastante simple, únicamente hay que ejecutar el siguiente comando:

VBoxManage internalcommands createrawvmdk -filename usb.vmdk -rawdisk /dev/sdb -relative

Esto nos creará un fichero usb.vmdk que es un "enlace" a nuestro dispositivo usb. Por esta razón el fichero ocupa unos pocos bytes y no el tamaño completo de nuestro usb. Así pues es necesario que el usb esté conectado mientras queramos usarlo puesto que usb.vmdk es un "enlace" y no una copia del usb.

Una vez creado el vmdk simplemente lo vinculamos con la máquina virtual donde queremos utilizarlo y listo.

He tenido problemas de permisos; para solucionarlo simplemente lo he ejecutado todo como root y después he ejecutado virtualbox también como root. Parece que si no eres root tiene problemas al acceder al dispositivo usb.

jueves, 22 de agosto de 2013

Crear Debian usb booteable

Esto es un resumen rápido para crear un dispositivo usb que se pueda iniciar y así poder acceder a un sistema "roto" y realizar tareas de administración. Si necesitas más información os recomiendo buscar el wiki de debian, hay un articulo específico sobre este tema. Pero creo que este método que yo explico es más simple y rápido.

Para crear nuestro dispositivo usb que podamos iniciar un sistema Debian, necesitaremos:
Es posible que cuando leas este artículo existan nuevas versiones de los ficheros a los que hago referencia o que esos enlaces dejen de estar disponibles.

Respecto al fichero boot.img.tgz, lo podrás encontrar en cualquier repositorio de Debian, normalmente en el directorio "main/installer-i386/current/images/hd-media/".

La ISO puedes descargar cualquiera (os dejo un enlace con las isos cds de Debian 7.1), yo dejo el enlace de la netinstall para i386 porque es la que menos pesa, es la arquitectura que necesito y para cosas básicas es más que suficiente.

En primer lugar conectamos el dispositivo a nuestra máquina; no lo he comentado pero necesitamos  que nuestra máquina tenga un sistema operativo GNU/Linux. Los comandos que utilizaremos son muy estándar y están en todas las distribuciones GNU/Linux.

Dependiendo del la distribución que utilicemos puede que nos monte el dispositivo usb simplemente por conectarlo. Necesitamos que esté desmontado; puedes hacerlo desde el entorno de escritorio o desde linea de comandos con un "umount /dev/sdx1".

Es muy importante que nos aseguremos del nombre que el sistema le ha dado a nuestro dispositivo usb, /dev/sda suele ser el disco duro principal, si no tenemos más discos duros lo normal es que /dev/sdb sea nuestro nuevo dispositivo usb. Para asegurar puedes utilizar el comando "dmesg" tras conectar el dispositivo y al final del listado veremos algo así:
[ 7416.604129] usb 2-1: new high-speed USB device number 3 using ehci-pci
[ 7417.324920] usb 2-1: New USB device found, idVendor=090c, idProduct=1000
[ 7417.324932] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 7417.324940] usb 2-1: Product: Flash Disk
[ 7417.324947] usb 2-1: Manufacturer: USB
[ 7417.324953] usb 2-1: SerialNumber: FB08091700089215
[ 7418.012644] Initializing USB Mass Storage driver...
[ 7418.013058] scsi5 : usb-storage 2-1:1.0
[ 7418.013460] usbcore: registered new interface driver usb-storage
[ 7418.013462] USB Mass Storage support registered.
[ 7419.013550] scsi 5:0:0:0: Direct-Access     USB      Flash Disk       1100 PQ: 0 ANSI: 0 CCS
[ 7419.014893] sd 5:0:0:0: Attached scsi generic sg2 type 0
[ 7419.018379] sd 5:0:0:0: [sdb] 1957888 512-byte logical blocks: (1.00 GB/956 MiB)
[ 7419.019514] sd 5:0:0:0: [sdb] Write Protect is off
[ 7419.019518] sd 5:0:0:0: [sdb] Mode Sense: 43 00 00 00
[ 7419.020717] sd 5:0:0:0: [sdb] No Caching mode page present
[ 7419.020721] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[ 7419.026348] sd 5:0:0:0: [sdb] No Caching mode page present
[ 7419.026352] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[ 7419.028671]  sdb: sdb1
[ 7419.032739] sd 5:0:0:0: [sdb] No Caching mode page present
[ 7419.032743] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[ 7419.033480] sd 5:0:0:0: [sdb] Attached SCSI disk
Como podemos ver en mi caso ha llamado sdb al dispositivo usb. Así pues "umount /dev/sdb1" para desmontarlo. Si ejecutamos simplemente "mount" nos mostrará los dispositivos montados, tenemos que asegurarnos de que nuestro usb no esté montado.

Ahora vamos a hacer que nuestro usb sea booteable, para ello utilizaremos la imagen boot.img.tgz. Desde el directorio donde tengamos la imagen, ejecutaremos el siguiente comando. Prestad atención porque es /dev/sdb y no /dev/sdb1, no es necesario especificar la partición.

IMPORTANTE: Por si no lo suponías, esta acción borrará toda la información del dispositivo.
zcat boot.img.tgz > /dev/sdb 
Tras realizar esta operación, que puede tardar algunos minutos. Tenemos que montar el dispositivo con el comando "mount /dev/sdb /mnt/". Aquí podemos ver el contenido del dispositivo ahora.

root@test:~# mount /dev/sdb /mnt/
root@test:~# ls -l /mnt/
total 33436
-rwxr-xr-x 1 root root      361 jun 13 21:45 adgtk.cfg
-rwxr-xr-x 1 root root      259 jun 13 21:45 adtxt.cfg
-rwxr-xr-x 1 root root       62 jun 13 21:45 disk.lbl
-rwxr-xr-x 1 root root       56 jun 13 21:45 exithelp.cfg
-rwxr-xr-x 1 root root      568 jun 13 21:45 f10.txt
-rwxr-xr-x 1 root root      881 jun 13 21:45 f1.txt
-rwxr-xr-x 1 root root      665 jun 13 21:45 f2.txt
-rwxr-xr-x 1 root root      852 jun 13 21:45 f3.txt
-rwxr-xr-x 1 root root      486 jun 13 21:45 f4.txt
-rwxr-xr-x 1 root root      806 jun 13 21:45 f5.txt
-rwxr-xr-x 1 root root     1212 jun 13 21:45 f6.txt
-rwxr-xr-x 1 root root      916 jun 13 21:45 f7.txt
-rwxr-xr-x 1 root root     1041 jun 13 21:45 f8.txt
-rwxr-xr-x 1 root root      765 jun 13 21:45 f9.txt
-rwxr-xr-x 1 root root   159629 jun 13 21:45 g2ldr
-rwxr-xr-x 1 root root     8192 jun 13 21:45 g2ldr.mbr
-rwxr-xr-x 1 root root      132 jun 13 21:45 gtk.cfg
-rwxr-xr-x 1 root root 24459775 jun 13 21:45 initrdg.gz
-rwxr-xr-x 1 root root  6355044 jun 13 21:45 initrd.gz
-r-xr-xr-x 1 root root    32256 jun 13 21:45 ldlinux.sys
-rwxr-xr-x 1 root root  2510272 jun 13 21:45 linux
-rwxr-xr-x 1 root root      647 jun 13 21:45 menu.cfg
-rwxr-xr-x 1 root root      190 jun 13 21:45 prompt.cfg
-rwxr-xr-x 1 root root      154 jun 13 21:45 rqgtk.cfg
-rwxr-xr-x 1 root root      118 jun 13 21:45 rqtxt.cfg
-rwxr-xr-x 1 root root   366350 jun 13 21:45 setup.exe
-rwxr-xr-x 1 root root      141 jun 13 21:45 spkgtk.cfg
-rwxr-xr-x 1 root root    78821 jun 13 21:45 splash.png
-rwxr-xr-x 1 root root      691 jun 13 21:45 stdmenu.cfg
-rwxr-xr-x 1 root root       87 jun 13 21:45 syslinux.cfg
-rwxr-xr-x 1 root root      128 jun 13 21:45 txt.cfg
-rwxr-xr-x 1 root root   155792 jun 13 21:45 vesamenu.c32
-rwxr-xr-x 1 root root      196 jun 13 21:45 win32-loader.ini
Por último copiaremos la iso en la raiz del dispositivo "cp debian-7.1.0-i386-netinst.iso /mnt/", tras esta operación podemos desmontar el dispositivo usb y conectarlo a una máquina para poder iniciarla desde nuestro nuevo debian usb.

Recuerda que el inicio desde usb puede que no esté activado en la maquina, para ello tendrás que entrar  en la bios y activar el inicio desde dispositivos usb.

Finalmente ya puedes iniciar Debian desde el usb y puedes utilizar el modo recuperación para obtener una consola básica donde realizar algunas gestiones de administración.


martes, 9 de julio de 2013

Restaurar backup ipcop


Me encontré con algunos problemas para restaurar una copia de seguridad de ipcop.El problema es que al intentar importar una copia de seguridad de otro servidor da un error diciendo que NO puede desencriptar la copia de seguridad.

Bajo mi punto de vista lo complican bastante, os dejo la solución.

En primer lugar desde el servidor donde hemos creado la copia de seguridad (servidor origen) tenemos que extraer el certificado de cifrado de copias de seguridad.

Para ello hacemos click en "Exportar clave de respaldo" esto nos descargará un fichero .key que tendremos que descifrar con openssl.



 Una vez tenemos nuestro fichero .key ejecutamos desde nuestra máquina:
openssl enc -a -d -aes256 -salt -pass pass: -in encrypted.backup.key -out decrypted.backup.key
Ya tenemos descifrado el certificado y tenemos que copiarlo a nuestro nuevo servidor donde queremos restaurar la copia de seguridad (servidor destino). En concreto tenemos que copiarlo (reemplazar por el que exista):
/var/ipcop/backup/backup.key
Para copiar el fichero .key a nuestro nuevo servidor ipcop podemos hacerlo utilizando utilizando el comando:
scp -P 8022 decrypted.backup.key root@192.168.x.x:/var/ipcop/backup/backup.key
Ahora ya podremos importar la copia de seguridad sin problemas.

viernes, 28 de junio de 2013

dbmail con PostgreSQL Debian (Wheezy)


Este manual sigue en la linea del escrito hace ya algunos años sobre dbmail y postgresql. Tras 5 años de escribir el primer manual de dbmail bajo postgresql, toca actulizarse. Así pues describo como instalar dbmail 3.0.2 y postfix 2.9.6-2, utilizando como base de datos postgresql 9.2.4 y todo corriendo sobre Debian 7.

Os dejo por aquí el enlace al manual anterior, por si alguien necesita tocar algún servidor antiguo y no sabe por donde comenzar. Encontrará algunas pautas de administración.

http://josemanuelruizbaena.blogspot.com.es/2008/09/dbmail-con-postgresql-debian-etch.html

Para el funcionamiento de dbmail es imprescindible tener instalado un sistema gestor de base de datos. He encontrado en internet muchos manuales que enseñan como montar dbmail bajo MySQL. Pero después de mi experiencia y tras probar las bondades de PostgreSQL, sin duda este manual de dbmail será para montarlo utilizando como motor de base de datos PostgreSQL.

Puesto que la instalación de PostgreSQL puede no ser trivial para algunos usuarios os dejo por aquí un manual para instalar PostgreSQL en Debian 7 desde código fuente. Si ya es robusto cuando se instala desde los repositorios de Debian, imaginad cuanto no lo será compilando tu código fuente directamente.

http://josemanuelruizbaena.blogspot.com/2013/06/compilar-postgresql-en-debian.html

Requisitos de dbmail:


Hay algunos requisitos que necesitas tener en el sistema para poder instalar dbmail desde la compilación de su código fuente. Si has seguido el manual de instalación de postgresql desde su código fuente o alguna vez has compilado no necesitarás in
aptitude install build-essential
aptitude install gcc libglib2.0-dev libmhash-dev libevent-dev libssl-dev flex automake

Es necesario también instalar libzdb y libgmime-2.4-dev, pero no están disponibles por ahora (27 de junio de 2013) en el repositorio de Debian 7. Así pues lo instalamos directamente desde el código fuente.
wget http://www.tildeslash.com/libzdb/dist/libzdb-2.10.2.tar.gz
tar xvzf libzdb-2.10.2.tar.gz
cd libzdb-2.10.2
 ./configure --with-postgresql=/opt/postgresql-9.2.4/bin/pg_config

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking for gcc... gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... no
checking for suffix of executables...
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... none
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking whether gcc needs -traditional... no
checking for re2c... re2c_not_found
checking for flex... /usr/bin/flex
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking how to print strings... printf
checking for a sed that does not truncate output... /bin/sed
checking for fgrep... /bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking whether the shell understands some XSI constructs... yes
checking whether the shell understands "+="... yes
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for ar... ar
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking for pthread_create in -lpthread... yes
checking for library containing crypt... -lcrypt
checking for mysql... yes
checking for mysql_config... no
configure: WARNING: mysql_config is required to build libzdb with mysql
checking for postgresql... yes
checking for /opt/postgresql-9.2.4/bin/pg_config... yes
checking libpq-fe.h usability... yes
checking libpq-fe.h presence... yes
checking for libpq-fe.h... yes
checking for SQLite3... yes
checking for sqlite3_open in -lsqlite3... no
checking for oracle... checking if Oracle support is enabled... no
checking for ANSI C header files... (cached) yes
checking for an ANSI C-conforming const... yes
checking whether byte ordering is bigendian... no
configure: creating ./config.status
config.status: creating Makefile
config.status: creating test/Makefile
config.status: creating zdb.pc
config.status: creating src/xconfig.h
config.status: executing libtool_patch commands
config.status: executing depfiles commands
config.status: executing libtool commands
+------------------------------------------------------------+
| License:                                                   |
| This is Open Source Software and use is subject to the GNU |
| GENERAL PUBLIC LICENSE, available in this distribution in  |
| the file COPYING.                                          |
|                                                            |
| By continuing this installation process, you are bound by  |
| the terms of this license agreement. If you do not agree   |
| with the terms of this license, you must abort the         |
| installation process at this point.                        |
+------------------------------------------------------------+
| Libzdb is configured as follows:                           |
|                                                            |
|   Optimized:                                    DISABLED   |
|   Protected:                                    DISABLED   |
|   Profiling:                                    DISABLED   |
|   Zild:                                         DISABLED   |
|   Sqlite3 unlock notification API:              DISABLED   |
|   Openssl:                                      DISABLED   |
|   Unit Tests Build:                             ENABLED    |
|------------------------------------------------------------|
|   SQLite3:                                      DISABLED   |
|   MySQL:                                        DISABLED   |
|   PostgreSQL:                                   ENABLED    |
|   Oracle:                                       DISABLED   |
+------------------------------------------------------------+


make
make install
Para instalar libgmime-2.4-dev lo descargamos de http://ftp.acc.umu.se/pub/GNOME/sources/gmime/2.4/.
wget http://ftp.acc.umu.se/pub/GNOME/sources/gmime/2.4/gmime-2.4.33.tar.xz
tar -Jxf gmime-2.4.33.tar.xz
cd gmime-2.4.33
./configure
make
make install

Instalar postfix

Ya hemos instalado todas las librerías y requisitos para dbmail, pero necesitamos un gestor SMTP que se comunique a la perfección con nuestro dbmail y orqueste todo el sistema.

Yo prefiero Postfix y por ahora instalaremos el del sistema, que va perfectamente. No sé si el día de mañana haré un nuevo manual con postfix compilado.

Cuando intentamos instalar Postfix nos advierte el sistema que ya existe un SMTP funcionando en el sistema, se trata de exim4. La solución que nos propone apt es la correcta, desinstalará exim4 (y los subpaquetes instalados) e instalará postfix.
aptitude install postfix
Se instalarán los siguiente paquetes NUEVOS:    
  postfix{b} ssl-cert{a}
0 paquetes actualizados, 2 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 1.566 kB de ficheros. Después de desempaquetar se usarán 3.380 kB.
No se satisfacen las dependencias de los siguientes paquetes:
 exim4-config : Entra en conflicto: postfix pero se va a instalar 2.9.6-2.
 postfix : Entra en conflicto: mail-transport-agent que es un paquete virtual.
 exim4-daemon-light : Entra en conflicto: mail-transport-agent que es un paquete virtual.
Las acciones siguientes resolverán estas dependencias

     Eliminar los paquetes siguientes:
1)     exim4                         
2)     exim4-base                    
3)     exim4-config                  
4)     exim4-daemon-light            

¿Acepta esta solución? [Y/n/q/?]
Al comenzar la instalación de Postfix veremos esta pantalla en el terminal, nos pregunta sobre el modo de funcionamiento de nuestra instancia de postfix. Seleccionamos "Sitio de Internet: El correo se envía y recibe directamente utilizando SMTP.".
También nos preguntará sobre el dominio (o subdominio, como es el caso de la captura) que queremos controlar con nuestro postfix.

Tras estos dos pasos terminará la instalación y configuración básica de postfix, más adelante continuaremos con configuración de postfix.

Crear base de datos (almacén de correos) 

Tras instalar todos los requisitos, creamos el usuarios dentro de PostgreSQL para que dbmail pueda almacenar los datos para la gestión del sistema de correos.
su postgres
echo "create user dbmail with password 'xxxx' " | /opt/postgresql-9.2.4/bin/psql template1
echo "create database dbmail owner dbmail encoding='UNICODE'" | /opt/postgresql-9.2.4/bin/psql template1

Instalar dbmail

Compilar dbmail


Ahora ya estamos preparados para compilar dbmail. Lo primero es descargar el paquete con el código fuente directamente de la web del proyecto http://www.dbmail.org/, en la sección download. Como comentamos al principio en este manual instalaremos la versión 3.0.2, es la última publicada (marzo de 2012) tiene más de un año, pero funciona perfectamente.

Descargamos, descomprimimos, configuramos, compilamos e instalamos con los siguientes comandos:
wget http://www.dbmail.org/download/3.0/dbmail-3.0.2.tar.gz
tar xvzf dbmail-3.0.2.tar.gz
cd dbmail-3.0.2
./configure --with-zdb=/usr/local
make
make install

Configurar dbmail


Tras instalar dbmail, lo primero que tenemos que hacer es crear la estructura de la base de datos con el fichero de inicialización. El fichero con la estructura de la base de datos se encuentra en el paquete que hemos descargado (dbmail-3.0.2.tar.gz) en "sql/postgresql/create_tables.pgsql".

Para cargar la estructura de la base de datos, necesitamos tener creada la base de datos. Esto lo hicimos en un paso anterior.
cat sql/postgresql/create_tables.pgsql | /opt/postgresql-9.2.4/bin/psql -U dbmail dbmail
Ahora procedemos a copiar el fichero de configuración en el directorio de configuración de nuestro sistema y configurar algunas parametrizaciones.
cp dbmail.conf /etc/
nano /etc/dbmail.conf
Parametrizamos la conexión a la base de datos.
driver               = postgresql
authdriver           = sql
host                 = localhost
sqlport              = 5432
pass                 = xxx
db                   = dbmail
Usuario del sistema que lanzará los procesos dbmail. Puede ser dbmail o el que creeis para este fin, si queréis crear el usuario dbmail basta con ejecutar "adduser dbmail", esto os pedirá las claves de acceso así como información descriptiva del usuario.
effective_user        = dbmail
effective_group       = dbmail
Definimos los ficheros de log, tanto para errores generales como para errores. Será necesario crear el directorio "/var/log/dbmail". Por defecto intentará crear los ficheros en "/var/log" directamente, pero a mi personalmente me gusta más tener un directorio para los ficheros de log de cada aplicación. Así será más rápido localizar los ficheros cuando sean necesarios.
logfile               = /var/log/dbmail/dbmail.log
errorlog              = /var/log/dbmail/dbmail.err

Hacemos igual para el fichero donde se guarda el pid del proceso en ejecución.
# cambiamos el directorio donde están los pidfile
pid_directory         = /var/run/dbmail
Es muy importante no olvidar asignar permisos a los directorios "/var/run/dbmail" y "/var/log/dbmail/" para el usuario "dbmail" para que el proceso pueda escribir en ellos. Puede asignar permisos ejecutando "chown -R dbmail:dbmail /var/log/dbmail/" y "chown -R dbmail:dbmail /var/run/dbmail".

Encontrarás también instrucciones para definir los certificados necesarios para tls. Si vas a utilizar tls será necesario definirlos.
tls_cafile            = /etc/ssl/certs/ssl-cert-*.pem
tls_cert              = /etc/ssl/certs/ssl-cert-*.pem
tls_key               = /etc/ssl/private/ssl-cert-*.key
Para realizar envíos de correos desde nuestro SMTP por parte de los clientes de nuestro servidor de correos, me gusta configurar estas opciónes: pop_before_smtp y imap_before_smtp, esto hace que el SMTP no requiera autenticación, simplemente verifica si el usuario ha realizado una lectura de una cuenta POP o IMAP, y si la ha realizado en los últimos 5 minutos, permitirá que realice el envío SMTP.

Para establecer esta configuración es necesario definir las siguientes instrucciones.
[POP]

pop_before_smtp       = yes

[IMAP]

imap_before_smtp      = yes

Configurar postfix

En un apartado anterior se ha descrito como instalar postfix.

/etc/postfix/main.cf

transport_maps = pgsql:/etc/postfix/sql-transport.cf
mydestination = localhost, $transport_maps


mynetworks = 127.0.0.0/8, pgsql:/etc/postfix/sql-pop-before-smtp.cf



receive_override_options = no_address_mappings

local_recipient_maps =

smtpd_recipient_restrictions =
    permit_mynetworks,
    reject_unauth_destination,
    permit

Otro enlaces de interés para dbmail

Clamav
Listas grises
MailGraph




jueves, 27 de junio de 2013

Compilar PostgreSQL en Debian


Llevo trabajando unos años con PostgreSQL y no he tenido problemas, pero tenía la necesidad de utilizar funcionalidades de PostgreSQL 9 en un sistema que aún no lo incorporaba en su repositorio de paquetes y me aventuré a compilarlo. Descubrí que es bastante simple y adquiere aún más robustez si es posible. 

Para poder compilar el código fuente de postgresql necesitamos descargar de http://www.postgresql.org/ftp/source/  el paquete de postgresql que quieras instalar en tu sistema. En principio todos deben seguir el mismo procedimiento de instalación. Pero este manual lo he realizado con la versión 9.2.2 y probado con versiones posteriores (9.2.3 y 9.2.4).

Requisitos


Antes de comenzar con la instalación de PostgreSQL compilando el código fuente, es necesario instalar algunos paquetes.
aptitude install bison
aptitude install libreadline-dev libreadline5-dev libreadline6-dev
aptitude install flex
aptitude install zlib1g-dev

 Configurar, compilar e instalar

Simplemente con estos comandos ya tendremos nuestro postgres listo para comenzar a funcionar. Obiamente es necesario crear el directorio "/opt/postgresql-9.2.2" para ubicar ahí nuestro motor de base de datos.
./configure --prefix=/opt/postgresql-9.2.2
make
make install

Puesta en explotación

Creamos el usuario postgres que será el encargado de iniciar el sistema, así como el directorio contenedor de la instancia de la base de datos y le asignamos como propietario al usuario postgres.

adduser postgres --home /opt/postgresql-9.2.2
mkdir /opt/postgresql-9.2.2/data
chown -R postgres:postgres /opt/postgresql-9.2.2

Inicializar la base de datos.

Para iniciar la base de datos utilizaremos el usuario postgres, antes hay que inicializar la instancia de la base de datos.
su postgres
/opt/postgresql-9.2.2/bin/initdb -D /opt/postgresql-9.2.2/data
/opt/postgresql-9.2.2/bin/initdb --pgdata=/opt/postgresql-9.2.2/data

Iniciar la base de datos.

su postgres 
/opt/postgresql-9.2.2/bin/pg_ctl -D /opt/postgresql-9.2.2/data -l logfile start

Test de funcionamiento

Ya tenemos funcionando el motor de base de datos y probamos a crear una base de datos y conectarnos a ella.
/opt/postgresql-9.2.2/bin/createdb test
/opt/postgresql-9.2.2/bin/psql test

Script iniciar/parar/recargar

Un script bastante simple para el inicio y paro del sistema.
#!/bin/bash
### BEGIN INIT INFO
# Provides:             postgresql
# Required-Start:       $local_fs $remote_fs $network $time
# Required-Stop:        $local_fs $remote_fs $network $time
# Should-Start:         $syslog
# Should-Stop:          $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    PostgreSQL RDBMS server
### END INIT INFO

case "$1" in
    start)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl --pgdata /opt/postgresql-9.2.2/data --log /opt/postgresql-9.2.2/logfile start"
        ;;
    stop)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl stop --pgdata /opt/postgresql-9.2.2/data -m fast"
        ;;
    status)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl status --pgdata /opt/postgresql-9.2.2/data"
        ;;
    restart)
        $0 stop
        sleep 2
        $0 start
        ;;
    reload)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl reload --pgdata /opt/postgresql-9.2.2/data"
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|reload|status} "
        exit 1

        ;;
esac

exit 0

Primeros pasos


Ya podemos utilizar nuestra nueva instalación de postgres, aquí os dejo como crear vuestro primer usuario.
postgres@miequipo:/opt/postgresql-9.2.2$ echo "create user miusuario with password 'miclave' " | bin/psql template1
CREATE ROLE

Rotado de log

Escribí un artículo sobre el rotado de log para un xampp, basándome en ese artículo; recomiendo encarecidamente meter el fichero de log dentro del sistema de rotación de log. Es muy simple, únicamente tardarás unos minutos y puede quitarte quebraderos de cabeza posteriores.

Simplemente crea el fichero "/etc/logrotate.d/postgres" con el contenido:
/opt/postgresql-9.2.2/logfile {
    copytruncate
    compress
    dateext
    rotate 365
    size=+100M
    olddir /opt/postgresql-9.2.2/log/
    notifempty
    missingok
}
Tendrás que crear el directorio "/opt/postgresql-9.2.2/log/" donde se almacenará el histórico de log comprimidos. Para terminar solo nos falta ejecutar el procesado del fichero por primera vez para ver que todo está correcto.
logrotate --force /etc/logrotate.d/postgres