Synergy mediante un script de Network Manager

Hace tiempo estoy utilizando Synergy para manejar mi notebook mediante el teclado y el mouse de otra computadora, ya sea la desktop en casa o la pc del trabajo.

Como en el trabajo las IPs son dinámicas, cada tanto tenía que averiguar que IP tenia la computadora y cambiar la configuración en la notebook para que se conecte. Terminé armando un script que determina cual es la red actual (trabajo/casa) y busca la IP del servidor mediante arp (con la mac address) y luego corre el cliente de Synergy automáticamente.

Momentos épicos del código: obtener la ip a partir de una dirección mac.

#escaneo la red para juntar mac address nmap -sP $NETWORK &>/dev/null #escaneo la red para juntar mac address

#extraigo la ip de la tabla arp arp -a | grep $MAC_ADDR | grep -oP '(K[d|.]*'

Una opción era agregarlo al crontab, pero se me ocurrió que podía correrse sólo cuando una interfaz de red "levanta".

Según la documentación de Archlinux (aunque no sea mi distro):

::

There are quite a few network services that you will not want running until NetworkManager brings up an interface. Good examples are NTPd and network filesystem mounts of various types (e.g. netfs). NetworkManager has the ability to start these services when you connect to a network and stop them when you disconnect. To activate the feature you need to start the NetworkManager-dispatcher.service.

Once the feature is active, scripts can be added to the /etc/NetworkManager/dispatcher.d directory. These scripts must be owned by root, otherwise the dispatcher will not execute them. For added security, set group ownership to root as well.

ver: https://github.com/dvinazza/auto-synergy

Octoprint en OpenWRT (tp-link 1043nd)

Hace un par de años Leí la nota de Matt Defenthaler donde cuenta que se encontró un router tirado en la calle y lo resucitó en forma de servidor de impresiones 3d. Como la impresora 3d que armamos no tiene display (ni tarjeta usb), la venía usando conectada a un raspberry pi, corriendo repetier server.

Si, lo sé, es un overkill, pero hasta hace poco no dispuse del tiempo y las ganas[1]_ para resolverlo.

Octoprint

Lamentablemente no pude instalar la versión más reciente. Aparentemente en algún momento requiere compilar código y en el OpenWRT no hay con que, ni me interesa configurar un ambiente para hacer cross-compiling. Quizá más adelante pueda ser un desafío, ahora mismo quiero terminar esto y dormir como cualquier ser humano.

Así que agarré la versión que puso el tipo acá: https://docs.google.com/file/d/0B6-A_C5DmUPxZFhtMnlVaWdsOWc

También la subi yo por si se cae: https://www.dropbox.com/s/vcwxxzgpwq3t9es/octoprint.zip?dl=0

Environment

Esto hay que comprobar que funcione realmente. En teoría entrás al environment e instalás todo, pero cuando lo desactivas sigue todo ahí. Super desprolijo... voy a tener pesadillas.

opkg install python python-setuptools

Mi router tiene aproximadamente 30mb para archivos temporales en /tmp, que es donde el pip descarga y extrae los paquetes de python. Como lo hace uno por uno, para la mayoría de los paquetes va a funcionar pero hubo uno o dos que daban problema así que directamente armé otro directorio temporal.

mkdir ~/tmp
TMPDIR=~/tmp pip install -r octoprint_requirements.txt  # Cambio el dir de los temporales

Conclusiones

Velocidad en general. Estabilidad. Ruido en la alimentación?

[1] Aunque la vida adulta parece ser justamente la extinción de la intersección entre ambas.

Migrador de DBs (PostgreSQL)

Hace poco necesité migrar varias bases de postgresql pesadas de un servidor a otro, de una version a otra además, así que tuve que repetir el procedimiento varias veces y asegurarme de que la migración no traía problemas y que la base migrada quedaba actualizada. Naturalmente que fui armando un script para automatizar todo lo posible.

Básicamente lo que hice fue intercambiar las llaves de SSH para que el postgresql del origen pudiese conectarse en el destino. A partir de ahi, probé varias configuraciones para encontrar la más efectiva considerando el uso de recursos como cpu y red.

En caso de que a alguien le sirva, lo dejo en pastebin. Saludos!

Bitlocker en Debian

Instalación de requisitos

apt-get install libfuse-dev libpolarssl-dev
cd /tmp
wget https://github.com/Aorimn/dislocker/archive/master.zip
unzip master.zip
cd dislocker-master
make
sudo make install

Montaje de la unidad encriptada, primero como archivo intermedio.

mkdir /tmp/dislocker #creo una carpeta para el montaje intermedio
sudo dislocker -r -V [particion] -p[clave] /tmp/dislocker

Luego como montaje tradicional.

sudo mount -r -o loop /tmp/dislocker/dislocker-file [carpeta donde montar]

Respaldar/Restaurar los permisos de una carpeta con BackupPC

Hace unos días un servidor de archivos con windows amaneció con un RAID degradado. Si bien teníamos respaldo de los archivos, dada la complejidad del árbol de directorios, queríamos respaldar también los permisos de cada carpeta/compartido.

Descubrimos que windows guarda las carpetas compartidas y los permisos de acceso en el registro, y esto vuelve la configuración básica fácil de exportar/importar. Pero no va más allá de quien puede acceder a la carpeta.

regedit.exe /E compartidos.reg "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Shares"

Por otro lado, microsoft tiene su propias herramienta para administrar los permisos. Pero no llegamos muy lejos por ahí. Nos daba algunos errores incomprensibles.. Así que buscamos directamente una third party que pueda resolver nuestro dilema sin chillar. Ahí encontramos a SetACL. Si bien tiene una versión paga con interfaz gráfica, la versión gratuita por línea de comandos resultó ideal para programar lo que necesitabamos.

Ver Youtube Live con VLC

Estoy mirando 'Fútbol para Todos' con el VLC, funciona espectacular. El único problema que le encontré: no puedo elegir la resolución, y el VLC no siempre reanuda automáticamente la recepción.

Por suerte encontré una aplicación en python que se encarga de extraer el stream adecuado y abrir el VLC para verlo.

$ sudo pip install livestreamer

#livestreamer [url del video]
$ livestreamer http://www.youtube.com/watch?v=HBfpr5Ye35c
[cli][info] Found matching plugin youtube for URL http://www.youtube.com/watch?v=HBfpr5Ye35c
Available streams: 240p, 360p, 480p, 720p (best), 72p (worst)

#livestreamer [url del video] [stream]
$ livestreamer http://www.youtube.com/watch?v=HBfpr5Ye35c 480p
[cli][info] Found matching plugin youtube for URL http://www.youtube.com/watch?v=HBfpr5Ye35c
[cli][info] Available streams: 240p, 360p, 480p, 720p (best), 72p (worst)
[cli][info] Opening stream: 480p (hls)
[cli][info] Starting player: /usr/bin/vlc

Mechanize y Selenium en Python

Hace un tiempo vengo jugando en python con mechanize y selenium, dos módulos para automatizar el comportamiento de un usuario detras de un navegador.

Originalmente lo necesite para programar algunas funciones que la API de Limesurvey no trae (ya voy a armar un post aparte de este tema), pero después le encontré mil posibilidades. Arme un script para consultar mi saldo de teléfono, otro para que gmail descargue mis correos de otras cuentas, uno para descargar contenidos de un sitio que requiere loguearse y estoy pensando en algo más polémico...

Encoger discos VirtualBox

La operacion de encoger los discos de VirtualBox no siempre es directa. A veces es necesario 'limpiar' dichos discos de forma tal que todos sus sectores queden realmente vacíos (y no simplemente 'huérfanos').

Cuando el disco en cuestión tiene particiones linux, podemos utilizar la aplicación 'zerofree' para limpiarlo. E incluso podemos montar el disco directamente en un anfitrion para saltarnos la virtualización en lo que a la limpieza concierne.

  1. Montaje en el anfitrion
modprobe nbd
qemu-nbd -c /dev/nbd0 [archivo vdi]
mount -o ro /dev/nbd0p[nro de particion] [punto de montaje]
#montarlo como read only, para el zerofree
  1. Limpieza
zerofree /dev/nbd0[nro de particion]
  1. Recuperar el espacio asignado
umount /dev/nbd0p[nro de particion]
VBoxManage modifyhd [archivo vdi] --compact

Sitios consultados: http://bethesignal.org/blog/2011/01/05/how-to-mount-virtualbox-vdi-image/ http://www.thelinuxdaily.com/2010/02/shrinking-a-dynamic-virtualbox-disk-image/

Problemas de Brillo y Resolución en Linux

Varias veces me sucedió que, al instalar linux en PCs con alguna placa de video poco común, sea necesario activar el flag 'nomodeset' en el kernel.

Hace unos días un compañero de trabajo me comentó que al instalar Ubuntu en su notebook, la PC booteaba 'a oscuras', es decir, no funcionaba el backlight. Cuando agrego la opción 'nomodeset', se resolvió el probema del brillo... pero dió lugar a un nuevo fenómeno: la computadora iniciaba con una resolución vetusta e inapropiada.

Para resolverlo, sustituimos el parámetro 'nomodeset' por otros dos, 'acpi_osi=Linux' y 'acpi_backlight=vendor'.

El modelo de la notebook es: hp pavilion dm3-1048la.

El output del comando 'lscpi' en lo relativo a la placa de video.

00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07) (prog-if 00 [VGA controller])
    Subsystem: Hewlett-Packard Company Device 3649
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
    Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0
    Interrupt: pin A routed to IRQ 44
    Region 0: Memory at d0000000 (64-bit, non-prefetchable) [size=4M]
    Region 2: Memory at c0000000 (64-bit, prefetchable) [size=256M]
    Region 4: I/O ports at 40f0 [size=8]
    Expansion ROM at <unassigned> [disabled]
    Capabilities: [90] MSI: Enable+ Count=1/1 Maskable- 64bit-
        Address: fee0300c  Data: 41e1
    Capabilities: [d0] Power Management version 3
        Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
    Kernel driver in use: i915
00: 86 80 42 2a 07 04 90 00 07 00 00 03 00 00 80 00
10: 04 00 00 d0 00 00 00 00 0c 00 00 c0 00 00 00 00
20: f1 40 00 00 00 00 00 00 00 00 00 00 3c 10 49 36
30: 00 00 00 00 90 00 00 00 00 00 00 00 0b 01 00 00
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)
    Subsystem: Hewlett-Packard Company Device 3649
    Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
    Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
    Latency: 0
    Region 0: Memory at d2400000 (64-bit, non-prefetchable) [size=1M]
    Capabilities: [d0] Power Management version 3
        Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
        Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
00: 86 80 43 2a 07 00 90 00 07 00 80 03 00 00 80 00
10: 04 00 40 d2 00 00 00 00 00 00 00 00 00 00 00 00
20: 00 00 00 00 00 00 00 00 00 00 00 00 3c 10 49 36
30: 00 00 00 00 d0 00 00 00 00 00 00 00 00 00 00 00