Archivo de la Categoría “Gentoo GNU/Linux”

Todo las cosas que se me van ocuriendo hacer con Gentoo GNU/Linux

Tener un sistema de 64bits en ocasiones da algunos quebraderos de cabeza, más que nada porque hay Software que es distribuido para plataformas x86 en su versión 32bits. Esta práctica es muy normal en desarrollos de Software privativo. Antes Adobe no distribuía su famoso Flash para 64bits para GNU/Linux y otro ejemplo es Skype, que aún se niega a publicar una versión de 64bits de su famoso programa de vídeo-conferencias.

Si además unimos a esto que Skype tiene problemas con las cámaras basadas en el driver gspca, tenemos un cóctel bastante amargo.

Para hacer funcionar nuestra flamante cámara basada en el driver gspca_561 o cualquier otra cámara basada en los drivers gspca en el Skype de nuestro Gentoo GNU/Linux 64bits debemos seguir los pasos siguientes:

  1. # echo "media-libs/libv4l ~amd64" >> /etc/portage/package.keywords
    # emerge -av media-libs/libv4l

    Para instalar la versión 0.6.1 de libv4l que está enmascarada y es la que mejor funciona.
  2. # echo "net-im/skype ~amd64" >> /etc/portage/package.keywords
    # emerge -av net-im/skype

    Instalamos Skype.
  3. # nano -w /usr/bin/skype
    Modificamos el fichero para que cuando ejecutemos Skype cargue la biblioteca de compatibilidad con V4l1:

    #!/bin/sh
    cd “/opt/skype”
    if [ -n "/opt/skype" ] ; then
    if [ "${LD_LIBRARY_PATH+set}" = "set" ] ; then
    export LD_LIBRARY_PATH=”${LD_LIBRARY_PATH}:/opt/skype”
    else
    export LD_LIBRARY_PATH=”/opt/skype”
    fi
    fi
    export LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so
    exec ./skype “$@”

Si nos encontrásemos con la situación de que portage nos dice que Skype está enmascarado por el tipo de licencia, debemos decir a portage que acepte la licencia de Skype o bien que las acepte todas y así olvidarnos de eso. Basta con editar el fichero /etc/make.conf para añadir una de estas líneas:

  • ACCEPT_LICENSE="skype-eula"
    Para aceptar solo la licencia de Skype.
  • ACCEPT_LICENSE="*"
    Para aceptar cualquier licencia.

Con esto podemos usar normalmente Skype, y veremos como ya podemos disfrutar de nuevo nuestra Webcam.

Comments No Hay Comentarios »

¿Cómo podemos instalar un sistema operativo en un equipo en el que no hay ni ratón, ni teclado, ni tan siquiera un monitor? Por red, está claro. Para ello primeramente deberíamos haber configurado la BIOS de nuestro equipo para que inicie automáticamente desde CD.

Después debemos preparar nuestra imagen de CD para que inicie automáticamente el servicio SSH al iniciar el sistema, y por supuesto con una clave de paso conocida. El CD de instalación de Gentoo nos propone unos parámetros de arranque para este fin, un ejemplo: gentoo-nofb dossh passwd=miclavedepaso y nos iniciará el sistema sin soporte frame-buffer y arrancará el demonio SSH para entrar como root con clave miclavedepaso.

Pero claro, no tenemos teclado, no podemos introducir estos parámetros en el arranque. Por lo que modificaremos el fichero isolinux.cfg del CD de instalación para hacer esto.

  1. Descargamos la imagen iso de la web de Gentoo.
  2. # mount -o loop -t iso9660 install-x86-minimal-20100119.iso /mnt/cdrom
    Montamos la imagen.
  3. # mkdir /tmp/iso
    # cp -rp /mnt/cdrom/* /tmp/iso

    Copiamos el contenido.
  4. # nano -w /tmp/iso/isolinux/isolinux.cfg
    Modificamos las siguientes líneas, dejando todo lo demás tal cual está.

    default gentoo-nofb
    timeout 30
    label gentoo
    kernel gentoo
    append root=/dev/ram0 init=/linuxrc nokeymap looptype=squashfs loop=/image.squashfs dosshd passwd=miclavedepaso cdroot initrd=gentoo.igz vga=791
    label gentoo-nofb
    kernel gentoo
    append root=/dev/ram0 init=/linuxrc nokeymap looptype=squashfs loop=/image.squashfs dosshd passwd=miclavedepaso cdroot initrd=gentoo.igz

  5. # mkisofs -J -R -l -z -V "MiGentoo 20100119" -o MiGentoo-20100119.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table /tmp/iso/
    Creamos la imagen iso.
  6. # rm -rf /tmp/iso
    Borramos ficheros temporales.
  7. # umont /mnt/cdrom
    Desmontamos la imagen original del sistema de ficheros.
  8. # qemu -boot d -cdrom MiGentoo-20100119.iso
    Probamos la iso con Qemu.

Ahora podemos grabar migentoo.iso en un CD para arrancar nuestro equipo. Desde otro equipo podemos entrar por SSH de forma remota. Para ello debemos saber qué dirección IP tiene en nuestra red, cosa que supongo no será muy complicado de averiguar. Podemos entrar en nuestro router y mirar qué equipos hay con direcciones asignadas.

Sin embargo tenemos la opción de modificar la inicialización de la red para que en lugar de intentar configurar todas las interfaces de red haciendo uso de DHCP, ponga una dirección IP válida para nuestra interfaz de red. De este modo, una vez llevado a cabo el paso 4 anterior, prosiguiríamos con los siguitentes:

  1. # emerge -av sys-fs/squashfs-tools
    Instalamos sys-fs/squashfs-tools si no lo estuviera.
  2. # mkdir /tmp/squash /mnt/squash
    # mount -o loop -t squashfs /tmp/iso/image.squashfs /mnt/squash
    # cp -rp /mnt/squash/* /tmp/squash/

    Montamos el sistema de ficheros SquashFS y copiamos el contenido.
  3. # nano -w /tmp/squash/etc/conf.d/net
    Modificamos el fichero con nuestra configuración de red de modo que quede así:

    # This blank configuration will automatically use DHCP for any net.*
    # scripts in /etc/init.d. To create a more complete configuration,
    # please review /etc/conf.d/net.example and save your configuration
    # in /etc/conf.d/net (this file :]!).
    config_eth0=( "192.168.1.111/24" )
    routes_eth0=( "default via 192.168.1.1" )

  4. # mksquashfs /tmp/squashfs /tmp/iso/image.squashfs.nuevo
    # umount /mnt/squash
    # rm -f /tmp/iso/image.squashfs
    # mv /tmp/iso/image.squashfs.nuevo /tmp/iso/image.squashfs
    # rm -rf /tmp/squash

    Creamos la nueva imagen SquashFS, desmontamos la imagen antigua y substituimos la copia antigua por la nueva. Para acabar borramos la copia temporal del contenido de la imagen SquashFS.

Una vez hecho esto podemos continuar con el paso 5 del primer bloque. De esta manera con ejecutar en nuestra máquina de trabajo un comando como por ejemplo ssh root@192.168.1.111, ya podríamos comenzar con la instalación. También podríamos usar el CD como sistema de rescate, por supuesto.

Si vas a instalar Gentoo te recomiendo que uses GNU screen, ya que si la conexión SSH falla o simplente quieres apagar tu equipo de trabajo, puedes cerrar y volver a entrar en la sesión screen con posterioridad para seguir por donde ibas.

Comments 2 Comentarios »

Sabemos que las nuevas versiones de Wordpress son capaces de autoactualizarse a través del protocolo FTP. En mi servidor no tengo ni quiero configurar un servidor FTP, porque con el SSH me basto y me sobro. Podemos conseguirlo en Gentoo de un modo muy sencillo:

Instalamos el soporte de SSH2 para PHP:

# emerge dev-php5/pecl-ssh2

Reiniciamos nuestro servidor web Cherokee: # /etc/init.d/cherokee restart

Autoactualización con soporte SSH.

Autoactualización con soporte SSH.

Cuando aparezca una nueva actualización de Wordpress y este nos avise como de costumbre, veremos que nos aparece la pantalla de autoactualización de siempre, pero con SSH como una nueva opción. La seleccionamos y rellenamos los campos necesarios para actualizar. Debemos tener en cuenta algunas cosas muy importantes antes de pulsar en actualizar, como son hacer copia de seguridad de nuestra base de datos y de la propia instalación de Wordpress. Que luego si algo va mal y no la hemos hecho nos podemos estar tirando de los pelos una hora y estaremos igual pero calvos.

Además, si os diera error y aparentemente lo tenéis todo correcto. Debéis tener en cuenta que la estructura de directorios y ficheros de vuestro Wordpress deben tener como dueño al usuario de ejecuta el servidor web, en mi caso es cherokee.

Ejemplo de solución: # chmod -R cherokee:cherokee /var/www/directorio/a/wordpress

Tened en cuenta cosas como el usuario que usáis para hacer login, que debe tener permisos suficientes para ejecutar este proceso. En mi caso es root, pero no permito el acceso a root por SSH así que tengo que cambiar esto en mi configuración sólo y exclusivamente para la actualización automática. Aún así sigue siendo más cómodo esto que hacer la actualización manual.

Espero que sirva de ayuda a alguien.

Comments No Hay Comentarios »

Una de muchísimas cosas que me gustan de Gentoo es la estética de la consola. Supongo que la manera en que se suele administrar este sistema y sobre todo lo peculiar de su instalación hacen que los usuarios que disfrutamos de ella usemos la consola mucho. Y si lidias con algo durante mucho tiempo, qué mejor que sea lo más bonito posible, ¿no?

Algo que echo mucho de menos en una instalación de Ubuntu es esa tan cuidada decoración de la consola que tiene Gentoo, así que he decidido copiarla en mi portátil, donde uso Ubuntu 9.10.

Bueno, la consola en Gentoo básicamente se muestra como una consola con un prompt decorado con colores y, ademas, el comando ls que colorea los ficheros según el tipo al que pertenecen. Debemos ejecutar estos comandos:

$ echo "export PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w $\[\033[00m\] '" >> ~/.bashrc
$ echo "eval \$(dircolors -b .DIR_COLORS)" >> ~/.bashrc
$ echo "alias ls='ls --color=auto'" >> ~/.bashrc
$ echo "alias grep='grep --color=auto'" >> ~/.bashrc

Para acabar debéis descargar el fichero .DIR_COLORS en ~.

Para el usuario root, es básicamente lo mismo, solo que cambia el primer comando a añadir en el .bashrc:

$ echo "export PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W #\[\033[00m\] '" >> ~/.bashrc
$ echo "eval \$(dircolors -b .DIR_COLORS)" >> ~/.bashrc
$ echo "alias ls='ls --color=auto'" >> ~/.bashrc
$ echo "alias grep='grep --color=auto'" >> ~/.bashrc

Y por supuesto debéis descargar tambien el fichero .DIR_COLORS en el ~ de root.

Imagen de muestra de la consola.
Imagen de muestra de la consola.

Comments No Hay Comentarios »

Con pocas palabras entederéis de qué va esto:

# emerge wtf
$ wtf is lmao
LMAO: laughing my ass off
$ wtf is lol
LOL: laughing out loud
$ wtf is wtf
WTF: {what,when,where,who,why} the fuck

Uno de los programas más útiles que he encontrado últimamente, jajaja.

Comments No Hay Comentarios »

Estoy usando una memoria USB cifrada con TrueCrypt para que en caso de pérdida no se puedan acceder a los datos contenidos en ella.

La suelo usar en un equipo con Windows XP que no está en mi casa, y en casa solo uso GNU/Linux. El problema ha sido que el sistema de ficheros VFAT se ha corrompido, y para arreglarlo en casa he tenido que usar Truecrypt en Gentoo.

Descargasmos de la web de Truecrypt la versión última del software para GNU/Linux, y la copiamos en /usr/portage/distfiles. Ejecutamos # emerge truecrypt y ya lo tenemos listo.

Para montar usamos # truecrypt fichero.tc, veremos que se nos monta en /media/truecrypt1 o algo similar.

En mi caso necesitaba conectar solo el dispositivo pero sin montar el sistema de ficheros para poder hacerle un fsck.vfat. Cosa que conseguimos con # truecrypt --filesystem=none fichero.tc. A continuación: # fsck.vfat -a /dev/mapper/truecrypt1.

Para desmontar todos los sistemas montados usamos # truecrypt -d

Y por último si os da un error del tipo:
device-mapper: reload ioctl failed: Invalid argument
Command failed

Podéis solucionarlo aquí.

Comments No Hay Comentarios »

¡Qué pesadilla! Mi cron daemon me envía un correo-e de aviso cada vez que algo inesperado ocurre en la ejecución de los comandos. Bien, pues resulta que me han llegado como 500 correos en los que todos comentaban el mismo error: “/bin/bash: root: command not found”. ¡Claro que root no es un comando! ¿Pero por qué cron intenta ejecutar root como un comando? Hoy me ha quedado clarísimo.

Uso vixie-cron como cron daemon, este demonio al igual que otros tiene soporte para un crontab file de sistema y otros para cada usuario de sistema. La diferencia entre el crontab file de un usuario y el del sistema es que el sexto campo en el crontab file del sistema es el usuario usado para ejecutar el comando que aparece en el campo séptimo. El cron de sistema es el único que puede ejectuar comandos haciéndose pasar por otro usuario del sistema. Debido a esto, si cualquier otro usuario tiene un crontab file, el sexto campo debe ser directamente el comando a ejecutar.

¿Qué narices me había pasado? Pues que en algún momento edité el crontab del usuario root como si el de sistema se tratase, por equivocación. Así que tenía el mismo crontab file para el sistema como para el usuario root. Si quieres editar el crontab file del sistema jamás uses el comando crontab tal cual. Para editarlo se recomienda usar el comando crontab -e o bien editar /etc/crontab con tu editor de texto favorito.

¿Y como solucioné el problema? Ejecuté como root el comando crontab -r que borra el crontab de usuario. De ese modo ya solo se ejecuta el crontab de sistema y todo ha vuelto a la normalidad.

Comments 2 Comentarios »

Hace unos días hablaba con un amigo sobre programitas para nuestros teléfonos Symbian de Nokia, el mío en concreto es un Nokia N81 y el de él un Nokia N95. Entre varios programas hablamos algo sobre los programas que hay que te permiten usar el terminal móvil como webcam inalámbrica. Había visto algunos para Windows y por eso mismo ni los había probado. Hoy he buscado de nuevo a ver qué me encontraba y me he llevado una grata sorpresa. He topado con SmartCam un proyecto libre alojado en Sourceforge, que consigue que mi móvil funcione como webcam en mi máquina GNU/Linux.

El funcionamiento consiste en instalar un programa cliente en el terminal móvil, y otro programa servidor más el driver para el kernel en el equipo en el que queremos usar el terminal como webcam. He probado también en mi N70 tanto con el cliente Java como con el cliente nativo para Symbian, pero no he tenido suerte. Sin embargo, todo ha funcionado perfecto para mi N81.

He instalado usando el código fuente que podéis encontrar aquí, si os fijáis también hay paquetes deb para Debian y que usen APT. Los pasos son muy sencillos: descargar el correspondiente .tar.gz, descomprimir tar xzfv fichero.tar.gz, cambiamos al directorio que ha descomprimido y ejecutamos los tres comandos mágicos: ./configure, make, make install.

Con esto ya tenemos el servidor instalado, que se ejecuta desde consola solo con teclear smartcam, pero aún nos queda compilarnos el módulo para el kernel y montarlo debidamente. Para ello accedemos al directorio driver_src que cuelga del directorio que hemos descomprimido antes, y llamamos a la orden make -C /lib/modules/`uname -r`/build M=`pwd` y con esto deberíamos tener el driver compilado sin problemas.

Para montar el driver:
# modprobe videodev
# insmod smartcam.ko

Para instalar el cliente en el teléfono enviamos el .sis correspondiente por bluetooth al terminal, podemos encontrarlos en el directorio /usr/local/share/smartcam/phone_installs/, ejecutamos el servidor en nuestro PC con la orden smartcam como usuario.

Si usáis un kernel 2.6.29 como yo, necesitaréis aplicar un parche al código fuente del driver. Es fácil, descargáis el parche en el mismo directorio donde está el código fuente del driver (driver_src/)y ejectuáis patch -p0 < smartcam-2.6.29.4.patch y luego compiláis como expliqué antes.

Los dos programas tanto cliente como servidor son sencillísimos de usar tanto por wifi como por bluetooth, si queréis usarlo por bluetooth o por WiFi debéis configurar antes el servidor para que espere la conexión por lo que hayáis escogido (File->Settings). Tened en cuenta que debéis tener una conexión bluetooth en correcto funcionamiento previamente, al igual que vuestra red local y vuestro WiFi.

Comments 2 Comentarios »

Llevaba un tiempo que cuando quería usar algún applet java que aparecía en alguna web no me quedaba más remedio que cerrar mi Firefox de 64Bits y abrir el de 32Bits. Pero ya por fin encontré la solución para poder utilizar Java en mis navegadores de 64Bits (también epiphany).

Lo primero es llamar como root a la orden java-check-environment y seguir las instrucciones que nos indica.
A continuación, si queremos también podemos eliminar todos los JDKs y JREs antiguos, si es que no los vamos a necesitar. Clásico emerge -C …

Y por último eselect java-nsplugin set 64bit sun-jdk-1.6 o bien: eselect java-nsplugin set 64bit sun-jre-bin-1.6

Comments No Hay Comentarios »

En una entrada anterior he hablado sobre cómo encender un equipo remotamente desde la red local. Pero me ha surgido un problema puntual con la tarjeta de red integrada de mi placa base ASUS M2N-E que usa el driver forcedeth. El caso es que observé que si apagaba el equipo usando la orden halt como siempre hago, no funcionaba el envío del Magic Packet para despertar mi ordenador. Sin embargo si apagaba el ordenador dejando el botón de encedido pulsado 4 segundos, justo después de la carga de la Bios, pero antes de cargar el sistema operativo sí que funcionaba.

Resultó ser un fallo que ha surgido en algún lugar en el camino entre el kernel Linux 2.6.26 al 2.6.27. Y no sólo eso, si no que debemos asegurarnos de que nuestro interfaz de red soporta y tiene activado la opción de Wake on LAN.

  1. # emerge ethtool
  2. # ethtool eth0
    Settings for eth0:
    Supported ports: [ MII ]
    Supported link modes: 10baseT/Half 10baseT/Full
    100baseT/Half 100baseT/Full
    1000baseT/Full
    Supports auto-negotiation: Yes
    Advertised link modes: 10baseT/Half 10baseT/Full
    100baseT/Half 100baseT/Full
    1000baseT/Full
    Advertised auto-negotiation: Yes
    Speed: 100Mb/s
    Duplex: Full
    Port: MII
    PHYAD: 1
    Transceiver: external
    Auto-negotiation: on
    Supports Wake-on: g
    Wake-on: d
    Link detected: yes

    “Wake-on: d” significa que está desactivado, y debería estar en ‘g’, que es el modo de wakeonlan que soporta, tal y como “Supports Wake-on: g” dice.
  3. # ethtool -s eth0 wol g
    Activamos wakeonlan.
  4. # echo "ethtool -s eth0 wol g" >> /etc/conf.d/local.start
    Lo añadimos al servicio local, para que se ejecute siempre al arrancar el sistema.
  5. Aquí es donde viene lo más extraño, y es el error del que habla antes. Al darle la dirección MAC de la interfaz de red al comando wakeonlan debemos dársela del revés. Suponiendo que nuestra dirección MAC es 00:12:34:56:78:9A, el comando a usar sería:
    # wakeonlan 9A:78:56:34:12:00

Fuentes: aquí y aquí.

Comments No Hay Comentarios »