Configurar una interfaz de red en puente (bridge) en ArchLinux

Introducción

En este procedimiento se establecen los pasos necesarios para configurar una interfaz de red (br0) en puente con la interfaz de la red alámbrica (eth0) para permitir el acceso directo a la red LAN de las máquinas virtualizadas con KVM instalado previamente.

Para este montaje se utilizó ArchLinux en su versión mas reciente, la 2011.08.19, en la cual se observaron algunos cambios en los archivos de configuración, especialmente en los relacionados con la configuración de redes lo cual impacta directamente con lo descrito a continuación.  Para versiones anteriores del sistema operativo se ofrece una alternativa de configuración que no ha sido probada en producción.

Instalar los paquetes necesarios

Para la configuración de múltiples interfaces de red.

$ sudo pacman -S netcfg

Para la creación del puente entre las interfaces de red.

$ sudo pacman -S bridge-utils

Desactivar la configuración original de red

En esta versión de ArchLinux la configuración de una interfaz de red se realiza de manera diferente a múltiples interfaces de red.  En este caso partimos de una única interfaz de red (eth0) a tener dos (eth0 + br0), por este motivo es necesario desactivar la configuración actual para implementar la otra aproximación.

Comentar las líneas relacionadas con la configuración de la interfaz de red actual.

$ sudo vi /etc/rc.conf

## interface=eth0
## address=192.168.1.250
## netmask=255.255.255.0
## broadcast=192.168.1.255
## gateway=192.168.1.254

Remover la invocación de network de la variable DAEMONS.

Configurar las múltiples interfaces de red

En este paso se deberá configurar la interfaz de red removida en el paso anterior junto con la interfaz correspondiente al puente a crearse con ella.

$ sudo vi /etc/rc.conf

  1. Agregar la invocación de net-profiles en la variable DAEMONS.
  2. Agregar la referencia de las nuevas interfaces en la variable NETWORKSde la siguiente manera.

    NETWORKS=(eth0 br0)

Crear la especificación de la configuración de las nuevas interfaces bajo /etc/network.d.  Para mayor información al respecto consultar los ejemplos ubicados en /etc/network.d/examples.

$ sudo vi /etc/network.d/eth0

INTERFACE=”eth0″
CONNECTION=”ethernet”
DESCRIPTION=”Wired network interface”
IP=’static’

$ sudo vi /etc/network.d/br0

INTERFACE=”br0″
CONNECTION=”bridge”
DESCRIPTION=”KVM Bridge connection”
BRIDGE_INTERFACES=”eth0″
POST_UP=’brctl setfd br0 0′
IP=’static’
ADDR=’192.168.1.250′
GATEWAY=’192.168.1.254′
DNS=(‘8.8.8.8’, ‘8.8.4.4’)

Versiones anteriores

 Otra aproximación a la implementación de esta solución que aparentemente era útil en versiones anteriores del sistema operativo consiste en realizar los ajustes necesarios al archivo /etc/conf.d/bridges de la siguiente manera.

$ sudo vi /etc/conf.d/bridges

bridge_br0=”eth0″
config_br0=”brctl setfd br0 0″
BRIDGE_INTERFACES=(br0)

Finalmente se actualiza el archivo /etc/rc.conf para incluir a br0 como una nueva interfaz de red.

$ sudo vi /etc/rc.conf

eth0=”eth0 up”
br0=”br0 192.168.1.250 netmask 255.255.255.0 up”
INTERFACES=(lo eth0 br0)

Enlaces

Instalando libvirt en ArchLinux

Introducción

Libvirt es un API de código abierto y una herramienta de administración para diferentes sistemas de virtualización entre los que se encuentran Xen, OpenVZ, Virtualbox, VMWare, Microsoft Hyper-V y por supuesto KVM/Qemu instalado en el servidor de desarrollo previamente.

Este software es ideal para la gestión de las máquinas virtuales y su administración remota a través de conexiones seguras con SSH.  Además incluye una librería en C para el desarrollo de aplicaciones e incluye además interfaces para diversos lenguajes como Python, Perl, Ruby, Java y PHP.

Instalación del software

Instalar los paquetes del repositorio oficial.

# pacman -S libvirt urlgrabber dnsmasq bridge-utils

Inicio automático del demonio

Configurar el demonio de libvirtd para que se inicie automáticamente junto con el sistema operativo.

# vi /etc/rc.conf

DAEMONS = (… libvirtd …)

Debe tenerse en cuenta que el demonio libvirtd requiere ser invocado después de dbus y avahi-daemon.

Autorizar la administración a usuarios sin privilegios

Si se desea que usuarios sin privilegios (diferentes de root) administren las máquinas virtuales, estos deberán ser explícitamente autorizados de la siguiente manera.

# vi /etc/polkit-1/localauthority/50-local.d/org.libvirt.unix.manage.pkla

[Allow a user to manage virtual machines]
Identity=unix-user:jimezam
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes

Si en lugar de administración se desea conceder la autorización para monitorear las máquinas se deberá especificar la siguiente acción.

org.libvirt.unix.monitor

Permitir el acceso a través de SSH

Para permitir el acceso a las máquinas virtuales a través de herramientas como virsh o virt-viewer a través del protocolo SSH (qemu+ssh) es necesario contar con paquete netcat de OpenBSD instalado de la siguiente manera.

$ sudo pacman -S openbsd-netcat

Si se cuenta adicionalmente con el paquete netcat convencional instalado es posible que este se haya apoderado del enlace /usr/bin/nc y libvirt intente utilizarlo erróneamente generando el siguiente mensaje de error.

error: server closed connection: nc: invalid option — ‘U’
Try `nc –help’ for more information.
error: failed to connect to the hypervisor

En ese caso es necesario indicarle a libvirt cual es la versión de netcat que debe utilizar.  Esto se puede realizar desde los parámetros extra del URI en cada invocación de acceso de la siguiente manera.

$ virsh -d 0 –connect qemu+ssh://usuario@servidor/system?netcat=/usr/bin/nc.openbsd

O de manera permanente modificando en el servidor el enlace /usr/bin/nc de la siguiente manera.

$ sudo mv /usr/bin/nc /usr/bin/nc.orig

$ sudo ln -s /usr/bin/nc.openbsd /usr/bin/nc

Enlaces

Instalando KVM en ArchLinux

Introducción

Por fin he destinado el tiempo necesario para reintalar mi servido de desarrollo, esta vez utilizando ArchLinux.  Había utilizado con éxito esta distribución en un par de ocasiones sin embargo no había tenido la oportunidad de explorarla con mayor profundidad.

A continuación se describen los pasos que se siguieron para instalar KVM en ArchLinux.

Verificaciones preliminares

Se requiere de un versión de kernel igual o superior a la 2.6.22.

# uname -a

Linux ivy.jorgeivanmeza.com 3.1.1-1-ARCH #1 SMP PREEMPT Fri Nov 11 22:28:29 CET 2011 x86_64 AMD Phenom(tm) 9650 Quad-Core Processor AuthenticAMD GNU/Linux

De igual manera se requiere que el procesador cuente con soporte físico para virtualización: VMX (Intel) o SVM (AMD).

# grep -E “(vmx|svm)” –color=always /proc/cpuinfo

flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs npt lbrv svm_lock

Instalación del software

Instalar los paquetes del repositorio oficial.

# pacman -S qemu-kvm

Agregar las cuentas de los usuarios que utilizarán el software al grupo kvm para que puedan acceder a /dev/kvm.

# gpasswd -a jimezam kvm

Verificar la carga de los módulos de kernel dependiendo del proveedor del procesador.

Para Intel Para AMD

# modprobe kvm

# modprobe kvm-intel

# modprobe kvm

# modprobe kvm-amd

Una vez cargados deberán aparecer en el listado de módulos activos.

# modprobe -l ‘kvm*’

kernel/arch/x86/kvm/kvm-amd.ko.gz
kernel/arch/x86/kvm/kvm.ko.gz

En caso de fallar la carga pero haber pasado la verificación inicial, verificar en la configuración de la BIOS si las extensiones de virtualización se encuentran desactivadas.

Configurar la carga automática de los módulos del kernel.

# vi /etc/rc.conf

MODULES=(kvm kvm-amd)

Enlaces

Instalar OpenSim 0.7 en ArchLinux 2010.05 x64

Introducción.

OpenSimulator es un servidor de aplicaciones 3D que puede ser utilizado para crear ambientes o mundos virtuales los cuales pueden ser accedidos a través de una variedad de clientes y  protocolos. Permite realizar los desarrollos con las tecnologías mas habituales gracias a un diseño flexible, fácilmente extendible mediante módulos cargables para crear con ellos configuraciones completamente personalizadas.  Este software se licencia bajo la BSD License, lo que permite que sea incluído en paquetes de código abierto o comerciales.   Por defecto, OpenSimulator puede simular un entorno virtual de Second Life™ (incluyendo la compatibilidad con su cliente). Otros ambientes, protocolos y características pueden ser soportadas mediante módulos añadidos.

Tomado de http://opensimulator.org/.

Instalar Mono.

# pacman -S mono unzip

# mono –version

Mono JIT compiler version 2.6.7 (tarball Sun Jul 25 19:50:39 CEST 2010)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
TLS:           __thread
GC:            Included Boehm (with typed GC and Parallel Mark)
SIGSEGV:       altstack
Notifications: epoll
Architecture:  amd64
Disabled:      none

# vi /etc/rc.conf

DAEMONS=(… mono)

Crear usuario opensim.

# /usr/sbin/useradd -m -g users -s /bin/bash -c “OpenSimulator” opensim

# passwd -l opensim

Instalar OpenSim.

# wget http://dist.opensimulator.org/opensim-0.7-bin.tar.gz

# tar zxvf opensim-0.7-bin.tar.gz

# mv opensim-0.7-bin /home/opensim/0.7

# chown -R opensim:users /home/opensim/0.7

# ln -s /home/opensim/0.7 /opt/opensim

Iniciar OpenSim.

# su -c /opt/opensim/bin/opensim-ode.sh opensim

Configurar OpenSim por primera vez.

=====================================
We are now going to ask a couple of questions about your region.

You can press ‘enter’ without typing anything to use the default

the default is displayed between [ ]: brackets.
=====================================

New region name []: Playing Region
Region UUID [18d5fc00-1452-4876-bb46-6f75c06387a6]:
Region Location [1000,1000]:
Internal IP address [0.0.0.0]:
Internal port [9000]:
Allow alternate ports [False]:
External host name [SYSTEMIP]:

Your region is not part of an estate.
Do you wish to join an existing estate? [no]:
New estate name [My Estate]: Playing Estate

The current estate has no owner set.
Estate owner first name [Test]: Master
Estate owner last name [User]: Player
Password: testing
Email []:

Enlaces.

Instalar y configurar el servicio sshd en ArchLinux 2010.05 x64

Introducción.

Una de las características interesantes de ArchLinux es que la instalación básica incluye únicamente los paquetes realmente necesarios para su funcionamiento inicial, siendo responsabilidad del administrador instalar los demás paquetes que se requieran.  Esto es muy importante ya que, a diferencia de otras distribuciones, se disminuye el tiempo de instalación, el consumo de recursos y se reducen los riesgos de seguridad.

ArchLinux inclusive no incluye por defecto el servicio de SSH el cual debe ser instalado manualmente.  En ese artículo se describe el proceso de instalación y configuración del servicio de SSH en ArchLinux.

Instalación.

# pacman -S openssh

Configuración.

Configuración del cliente.

# vi /etc/ssh/ssh_config

Port 22
Protocol 2
HashKnownHosts yes
StrictHostKeyChecking ask

Configuración del servidor.

# vi /etc/ssh/sshd_config

Port 22
Protocol 2
LoginGraceTime 2m
PermitRootLogin no

Configuración del servicio.

Configurar el inicio automático con el sistema operativo.

# vi /etc/rc.conf

DAEMONS=(… sshd)

Iniciarlo, detenerlo o reiniciarlo manualmente.

# /etc/rc.d/sshd {start|stop|restart}

Permitir el acceso al servicio desde otros equipos.

# vi /etc/hosts.allow

sshd: 192.168.1.

Enlaces.

Asignar una dirección IP estática en ArchLinux 2010.05 x64

Introducción.

ArchLinux es una distribución que me sigue pareciendo interesante, especialmente por su rapidez y transparencia en términos de los paquetes que instala: únicamente los solicitados.  Por ahora es la distribución que estoy utilizando para hacer las pruebas y experimentos que se me ocurren, a excepción del proyecto de Grid que requiere explícitamente utilizar nodos con Scientific Linux.

Aparentemente esta distribución no se encuentra basada en ninguna otra que haya utilizado anteriormente, esto trae para mi un agradable obstáculo ya que desconozco como realizar la mayoría de los procedimientos habituales como cambiar el hostname, activar sudo o actualizar sus paquetes entre muchas otras cosas.  Así que todo es nuevo y todo debe ser explorado y experimentado lo que me hace evocar recuerdos de hace mas de 10 años cuando cuando me iniciaba en el uso de Linux.

En este artículo se describe como realizar la configuración de una dirección IP dinámica gracias a DHCP y su contraparte estática, la cual tiene un detalle muy pequeño pero importante con su puerta de enlace.

Procedimiento.

Configuración de la IP dinámica.

# vi /etc/rc.conf

eth0=”dhcp”
INTERFACES=(eth0)

Configuración de una IP estática.

# vi /etc/rc.conf

eth0=”eth0 192.168.1.222 netmask 255.255.255.0 broadcast 192.168.1.255
INTERFACES=(eth0)
gateway=”default gw 192.168.1.1
ROUTES=(gateway)

Nótese que se removió el símbolo (!) de la variable gateway en la asignación de ROUTES, si esto no se realiza, el enrrutador por defecto no será agregado a las rutas estáticas definidas al inicio del sistema operativo.

Instalar Polipo, un proxy web/caché en ArchLinux 2010.05 x64

Introducción.

Para hacer unas pruebas esta tarde necesito un proxy que haga caché sobre los datos descargados; inicialmente iba a instalar Squid sobre un Scientific Linux pero decidí hacerlo sobre ArchLinux, con el cual estoy jugando desde el día de ayer.  Leyendo la documentación del wiki de ArchLinux, que por cierto es muy buena, encontré que hacen referencia a Polipo, un software similar en funciones a Squid pero con mayores limitaciones y destinado a servidores con muy pocos usuarios.  Ese es mi caso, así que procedí a instalarlo en una máquina virtual con VirtualBox y 512MB de RAM.  Espero que aguante.

Instalación de los paquetes.

Desafortunadamente lo paquetes de Polipo no están disponibles en los repositorios, sin embargo estos pueden ser creados utilizando una facilidad interesante del sistema operativo.

Los siguientes pasos deben realizarse como un usuario sin privilegios.

Descargar la versión mas reciente de los archivos (sección de files) de Polipo de la siguiente ubicación.

http://aur.archlinux.org/packages.php?ID=14579

$ wget http://aur.archlinux.org/packages/polipo/polipo/PKGBUILD

$ wget http://aur.archlinux.org/packages/polipo/polipo/polipo.install

$ wget http://aur.archlinux.org/packages/polipo/polipo/polipo

Generar el paquete.

$ makepkg -s

Instalar el paquete recién generado.

$ sudo pacman -u polipo-1.0.4.1-1-x86_64.pkg.tar.xz

Configuración de Polipo.

Crear un archivo básico de configuración a partir de la plantilla.

$ sudo cp /etc/polipo/config-sample /etc/polipo/config

Permitir las conexiones externas, además de localhost.

$ sudo vi /etc/polipo/config

proxyAddress = “0.0.0.0”

Si se desea permitir el uso del caché por equipos diferentes del mismo (localhost)  es necesario especificar las redes autorizadas en la siguiente variable del mismo archivo config.  Nótese que, a diferencia del ejemplo en el mismo archivo, fue necesario remover las comillas dobles que encerraban las direcciones de red.

allowedClients = 127.0.0.1, 10.0.0.0/16, 192.168.1.0/24

Actualizar el archivo de inicio de Polipo.  Nótese en el script que por razones de seguridad se utilizará al usuario nobody para ejecutar el servicio.

$ sudo cp /etc/rc.d/polipo /etc/rc.d/polipo.orig

$ sudo vi /etc/rc.d/polipo

#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions

DAEMON=polipo
ARGS="daemonise=true pidFile=/var/run/$DAEMON/$DAEMON.pid"
PID=`pidof -o %PPID /usr/bin/$DAEMON`

case $1 in
    start)
        stat_busy "Starting $DAEMON"
        rm /var/run/$DAEMON/$DAEMON.pid 2> /dev/null
        install -d /var/run/$DAEMON
        ## /usr/bin/$DAEMON $ARGS >/dev/null 2>&1
        sudo -u nobody /usr/bin/$DAEMON $ARGS >/dev/null 2>&1
        if [[ $? != 0 ]]; then
            stat_fail
        else
            add_daemon $DAEMON
            stat_done
        fi
    ;;
    stop)
        stat_busy "Stopping $DAEMON"
        kill $PID >/dev/null 2>&1
        if [[ $? != 0 ]]; then
            stat_fail
        else
            rm_daemon $DAEMON
            stat_done
        fi
    ;;
    purge)
        stat_busy "Purging polipo"
        [[ ! -d /var/run/polipo ]] && mkdir /var/run/polipo
        if ! ck_daemon polipo; then
            kill -USR1 $DAEMON >/dev/null 2>&1 || stat_die $?
            sleep 1
            /usr/bin/$DAEMON -x $ARGS >/dev/null 2>&1 || stat_die $?
            kill -USR2 $PID >/dev/null 2>&1 || stat_die $?
            stat_done
        else
            /usr/bin/$DAEMON -x $ARGS >/dev/null 2>&1 || stat_die $?
            stat_done
        fi

    ;;
    restart)
        $0 stop
        sleep 1
        $0 start
    ;;
    *)
        echo "usage: $0 {start|stop|restart|purge}"
    ;;
esac

Ajustes al sistema operativo.

Crear un proceso cron para purgar el servicio.

$ sudo vi /etc/cron.weekly/polipo

#!/bin/sh
/etc/rc.d/polipo purge >/dev/null 2>&1

$ sudo chmod +x /etc/cron.weekly/polipo

Crear las rutas necesarias para los archivos del proxy.

$ sudo touch /var/log/polipo

$ sudo chown nobody:nobody /var/log/polipo

$ sudo mkdir /var/run/polipo

$ sudo chown nobody:nobody /var/run/polipo

$ sudo mkdir /var/cache/polipo

$ sudo chown nobody:nobody /var/cache/polipo

Configurar el inicio automático de Polipo con el sistema operativo.

$ sudo vi /etc/rc.conf

DAEMONS=(syslog-ng network netfs polipo crond)

Prueba del caché.

Configure el proxy de Firefox o de cualquier otro cliente y acceda a los recursos que desee, estos deberán almacenarse en el caché por lo cual futuros accesos (recuerde limpiar el caché local de ser necesario para hacer mas confiable la prueba) deberían ser más rápidos.  Como ubicación del servidor de caché utilice la IP del servidor donde se instaló Polipo y el puerto -por defecto- 8123.

Enlaces.

Configurar el hostname en ArchLinux 2010.05 x64

Introducción.

Después de instalar ArchLinux su hostname es, si no fue modificado durante el proceso de instalación, myhost el cual no dice mucho de la destinación del servidor.  A continuación se presentan los breves pasos necesarios para configurar adecuadamente el hostname del servidor.

Configurar el hostname.

# vi /etc/rc.conf

HOSTNAME=”cache.jorgeivanmeza.com

Actualizar el archivo de hosts para que refleje los cambios del nuevo nombre.  En mi caso la dirección se obtiene por DHCP así que asocio el hostname a la dirección local, si fuera estática sería conveniente hacerlo a esta.

# vi /etc/hosts

127.0.0.1     cache.jorgeivanmeza.com cache localhost.localdomain localhost

Reiniciar el servidor para que los cambios sean tenidos en cuenta.

# reboot

Enalces.

Instalación de XFCE4 en ArchLinux 2010.05 x64

Introducción.

Después de ver lo fácil que fue instalar LXDE en mi máquina con ArchLinux, hoy quise tomarme unos minutos para probar otro de los manejadores de ventanas que me llaman la atención porque a pesar de su funcionalidad son bastante livianos: XFCE.  El procedimiento es, de igual manera, muy simple y rápido.

Instalación.

Instalar los paquetes necesarios.

# pacman -S xfce4 gnome-icon-theme dbus gamin

Configurar el inicio automático de los demonios requeridos.

# vi /etc/rc.conf

DAEMONS=(syslog-ng network netfs dbus hal crond)

Configurar la sesión del usuario.

# vi ~/.xinitrc

exec ck-launch-session startxfce4

# startx

XFCE4 corriendo en ArchLinux
XFCE4 corriendo en ArchLinux

Enlaces.