viernes, 18 de noviembre de 2016

Añadir una resolución de nombres a Ubuntu

Hola chavales, hoy he descubierto que si quieres añadir una ruta estática en tu Linux Ubuntu, hay que hacer alguna configuración extra.

De toda la vida para añadir una ruta estática a tu Linux, editas el fichero /etc/hosts y la añades ahí:

127.0.0.1       localhost
127.0.1.1       mycomputer
192.168.1.219   test.ldap.server


El problema viene cuando quieres resolver el nombre "test.ldap.server" por DNS mediante un:
host test.ldap.server

Ubuntu resuelve las DNS internamente mediante un "dnsmasq", y eso nos permite meterle cierta configuración. Para que "dnsmasq" pille el fichero /etc/host hay que crear un fichero de configuración "/etc/NetworkManager/dnsmasq.d/hosts.conf" con el siguiente contenido:

addn-hosts=/etc/hosts

Tras esto sólo hay que hacer un "sudo  /etc/init.d/network-manager restart", y ya tendremos respuesta de:
usuario@mycomputer ~ $ host test.ldap.server
test.ldap.server has address 192.168.1.219


Salu2 a to2

miércoles, 2 de noviembre de 2016

Accediendo a la base de datos PostgreSQL de Chef 12

A veces uno desea conectarse a la base de datos PostgreSQL de Chef 12 para echar un vistazo.

Para hacerlo hay que instalar el cliente de PostgreSQL:

    yum install postgresql


Una vez tengamos el cliente, necesitamos saber cuales son los datos de conexión. Para esto edita el fichero "/etc/opscode/chef-server-running.json" y busca la configuración de "opscode-erchef":

    "opscode-erchef": {
      "enable": true,
      "ha": false,
      "dir": "/var/opt/opscode/opscode-erchef",
      "log_directory": "/var/log/opscode/opscode-erchef",
      "log_rotation": {
        "file_maxbytes": 104857600,
        "num_to_keep": 10,
        "max_messages_per_second": 1000
      },
      "vip": "127.0.0.1",
      "listen": "127.0.0.1",
      "port": 8000,
      "auth_skew": "900",
      "authz_pooler_timeout": "0",
      "bulk_fetch_batch_size": "5",
      "udp_socket_pool_size": "20",
      "sql_user": "opscode_chef",
      "sql_password": "10f0e1d74d73a38e4062257a6b14d771ae37f4871199c4d0954309229ab4",

      "sql_ro_user": "opscode_chef_ro",
      "sql_ro_password": "88792696490ab97c2740f1a6450fb995f7dbafe3d299acd3a99df218e108",
      "db_pool_size": 20,
      "db_pool_queue_max": 20,


Una vez tenemos estos datos, ya podemos conectarnos mediante:

     psql -h 127.0.0.1 -U opscode_chef

La clave es ese "chorizo" escrito en hexadecimal. Que la veas en hexadecimal no significa que esté codificada de ningún modo.

Una vez conectado puedes listar las tablas mediante:
        SELECT * FROM pg_catalog.pg_tables WHERE schemaname = 'public';

Salu2 a to2

miércoles, 17 de agosto de 2016

Py2exe y las DLLs de Windows

Creo que todo el que haya alguna vez trabajado con el Py2exe para "convertir" un programa en Python a un EXE para Windows se ha dado cuenta de lo mal que gestiona las DLLs.

A esa mala gestión hay que añadir unos mensajes de error nada esclarecedores. Y además, algunas de las DLLs que Py2exe toma del sistema, son dependientes del propio sistema. Lo que hace que si compilas en un Windows 10 (por ejemplo) no te funcione el software en un Windows 7.

Ayer me topé con el siguiente error:

Traceback (most recent call last):
  File "c:\Python27\lib\site-packages\gi\__init__.py", line 42, in <module>
    from . import _gi
  File "gi\_gi.pyc", line 12, in <module>
  File "gi\_gi.pyc", line 10, in __load
ImportError: DLL load failed: El sistema operativo no puede ejecutar %1.


El software si lo compilaba en Windows 10 funcionaba en Windows 10 pero no en Windows 7, y viceversa. Luego estaba claro que había alguna DLL del sistema y que sobraba pero ¿cuál?

Con Winmerge comparé los directorios "lib" de ambas compilaciones y vi que sólo había 3 DLLs distintas, con lo que sólo tuve que probar a ir reemplazando una a una. Al final resultó que la DLL que molestaba era IPHLPAPI.DLL.

Así que simplemente hay que borrar esa DLL tras la compilación para que el software compilado en Windows 7 funcionara en Windows 10.

        # Delete System dependent DLLs
        os.remove(os.path.join('dist', 'lib', 'IPHLPAPI.DLL'))


Y luego para que el software compilado en Windows 10 funcionara en Windows 7, tuve que borrar las otras dos DLLs que eran distintas:

        # Delete System dependent DLLs
        os.remove(os.path.join('dist', 'lib', 'IPHLPAPI.DLL'))
        os.remove(os.path.join('dist', 'lib', 'DNSAPI.DLL'))
        os.remove(os.path.join('dist', 'lib', 'MPR.dll'))


RESUMIENDO: Hay que borrar aquellas DLLs que sean distintas (si hay más DLLs al compilar en un Windows que en otro no importa, las que estorban son las que son distintas).

Salu2 a to2


viernes, 15 de julio de 2016

Problemas de la librería "SmartcardIO" de Java

Hola a todos, hoy quiero hablar de los problemas de la librería SmarcardIO de Java.

   https://docs.oracle.com/javase/7/docs/jre/api/security/smartcardio/spec/javax/smartcardio/package-summary.html

En la empresa en la que trabajo tenemos un software que se comunica con las Smartcards mediante una librería de código nativo que llama a la librería PC/SC del sistema. Y en un momento dado hicimos el cambio para usar la librería "SmartcardIO" de forma que nuestra solución fuera "Java puro" y no requiriese de librerías de código nativo. Y ahí empezaron los problemas.

El primer problema que tuvimos que afrontar es el hecho de no tener un control de los "contextos". La librería SmartcardIO utiliza un sólo contexto para todas las llamadas, y eso da problemas cuando quieres trabajar con varios hilos en paralelo.

El segundo problema que encontramos es que el SmartcardIO, a pesar de forma parte de Java desde el Java 1.6, sólo está implementado en la JVM de Oracle (y la OpenJDK) y no está implementado en otras JVM como la de IBM.

Y para rematar, hoy me he dado cuenta de que cuando se llaman con varios hilos a operaciones sobre la Smart card, el hecho de intentar liberar una terja con "endExclusive" puede generar una excepción desde la Smart card SDCARD_W_RESETCARD:
  https://msdn.microsoft.com/es-es/library/windows/desktop/aa379477(v=vs.85).aspx

Tras lo cual hay que hacer una reconexión forzosamente, y la implemetación de SmartcardIO no contempla el "SCardReconnect".

El resultado de todo esto es que tenemos que hacer una "marcha atrás" y volver a la librería de códio nativo.

Salu2 a to2

jueves, 2 de junio de 2016

Perfil por defecto en Firefox (hasta 45)

Hola chavales, por lo que parece el típico perfil por defecto de Firefox para aquellos usuarios que ejecutan Firefox por primera vez y que se almacenaba en "C:\Program Files (x86)\Mozilla Firefox\browser\defaults\profile", a partir de Firefox 46 ha dejado de funcionar.

No sé que motivos habrán llevado a Mozilla a quitar esta funcionalidad que tan bien iba.

Por cierto, hoy me he dado cuenta de que cuando pruebas a meter configuraciones en el "prefs.js" y metes una que el Firefox no entiende, al iniciar la primera vez y crear el perfil te crea un fichero "Invalidprefs.js" con el contenido del "prefs.js".

Es una lata porque no te indica exactamente cuál es la preferencia que tienes mal puesta, pero al menos te indica que hay algo mal en ese fichero. Y me da la sensación de que tras una preferencia mal puesta deja de ejecutar el fichero, con lo que a partir de ahí ya no hace caso al resto de preferencias que están más abajo.

Yo la configuración que he generado tiene los siguientes ficheros:
  • override.ini: con "EnableProfileMigrator=false" para que al iniciar Firefox por primera vez no pregunte si quieres importar la configuración desde Internet Explorer.
  • cert8.db: Base de datos con certificados donde he importado el certificado raíz de la FNMT
  • secmod.db: Base de datos con módulos de seguridad, donde he importado el FNMT_P11.dll para poder leer las Smart cards de la FNMT.
  • prefs.js: Configuración de la página por defecto, el no abrir páginas especiales la primera vez que se inicia, no actualizar, y no bloquear java.


A continuación os dejo el fichero "prefs.js":


// Home page
user_pref("browser.startup.homepage", "https://lexnet.justicia.es/");
user_pref("browser.startup.homepage_override.buildID", "20160315153207");
user_pref("browser.startup.homepage_override.mstone", "45.0.1");

//  disable checking default browser
user_pref("browser.shell.checkDefaultBrowser", false);

// Disable updater
user_pref("app.update.enabled", false);

// make absolutely sure it is really off
user_pref("app.update.auto", false);
user_pref("app.update.mode", 0);

// Don't show 'know your rights' on first run
pref("browser.rights.3.shown", false);

// Don't show WhatsNew on first run after every update
pref("browser.startup.homepage_override.mstone","ignore");

// Disable extensions blocklist
user_pref("extensions.blocklist.enabled", false);

// Activate java plugins
user_pref("plugin.state.java", 2);
user_pref("plugin.state.npdeployjava", 2);


Salu2 a to2

sábado, 17 de octubre de 2015

Ordenadores para el tercer mundo

Hola a todos, el martes uno de los comerciales que había ido a un país sudamericano a ver qué vendía se me presentó con un OLPC OX 1.5 que había traído de allí para ver qué podíamos hacer con él.

  http://wiki.laptop.org/go/Hardware_specification_1.5


La iniciativa OLPC (One Laptop Per Child) pretendía crear un pequeño ordenador portátil barato orientado a niños que viven en países en vías de desarrollo. Es en sí un hardware barato, con un microprocesador compatible con la arquitectura X86 de Intel, y con un sistema operativo basado en Linux Fedora.

Hasta aquí todo bien, pero el proyecto recibió montones de críticas, y ahora sé por qué. Como se dice en mi tierra, el OLPC no es sólo un portátil, además es una mierda como una casa.



La primera impresión que da al verlo es que es un juguete. Un diseño que parece hecho "a prueba de niños", un teclado tosco e incómodo, una cruceta y unos botones para jugar a juegos, y una pantalla TFT  enana. Y tras encenderlo se confirma que es un juguete al ver un Linux que no parece un Linux.

Con un entorno gráfico extremadamente capado, casi monocromo, y en el que unas pocas aplicaciones y un par de juegos educativos en lo único que se tiene.

Tiene un navegador web ligero, de los que no sirven para nada. Admitamoslo, o tienes un Chrome o un Firefox, o no puedes acceder a la mitad de los contenidos de la web. Y tiene un procesador de textos que digamos simplemente que no es el Libreoffice.

Pero lo más sangrante es que no aprovecha los recursos de la máquina. Con una SD interna de 4GB de la que aprovecha sólo 2GB, ningún juego que use la cruceta, y una resolución de pantalla bastante mayor de la que se usa, tienes probablemente el sistema más desaprovechado del mundo.

Así que lo único que tienes al final es un juguete para los niños que ni siquiera es barato.

Frente a esta penosa iniciativa, hay otras más juiciosas. Un amigo me comentó la iniciativa "Play power" http://playpower.org/

Con un precio de tan sólo 10$, tienes algo parecido a lo que fue en su día un Spectrum o una NES de Nintendo. Con juegos educativos y un televisor donde conectarlo (y electricidad) puedes formar a muchos niños en la bases de la informática. Y esto en países donde el saber mecanografiar es la diferencia entre el duro trabajo del campo y el trabajo más cómodo (y normalmente mejor pagado) de una oficina, esto es algo que marca la diferencia.

RESUMIENDO: OLPC mierda, Play Power mola.

Salu2 a to2

lunes, 3 de agosto de 2015

El televisor Sony Bravia con Android

Hola a todos. Hace poco me he comprado una TV Sony Bravia con Android.



Me la compré con Android básicamente para poder ver las películas de Google Play. Me gusta Google Play sobre otras plataformas porque se pueden comprar películas (además de alquilarlas) y porque cada 3 meses o así hay ofertas de películas por 4€ en SD y 6€ en HD.

Pero al entrar en Google Play para ver las aplicaciones cual fue mi sorpresa que aparecían muy pocas aplicaciones.

Tras investigar un poco resulta que las aplicaciones están filtradas y solamente aparecen aquellas aplicaciones que se sabe que funcionan correctamente en esta TV y con el mando del televisor. Pero claro, uno quiere más (aunque tenga que conectar un ratón a uno de los USB).

La solución fue fácil, primero instalé desde el Google Play el "ES File Explorer". Luego descargue el APK del "Aptoide" en un pen drive y se lo conecté al televisor. Tras esto, con el "ES File Explorer" navegué hasta el pen drive y seleccioné el APK, entonces te aparece una advertencia diciendo que no puedes instalar aplicaciones desde "orígenes desconocidos".

En esta advertencia hay un botón que al pulsarlo te lleva a las opciones de configuración donde puedes habilitar la instalación desde "orígenes desconocidos". Tras habilitar la opción, volví al "ES File Explorer", vuelta a ejecutar el APK del "Aptoide" y ya pude instalarlo.

Así que a partir de ahora para instalar aplicaciones tengo dos formas: o bien las instalo desde Aptoide, o bien descargo el APK a un pen drive y lo instalo utilizando "ES File Explorer".

Salu2 a to2