Archivo etiqueta Linux
Daemontools o cómo relanzar un proceso si muere
Por Luis Gallardo - Linux - 06/05/2013

Quizás te ha pasado que un proceso (programa o servicio) en el sistema muere o termina abruptamente y necesitas relanzarlo sin importar qué pase. Podrías tratar de monitorear el proceso cada cierto tiempo y reiniciarlo si no es encontrado pero esto puede ser algo complicado porque tendrías que hacer una tarea con cron para verificar la existencia del proceso, filtrarlo, etc. Y si hubiese una forma de relanzar el proceso si este muere?…Si hay una forma, y se llama daemontools el cual básicamente escanea el proceso y lo relanza si este muere.
Aquí explicaré como instalar y configurar en Linux.
Instalación de daemontools
En Debian puedes instalar daemontools como root escribiendo esto:
root@raspberrypi: # aptitude install daemontools-run daemontools
Para distribuciiones derivadas de Debian como Ubuntu debería ser lo mismo. En Red Hat y similares deben chequear el nombre del paquete para esta herramienta.
Configurando daemontools
Debes crear un directorio para el servicio (programa) a monitorear. En este ejemplo usaré qbittorrent-nox, un cliente de bittorrent que corre en el segundo plano (nox = no para ambiente X):
root@raspberrypi:~# mkdir /etc/service/qbittorrent-nox
Luego tienes que escribir un script que inicie el proceso. Debe llamarse “run“. Utiliza tu editor de texto preferido, por ejemplo vi:
root@raspberrypi:~# vi /etc/service/qbittorrent-nox/run
Añade la llamada al programa. En este caso quería lanzar qbitorrent-nox como el usuario pi, así que lo invoqué con sudo:
#!/bin/sh sudo -u pi qbittorrent-nox
Por último cambia la permisología para hacerlo ejecutable:
root@raspberrypi:~# chmod +x /etc/service/qbittorrent-nox/run
Verificando el proceso con ps
Puedes verificar si el proceso está corriendo usando la orden ps y filtrando la salida con grep:
root@raspberrypi:~# ps ax | grep qbit 3064 ? S 0:00 supervise qbittorrent-nox 3068 ? S 0:00 sudo -u pi qbittorrent-nox 3080 ? Sl 13:09 qbittorrent-nox 9926 pts/0 S+ 0:00 grep qbit
Pero hay una mejor forma de verificar si el proceso está corriendo usando daemontools. Por cierto, como su nombre lo indica en inglés, daemon-tools quiere significa herramientas para el manejo de demonios (programas o servicios).
Verificando el proceso con daemontools
Si quieres verificar si el proceso está corriendo y dede hace cuánto ha estado arriba, usa la orden svtat pasándole el directorio de servicio, como muestro a continuación:
root@raspberrypi:~# svstat /etc/service/qbittorrent-nox /etc/service/qbittorrent-nox: up (pid 3066) 205846 seconds
En este caso, my proceso bittorrent-nox (programa/servicio) ha estado corriendo casi por dos días y medio
Detener el escaneo
Si necesitas detener el escaneo del proceso, por ejemplo si necesitas detenerlo por unos instantes para hacer cambios a la configuración, usa la orden svc: con las siguiente opción
root@raspberrypi:~# svc -d /etc/service/qbittorrent-nox
Despues de esto cheque auna vez más:
root@raspberrypi:~# svstat /etc/service/qbittorrent-nox /etc/service/qbittorrent-nox: down 2 seconds, normally up
Ahora el proceso no será verificado para ser relanzado si se detiene o muere.
Reiniciando el escaneo
Para iniciar nuevamente el escaneo, usa la orden svc como sigue:
root@raspberrypi:~# svc -u /etc/service/qbittorrent-nox
Una vez más verifica si está correindo con svstat:
root@raspberrypi:~# svstat /etc/service/qbittorrent-nox /etc/service/qbittorrent-nox: up (pid 12805) 1 seconds
Referencia: daemontoolsl
¿Dónde pongo mi Rasperry Pi?
Por Luis Gallardo - Linux - 15/04/2013
Como quería usar mi Rasperry Pi como centro multimedios pero no quería poner muchos dispositivos en mi mesa de noche se me ocurrió esta diea. My Rasperry, un disco duro y un hub usb parecen corroncos pero están por detrás el televisor.
Si quieres hacer algo similar puedes usar unas cintas para pegar cuadros (Command, Scoth, 3M, etc) y así ahorra algo de espacio y evitar la proliferación de dispositivos en tu habitación.
Instalación de SubDownloader en Raspberry Pi
Por Luis Gallardo - Linux - 10/04/2013
Ya instalé XBMC como mi centro multimedia y también qbittorrent como mi centro de “descargas”. Pero me faltaba algo: un programa descargar subtítulos. Conocía de subdownloader, así que decidí intentarlo en my Rasperry Pi pero no estaba en los repos de Rasbian…qué se puede hacer?
Fácil, solo agrega el repo oficial de Debian para Sid e instálalo. Recuerda que Debian suporta muchas arquitecturas, incluso armhf. Veamos cómo hacerlo…
Instalación
- Editar el archivo /etc/apt/sources.list para incluir los repos de sid:
deb http://ftp.debian.org/debian/ sid main contrib non-free
- Actualizar el listado de paquetes:
aptitude update
- Instalar SubDonwloader:
aptitude install subdownloader
- Editar nuevamente el /etc/apt/sources.list para quitar los repos de sid (basta con comentar la línea con #):
#deb http://ftp.debian.org/debian/ sid main contrib non-free
- Hacer la actualización del listado de paquetes:
aptitude update
Ahora puedes usar el programa desde tu Rasperry Pi localmente o usando ssh…pero ten en cuenta que será algo lento. Disfrútalo!
Referencia: Página de SubDownloader
Actualizar DynDSN desde OpenWrt
Por Luis Gallardo - Linux - 28/03/2013

En este artículo veremos cómo actualizar la información de DynDNS con la IP dinámica que te da tu proveedor de Internet desde un router con OpenWrt, de esta forma cada vez que el proveedor cambie la IP del router, el dominio de DynDNS apunte a la nueva IP. A continuación los pasos que debes seguir en tu OpenWrt
- Actualiza el listado de paquetes:
root@fluffy:~# opkg update Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz. Inflating http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz. Updated list of available packages in /var/opkg-lists/packages.
- Instala la última versión de ddns-scripts:
Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/ddns-scripts_1.0.0-17_all.ipk. Configuring ddns-scripts. Collected errors: * resolve_conffiles: Existing conffile /etc/config/ddns is different from the conffile in the new package. The new conffile will be placed at /etc/config/ddns-opkg.
- Edita el archivo de configuración /etc/config/ddns con la información de tu cuenta de DynDNS:
config 'service' 'myddns' option 'enabled' '1' option 'service_name' 'dyndns.org' option 'ip_source' 'network' option 'ip_network' 'wan' option 'force_interval' '72' option 'force_unit' 'hours' option 'check_interval' '10' option 'check_unit' 'minutes' option 'domain' 'mydomain.dyndns.org' option 'username' 'myusername' option 'password' 'mypassword'
Actualizar y depurar
Para actualizar la IP por primera vez y depuar cualquier error puede usarse el siguiente script:
root@fluffy:~# /usr/lib/ddns/dynamic_dns_updater.sh myddns update_url=http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP] force seconds = 259200 check seconds = 600 time_since_update = 144 hours Running IP check... current system ip = 173.194.37.14 registered domain ip = 173.194.37.14 update necessary, performing update ... updating with url="http://myusername:mypassword%[email protected]/nic/update?hostname=mydomain.dyndns.org&myip=173.194.37.14 Connecting to members.dyndns.org (204.13.248.111:80) - 100% |*****************************************************************************************************| 19 --:--:-- ETA Update Output: good 173.194.37.14 update complete, time is: Sat Sep 24 00:01:14 VET 2011
En este ejemplo myddns es el nombre del servicio que se configuró en el archivo /etc/config/ddns.
Referencia: OpenWrt DDNS Client
Correr Raspberry Pi desde un disco USB
Por Luis Gallardo - Linux - 17/03/2013
Estuve probando unos días mi Rasberry Pi con una mermoria SD clase 4 marca Kingston que me compré, pero que la misma decidió morir (desde el primer día que quemé la imagen de Raspberry ya se había puesto algo problemática). Como no tenía otra SD de 2GB o más, decidí investigar un poco para ver si se podía usar la primera partición /boot como arranque y una partición de un disco duro externo USB de 320 GB que tengo. Efectivamente se puede hacer y describo aquí los pasos.
Imagen Raspbian Wheezy
Decidí usar la imagen Raspbian 2013-02-09-wheezy-raspbian.img, pero primero tuve que hacer un truco: volqué la imagen en un pendrive de 8GB para poder separar la partición /boot y el resto del sistema operativo.
Volcado de Raspbian al pen drive
Hacemos como si volcaramos la imagen de Raspbian en la tarjeta SD pero en vez de hacerlo sobre /dev/mmcblk0 lo hacemos sobre el pendrive:
# dd bs=4M if=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.img of=/dev/sdb
Extracción de la imagen boot
Para extraer solo el boot de Raspbian basta con volcar solo la primera partición del pendrive:
# dd if=/dev/scb1 of=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.boot.img
Extracción del sistema operativo
Y hacemos lo mismo con la segunda prtición de sistema operativo para extraerlo:
# dd if=/dev/sdc2 of=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.fsext4.img
Tarjeta SD con el /boot
Aun requeriremos de una tarjeta SD para iniciar el Raspberry, pero ya no será necesario que sea de 2 GB, ya que puede ser de muchísimo menos, incluso hasta 64 MB (yo lo hice con una de 1 GB que encontré). Para eso podemos crear una partición con GParted de 60 MB como se muestra en la siguiente figura:
Ahora copiamos el contenido de la imagen boot que sacamos previamente:
# dd if=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.boot.img of=/dev/sdb1
Un vez que se haya copiado los datos, se debe montar esta partición, y editar el archivo /media/usb0/cmdline.txt (cambiar /media/usb0 de acuerdo al punto de montaje), y colocar lo siguiente:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait
Aquí es importante colocar root=/dev/sda1 para que al momento de iniciar el Raspberry Pi se use la primera partición del disco duro externo USB como la partición raíz, es decir, el directorio “/”.
Particionado del disco duro externo
Conectamos el disco duro externo a un PC y hacemos dos particiones como se muestra en la siguiente figura. La primera partición contendrá el sistema de archivos raíz, mientras que la segunda será de datos (se puede definir luego en /etc/fstab del Raspberry Pi).
Sistema de archivo raíz “/”
Ahora procedemos a volcar la imagen que extrajimos de la imagen Rasbian en la primera partición del disco USB. Para ello hacemos lo siguiente:
# dd if=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.fsext4.img of=/dev/sdc1
Ajuste del tamaño de la partición
Como se puede ver en la imagen anterior, la partición que se creó fue de casi 9 GB, pero si se monta la partición se mostrará como si fuese de 2 GB ya que la imagen de Rasbian por omisión es de ese tamaño. Para solventar esto debemos desmontar esa la partición y hacer el ajuste del tamaño a nivel del sistema de archivos, es decir:
# umount /dev/sdc1# e2fsck -f /dev/sdc1e2fsck 1.42.5 (29-Jul-2012) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Raspbian: 66488/114688 files (0.1% non-contiguous), 346538/458240 blocks# resize2fs /dev/sdc1resize2fs 1.42.5 (29-Jul-2012) Resizing the filesystem on /dev/sdc1 to 2304000 (4k) blocks. The filesystem on /dev/sdc1 is now 2304000 blocks long.
Luego consultamos el espacio disponible veremos algo como esto:
# df -h/dev/sdc2 285G 191M 271G 1% /media/Data /dev/sdc1 8.7G 1.3G 7.0G 16% /media/Raspbian
Si sigues estos paso al pie de la letra tendrás tu Raspberry Pi iniciando desde un disco duro externo.
Comentarios finales
- Si bien es cierto que un disco duro es más caro que una tarjeta SD hay que considerar que tanto sufrirá esta, ya que tener un sistema de archivos con journals puede llevara a su vida útil antes de lo esperado por lo que no es descabellado pensar en un disco duro externo.
- El disco duro que usé no es alimentado, pero mi Raspberry lo maneja sin problemas junto con un teclado. Eso si, al conectar algo más, como por ejemplo un ratón, no da más y se reinicia.
- Usando un disco duro puedes olvidarte de la compatibilidad de las tarjeta SD (la cual recomiendan que sea clase 6). En mi caso usé una Sandisk de 1 GB clase 4 y me funcionó a la perfección.
- Probablemente se puede usar dd para extraer las particiones /boot y la del sistema operativo, pero como no sabía el tamaño exacto y fui algo flojo decidí volcarla la imagen de Rasbian en un pen drive y extraer de allí dichas imágenes.
XBMC en Rasperry Pi con Raspbian
Por Luis Gallardo - Linux - 14/03/2013
Si quieres instalar XBMC en tu Raspberry Pi con Raspbian y tienes problemas de dependencias, puedes descarlo desde este repositorio añadiendo la siguiente línea al /etc/apt/sources.list
# XBMC Repo deb http://archive.mene.za.net/raspbian wheezy contrib
Luego instala XBMC:
# aptitude update # aptitude install xbmc
Después de esto, puedes hacer que se ejecute al iniciar el sistema e incrementar el nivel de prioridad editando el archivo /etc/default/xbmc con estos parámetros:
# Set this to 1 to enable startup ENABLED=1# The user to run XBMC as USER=pi# Adjust niceness of XBMC (decrease for higher priority) NICE=-10
Recuerda deshabilitar LXDE o XFCE al inicio (puedes usar rasp-config). ¡Qué lo disfrutes!
Referencia: XBMC for Raspberry Pi (en inglés)
Repositorio portátil en Debian
Por Luis Gallardo - Linux - 07/03/2013
Si de casualidad tienes una conexión lenta, pero si tienes una buen enlace en otro sitio (escuela, universidad,trabajo, etc.) y tienes un equipo con Debian en la misma arquitectura (x86, x64,etc.) mas o menos con la misma selección de software, puedes usar este pequeño truco para llevarte parte de los paquetes descargados:
Máquina con buena conexión
Actualiza el PC con buena conexión:
dell:~# aptitude updatedell:~# aptitude safe-upgrade
En Debian y distribuciones derivadas los paquetes descargados se guardan en /var/cache/apt/archives, por lo que podemos copiar el contenido de este directorio en un pen-drive o disco externo:
cp -r /var/cache/apt/archives /media/usb0
Máquina sin buena conexión
Actualiza el listado de paquetes. Aunque la conexión es mala, igual necesitarás Internet para descarga la información de los paquetes:
cupcake:~# aptitude update cupcake:~# aptitude safe-upgrade The following packages will be upgraded: bind9-host dnsutils evolution-data-server evolution-data-server-common gdm3 gnome-shell gnome-shell-common google-chrome-stable gvfs gvfs-backends gvfs-bin gvfs-common gvfs-daemons gvfs-libs host icedtea-netx icedtea-netx-common krb5-locales libbind9-80 libc-bin libc-dev-bin libc6 libc6:i386 libc6-dev libc6-i386 libc6-i686:i386 libcairo-gobject2 libcairo2 libcamel-1.2-33 libdbus-glib-1-2 libdns88 libebackend-1.2-2 libebook-1.2-13 libecal-1.2-11 libedata-book-1.2-13 libedata-cal-1.2-15 libedataserver-1.2-16 libedataserverui-3.0-1 libglib2.0-0 libglib2.0-0:i386 libglib2.0-bin libglib2.0-data libgssapi-krb5-2 libgssapi-krb5-2:i386 libisc84 libisccc80 libisccfg82 libk5crypto3 libk5crypto3:i386 libkrb5-3 libkrb5-3:i386 libkrb5support0 libkrb5support0:i386 liblwres80 libperl5.14 libproxy0 libssh-4 libxen-4.1 libxenstore3.0 locales multiarch-support openssh-client openssh-server perl perl-base perl-modules python python-minimal vim vim-common vim-runtime vim-tiny xserver-xorg-video-nouveau The following packages are RECOMMENDED but will NOT be installed: xserver-xephyr 73 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 103 MB of archives. After unpacking 16.6 MB will be used. Do you want to continue? [Y/n/?] n
Aquí puedes ver que se requieren 103 MB para descargar. Le decimos que no con la letra “n”, y ahora copiamos los paquetes del pen-drive al directorio /var/cache/apt/archive/:
cupcake:~# cp -R /media/C6A7-9F3C/archives/* /var/cache/apt/archives/
Ahora actualizamos nuevamente el listado de paquetes e intentamos actualizar:
cupcake:~# aptitude update cupcake:~# aptitude safe-upgrade The following packages will be upgraded: bind9-host dnsutils evolution-data-server evolution-data-server-common gdm3 gnome-shell gnome-shell-common google-chrome-stable gvfs gvfs-backends gvfs-bin gvfs-common gvfs-daemons gvfs-libs host icedtea-netx icedtea-netx-common krb5-locales libbind9-80 libc-bin libc-dev-bin libc6 libc6:i386 libc6-dev libc6-i386 libc6-i686:i386 libcairo-gobject2 libcairo2 libcamel-1.2-33 libdbus-glib-1-2 libdns88 libebackend-1.2-2 libebook-1.2-13 libecal-1.2-11 libedata-book-1.2-13 libedata-cal-1.2-15 libedataserver-1.2-16 libedataserverui-3.0-1 libglib2.0-0 libglib2.0-0:i386 libglib2.0-bin libglib2.0-data libgssapi-krb5-2 libgssapi-krb5-2:i386 libisc84 libisccc80 libisccfg82 libk5crypto3 libk5crypto3:i386 libkrb5-3 libkrb5-3:i386 libkrb5support0 libkrb5support0:i386 liblwres80 libperl5.14 libproxy0 libssh-4 libxen-4.1 libxenstore3.0 locales multiarch-support openssh-client openssh-server perl perl-base perl-modules python python-minimal vim vim-common vim-runtime vim-tiny xserver-xorg-video-nouveau The following packages are RECOMMENDED but will NOT be installed: xserver-xephyr 73 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Need to get 2,474 kB/103 MB of archives. After unpacking 16.6 MB will be used. Do you want to continue? [Y/n/?]
Como puede verse, ahora solo requiere 2,4 MB, mucho menos de lo que originalmente solicitó y que tardará mucho menos en descargarse en una conexión deficiente como en las redes 3G de Venezuela (coloque aquí el nombre de su operadora favorita).
Unboxing de la Raspberry Pi
Por Luis Gallardo - Linux - 26/02/2013
Ya me llegó mi Raspberry Pi….mucho antes de lo que habían dicho (tres semanas por lo menos). Diría que se tardó una semana en enviarlo a Venezuela. En mi caso, la compré en la tienda RS para Raspberry Pi y el envío lo hice directo a Venezuela, con un costo de $8. Y si, si llega por IPOSTEL.
Fotos del unboxing
Aquí dejo las respectivas fotos del unboxing de la Raspberry Pi
Lo único que me falta es la tarjeta SD, la cual debe ser clase 4…de momento sigo con la emulación con QEMU como mencioné en mi artículo anterior.
Emulación de Raspberry Pi con QEMU
Por Luis Gallardo - Linux - 24/02/2013
Me compré un Rasberry Pi pero como en tres semanas es que lo van a enviar (y hay que agregar un tiempo adicional por el servicio de envío) entonces decidí ver qué podía ir leyendo sobre el Raspberry. Luego se me ocurrió la idea de tratar de emular el Rasberry Pi para ver un poco más y en seguida me vino a la mente QEMU, ya que el Rasbperry Pi viene con un procesador ARM1176. En una búsqueda rápida me conseguí este blog que comentan cómo hacerlo. Pero no quise usar la imagen del proyecto Raspberry sino una de Raspbian, en particular la imagen Hexxeh. Por último, y como quería hacer pruebas sin necesidad de estar usando a interfaz gráfica, investigué un poco cómo hacer un puente (bridge) en QEMU. Luego de eso me puse a configurar la imagen como siguieren en Raspbian, ya que viene muy básica, y le quité LXDE para colocar XFCE con Slim. Aquí explico cómo hice todo:
Imagen Hexxhex
Me bajé la imagen de Raspbian Hexxeh y apliqué todos los cambios sugeridos:
- Instalación de servidor SSH y regeneración de las llaves (cosa que deben hacer si descargan esta imagen ya que las llaves públicas y privadas deben ser únicas). Basta con hacer lo siguiente:
# rm /etc/ssh/ssh_host_* # dpkg-reconfigure openssh-server
- Actualicé el listado de paquetes
- Instalé XFCE, y Slim (login manager) y quité LXDE porque me parece feo y mas pesado que XFCE.
- Actualicé la zona horaria a la de Caracas y ajusté el tiempo vía ntp.
- Coloqué los locales a US_us UTF8
- Configuré la distribución del teclado a español latinoamericano.
Si quieres personalizar esta imagen como se describe arriba puedes ver los pasos sugeridos en la página de Raspbian Hexxeh.
Raspbian en QEMU
Ahora para poner a correr Raspbian en QEMU debes hacer lo siguiente:
- Descargar el kernel para el procesador:
$ wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu - Descomprimir la imagen de Raspbian que hayan descargado. Coloco como ejemplo la imagen de Hexxeh pero puedes probar con cualquier otra:
$ unzip raspbian-r3.zip - Lanzar QEMU con las siguientes opciones:
$ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2" -hda raspbian-r3/raspbian-r3.img
Tengan en cuenta que es una emulación, y por ende no todo el hardware del Raspberry está soportado. Por ejemplo al iniciar se puede ver que la primera partición no se carga, que corresponde a la partición /boot, la cual es suplida por el kernel que se descargó.
Configuración del puente en QEMU
Otra cosa que quería hacer era poder acceder a la emulación desde otra máquina. La idea es no tener que depender del ambiente gráfico sino poder acceder desde ssh a la imagen Raspberry para, por ejemplo, instalar paquetes con aptitude. Para ello tuve que hacer un puente (bridge) como explico a continuación:
Instalación de paquetes necesarios
Primero debemos descargar los siguientes paquetes:
# aptitude install bridge-utils uml-utilities
Permisos sudo
Para que pueda asignarse las interfaces al puente se debe dar permiso de ejecución al usuario que lanzará la máquina virtual. Para ello se debe configurar sudo a través de la orden visudo:
# This file MUST be edited with the 'visudo' command as root. # # Please consider adding local content in /etc/sudoers.d/ instead of # directly modifying this file. # # See the man page for details on how to write a sudoers file. # Defaults env_reset Defaults mail_badpass Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"# Host alias specification# User alias specification# Cmnd alias specification Cmnd_Alias QEMU=/sbin/ifconfig, \ /sbin/brctl # User privilege specification root ALL=(ALL:ALL) ALL lgallard ALL=NOPASSWD: QEMU# Allow members of group sudo to execute any command %sudo ALL=(ALL:ALL) ALL # See sudoers(5) for more information on "#include" directives: #includedir /etc/sudoers.d
En este caso lgallard es el usuario que se le concedió permisos para usar ifconfig y brctl.
Configuración del puente
Se debe configurar el archivo /etc/network/interfaces para que automaticamete levante la interfaz que servirá de puente. Para ello debes deshabilitar las interfaces (por ejemplo haciendo ifdown eth0) y dejar solo el puente como se muestra a continuación:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5).# The loopback network interface auto lo iface lo inet loopback# The bridge network interface(s)auto br0iface br0 inet dhcp bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
Después de esto puede levantar el puente escribiendo:
# ifup br0
Script de inicio de interfaz de QEMU (/etc/eqemu-ifup)
Este script permite levantar las interfaces y el puente cuando se levanta la máquina con QEMU. Para ellos se debe editar el archivo /etc/qemu-ifup con la siguiente información:
#!/bin/sh #sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1 echo "Executing /etc/qemu-ifup" echo "Bringing up $1 for bridged mode..." sudo /sbin/ifconfig $1 0.0.0.0 promisc up echo "Setting tap0" sudo tunctl -t tap0 -u lgallard echo "Adding $1 to br0..." sudo /sbin/brctl addif br0 $1 sleep 2
Ahora para correr la imagen con la interfaz de red con el puente debes lanzar QEMU con las siguientes opciones:
qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2" -net nic,vlan=0 -net tap,ifname=tap0,script=/etc/qemu-ifup -hda raspbian-r3/raspbian-r3.img
Capturas
Aquí dejo algunas capturas de la emulación de QEMU:
Como puede verse en la última captura, no todo está instalado en la imagen por lo que si no funciona algo debes descargarlo. En este caso podría instalarse el navegador midory:
# aptitude install midory
O cualquier otro navegador de tu preferencia.
Referencias
Cómo crear un mirror de Debian y Ubuntu con debmirror
Por Luis Gallardo - Linux - 06/12/2012
A continuación explico cómo configurar un mirror de Debian y Ubuntu, en un servidor de Debian. Los pasos explicados a continuación se pueden conseguir en otro sitios, salvo la parte de importación de las llaves de los repositorios. Por ejemplo, en los tutoriales de Ubuntu explican cómo instalar las llaves suponiendo que el servidor donde se va a hacer el mirror corre Ubuntu, pero y si es un servidor con Debian?
Instalación de debmirror
Como mencioné, usé debmirror para hacer el mirror de ambas distribuciones. Existen otros, como por ejemplo apt-cacher, pero se escogió debmirror porque en esencia se necesita hacer mirror de todo los repositorios de Ubuntu y Debian. Entonces, para instalar debmiror basta con escribir lo siguiente como root:
aptitude install debmirror
Instalación de las llaves
Luego se deben instalar la llaves (keyrings) de los repositorios. Como se quiere hacer un mirror tanto de Debian como de Ubuntu, bajaremos los paquetes e importaremos las llaves para cada distro:
Debian
Para instalar las llaves de los repositorios de Debian se debe bajar el paquete debian-archive-keyrings mas reciente, por ejemplo de testing:
# wget http://ftp.us.debian.org/debian/pool/main/d/debian-archive-keyring/debian-archive-keyring_2012.4_all.deb
Luego se procede a extraer el contenido del paquete en el directorio home de root:
# dpkg-deb -x debian-archive-keyring_2012.4_all.deb ~
Ahora se debe importar las llaves:
# gpg --no-default-keyring --keyring /home/repo/keyrings/debian/trustedkeys.gpg --import /root/usr/share/keyrings/debian-archive-keyring.gpg gpg: keyring `/home/repo/keyrings/debian/trustedkeys.gpg' created gpg: key B98321F9: public key "Squeeze Stable Release Key " imported gpg: key 473041FA: public key "Debian Archive Automatic Signing Key (6.0/squeeze) " imported gpg: key 65FFB764: public key "Wheezy Stable Release Key " imported gpg: key 46925553: public key "Debian Archive Automatic Signing Key (7.0/wheezy) " imported gpg: Total number processed: 4 gpg: imported: 4 (RSA: 4) gpg: no ultimately trusted keys found
Ubuntu
Para Ubuntu se debe hacer algo similar. Se debe bajar el paquete ubuntu-keyring mas reciente. Para la fecha tomé uno de los repositorios de quantal:
# wget http://pa.archive.ubuntu.com/ubuntu/pool/main/u/ubuntu-keyring/ubuntu-keyring_2012.05.19_all.deb
Luego se procede a extraer el contenido del paquete en el directorio home de root e importar las llaves:
# dpkg-deb -x ubuntu-keyring_2012.05.19_all.deb ~# gpg --no-default-keyring --keyring /home/repo/keyrings/ubuntu/trustedkeys.gpg --import /root/usr/share/keyrings/ubuntu-archive-keyring.gpggpg: keyring `/home/repo/Ubuntu/mirrorkeyring/trustedkeys.gpg' created gpg: key 437D05B5: public key "Ubuntu Archive Automatic Signing Key " imported gpg: key FBB75451: public key "Ubuntu CD Image Automatic Signing Key " imported gpg: key C0B21F32: public key "Ubuntu Archive Automatic Signing Key (2012) " imported gpg: key EFE21092: public key "Ubuntu CD Image Automatic Signing Key (2012) " imported gpg: Total number processed: 4 gpg: imported: 4 (RSA: 2) gpg: no ultimately trusted keys found
El script de debmirror
Para Ubuntu
El script como tal es una adaptación de la documentación que se consigue en Ubuntu, el cual se puede guardar en el archivo /home/repo/scripts/debian.sh con la siguiente información:
#!/bin/sh# Don't touch the user's keyring, have our own instead export GNUPGHOME=/home/repo/keyrings/ubuntu # Architecture. For Ubuntu can be i386, powerpc or amd64. arch=i386,amd64 # Minimum Ubuntu system requires main, restricted # Section (One of the following - main/restricted/universe/multiverse). section=main,multiverse,universe,restricted # Release of the system (Quantal, Precise, etc) release=quantal,quantal-security,quantal-updates,quantal-backports,precise,precise-security,precise-updates,precise-backports # Server name, minus the protocol and the path at the end server=us.archive.ubuntu.com # Path from the main server, so http://my.web.server/$dir, Server dependant inPath=/ubuntu # Protocol to use for transfer (http, ftp, hftp, rsync) proto=http # Directory to store the mirror in outPath=/home/repo/mirrors/ubuntu # Start script debmirror -a $arch \ --no-source \ --md5sums \ --progress \ --passive \ --verbose \ -s $section \ -h $server \ -d $release \ -r $inPath \ -e $proto \
Para Debian
Para Debian cambiarían los valores, y en esencia en el archivo archivo /home/repo/scripts/debian.sh pondríamos algo como esto:
#!/bin/sh
# Don't touch the user's keyring, have our own instead
export GNUPGHOME=/home/repo/keyrings/debian
# Architecture (i386, powerpc, amd64, etc.)
arch=i386,amd64
# Section (main,contrib,non-free)
section=main,contrib,non-free
# Release of the system (squeeze,lenny,stable,testing,etc)
release=squeeze
# Server name, minus the protocol and the path at the end
server=ftp.us.debian.org
# Path from the main server, so http://my.web.server/$dir, Server dependant
inPath=/debian
# Protocol to use for transfer (http, ftp, hftp, rsync)
proto=http
# Directory to store the mirror in
outPath=/home/repo/mirrors/debian
# Start script
debmirror -a $arch \
--no-source \
--md5sums \
--progress \
--passive \
--verbose \
-s $section \
-h $server \
-d $release \
-r $inPath \
-e $proto \
$outPath
Nota: Para ambos casos se debe dar permisología de ejecución a los scripts, se debe probar la conexión a los servidores seleccionados, y que habrá suficiente espacio para alojar dichos repositorios.
Tarea programada (crontab)
Una vez que se tienen los scripts, se puede configurar una tarea programada para que la sincronización del mirror se haga a un tiempo determinado. Por ejemplo, para que se ejecute diariamente a las 12 de la media noche podemos colocar esto en el /etc/crontab:
0 0 * * * root /home/repo/scripts/debian.sh 0 0 * * * root /home/repo/scripts/ubuntu.sh
Publicación de los mirrror
Para publicar los mirror vía http se puede instalar un servidor web, como Apache:
aptitude install apache2
Por omisión en Debian, Apache tiene el directorio /var/www/ como la raíz. Entonces para configurar los mirrors basta con crear los enlaces simbólicos apuntando a este directorio:
# ln -s /home/repo/mirrors/ubuntu /var/www/ # ln -s /home/repo/mirrors/debian /var/www/
Configuración de los clientes
Para configurar los clientes habría que editar el archivo de configuración /etc/apt/sources.list, según sea la versión de Linux que se esté usando en el cliente:
Para Ubuntu
Para Ubuntu precise (12.04) se debería tener algo como esto en el /etc/apt/sources.list:
deb http://192.168.1.1/ubuntu/ precise main restricted universe multiverse deb http://192.168.1.1/ubuntu/ precise-updates main restricted universe multiverse deb http://192.168.1.1/ubuntu/ precise-backports main restricted universe multiverse deb http://192.168.1.1/ubuntu/ precise-security main restricted universe multiverse
En este caso la dirección IP 192.168.1.1 corresponde al servidor que aloja los repositorios, los cuales se publicaron vía http con Apache. Se debe cambiar por la IP del servidor que se esté configurando o una entrada de DNS válida que lo identifique.
Para Debian
Para Debian Squeeze se debe escribir lo siguiente en el /etc/apt/sources.list:
deb http://192.168.1.1/debian squeeze main contrib non-free deb http://192.168.1.1/debian-security squeeze/updates main contrib non-free
Para ambos casos, luego se debe actualizar la lista de paquetes:
aptitude update
Una vez que se hayan actualizado el listado de paquetes ya se podrá instalar y actualizar aplicaciones desde estos repositorios.






















Planeta Linux
Sígueme