enchufado.com RSS 2.0 Feed http://enchufado.com/ Feed rss 2.0 del blog enchufado.com es Backup MX con postfix http://enchufado.com/post.php?ID=371 http://enchufado.com/post.php?ID=371 Mon, 31 Aug 2015 21:41:47 +0200Un backup MX és un servidor de correo secundario que actúa recibiendo y almacenando correo cuando por algún motivo no se puede realizar su entrega al MX primario. Aviso: ésto va a ser un post relámpago :)

En Debian GNU/Linux ésto es tan rápido como:

  1. Instalar un posftix de serie y añadir la siguiente configuración a main.cf:
  2. # Tiempo que queremos para la retención del correo
    maximal_queue_lifetime = 30d
    relay_recipient_maps = 
    relay_domains = hash:/etc/postfix/relaydomains
    transport_maps = hash:/etc/postfix/transportmaps
    smtpd_recipient_restrictions =
     permit_mynetworks,
     reject_unauth_destination
    
  3. Crear el archivo /etc/postfix/relaydomains con los dominios a los que le autorizamos a hacer de relay:
  4. dominio.com OK
    
  5. Crear también el archivo etc/postfix/transportmaps indicando a quién reenviar los correos para cada dominio:
  6. dominio.com smtp:mail.dominio.com:25
    
  7. Y finalmente hacer un postmap a ambos archivos y recargar la configuración de postfix:
  8. postmap /etc/postfix/relaydomains
    postmap /etc/postfix/transportmaps
    service postfix reload
    

Y eso es todo. Cuando por algún motivo no se pueda hacer entrega al servidor MX principal, el correo se entregará a éste MX de backup. A modo de comentario, si dejamos una configuración tan básica como la aquí mostrada, conviene saber que probablemente los correos que se topen con rejects temporales o permanentes que ocurran en el MX primario (greylisting, filtros antispam/antivirus...) se dirijan al secundario.

]]>
Migrar un sistema GNU/Linux a otro disco http://enchufado.com/post.php?ID=370 http://enchufado.com/post.php?ID=370 Fri, 14 Aug 2015 15:38:54 +0200Antes de empezar, nótese que en éste post me refiero a hosts físicos. Un título alternativo sería Backup completo de un host (sistema y datos). Ésto me surgió de la necesidad de tener un sistema de backup del mini PC multifunción (AP, firewall, LAMP, entorno de correo, almacenamiento en la nube...) que tengo en casa funcionando 24x7. Quería tener un backup no sólo de los datos (ciertamente lo más importante) sino de todo el sistema, porque restablecerlo en caso de desastre es una faena y actualmente no me sobra el tiempo. Hace poco, durante una tormenta, un rayo me dejó fritos el router de fibra + el interfaz de red del mini PC -en uso en ese momento- y no quiero ni imaginarme tener que empezar de cero.

Maneras de hacer ésto hay muchas y al final es cuestión de gustos. Lo primero que me viene a la cabeza es usar dd (actuar a nivel de bloque) para clonar un disco entero hacia otro, aunque si los discos origen y destino no son iguales, luego son necesarios reajustes de las particiones y sistemas de ficheros. Otra manera de actuar a nivel de bloque (ésta vez, usando sólo el espacio realmente ocupado e incluso evitando los reajustes de tamaños según el software) es usar algún sistema de clonado más precocinado, como Clonezilla, su hermano comercial Norton Ghost o afines. En lugar de ésto, he preferido actuar a nivel de ficheros usando rsync. Aunque hay otras recetas con cp o tar, yo elegí ésta por herramienta por la opción de incrementalidad y por conocerla mejor.

Ahondando un poco más en mis requisitos, a parte de querer disponer de un backup completo del host, quería poder ir actualizándolo periódicamente aprovechando ésta incrementalidad (acostumbra a ser más eficiente y a veces también más rápido). Ésto descarta en principio las soluciones que actúan a nivel de bloque. Querer hacer el backup con el host en producción también las descarta. Otras opciones como RAID1 o DRBD quedan descartadas por no querer invertir en más hardware y parecer desmesurado en un entorno personal. A parte, estoy concienciado por el tema del consumo eléctrico, climática y económicamente hablando (mi mini PC consume 13W en idle) :)

Aclarado ésto, mi solución pasa por usar un USB 2.0 del que ya dispongo, y periódicamente sincronizar al USB todo el sistema. Dejarlo conectado 24x7 con un cron evitaría olvidarse pero arriesgarse a que una incidencia en el equipo también le afecte (el USB siempre recibe alimentación aunque no esté montado). Mientras que la opción de conectarlo esporádicamente y lanzar la sincronización manualmente evita ésto pero podemos olvidarnos de hacerlo. La mejor opción queda en manos de cada uno.

Nota: Sé que hacer una sincronización de un sistema en funcionamiento puede causar inconsistencia en los datos, sobretodo cuando se trata de bases de datos, pero a parte de disponer de dumps de las mismas, en mi caso es bastante improbable porque reciben muy pocas escrituras y no es algo que me preocupe.

La orden de sincronización del sistema contra el USB sería tal que:

$ rsync -aH --delete / /media/usb0/

Y si llega el día en el que se produzca un desastre, éste sería el plan (los pasos a seguir) para migrar el sistema de ese USB a otro disco (nuevo) y poder usarlo como si fuera el original:

# Creamos (o reaprovechamos) una partición con un sistema de archivos limpio
$ fdisk -l /dev/sdb
Disposit.  Inicio Comienzo     Final  Sectores Tamaño Id Tipo
/dev/sdb1             2048 488397167 488395120 232,9G 83 Linux
$ mkfs.ext4 /dev/sdb1

# Montamos el disco, pinchamos el USB y sincronizamos los datos del USB al disco destino
$ mount /dev/sdb1 /mnt/
$ rsync -aH /media/usb0/ /mnt/

# Cuando ha acabado, podemos desmontar y extraer el USB y hacemos chroot al disco
$ mkdir /mnt/proc /mnt/dev /mnt/sys
$ mount -t proc none /mnt/proc
$ mount -o bind /dev /mnt/dev
$ mount -t sysfs sys /mnt/sys
$ chroot /mnt/ /bin/bash
chrooted$

# Adecuamos el fstab en el chroot
chrooted$ df -H 
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       246G   11G  223G   5% /
udev             11M     0   11M   0% /dev
chrooted$ blkid /dev/sdb1
/dev/sdb1: UUID="3225df51-7110-47d3-8df6-bf1e97ed46e7" TYPE="ext4" PARTUUID="000593c5-01"
chrooted$ vi /etc/fstab
UUID=3225df51-7110-47d3-8df6-bf1e97ed46e7 /               ext4    noatime,commit=300,errors=remount-ro 0       1
:wq

# Instalamos el GRUB en el chroot
chrooted$ grub-install /dev/sdb (ojo, cabe poner el disco correcto)
Installing for i386-pc platform.
Installation finished. No error reported.

chrooted$ update-grub
Generating grub configuration file ...
Found background image: /usr/share/images/desktop-base/desktop-grub.png
Found linux image: /boot/vmlinuz-4.1.0-1-amd64
Found initrd image: /boot/initrd.img-4.1.0-1-amd64
Found linux image: /boot/vmlinuz-4.0.0-2-amd64
Found initrd image: /boot/initrd.img-4.0.0-2-amd64
Found linux image: /boot/vmlinuz-3.16.0-4-amd64
Found initrd image: /boot/initrd.img-3.16.0-4-amd64
Found memtest86+ image: /boot/memtest86+.bin
Found memtest86+ multiboot image: /boot/memtest86+_multiboot.bin
Found Debian GNU/Linux (stretch/sid) on /dev/sda1
done

# Finalmente salimos del chroot
chrooted$ sync
chrooted$ exit
$ umount /mnt/sys
$ umount /mnt/dev
$ umount /mnt/proc
$ umount /mnt/

Hecho ésto, ya deberíamos poder pinchar el disco en el nuevo host y hacerlo funcionar.

]]>
Unixbenchs de SoC/NAS/Barebone/HTPC/Mini PC http://enchufado.com/post.php?ID=369 http://enchufado.com/post.php?ID=369 Fri, 25 Apr 2014 00:31:41 +0200De la web del proyecto, Unixbench es una suite de benchmarking cuyo propósito es proporcionar un indicador básico de rendimiento de sistemas con base Unix. Por ello usa una serie de tests cuyos resultados son comparados a unos considerados "base" (para entendernos, con el que se comparan todos los demás) para producir unos índices. Además, éstos índices obtenidos por cada test se combinan para producir un íncide sintético final (léase como una puntuación final) para medir el desempeño del sistema. Esto facilita la comparación de puntuaciones.

En la misma web avisan que se trata de un benchmark de sistema y no sólo de CPU/RAM/disco, por lo que los resultados variarán no sólo en función del hardware, sino también según el sistema operativo, librerias e incluso el compilador.

El caso es que no he encontrado ninguna comparativa "facilona" (que puedas ver de un vistazo) como ésta de sistemas pequeños (SoC/NAS/Barebone/HTPC/Mini PC), así que he pensado que podía intentar recopilar los que pudiese con la ayuda de quien quiera y pueda colaborar a ésta recolección de datos. De momento ya hay unos pocos y espero y deseo poder ir recopilando más.

El recurso puede encontrarse aquí en inglés para tratar de llegar a un mayor público, pero a modo de resumen, los pasos a seguir para colaborar serian los siguientes:

  1. Descargar Unixbench desde aquí.
  2. Extraer los ficheros y ejecutar:
  3. ./Run -c `cat /proc/cpuinfo | grep processor | wc -l`

    Avisar que la primera vez que se ejecute, la aplicación necesita compilar un par de cosas, así que asegúrate de tener los paquetes make, gcc y build-essential (en caso de Debian) o instálalos. De otro modo, la compilación fallará.

  4. Esperar a que termine el script y muestre la salida.
  5. Una vez haya terminado, enviarme un correo (a jors*at*enchufado*dot*com) con lo siguiente:
    • Marca y modelo del aparato (la salida de dmidecode sería lo ideal)
    • URL del producto (si tiene)
    • Sistema Operativo y versión
    • Resultados de Unixbench

¡Agradecido desde ya por cualquier contribución! :)

]]>
Infiniband en Debian GNU/Linux Wheezy http://enchufado.com/post.php?ID=368 http://enchufado.com/post.php?ID=368 Mon, 14 Apr 2014 00:30:46 +0200Los motivos de la elección de Infiniband por encima de otras opciones pueden ser la alta tasa de transferencia (10, 20 o incluso más Gbps), la baja latencia, el bajo precio si nos decidimos por hardware de segunda mano (comparado p.ej. con 10GbE) y la posibilidad de hacerlo funcionar con el protocolo ip (IPoIB / IP over Infiniband). Algún que otro inconveniente puede ser que la rigidez de los cables puede complicar la instalación y que no hay instrucciones claras -o no las supe encontrar- de cómo echarlo a andar.

Así pues, vamos al lio. Las tarjetas que cayeron en nuestras manos fueron unas Mellanox MT25418.

  1. La pinchamos en el servidor y tendríamos que verla:
  2. # lspci
    07:00.0 InfiniBand: Mellanox Technologies MT25418 [ConnectX VPI PCIe 2.0 2.5GT/s - IB DDR / 10GigE] (rev a0)
    
    # dmesg | grep -i mlx4
    [    4.500835] mlx4_core: Mellanox ConnectX core driver v1.0 (July 14, 2011)
    [    4.500839] mlx4_core: Initializing 0000:07:00.0
    [    4.500889] mlx4_core 0000:07:00.0: setting latency timer to 64
    [    6.492856] mlx4_core 0000:07:00.0: irq 84 for MSI/MSI-X
    [    6.492864] mlx4_core 0000:07:00.0: irq 85 for MSI/MSI-X
    [    6.492873] mlx4_core 0000:07:00.0: irq 86 for MSI/MSI-X
    [    6.492879] mlx4_core 0000:07:00.0: irq 87 for MSI/MSI-X
    [    6.492887] mlx4_core 0000:07:00.0: irq 88 for MSI/MSI-X
    [    6.492894] mlx4_core 0000:07:00.0: irq 89 for MSI/MSI-X
    [    6.492901] mlx4_core 0000:07:00.0: irq 90 for MSI/MSI-X
    [    6.492907] mlx4_core 0000:07:00.0: irq 91 for MSI/MSI-X
    [    6.492914] mlx4_core 0000:07:00.0: irq 92 for MSI/MSI-X
    [    6.492921] mlx4_core 0000:07:00.0: irq 93 for MSI/MSI-X
    [    6.492928] mlx4_core 0000:07:00.0: irq 94 for MSI/MSI-X
    [    6.492935] mlx4_core 0000:07:00.0: irq 95 for MSI/MSI-X
    [    6.492942] mlx4_core 0000:07:00.0: irq 96 for MSI/MSI-X
    [    6.492949] mlx4_core 0000:07:00.0: irq 97 for MSI/MSI-X
    
    # lsmod | grep mlx
    mlx4_core              78702  0
    
  3. Como vemos ya carga algún módulo, pero no es suficiente, así que cargamos otros necesarios:
  4. # modprobe ib_ipoib mlx4_en mlx4_ib
    
  5. Si no trabajamos con un switch Infiniband, también necesitamos instalar el paquete opensm para tener link ACTIVE (en el siguiente punto vemos cómo poder consultarlo):
  6. # aptitude install opensm
    
  7. Podemos obtener un poco de información de la tarjeta/interfície de distintas maneras:
  8. # Bien consultando /sys, p.ej. consultando el modo de conexión Infiniband:
    # cat /sys/class/net/ib0/mode 
    datagram
    # cat /sys/class/net/ib1/mode 
    datagram
    
    # Bien instalando el siguiente paquete:
    # apt-get install infiniband-diags
    # ibstat
    ibwarn: [8624] umad_init: can't read ABI version from /sys/class/infiniband_mad/abi_version (No such file or directory): is ib_umad module loaded?
    ibpanic: [8624] main: can't init UMAD library: (No such file or directory)
    
    # En éste caso nos falta cargar otro módulo:
    # modprobe ib_umad
    
    # Ahora sí:
    # ibstat
    CA 'mlx4_0'
     CA type: MT25418
     Number of ports: 2
     Firmware version: 2.6.0
     Hardware version: a0
     Node GUID: 0x001a4bffff0cf264
     System image GUID: 0x001a4bffff0cf267
     Port 1:
      State: Active ('Initializing' si no está instalado opensm!)
      Physical state: LinkUp
      Rate: 20
      Base lid: 2 ('0' si no está instalado opensm!)
      LMC: 0
      SM lid: 1 ('0' si no está instalado opensm!)
      Capability mask: 0x0251086a ('0x02510868' si no está instalado opensm!)
      Port GUID: 0x001a4bffff0cf265
     Port 2:
      State: Down
      Physical state: Polling
      Rate: 8
      Base lid: 0
      LMC: 0
      SM lid: 0
      Capability mask: 0x02510868
      Port GUID: 0x001a4bffff0cf266
    
    # ibhosts
    Ca	: 0x001a4bffff0c22b8 ports 2 "MT25408 ConnectX Mellanox Technologies"
    Ca	: 0x001a4bffff0cf264 ports 2 "MT25408 ConnectX Mellanox Technologies"
    
  9. También podemos instalar un poco de literatura (documentación) acerca del tema:
  10. # apt-get install ofed-docs
    # dpkg -S ofed-docs
    ofed-docs: /usr/share/doc/ofed-docs/DEBIAN-HOWTO/infiniband-howto.txt.gz
    ofed-docs: /usr/share/doc/ofed-docs/DEBIAN-HOWTO/infiniband-howto-6.html
    ofed-docs: /usr/share/doc/ofed-docs/mpi-selector_release_notes.txt
    ofed-docs: /usr/share/doc/ofed-docs/copyright
    (...)
    # zless /usr/share/doc/ofed-docs/ipoib_release_notes.txt.gz
    

    De la misma, sacamos un poco de tunning con sysctl, si bien aparentmente no marca ninguna diferencia:

    # sysctl -p
    net.ipv4.tcp_timestamps = 0
    net.ipv4.tcp_sack = 0
    net.core.netdev_max_backlog = 250000
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.core.rmem_default = 16777216
    net.core.wmem_default = 16777216
    net.core.optmem_max = 16777216
    net.ipv4.tcp_mem = 16777216 16777216 16777216
    net.ipv4.tcp_rmem = 4096 87380 16777216
    net.ipv4.tcp_wmem = 4096 65536 16777216
    
  11. Finalmente ya sólo nos queda asignar un direccionamiento ip a las interfaces (mapeadas como ib0, ib1, etc...) y ya podemos proceder a hacer pruebas de ancho de banda:
  12. # iperf -c 10.99.99.4
    ------------------------------------------------------------
    Client connecting to 10.99.99.4, TCP port 5001
    TCP window size:  649 KByte (default)
    ------------------------------------------------------------
    [  3] local 10.99.99.3 port 55727 connected with 10.99.99.4 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec  13.1 GBytes  11.3 Gbits/sec
    
    # iperf -c 10.99.99.4
    ------------------------------------------------------------
    Client connecting to 10.99.99.4, TCP port 5001
    TCP window size:  649 KByte (default)
    ------------------------------------------------------------
    [  3] local 10.99.99.3 port 55728 connected with 10.99.99.4 port 5001
    [ ID] Interval       Transfer     Bandwidth
    [  3]  0.0-10.0 sec  13.3 GBytes  11.4 Gbits/sec
    
    # iperf -s
    ------------------------------------------------------------
    Server listening on TCP port 5001
    TCP window size: 85.3 KByte (default)
    ------------------------------------------------------------
    [  4] local 10.99.99.4 port 5001 connected with 10.99.99.3 port 55727
    [ ID] Interval       Transfer     Bandwidth
    [  4]  0.0-10.0 sec  13.1 GBytes  11.3 Gbits/sec
    [  5] local 10.99.99.4 port 5001 connected with 10.99.99.3 port 55728
    [  5]  0.0-10.0 sec  13.3 GBytes  11.4 Gbits/sec
    

Referencias:

http://blog.maumene.com/installing-the-mlx4-ib-driver-for-infiniband-on-debian-squeeze
http://inqbus-hosting.de/support/dokumentation/docs/debian-infiniband-howto
http://pkg-ofed.alioth.debian.org/howto/infiniband-howto-5.html#ss5.4
https://www.kernel.org/doc/Documentation/infiniband/ipoib.txt]]>