Archivo categoría Linux

Graduación ISEIT 2011

Fotos cortesía de Rómulo Rodríguez.

El día 24 de Septiembre de 2011 tuve el grato placer de compartir algunos momentos con ex-alumnos (muy breves la verdad, porque estaba dando clases), ahora buenos amigos, en la graduación del ISEIT 2011. En esta ocasión fue Yureinmy , Javier y Rómulo, aunque faltaron Viviana y Ronald que no pudieron asistir (entre otros). Es una satisfacción ver que sus metas se han cumplido, y poder haber ayudado un poco en el proceso.

Felicitaciones y éxito!

,

2 Comentarios

Instalación de los Guests Additions de VirtualBox en Fedora

Si por alguna razón requieren instalar Fedora en una máquina virtual en VirtualBox y quiere aprovechar las características adicionales de los Guest Additions (drivers de red y gráficos, para por ejemplo tener pantalla completa e integración de teclado) pueden seguir estos pasos para instalarlos:

  • En la máquina virtual con Fedora instalar los paquetes necesarios para compilar los Guest Additions:
yum install kernel-headers kernel-devel
yum groupinstall "Development Tools"

Esto tardará algo ya que se bajará muchos paquetes.

  • Desde el menú de VirtualBox seleccionar Instalar Guest Additions.

En la máquina virtual se creará un enlace en el escritorio para montar la unidad de CD. Al darle al botón derecho seleccione Montar. Una vez montado ir al direcotrio:

cd /media/VBOXADDITIONS_4.1.2_73507

Desde allí ejecutar el binario para Linux para la instalación:

./VBoxLinuxAdditions.run

Una vez finalizado ya se tendrá instalado los Guest Additions de VirtualBox en Fedora!

Instalación en Red Hat

Los pasos explicados previamente también son válidos para Red Hat, solo se debe tener configurado un repositorio desde donde se instalaran los paquetes o grupos de paquetes.

4 Comentarios

Subir las radios del HTC Magic a 6.35x en Linux

Radios 6.35x HTC Magic

Si necesitas subir las radios del HTC Magic, para por ejemplo configurar la rom de fábrica de Movilnet Venezuela (o la de tu proveedor en tu país) puedes seguir los siguientes pasos que describen cómo instalar las radios 6.35x en Linux.

Requisito:

Antes de empezar

  • Haz un respaldo de tu rom actual con nandroid desde el OpenRecovery. Esto permitirá volver a tu rom en caso de que algo no vaya bien.
  • Realiza el procedimiento con la batería cargada a más de 75%.
  • Ten lista una rom a instalar apta para esta radio. Por ejemplo la rom stock de Movilnet.
  • Recuerda que solo tú eres responsable de lo que haces con tu teléfono. Aunque este método lo seguí y lo comparto, no me hago responsable por bricks en tu teléfono.

Modo fastboot en Linux

Para que el sistema operativo reconozca el teléfono en modo fastboot, root debe crear el archivo /etc/udev/rules.d/51-android.rules, con la siguiente regla udev:

SUBSYSTEMS=="usb", ATTRS{idVendor}=="0bb4", ATTRS{idProduct}=="0fff", MODE="0777"

Luego se debe reiniciar el servicio:

/etc/init.d/udev restart

Instalación

    1. Descargar los archivos spl.zip fastboot para x86, hbootnew, Radionew.img. y recoverynew.img
    2. Copiar el archivo spl.zip en la raíz de la SD.
    3. Entrar al OpenRecovery y flashar el archivo spl.zip como si fuera una rom. Al finalizar debes reiniciar el teléfono con la combinación de botones HTC Magic Home buton + HTC Magic End call button al mismo tiempo.
    4. Apagar el teléfono desde el menú OpenRecovery.
    5. Entrar al modo fastboot presionando los botones HTC Magic Back buton + HTC Magic End call button al mismo tiempo. Verás una imagen como la mostrada arriba, salvo que dirá RADIO-3.22.20.17 (aun no hemos copiado las radios 6.35x)
    6. En el PC, copiar el archivo fastboot en el directorio tools del SDK de Android y darle permiso de ejecución:
cd ~/Android/android-sdk-linux_86/tools$
chmod +x fastboot
  1. Desde el directorio tools del SDK de Android ejecutar lo siguiente:
./fastboot flash hboot hbootold.img
./fastboot flash radio Radioold.img
./fastboot flash recovery recoveryold.img

Para cada uno de estas órdenes el teléfono reportará que la imagen se envío y luego se escribe. Puedes apagar el teléfono y encenderlo nuevamente en el modo fastboot para verificar que se tenga instalada las radios de la serie 6.35x, todo listo para instalar cualquier rom compatible.

Error remote:not allow

Es importante que el binario fastboot se ejecute desde el directorio tools del SDK de Android, sino al intentar pasar cualquier archivo se reportará el mensaje “remote:not allow”

Referencias

cd ~/Android/android-sdk-linux_86/tools$

chmod +x fastboot

,

No hay Comentarios

OpenVPN en Android (Cyanogenmod)

Mi artículo anterior trató sobre cómo configurar OpenVPN en OpenWRT, por lo que ya tengo varios equipos en mi propia VPN. Como mi HTC Magic tiene Cyangenmod 6.1.0 (Froyo 2.2.1) decidí probar el apartado de OpenVPN a ver si se conectaba a la red. En este artículo explico cómo hacerlo funcionar.

Configuración del servidor OpenVPN

En general no se debe hacer nada del lado del servidor salvo desactivar el firewall HMAC porque la versión de OpenVPN de Cyangenmod no funciona con esta característica, de lo contrario obtendremos errores en el servidor de OpenVPN al estilo:

Sep  9 13:54:23 fluffy openvpn(sample_server)[4396]: TLS Error: cannot locate HMAC in incoming packet from [AF_INET]192.168.1.30:54934

Para deshabilitar el firewall HMAC basta con comentar la línea siguiente línea en el archivo de configuración:

#option tls_auth "/etc/openvpn/ta.key 0"

En los clientes también debe comentarse la línea:

#option tls_auth "/etc/openvpn/ta.key 1"

Creación de certificado y llave del dispositivo Android

De forma similar a como se hizo en el articulo sobre cómo configurar OpenVPN en OpenWRT, se debe crear el certificado y llave para este cliente:

cd /etc/openvpn/easy-rsa/
source vars
./pkitool magic

Creación del archivo PKCS12

  • Ahora debemos crear un archivo PKCS12 con las llaves que creamos:
openssl pkcs12 -export -in keys/magic.crt  -inkey keys/magic.key -certfile keys/ca.crt -name magic -out magic.p12

Aquí los archivos magic.crt y magic.key los acabamos de generar, mientras ca.crt es el certificado del servidor OpenVPN. Cuando se le pida, colocar una  frase o contraseña (se debe recordar porque será usado luego en el dispositivo Android).

  • Conectar el teléfono al PC y copiar el archivo magic.p12 en la raíz de la tarjeta SD:
cp magic.p12 /media/disk/

Desconectar el teléfono del PC para que se monte nuevamente la tarjeta SD en el teléfono.

Configuración del cliente

  • Primero se debe añadir el certificado que se creó para el dispositivo, para eso se debe ir a Ajustes > Ubicación y seguridad > Instalar desde la tarjeta SD:

Pedirá una contraseña, la cual es la frase que proporcionamos al momento de crear el archivo PKCS12.

  • Ahora se procede a configurar la VPN como tal, para se debe ir a Ajustes > Conexiones inhalámbricas > Ajustes de red VPN > Añadir VPN > Añadir red VPN “OpenVPN”:

En la siguiente pantalla se debe configurar los parámetros de la VPN:

Donde,

Nombre de VPN: Nombre que le daremos a nuestra conexión para esta VPN
Establecer servidor VPN: Dirección IP o nombre de dominio público donde está corriendo OpenVPN
User authentication: No seleccionar
Establecer certificado de CA: Seleccionar el certificamos que creamos, que para el ejemplo se llama magic.
Establecer certificado de usuario: Seleccionar el certificamos que creamos, que para el ejemplo se llama magic.
Dominios de búsqueda DNS: No seleccionar

Luego entramos en las opciones más avanzada, pulsando el botón menú, y seleccionando Avanzado. Aquí lo importante es que e puerto sea el 1194 y habilitar la compresión LZO:

Una vez hecho esto podemos seleccionar la VPN  que se configuró.

Referencias

,

7 Comentarios

Configurar OpenVPN en OpenWrt

Como el router de la casa es un dispositivo que está encendido 24×7,  esto lo hace un lugar idóneo para configurar un servidor de VPN. En mi caso tengo instalado OpenWrt en mi router TP-LINK TL-WR1043ND (para instalarlo puedes consultar el artículo de Instalación de OpenWrt en TP-LINK TL-WR1043ND). Este el artículo está redactado de forma general y describe cómo configurar OpenVPN en OpenWrt para cualquier modelo de router que tengas.

Instalación de OpenVPN en OpenWrt

En el router solo instalaremos el paquete de OpenVPN:

opkg install openvpn

Certificados (en el PC)

Los certificados del cliente y el servidor lo realizaremos en un PC con Linux, más en concreto con Debian. La idea de esto es evitar instalar software en el router ya que ocupa espacio en la limitada rom. Para obtener lo necesario instalamos el paquete openvpn de los repositorios:

aptitude install openvpn
  • Crear el directorio de trabajo y los archivo base a usar:
mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
  • Editar  el archivo /etc/openvpn/easy-rsa/vars, el cual permitirá crear un certificado único usando los valores proporcionados:
export KEY_COUNTRY="VE"
export KEY_PROVINCE="DC"
export KEY_CITY="Caracas"
export KEY_ORG="Mi organización"
export KEY_EMAIL="[email protected]"
  • Ir a el directorio de trabajo y cargar el archivo que editamos:
cd /etc/openvpn/easy-rsa/
source vars

Ahora pasamos a crear los certificados del servidor y los clientes.

Certificados del servidor

Para crear los certificados del servidor se debe realizar los siguientes pasos:

./clean-all./build-dh
./pkitool --initca
./pkitool --server server
cd keys
openvpn --genkey --secret ta.key

Certificados de los clientes

Para generar el certificad odel cliente se debe usar basta con hacer:

cd /etc/openvpn/easy-rsa/
source vars
./pkitool hostname

Donde hostname es el nombre de la máquina donde se instalará el certificado y las llaves (componente aleatorio).

Configuración de la VPN

Ahora veremos cómo configurar la VPN en tanto en el servidor como en los clientes.

Configuración del servidor (en el router)

  • Copiar los certificados generados para el servidor en el router:
scp server.crt server.key ca.crt dh1024.pem ta.key [email protected]:/etc/openvpn/

Donde 192.168.1.1 es la dirección IP del router de este ejemplo.

  • Aunque tengamos creado un archivo de configuración de forma similar en otro servidor OpenVPN, es mejor seguir el formato propuesto por la gente de OpenWrt y adaptarlo a nuestras necesidades. En ese sentido se debe editar el archivo /etc/config/openvpn con los siguientes valores (por razones de espacio solo coloco las líneas no comentadas).
config openvpn sample_server
    option enable 1
    option port 1194
    option proto udp
    option dev tun
    option ca /etc/openvpn/ca.crt
    option cert /etc/openvpn/server.crt
    option key /etc/openvpn/server.key
    option dh /etc/openvpn/dh1024.pem
    option server "10.8.0.0 255.255.255.0"
    option ifconfig_pool_persist /tmp/ipp.txt
    option client_to_client 1
    option keepalive "10 120"
    option comp_lzo 1
    option persist_key 1
    option persist_tun 1
    option status /tmp/openvpn-status.log
    option verb 3

Configuración de los clientes (en los PCs)

  • Copiar los certificados y llaves generados para cada cliente, por ejemplo la máquina hostname, como se explica a continuación:
/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/hostname.crt
/etc/openvpn/easy-rsa/keys/hostname.key
/etc/openvpn/ta.key
  • Si no se ha instalado OpenVPN en los clientes se debe proceder a hacerlo:
aptitude install openvpn
  • Copiar el archivo ejemplo de configuración del cliente:
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/
  • Editar el archivo copiado con los siguientes valores:
client
dev tun
proto udp
remote 192.168.1.30 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca /mnt/datos/OpenVpn/easy-rsa/keys/ca.crt
cert /mnt/datos/OpenVpn/easy-rsa/keys/hostname.crt
key /mnt/datos/OpenVpn/easy-rsa/keys/hostname.key
ns-cert-type server
tls-auth /mnt/datos/OpenVpn/easy-rsa/keys/ta.key 1
comp-lzo
verb 3

En la directiva remote se usó una dirección IP fija, pero puedes configurar un nombre de dominio dinámico en dyndns o no-ip y colocar el dominio en vez de una dirección dinámica o privada.

Habilitar el servicio

Ahora tanto del lado del servidor (OpenWrt) como de los clientes (PCs) se debe habilitar el servicio OpenVPN. Para cada caso se tiene:

Habilitar el servicio en el servidor (en el router)

Ejecutar lo siguiente en OpenWrt:

/etc/init.d/openvpn enable
/etc/init.d/openvpn start

Habilitar el servicio en los clientes (en los PCs)

Ahora se debe habilitar el servicio OpenVPN en los clientes. En general dependerá de la distribución que se tenga, pero para habilitar el servicio en Debian puede hacerse:

update-rc.d openvpn defaults
/etc/init.d/openvpn start

Luego de esto el servidor una interfaz tun con la dirección 10.8.01, y los clientes otra interfaz con alguna dirección como la 10.8.0.x.

Referencias

,

3 Comentarios

Notificaciones de Android en tu PC

Por recomendación de una amiga llegué hasta Remote Notifier, una aplicación que le permite a tu teléfono Android enviar notificaciones a tu PC. El proyecto tiene binarios para Windows, Mac OSX y Linux. Aquí les dejo los pasos para instalar en Linux.

Instalación en GNU/Linux Debian (y derivados)

Instalación en Windows

Ni idea, no uso Windows

Configuración y uso

  • En el teléfono:

Al seleccionar el icono Remote Notifier aparecerá una ventana como la siguiente:

Desde esta ventana puedes configurar algunas cosas como los métodos de notificación, o los eventos a notificar, como se muestra en la siguiente imagen:

Configura según tus necesidades.

  • En Linux

Ir a  Aplicaciones > Accesorios > Android Notifier Desktop

En el panel de tu escritorio aparecerá un ícono como el siguiente:

Al hacer clic derecho sobre el ícono aparecerá una ventana con varias opciones. Al escoger Preferencias (Preferences) aparecerá la siguiente pantalla:

Para que las notificaciones se integren al sistema al estilo de las notificaciones de Gnome/Unity selecciona la opción Libnotify Optras opciones como el listado de dispositivos, acciones a notificar las puedes configurar según tus necesidades.

Notificaciones

Ahora cuando recibas una llamada verás en tu PC una notificación como la que se muestra en la primera imagen del artículo.  Y el estado de la batería se mostrará de la siguiente forma:

Ahora no se te escapará ninguna llamada o mensaje importante!!!

Referencia: android-notifier

 

, ,

20 Comentarios

Automatizando wpa_supplicant en Debian

Ya vimos cómo configurar wpa_supplicant de forma manual desde la consola de texto, pero nos falta un paso adicional: hacer que la interfaz inalámbrica se levante automáticamente usando los parámetros proporcionados a wpa_supplicant.

En distribuciones basadas en Debian esto puede hacerse colocando los parámetros en el archivo /etc/network/interfaces de dos forma, la primera es :

 iface wlan0 inet dhcp
     wpa-ssid Galaxia
     wpa-psk acafbf83bd7256506f3b08137dfe2763f9456dc41c8718297e6838ce5a32a64e

La otra forma, más elegante a mi parecer,  es colocando una línea que haga referencia al archivo de configuración con estos parámetros:

iface wlan0 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

El archivo /etc/wpa_supplicant/wpa_supplicant.conf contiene la información de la red wifi a la que desea conectarse, el cual previamente se genera como se explica en el artículo Configuración de la tarjeta inalámbrica desde la consola.

En otras distribuciones habría que configurar wpa_supplicant, lanzarlo y luego pedir los valores del servidor de dhcp de la red.

Referencia: How to use a WiFi interface

,

No hay Comentarios

Configuración de la tarjeta inalámbrica desde la consola

Linux Wifi

Si no tenemos un plugin que nos facilite la vida para establecer la comunicación de la tarjeta inalámbrica con la red wifi que deseamos conectar, siempre podemos recurrir a otras herramientas que no son gráficas para hacer la misma funcionalidad. Es importante saber establecer una conexión inalámbrica desde una consola porque si no se tiene un plugin o, peor aun, si no se tiene el ambiente gráfico instalado no se podrás disfrutar de la red inalámbrica. A continuación se explica cómo configurar una conexión inalámbrica desde el terminal:

  1. Instalar el cliente wpa supplicant. En Debian y derivados puede hacerse siendo root:
    aptitude install wpasupplicant
  2. Generar la frase PSK para la red:
    wpa_passphrase Galaxia > /etc/wpa_supplicant/wpa_supplicant.conf

    Aquí la orden se quedrá en espera de la contraseña que se usará. Una vez proporcionada la misma presionar la tecla Enter para finalizar. Para revisar el archivo generado puede hacerse:

    # reading passphrase from stdin
       network={
       ssid="Galaxia"
       #psk="supersecreto"
       psk=acafbf83bd7256506f3b08137dfe2763f9456dc41c8718297e6838ce5a32a64e
    }

    Como puede verse, la red se identifica como Galaxia y la frase o contraseña es supersecreto. El campo psk corresponde a la frase en sí.

  3. Levantar la interfaz de red:
    ifconfig wlan0
  4. Invocar el cliente wpa_supplicantcon pasando como parámetro la interfaz de red y el archivo de configuración generado:
    wpa_supplicant -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf
  5. Pedir los parámetros de red al servidor DHCP:
    dhclient wlan0

Ya con esto se puede establecer la conexión a la red Galaxia, y sin necesidad de tener un plugin o incluso entorno gráfico.

3 Comentarios

Conector MySql para OpenWrt (MIPS)


Si estás interesado en desarrollar aplicaciones en C usando MySQL en OpenWrt bajo MIPS, necesitarás el conector respectivo para poder comunicarte con la base de datos. En la página de MySQL solo encontrarás los conectores compilados para x86 y las fuentes por si deseas compilarlo por tu cuenta para x86 y otras arquitecturas. Este es el que usaremos para poder compilar para MIPS el conector de MySQL. Veamos como hacerlo:

  1. Descarga el conector MySql para C (en este ejemplo uso la versión 6.0.2).
  2. Descomprimir el archivo descargado y entrar en el directorio mysql-connector-c-6.0.2:
    tar xvzf mysql-connector-c-6.0.2.tar.gz
    cd mysql-connector-c-6.0.2
  3. Instalar cmake. Si estás en Debian (o derivados) basta con hacer:
     aptitude install cmake
  4. Configurar el ambiente para cross-compilar para MIPS, exportando las siguientes variables:
    export CHROOT=/home/lgallard/backfire
    export TOOLCHAIN_PATH=$CHROOT/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1
    export PATH=$PATH:$TOOLCHAIN_PATH/usr/bin/
    export AR=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ar
    export AS=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-as
    export LD=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ld
    export NM=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-nm
    export CC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
    export CPP=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-cpp
    export GCC=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-gcc
    export CXX=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-g++
    export RANLIB=$TOOLCHAIN_PATH/usr/bin/mips-openwrt-linux-uclibc-ranlib
  5. Generar el archivo Makefile:
    cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/ruta_de_instalacion
  6. Compilar el conector:
    make
  7. Instalar los archivos binarios:
    make install
  8. Verificar que se haya compilado correctamente para MIPS:
    file /ruta_de_instalacion/lib/libmysql.so.16.0.0
    
    /ruta_de_instalacion/lib/libmysql.so.16.0.0: ELF 32-bit MSB shared object, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked, with unknown capability 0x41000000 = 0xf676e75, with unknown capability 0x10000 = 0x70403, not stripped

Uso del conector

Ahora ya podrás usar el conector en tus proyectos de C y  Mysql en OpenWrt para MIPS, solo basta agregar las rutas de los includes y la librerías de la siguiente forma:

gcc cliente.c -o cliente  -I/ruta_de_instalacion/include -L/ruta_de_instalacion/lib -lmysqlclient -lz -ldl

Aprender el API

Si estás interesado en aprender el API, te recomiendo el libro de MySQL Developer’s Library de Paul DuBois el cual tiene un ejemplo muy bueno de cómo hacer sentencias preparadas usando el conector de C para MySQL en el capítulo 7.

Recursos

,

2 Comentarios

Usando el anclaje de red (tethering) de Android en OpenWrt

OpenWrt - Android

Si tu router cuenta con un puerto USB puedes aprovechar el anclaje de red (tethering) de Android para conectarte a Internet cuando tu proveedor de servicios habitual esté caído. Para ello basta con seguir los siguientes pasos:

  1. Actualizar el listado de paquetes
      opkg update
  2. Instalar los siguientes componentes:
      opkg install kmod-usb-uhci kmod-usb-net-rndis
  3. Una vez instalado, conectar el dispositivo Android y hacer el anclaje de red.
  4. Anclaje USB

  5. En el router verificar que se reconoce el dispositivo:
      root@OpenWrt:~# logread
      May 22 03:16:51 OpenWrt user.info kernel: usb 1-1: USB disconnect, address 4
      May 22 03:16:51 OpenWrt user.info kernel: usb 1-1: new high speed USB device using ar71xx-ehci and address 5
      May 22 03:16:51 OpenWrt user.info kernel: usb 1-1: configuration #1 chosen from 1 choice
      May 22 03:16:51 OpenWrt user.info kernel: usb0: register 'rndis_host' at usb-ar71xx-ehci-1, RNDIS device, 82:ab:00:f2:6d:9c
      root@OpenWrt:~# ifconfig usb0
      
      usb0      Link encap:Ethernet  HWaddr 82:AB:00:F2:6D:9C
                BROADCAST MULTICAST  MTU:1500  Metric:1
                RX packets:0 errors:0 dropped:0 overruns:0 frame:0
                TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
                collisions:0 txqueuelen:1000
                RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
  6. Se debe elegir usb0 como la interfaz de la wan, bien sea editando el archivo /etc/config/network o a través de la interfaz web:
  7. OpenWrt - Android tethering

  8. Bajat y levantar la wan:
      ifdown wan
      ifup wan

Si se consulta las interfaces de red, LuCi debe mostrar lo siguiente:

OpenWrt - Android tethering - WAN

Referencia: USB tethering an Android phone to an OpenWRT router

, ,

8 Comentarios