martes, agosto 27, 2013

Controlar la generación de paquetes Debian a través de DEB_BUILD_OPTIONS

Las opciones de construcción de paquetes Debian a través dpkg-buildpackage pueden controlarse con la variable de entorno DEB_BUILD_OPTIONS. Algunos de los posibles cambios son no ejecución de los tests, desactivar las optimizaciones o no quitar la onformación de depuración de los binarios. Pueden combinarse los diferentes valores para compilar el paquete de acuerdo con las necesidades que se tengan. Las posibles opciones de la variable son las siguientes:

  • nocheck El sistema de paquetes no ejecuta los posibles tests que puede tener el paquete (si el paquete usa las autotools para generarse normalmente esto equivale a no hacer el make check)
  • noopt Desactiva las optimizaciones, explícitamente pasa los flags -O0 -g al compilador (que como suele ser el gcc implica desactivar la optimización y activar la generación de los símbolos de depuración).
  • nohardening Desactiva las opciones que permiten introducir mecanismos en los binarios para prevenir la explotación de fallos de seguridad en los mismos (si se tiene instalado los paquetes para ello en Debian). Se puede ver más sobre en el wiki de Debian en Hardening.
  • nodocs No construye los paquetes de documentación.
  • nostrip La información de depuración no debe quitarse de los binarios generados durante la instalación.
  • parallel=n Si el paquete permite la construcción en paralelo, usar hasta n procesos.

Referencias


Technorati Tags: ,

miércoles, agosto 21, 2013

Quinto aniversario del accidente del vuelo JKK 5022

Ayer se cumplieron cinco años del desgraciado accidente del vuelo JKK 5022 operado por la desaparecida Spanair, que acabó con un balance de ciento cincuenta y cuatro muertos y dieciocho heridos. Toda la prensa nacional ha publicado artículos recodando la tragedia, pero me ha sorprendido el tono de todos ellos, porque dan a entender que no se sabe la verdad o no hubo un juicio justo. Por ejemplo El Mundo titula Familiares de Spanair critican a los jueces 'por quitarse el muerto de encima', El País Las víctimas del accidente de Barajas piden indemnizaciones como las del 11-M y el Abc Los afectados por el accidente de Spanair critican a los jueves por archivar el caso. En cualquiera de los enlaces anteriores hay declaraciones como la siguiente:

«siguen pidiendo justicia y que se conozca la verdad desde que el año pasado la Audiencia Provincial de Madrid archivara el caso para quitarse el muerto de encima y evitar responsabilidades penales».

Sin embargo, creo que la verdad se sabe. Y está perfectamente documentada en los informes del CIAIAC sobre el accidente. Si nos vamos al informe final, en la página 254, el apartado 3.2 Causas se dice lo siguiente:

La tripulación perdió el control del avión como consecuencia de la entrada en pérdida inmediatamente después del despegue, por no haber configurado el avión correctamente, al no realizar la acción de despliegue de los flaps/slats, tras una serie de fallos y omisiones, junto con la ausencia de aviso de la configuración incorrecta de despegue.
La tripulación no detectó el error de configuración al no utilizar adecuadamente las listas de comprobación que contienen los puntos para seleccionar y comprobar la posición de flaps/slats en las labores de preparación de vuelo, en concreto:
  • No llevó a cabo la acción de seleccionar flaps/slats con la correspondiente palanca de mando (en «After Start Cheklist»);
  • No realizó la comprobación cruzada de la posición de la palanca y el estado de las luces indicadoras de flaps y slats al ejecutar la lista de comprobación «After Start»;
  • Omitió la comprobación de flaps y slats en el punto «Take Off Briefing» de la lista de comprobación de taxi;
  • n la comprobación visual realizada en la ejecución al punto «Final Items»

Si, se puede entrar en la discusión de que si el TOWS hubiese funcionado bien podrían haber sido advertidos los pilotos que la configuración del despegue era la correcta y no se hubiese producido el accidente, pero eso no cambia la raíz del problema: Casi seguro si el avión hubiese estado bien configurado no se habría estrellado. En el mismo informe se afirma (página 83).

Estas evidencias se corresponderían con la palanca de flaps/slats posicionada en UP/RET en el momento en el que se produjo dicho impacto entre tetón y guía.

Además la información grabada en el FDR (caja negra con los parámetros de vuelo) apoyan la afirmación anterior.


Technorati Tags:

miércoles, julio 24, 2013

Intel MPX: Extensiones de protección de memoria

(via reddit.programming) Intel acaba de presentar una serie de extensiones de protección de memoria que permita un uso más seguro de punteros en C y C++. Este conjunto de nuevas instrucciones permiten verificar si un acceso a memoria está dentro de un rango permitido protegiendo al programa de un posible buffer overflow.

Intel® MPX is designed to allow a system to run both Intel MPX enabled software and legacy software together. When executing software containing a mix of Intel MPX code and legacy code, the legacy code does not benefit from Intel MPX, but it also does not experience any change in functionality or performance. Performance of Intel MPX enabled code running on processors that do not support Intel MPX is similar to embedding NOPs in the instruction stream. Intel MPX is designed such that enabled applications can link with, call into, or be called from legacy software (libraries, etc.) while maintaining existing application binary interfaces (ABIs)

Las extensiones se pueden consultar en Intel® Architecture Instruction Set Extensions Programming Reference, concretamente en el capítulo 9 del mismo.

La idea de MPX es asociar rangos de direcciones válidas a los que pueden acceder un puntero determinado, siendo el hardware el encargado de verificar que cualquier acceso a dicho puntero está dentro del rango permito, intentando proteger al sistema de un buffer overflow. Por supuesto, hace falta compiladores y sistemas operativos que permitan usar estas nuevas extensiones. Lo que no me queda demasiado claro es que ocurre con un binario que tenga estas instrucciones y se intente ejecutar en un procesador que no tenga soporte para las mismas. De este párrafo creo entender que no debe de haber problemas en ejecutar un binario con estas instrucciones en un procesador que no soporte las mismas:

All Intel MPX instructions are NOP on processors that report CPUID.(EAX=07H, ECX=0H).EBX.MPX [bit 14] = 0, or if Intel MPX is not enabled by the operating system (see Section 9.3.3). Applications can selectively opt-in to use Intel MPX instructions.


Technorati Tags: ,

domingo, julio 21, 2013

VLC: De vuelta a la plataforma iOS

Ha vuelto a la plataforma iOS el magnífico reproductor multimedia VLC, el cual fue retirado de la misma por problemas de licencia hace dos años. Reescrito desde cero, de fuentes abiertas y licenciado de manera dual - Mozilla y GPL 2 o posterior - para ser compatible con los términos de la AppStore de Apple, permite reproducir una gran variedad de archivos multimedia. Se puede ejecutar en cualquier dispositivo que tenga la versión de iOS 5.1 en adelante. Funciona sin problemas en hardware tan antiguo como el iPhone 3GS o el iPad 1.

He tenido algún pequeño problema a la hora de reproducir algunos vídeos en el iPad 1, que se ha solucionado reiniciando la aplicación. Lo más interesante para mi - puesto que puedo reproducir vídeos en formato mp4 sin problemas con Quicktime en el iPad - es que soporta los ficheros de subtítulos en formato SubRip (srt).


Technorati Tags: ,

martes, julio 09, 2013

Desactivar IPv6 en Mac OS X desde la línea de comandos

Una de las características de Mac OS X que siempre más me ha gustado es la posibilidad de usar tanto la interfaz gráfica del sistema como diferentes utilidades la línea de comandos para la configuración y administración del mismo. Una de esas joyas desconocidas que permiten el control total de la configuración de red desde la línea de comandos es networksetup.

En Mac OS X , un servicio de red (network service) no es más que un conjunto de configuraciones de un puerto de red determinado (ethernet, wifi). Por ejemplo, se pueden tener varios servicios para el puerto ethernet en función de la localización donde se esté: casa, oficina, etc. networksetup permite la configuración y gestión de los servicios de red.

Se puede obtener la lista de servicios de red que hay en el sistema con ayuda del parámetro -listallnetworkservices

baldurgate:~ terron$networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Bluetooth DUN
Ethernet
FireWire
Wi-Fi
Bluetooth PAN
baldurgate:~ terron$

Con ayuda de la opción -getinfo se puede obtener información sobre una servicio de red determinado. Por ejemplo, para el servicio de Wi-Fi:

baldurgate:~ terron$ networksetup -getinfo Wi-Fi
DHCP Configuration
IP address: 192.168.x.x
Subnet mask: 255.255.x.x
Router: 192.168.x.x
Client ID: 
IPv6: Automatic
IPv6 IP address: none
IPv6 Router: none
Wi-Fi ID:  XX:XX:XX:XX:XX:XX 

Puede verse como está activado el soporte de IPv6 en modo automático.

Para desactivar IPv6 en cualquier servicio, se usa el parámetro -setv6off seguido del nombre del mismo:

networksetup -setv6off Ethernet
networksetup -setv6off Wi-Fi

Para que el sistema pueda realizar cambios en las bases de datos que almacenan la configuración de red, se debe estar autentificado con un usuario que tenga privilegios de admin o root. En caso de que no sea así, el sistema nos presentará un cuadro de diálogo para que se introduzcan las credenciales de un usuario con dichos privilegios.


Technorati Tags: