Sábado 22 de octubre de 2016

Max Valdez

Max Valdez
GaRaGeD Style

Pensando en la actualidad social y política (de USA?)

Lateral a todo el show mediatico que los candidatos a la presidencia de USA, y los todavía no candidatos para la correspondiente elección mexicana del 2018 (eso si, muy bien destapados) podemos observar mucho más que el interés por el cargo, o por el mism país que los candidatos quieren gobernar.

De entrada, en un mundo en el que se está enfatizando a niveles casi obsesivos sobre la tolerancia, vemos un discurso terriblemente intolerante por parte de Trump, no tiene mucho de raro que la derecha se comporte conservadora, lo que si es muy notable es que ese racismo que desde hace años venía presagiando la venida de un Hitler gringo (no literalmente, o quizá a alguien se le había ocurrido) ahora no parece nada descabellado. No solo ha demostrado que la gente gringa (con montones de mexicanos entre ellos) tiene un muy buen porcentaje de racistas, sino que ha puesto de manifiesto que no se ha avanzado gran cosa en cuestión de igualdad de género, Trump ha demostrado ser machista y misógino, y a pesar de que entre las mujeres votantes tiene poco apoyo, sus desplantes deberían haber provocado el desprecio mucho más general, y no es para nada así.

Por otro lado, Hillary Clinton sufrió un poco al inicio de la campaña, hasta que Trump le empezó a hacer su chamba al grado que en los debates terminó por atacarlo muy suavemente, porque él se atacaba mejor por su cuenta, de tal manera que ahora, con todo y que su país conoce muy bien las movidas de ella y su expresidente marido, el hecho es que indudablemente va a ser la próxima presidenta de USA, lo cual para los mexicanos puede ser un gran alivio, ya que podremos escudarnos en que no somos el único país que vota por el menos pior, de hecho esto podría ser muy bueno para el peje, cuidado PRI-PAN-PRD!

Pero la parte más deprimente para mi es darme cuenta del nivel de descaro que tienen los políticos, de Hillary se saben detalles turbios de sus arreglos, podemos decir que lo peor lo ha hecho su esposo, pero da lo mismo, ella sigue casada, si no estuviera de acuerdo con él se hubiera divorciado, y si sigue con él por imagen, pues tantito peor; y aquí es donde viene lo que más me preocupa, resulta que como buenos imitadores de los gringos, de nuestro lado ya está la esposa de uno de los peores presidentes que hemos tenido lista para ser candidata oficial del PAN, una mujer sin trayectoria política, totalmente gris durante el mandato de su esposo, y que no tiene ningún argumento creible que pueda hacer a alguien creer que está buscando el puesto porque puede, no por interés en el país.

No tiene nada de raro que personas corruptas e interesadas en explotar a su beneficio el poder político estén buscando el puesto más alto al que se puede aspirar, lo extraño es que tengan tantos seguidores, aún con pruebas claras de apoyar varias de las actitudes intolerantes que en estos días se critican tanto en todos lados. Me preocupa este país en serio, porque si ganara Trump sería un desastre, pero con Hillary difícilmente nos va a ir mejor que como ya estamos, y cuando llegue el tiempo de las elecciones mexicanas, nuestras opciones serán igualmente pobres: el peje como menos pior, Margarita como la peor expresión de descaro político, y quien sea que saque el PRI que nos queda claro que estará muy bien involucrado con el Narco.

Me encantaría que la sociedad fuera congruente y demostrara tolerancia pareja, pero en estos momento eso no parece posible, esperemos que en unos pocos años la cosa cambie para bien.

Jueves 20 de octubre de 2016

Mario Oyorzábal

Mario Oyorzábal
TuXsOuL

GNU/Linux Debian en HP Proliant DL320e Gen8 v2

Desde hace poco estoy trabajando en un servidor “HP Proliant DL320e Gen8 v2”, la idea es hacer mejoras en los servicios y ahorrar si es posible, dado que actualmente se utilizan para trabajo diario en una pyme tres servidores diferentes, dentro de los cuales se encuentra el servidor que acabo de mencionar.

La historia del porque se utilizan tres servidores diferentes, es interesante y no deja de llamar la atención dado que más de una pyme o tú propia pyme puede sufrir de está misma problemática.

Todo comienza cuando se ve la necesidad de un sistema administrativo, que cubra y automatice las necesidades de la pyme, algo muy normal, lo que si podemos enfatizar, es que “ningún software se adaptará a una pyme, dado que una pyme cambia más rápido que su propio software”.

Una vez que se encontró a un desarrollador de software, se creo el software que se necesitaba, este fue instalado por primera vez en una máquina o en el primer servidor, con el tiempo, él desarrollador de software libera una nueva versión, la cual ofrece a la pyme, pero por alguna razón desconocida que suele pasar mucho más de lo que se cree, no se realiza una migración a la nueva versión y por consiguiente es necesario tener una instancia diferente de esta nueva versión, entonces, se realiza la compra de otro servidor y la instalación de la nueva versión del software.

En este momento la pyme, ya cuenta con dos servidores y dos versiones diferentes del mismo software, los cuales utiliza de manera conjunta.

Conforme avanza el tiempo, el hecho se repite nuevamente, él desarrollador de software tiene una nueva versión, por alguna extraña razón de nuevo, no se realiza una migración y la pyme compra otro servidor con las especificaciones del desarrollador de software, para la instalación de la nueva instancia del software.

Ya en este momento la pyme, cuenta con los tres servidores y tres versiones diferentes del mismo software, como cuento de los tres cochinitos y el lobo feroz, las dos versiones anteriores se utilizan con una poca frecuencia pero es necesario que estén en linea para consulta, la versión más nueva es la que se utiliza con más frecuencia.

No es la primera vez que veo algo así y existen muchas razones de que esto suceda, en ocasiones las licencias de software no incluyen a las nuevas versiones y es cuando la migración tiene un costo extra, este hecho hace que algunas pyme’s puedan creer que una nueva instancia es mejor (más económica, a corto plazo que a largo plazo) que realizar una migración a la nueva versión, en otros casos, la migración es complicada e imposible a la nueva versión por un mal diseño en el software o por utilizar una versión muy antigua, es notable como he podido ver software empresarial, en donde su base de datos esta tan mal diseñada que es fácil que se pierda la integridad y de posibilidad a registros perdidos.

El primer ahorro en el que se piensa son las licencias, dado que regularmente se utiliza mucho software propietario que requiere de una licencia, es por ello que se planeo el uso de software libre además de la estabilidad y alto rendimiento que tiene, en este caso como elección personal y por que estoy más familiarizado con el uso, seleccione GNU/Linux Debian de 64 bits como sistema operativo en su rama estable (jessie), la versión de 64 bits es principalmente para utilizar Xen y poder realizar virtualización.

Antes de realizar el cambio de sistema operativo tenía mis dudas, leyendo en la web encontré varios post’s que hablaban sobre el uso de Ubuntu y la necesidad de instalar controladores propietarios, algo que era bueno y malo, ya que no me gusta ensuciar un sistema por lo que en caso de requerir de controladores propietarios, en lo particular crearía paquetes “.deb” para la instalación y así tener un sistema lo más limpio posible.

Primero realicé un respaldo de la información contenida en el servidor principal o en este caso el servidor que se utilizaría como anfitrión, después instale GNU/Linux Debian, seguí el asistente, es de recalcar que no hice ninguna configuración en particular, me agrado mucho el resultado, todo el hardware incluyendo la tarjeta y el arreglo RAID fue reconocido a excepción de los sensores de temperatura, los cuales tendré que verificar, para ver si es necesario que prepare algún paquete para instalar controladores propietarios.

Terminado lo anterior, instalé Xen y se convirtieron las tres instancias físicas a virtuales (P2V), en este punto si se realizo algo de configuración (en un post más adelante hablaré sobre la configuración básica de Xen). Lo que si llama la atención, es el funcionamiento de las instancias virtuales, que dan la sensación de trabajar más rápido y con menos memoria, que si se hubieran dejado como maquinas físicas independientes.

Más adelante encontré un detalle con “iLO”, que es la administración remota que tiene este servidor HP Proliant, al principio intente deshabilitar esta característica, pero al final la deje funcionando de manera normal, ya que puede dar problemas con el servicio de ssh, esto lo noté ya que de repente no me permitía conectarme mediante ssh, solo se quedaba como colgado sin reacción alguna al intentar una conexión y del lado del servidor no se detecta nada ni siquiera el intento de la conexión, de ahí en fuera todo esta normal, inclusive las máquinas virtuales funcionan de manera normal.

Como resultado, se han eliminado o removido dos servidores y esto se reflejará en el recibo de la luz, todas las instancias están en perfectas condiciones y en un ambiente virtual, además se han creado nuevos servicios útiles para la pyme, por ejemplo, se ha creado una instancia de owncloud para el respaldo de la información de todos los equipos de computo, una instancia para un posible nuevo sistema, una instancia para nagios con el cual se realizará el monitoreo de la infraestructura con la que se cuente, etc., eso si cuidando que en las nuevas instancias se utilice principalmente software libre cuando sea posible.

Es recomendable antes de utilizar un sistema, hacer todas las preguntas posibles y plantearse esquemas a futuro, para evitar gastos innecesarios, por ejemplo, si vas a utilizar un software con licencia, pregunta los alcances de la licencia y a que “si”, además de a que “no” tienes derecho, soporte técnico, migraciones, etc., cuida mucho ademas la elección del motor de la base de datos, en lo personal, prefiero usar motores de software libre como lo son PostgreSQL o MariaDB, cuando hablamos de software libre, debemos fijarnos por ejemplo, en que tan activo es un proyecto y hacer un plan en caso de que el proyecto deje de ser mantenido por la comunidad, esto podría plantearse en tal vez de pasar de una versión libre a una versión con licencia, y si es posible tener un desarrollador de software, plantearse el mantener uno mismo el software que necesitemos.

 

Puedes ver esté y más contenidos del mismo autor en TuXsOuL.

Viernes 23 de septiembre de 2016

Mario Oyorzábal

Mario Oyorzábal
TuXsOuL

mate segfault por incompatibilidad de gtk en stretch

Una de las cosas por las que me gusta trabajar con GNU/Linux Debian, es las diferentes ramas que tiene y el uso especifico que se les da, por ejemplo, para sistemas en producción, que están expuestos a internet usamos la rama “stable” (estable), obviamente por razones de seguridad y estabilidad, para algunos sistemas que no están expuestos a internet, por ejemplo una intranet o de uso personal, me gusta usar la rama “testing” (prueba), ya que permite tener software más actualizado, pero que podemos tener alguno que otro programa roto en funcionamiento o que puede una aplicación romper a otra.

Usando la rama “testing” actualmente conocida como “stretch” y después de cambiar el ambiente gráfico de “gnome” a “mate“; para mi gusto “mate” es lo que principalmente me agradaba de “gnome” antes; aproximadamente en una actualización a finales de agosto, comienzo a notar una serie de “segfault’s” como se puede ver en la siguiente salida filtrada de log:

Aug 30 13:31:34 localhost kernel: [ 1477.591409] mate-panel[3190]: segfault at ffffffff ip b720517f sp bf8eb920 error 5 in libgtk-3.so.0.2000.9[b6e6f000+7d3000]
Sep  6 11:44:47 localhost kernel: [  649.424976] mate-terminal[6525]: segfault at bf23ad18 ip b628badb sp bf23ad00 error 6 in libc-2.23.so[b6257000+1ad000]
Sep  6 11:44:57 localhost kernel: [  659.608839] mate-terminal[6562]: segfault at bf535d38 ip b630badb sp bf535d20 error 6 in libc-2.23.so[b62d7000+1ad000]
Sep  6 11:45:11 localhost kernel: [  672.915031] mate-terminal[6576]: segfault at bf78ade8 ip b62e8adb sp bf78add0 error 6 in libc-2.23.so[b62b4000+1ad000]
Sep  6 11:48:54 localhost kernel: [  896.160228] caja[6254]: segfault at bf11efe8 ip b6065adb sp bf11efd0 error 6 in libc-2.23.so[b6031000+1ad000]
Sep  6 11:49:09 localhost kernel: [  910.938601] caja[6625]: segfault at bf615e48 ip b60b2adb sp bf615e30 error 6 in libc-2.23.so[b607e000+1ad000]
Sep  6 11:50:02 localhost kernel: [  964.724594] caja[6641]: segfault at bf39eff0 ip b6057b1a sp bf39eff4 error 6 in libc-2.23.so[b6023000+1ad000]
Sep  6 11:50:06 localhost kernel: [  968.442151] caja[6717]: segfault at bf721f28 ip b611fadb sp bf721f10 error 6 in libc-2.23.so[b60eb000+1ad000]
Sep 19 18:07:11 localhost kernel: [  134.419892] caja[2549]: segfault at bf3e1f58 ip b60b7adb sp bf3e1f40 error 6 in libc-2.23.so[b6083000+1ad000]
Sep 19 18:31:35 localhost kernel: [ 1598.396412] caja[2864]: segfault at bf2e5ffc ip b6128796 sp bf2e5ff0 error 6 in libc-2.23.so[b60f4000+1ad000]
Sep 19 18:37:11 localhost kernel: [ 1934.770757] caja[3949]: segfault at bf45beb8 ip b60b4adb sp bf45bea0 error 6 in libc-2.23.so[b6080000+1ad000]

El problema se manifestaba de la siguiente manera, el ambiente gráfico de “mate” si cargaba sin problema alguno, pero al entrar la letra que tenia era un poco diferente a lo usual, al tratar de abrir “caja” el administrador de archivos no se abría, en el caso de la terminal o consola se abría la ventana pero el contenido estaba siempre en blanco o vacío por lo que no se veía nada aunque se ejecutará un comando, dado los “segfault’s” anteriores, aplicaciones como “chromium” o “libreOffice” funcionaban sin ningún problema aparente.

Al principio no le di importancia, la mayor parte de mi trabajo lo hago en una consola o terminal via conexiones ssh, lo que hacía era usar las terminales virtuales que se tienen F1, F2, etc, por otro lado suele ser en cierto punto normal en la rama de “testing” tener detalles así, que después gracias a maintainers en debian y a la comunidad, se reportan y solucionan.

Haciendo una búsqueda para ver que pasaba, ya que era necesario ejecutar algunas aplicaciones propias de “mate”, encontré un reporte en github el #627, en el que se daba a conocer el problema.

“Mate” esta siendo afectado por una actualización a las siguientes librerías: gir1.2-gtk-3.0, libgail-3-0, libgtk-3-0 y libgtk-3-bin, las cuales se actualizaron de la versión 3.20.7-1 a la 3.21.5-3, lo que rompió de cierta forma a “mate” ya que no es compatible con esas versiones.

Para arreglar el problema tenemos dos opciones, esperar a que se actualice “mate” a la versión 1.15 o en su caso y más rápido, des-actualizar las librerías mencionadas a una versión anterior, para esto se puede utilizar el siguiente repositorio en el “source.list” y recomiendo el uso de aptitude, que para mi es mejor:

# version anterior de librerias para mate
deb http://snapshot.debian.org/archive/debian/20160818T221621Z/ testing main contrib non-free

Con lo anterior y una vez des-actualizadas las librerías deberíamos tener algo como lo siguiente:

stretch_mate_gtk_packages_627

Como aún no se cuenta con “mate” 1.15 en debian, es posible que este detalle se tenga por un algún rato, en lo que se lleva a cabo la inclusión de los nuevos paquetes, ya que no creo que se incluyan correcciones a la versión 1.14 que esta de salida, dado que en la página del proyecto de “mate” se ve que va por la versión 1.16.

Ha este momento mi escritorio funciona bien y no he tenido que ejecutar ningún otro comando.

Puedes ver esté y más contenidos del mismo autor en TuXsOuL.

Sábado 17 de septiembre de 2016

Mario Oyorzábal

Mario Oyorzábal
TuXsOuL

sat-cfdi

Hace tiempo algunos compañeros y conocidos, me habían sugerido la creación de algún software o librería, para la creación de facturas digitales o CFDI que utilizamos en México, el cual es principalmente una estructura XML con elementos de control y validación, además de los ya conocidos elementos que conformaban lo que era una factura en papel.

En ese entonces, comenzaron a salir varias herramientas para la creación y emisión de facturas, por ejemplo en mi caso, como freelance utilizo los servicios de Factura Gorila, una aplicación que a mi parecer es excelente; así como también el SAT, promovió para quienes creaban sus facturas con medios propios los PAC, que son entidades autorizadas por el SAT utilizadas para la certificación de los archivos XML.

Viendo lo anterior y al no tener o ver una necesidad que faltará cubrir, dejé el tema y solo me mantuve informado de las modificaciones y noticias del SAT sobre la facturación.

En estos últimos días, se me ha presentado la necesidad de crear y emitir facturas por medios propios, bueno, por software propio o de creación propia.

Lo primero que hice fue buscar el famoso “Anexo 20” del SAT, en ese archivo esta contenida la estructura que debe de tener el archivo XML. También busque si existían librerías que permitieran la creación de archivos XML validos, lamentablemente, ninguno cubría mis necesidades, por lo cual opte por crear una librería propia.

La idea de crear una propia librería, es que pueda crear una estructura limpia y válida, así como también incluya información para interactuar con la API de PAC’s autorizados por el SAT, para conseguir el timbrado y la certificación del XML, es decir, me permita crear, timbrar y me regrese además la información necesaria para crear el archivo PDF para la presentación del XML, sin olvidar que se pueda adaptar a las nuevas modificaciones que el SAT vaya solicitando.

El proyecto tiene el nombre de “sat-cfdi“, tal vez cambie en el futuro, dado que no soy bueno para los nombres.

Al ser un proyecto nuevo, muchas cosas faltan aún, como por ejemplo: validación de los diferentes datos entre ellos los rfc’s, consulta de la lista LCO, creación del código QR, la creación de addendas y en un futuro algo muy ambicioso es el que se pueda utilizar esta librería en cualquier proyecto sin importar el lenguaje de programación que se este utilizando.

Como siempre pasa, al ser una necesidad de un proyecto que estoy desarrollando, me estoy dando cuenta de cosas que hacen falta y que poco a poco iré implementando para cubrir dichas necesidades.

Si te es útil el proyecto no olvides hacerlo saber, así como también enviar tus ideas y sugerencias.

Puedes ver esté y más contenidos del mismo autor en TuXsOuL.

Martes 06 de septiembre de 2016

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

PostreSQL-azos!


UPDATE formatos_etiquetas_mineros SET descr=v.description FROM
(SELECT formatos_etiquetas_mineros.id, etiquetas.descr || ' [' || etiquetas.etiqueta || '] ' || mineros.tipo AS description
FROM formatos_etiquetas_mineros
JOIN formatos ON formatos_etiquetas_mineros.formato = formatos.id
JOIN etiquetas ON formatos_etiquetas_mineros.etiqueta = etiquetas.id
JOIN mineros ON formatos_etiquetas_mineros.minero = mineros.id
WHERE mineros.tipo
'None') AS v
WHERE formatos_etiquetas_mineros.id=v.id

Jueves 30 de junio de 2016

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

Fedora 24 en FitPC 1

¡Al fin!
Fedora 24 corriendo (en realidad, caminando) en la FitPC. Nada mal para un equipo de más de diez años.

Viernes 06 de mayo de 2016

Max Valdez

Max Valdez
GaRaGeD Style

honeypot para web: glastopf sobre raspberry pi

Vamos a ver rápidamente cómo instalar rápidamente un honeypot para web sobre una raspberry pi 3, debería ser casi tan sencillo instalarlo en una versión anterior, con la diferencia de que en este caso estoy usando la tarjeta WIFI interna que trae la nueva versión, en la versión 2 podría haber usado un adaptador WIFI USB, que no tiene gran ciencia tampoco, en particular he usado los tp-link que son pequeñitos y totalmente compatibles con raspbian/Linux en general.

En esta ocasión no tenía una máquina con lector de memorias SD a la mano, así que tuve que usar una iMac (si, ya se) y fue particularmente latoso el proceso, la formateada de la tarjeta es sencilla, google es tu amigo!, pero la copiada de la imagen de raspbian por “dd” tomó algo así como 3 o 4 horas, una cosa ridícula. No recuerdo cuánto tomó la vez anterior en mi laptop, pero estoy seguro que no fue tanto, la próxima vez que haga el proceso voy a tomar el tiempo en linux y actualizo la nota para comparar.

Una vez que raspbian ya está instalado y corriendo recomiendo cambiar la clave y aumentar el tamaño de la partición al máximo con el comando:

$ sudo raspi-config.

Posteriormente instalas los prerequisitos, este es el resumen de lo que instalé:

$ apt-get install python-mysqldb python-chardet python-requests python-sqlalchemy python-lxml python-gevent libevent-dev python-dev build-essential make
$ apt-get install screen

el segundo renglón es para tener el “multiplexor” de consola, porque es una lata eso de estar conectando múltiples veces en diferentes ventanas, si no sabes usarlo, es buen momento para aprender, aunque no voy a mencionar nada más al respecto en este post.

Con eso podemos correr el comando de instalación de glastopf:

pip install glastopf

Si llegara a fallar, hay que poner atención a la salida para encontrar qué faltó, seguramente es algún prerequisito, y lo más probable es que se pueda instalar de paquete.

Después de eso instalas el analizador, para ello hay que instalar los prerequisitos:

apt-get install libdancer2-perl libgeo-ip-perl libdbi-perl libclass-dbi-sqlite-perl

Y después hay que clonar el repositorio y configurarlo tal y como se describe en la página de glastopf-analytics.

En resúmen:

$ git clone https://github.com/vavkamil/Glastopf-Analytics.git
$ cd Glastopf-Analytics/
$ vi lib/MyWeb/App.pm
$ perl ./bin/app.pl

Visitamos http://[IP de la raspi]:3000 y vemos algo similar a esto:
glastopf

Con eso pueden empezar a probar ataques a aplicaciones web, glastopf tiene una buena cantidad de respuestas adecuadas para muchos atáques típicos, en especial los de acceso a archivos locales, y a inyecciones SQL.

Si empiezo a ver cosas interesantes las agregaré por aquí.

Martes 19 de abril de 2016

Max Valdez

Max Valdez
GaRaGeD Style

Vamos a ponerle alegría a esto

Me gusta mucho este arreglo de Samba pa ti, y es una de las primeras rolas que empecé a intentar en la guitarra, como lo mío no es el arte (de hecho no se qué es lo mío todavía), en realidad ni me sale todavía, pero eso no quita que me guste mucho la rola, y en particular este arreglo que está bastante sencillo.

Ahí se los dejo para la posteridá

p.d. algún día espero tocarla más o menos bien, como para subir mi propio video haciendole cover al cover.

Lunes 07 de marzo de 2016

Héctor Daniel Cortés

Héctor Daniel Cortés
'Aztec Eagle' Turbo

Informe PAPIME

Dice el dicho «No hay plazo que no se cumpla» y ha llegado la hora de presentar el Informe Final del Proyecto PAPIME.

Estaré ocupado.

Sábado 13 de junio de 2015

Iván Alemán

Iván Alemán
Iván Alemán

Dynamically change the font size under rxvt-unicode (urxvt)

Terminal-icon

Like many, I have had my fair share of terminal emulators, from the good ol’ days of Konsole, xterm, gnome-terminal, Terminator and Eterm to name a few until I finally settle down with rxvt more specifically with rxvt-unicode.

There are many things that urxvt does well, but dynamically handling the size of a font is not one of them, it was not conceived in that way or oriented towards a desktop environment (DE) in particular. But it’s meant to run almost everywhere.

But, there is always hope!

And in this case you can add support for dynamically changing the font following some easy steps.

Go grab the required perl extension1.

https://github.com/majutsushi/urxvt-font-size

Install the extension (or create a link) in the directory:

$HOME/.urxvt/ext

Add the script instruction to the file you use to keep your urxvt configuration either .Xresources or .Xdefaults so it will be loaded on the next session.

URxvt.perl-ext-common:  ...,font-size

And after loading the script add the following lines to control the
behavior, this keybindings work under urxvt version 9.14 and onwards:

URxvt.keysym.C-Up:     perl:font-size:increase
URxvt.keysym.C-Down:   perl:font-size:decrease
URxvt.keysym.C-S-Up:   perl:font-size:incglobal
URxvt.keysym.C-S-Down: perl:font-size:decglobal

The keybindings basically work like this, pressing the control key plus the up or down key will increase/decrease the font size for the actual terminal, pressing the same keys plus shift key will increase/decrease the font size of all the terminals open (once all the urxvt sessions have loaded the new configuration) and this is it!

Now, urxvt is a little bit more wise and useful.


  1. Thank you majutsushi for this perl extension. 

Miércoles 04 de marzo de 2015

Iván Alemán

Iván Alemán
Iván Alemán

Compiling Synergy for OS X Yosemite

First, a brief history of why do this…

Terminal-icon
I have two computers in my desk and having two sets of keyboards and mice takes too much space on top of that, sometimes I found myself typing in the wrong keyboard which could be problematic. Thus having one set of peripherals and a way to use them in both computers is something I find useful. Enter Synergy.

Why Synergy and not a (hardware) KVM?

For starters, Synergy used to be a completely free project and very easy to install under GNU/Linux most of the time, the configuration was/is a proper UNIX™ like using text files and in general was easy to find, setup and use. Nowadays Synergy is not easy to get since (still a FLOSS project) its developers have decided to charge one time US$5 fee, paying this fee (supposedly) makes very easy to obtain it and allows its development to keep going but if you don’t want/like to pay for it1 developers encourage you to either compile it or grab a nightly build2 and basically as with many FLOSS projects you read or investigate until you make it work on your environment.

With a (hardware) KVM one must start by picking the right model, if available buy it, then we need to accommodate space for it in our desk/environment, then you need to setup the cables and at some point you need to use the other computer you need to press a button to make the change this every time you go back and forth. These are in my opinion too many disadvantages, but of course things like keyboard configuration per OS work (Alt-Gr works!) as expected.

Still for now I prefer using Synergy and here’s how to compile it.

Pre-requisites

The following must be present on the OS X system and properly configured:

  • Homebrew, install it by following the instructions on brew.sh
  • CMake, install it with brew install cmake
  • Git, install it with brew install git
  • Qt, install it with brew install qt. Add the following links so Qt has no problem finding its requirements:
$ cd /Library/Frameworks/
$ sudo ln -s /usr/local/Cellar/qt/4.8.6/lib/QtCore.framework/
$ sudo ln -s /usr/local/Cellar/qt/4.8.6/lib/QtGui.framework/
$ sudo ln -s /usr/local/Cellar/qt/4.8.6/lib/QtNetwork.framework/
  • Xcode, get it from AppStore or from here
  • Make sure the /Developer directory exist and inside this directory the following links must be present:
$ cd /Developer/
$ ls -lrt
total 16
drwxrwxr-x  3 root     admin  102 Jan 15  2014 Extras
drwxrwxr-x  3 root     admin  102 Jan 15  2014 Documentation
drwxrwxr-x  4 root     admin  136 Jan 15  2014 Applications
lrwxr-xr-x  1 al3man1  admin   76 Nov  4 14:36 Library -> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Library
lrwxr-xr-x  1 al3man1  admin   73 Nov  4 14:37 SDKs -> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/SDKs

Otherwise create them:

$ cd /Developer/
ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Library
ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/SDKs

Next, we clone the repository

From Github:

$ git clone https://github.com/synergy/synergy.git
Cloning into 'synergy'...
remote: Counting objects: 15034, done.
remote: Compressing objects: 100% (4043/4043), done.
remote: Total 15034 (delta 11872), reused 13702 (delta 10812)
Receiving objects: 100% (15034/15034), 47.99 MiB | 1.31 MiB/s, done.
Resolving deltas: 100% (11872/11872), done.
Checking connectivity... done.

Then we start the compilation

I had better results using the Xcode as the CMake generator, you can check the ones you have installed by issuing the command hm genlist from the root directory of the recently cloned repository, then in the following step you can use the number specific to your preferred generator3.

Go into your project directory and type:

$ ./hm.sh genlist
1: Unix Makefiles
2: Xcode
3: Eclipse CDT4 - Unix Makefiles

You will see that in this case Xcode is number 2 which is the one we are going to use.

Let´s configure

Issue the following command in your terminal:

$ ./hm.sh conf -g2 --mac-sdk 10.10 --mac-identity `hostname`

The -g2 parameter is pointing to the generator to use in this case is Xcode.
You can change the bit of hostname to anything you like, as is it should translate to your computer hostname.

If no errors are detected you may continue with the next step.

Let´s build the app

Running the following command will start the build of the app:

$ ./hm.sh build

Hopefully you won’t run into troubles following these steps. At the end you can find the app inside the binfolder of your project.

Happy hacking!

Edit 1:

My actual configuration involves an OS X machine (server) and a GNU/Linux machine (client) I was a lot disappointed that Alt-gr did not behave correctly in the client machine so much that I was in the process to buy a KVM switch since without this key I can not really access to many symbols required in the CLI (@, \, |, etc.) I even created and script to display these symbols so I can copy/paste when needed, this was getting on my way so much that I was relaying in Ctrl-r to load past commands and then modify them but sometimes it was not enough. Today I decided after publishing this post that I would try to fix the Alt-gr issue and I am happy to say that I found a solution after reading and looking to several bug reports and discussing the issue on IRC finally some light! In summary, I updated the GNU/Linux machine to the latest Synergy version at the moment 1.6.3 (it was running version 1.4.x) and in the server machine (that is running 1.6.1) I created a configuration file instead of using the default of the Synergy GUI I opted for using the exported configuration file and added a line:

alt = altgr

This line was added to the section screens in this case for the client (Linux machine) restarted the server and everything worked out! If helps I am using a QWERTZ (German) keyboard and now works properly on both systems. The full configuration of this specific section is as follows:

section: screens
    linux_client:
        halfDuplexCapsLock = false
        halfDuplexNumLock = false
        halfDuplexScrollLock = false
        xtestIsXineramaUnaware = false
        switchCorners = none
        switchCornerSize = 0
      alt = altgr
    osx_server:
        halfDuplexCapsLock = false
        halfDuplexNumLock = false
        halfDuplexScrollLock = false
        xtestIsXineramaUnaware = false
        switchCorners = none
        switchCornerSize = 0
end

Edit 2:

Of course the “fix” for the Alt-gr key breaks the Alt key… which in my case is sad, I am running Awesome WM and movements and other stuff requires this key, I will have to remap it or really get a KVM switch for now I don’t see any other solutions.


  1. Synergy is very useful yes! But to pay for it I will need e.g. that the Alt-gr key behaves properly between OS X and GNU/Linux, there are many other glitches but this is in the top of my list. 
  2. Here, if you don’t want to compile: http://synergy-project.org/nightly 
  3. In my case 2 is -g2 passed as argument in the command line 
Iván Alemán

Iván Alemán
Iván Alemán

urxvt unknown terminal type with ssh

Terminal-icon
There are times when you log in via SSH into a server and your terminal is not supported therefore sometimes not fully functional.

Something like this:

$ clear
'rxvt-unicode-256color': unknown terminal type.

This is quite easy to fix and as with many things with GNU/Linux there are various ways you can do it, here are two.

The first solution you can try is to export the $TERM variable in either .bash_profile or .bashrc add one of the following lines.

export TERM='xterm-256color'
export TERM='linux'

The second solution (and maybe a better one) would be to copy your terminal profile known as terminfo file to the server in this case to your $HOME directory.

First create the directory to keep the terminfo file in the server:

mkdir -p ~/.terminfo/r 

Next, copy the matching file found on your local machine to the server, for urxvt-unicode-256color would be:

scp /usr/share/terminfo/r/rxvt-unicode-256color [email protected]:.terminfo/r

And that is all, new sessions will recognize and set the right $TERM.