domingo, diciembre 11, 2011

Automating systems at FSF

El boletín de la FSF de noviembre viene con artículos interesantes. He elegido éste por tener un contenido más técnico y proporcionar información de los entresijos de los servidores de software GNU.

Como no podía ser de otra forma esta tradución se puede copiar, distribuir, modificar y publicar libremente  (aunque se agradecería una mención al autor original del texto en inglés así como del traductor).

Free Software Foundation Bulletin. Issue 19 - November 2011
Título original: Automating systems at FSF 
Autor: Ward Vandewege
Chief Technology Officer (Free Software Foundation)
Traducción: Jorge Muñoz Rodenas.

Los administradores de sistemas de la FSF han hecho un gran esfuerzo para consolidar nuestra infraestructura de servidores durante los pasados 12 meses. Hemos retirado más de una docena de servidores durante el proceso, y ahora alojamos la mayoría de nuestra infraestructura en tres potentes máquinas con varios núcleos en la CPU, abundante RAM y mucho espacio en los discos. Como quizá sepáis, utilizamos Xen para virtualizar nuestros servidores. La virtualización nos permite dividir de forma segura nuestros servidores en muchas máquinas virtuales, cada una dedicada a un número limitado de tareas.
También nos hemos embarcado en un viaje para automatizar las configuraciones de nuestros sistemas en la medida de lo posible. Hemos elegido Puppet, una herramienta de gestión y automatización de la configuración, para que nos ayude en esta tarea.
Una de las ventajas de Puppet es que se puede empezar con pequeñas configuraciones. Una vez que el sistema está bajo el control de Puppet, es fácil expandir la configuración a lo largo del tiempo y, por lo tanto, automatizarlo cada vez más. Empezamos con una configuración muy limitada que definía algunos ajustes comunes a todos nuestros sistemas -por ejemplo, asegurar que la configuración del servicio sshd sea segura. Puppet hace que sea fácil distingur reglas basadas en “hechos” sobre una máquina, como la versión del sistema operativo que está ejecutándose en ese momento, o si el sistema es un servidor físico o un máquina virtual. Cada sistema bajo el control de Puppet obtiene su propio texto de configuración, por lo que es posible hacer cosas específicas para una sóla máquina.
Aquí se indican algunas de las cosas que hacemos ahora con Puppet, en vez de a mano:

  • Instalar los paquetes apropiados, y sus configuraciones estándar de GNU/FSF.
  • Crear y gestionar cuentas de usuarios.
  • Distribuir claves públicas SSH y certificados SSL.
  • Actualizar las configuraciones de las herramientas de Xen en los servidores virtualizados.

Creamos nuevas máquinas virtuales con la herramientas de Xen, que recogen los paquetes de Puppet. Entonces añadimos la nueva máquina virtual a nuestra configuración de Puppet que recoge, a su vez, la configuración por defecto GNU/FSF sin trabajo adicional por nuestra parte. Ahorramos mucho tiempo en configurar las nuevas máquinas, y nuestra mente se queda en paz: todos nuestros sistemas bajo el control de Puppet tienen garantizada nuestra configuración estándar.
Actualmente estamos trabajando para alcanzar el objetivo de generar nuestra propia configuración de los sistemas de monitorización desde Puppet. Una vez concluído la mayoría de este trabajo, debería ser posible para Puppet saber, por ejemplo, www.gnu.org se ejecuta en un servidor web en el puerto 80. Con este conocimiento, Puppet puede ordenar, a nuestros servidores monitorizados, comprobar la disponibilidad de un servicio, todo ello sin la intervención manual de los administradores de sistemas.
Quería concluir este artículo con unas breves palabras de agradecimiento a Bernie Innocenti, que dejó la FSF por otro trabajo en septiembre. Le estamos extremadamente agradecidos por sus contribuciones cono administrador de sistemas de la FSF; él ha sido clave en la consolidación de servidores y en la costosa instalación de Puppet explicada anteriormente.




viernes, septiembre 23, 2011

RTVE la televisión de "todos"

Ha salido una noticia, parece ser que filtrada por los propios trabajadores de Radio Televisión Española, que denuncia que los consejeros de RTVE han votado a favor de poder acceder, ellos mismos, al sistema interno de gestión de noticias de la propia cadena (iNews creo que se llama) y poder editarlas. La gente se ha escandalizado y rápidamente han salido todos los políticos desmarcándose de esta votación. El tema es que esa capacidad otorgada a sí mismo por el consejo de administración le huele al personal a una forma de censura.
Sobre todo este revuelo hay una cosa que no acabo de entender, RTVE siempre ha sido un medio manipulado por el gobierno de turno, ofreciendo a diario información sesgada y parcial (al igual que todos los medios convencionales de cualquier color y signo). Si esto es algo que todos sabemos, intuimos y forma parte del inconsciente/consciente colectivo, ¿por qué se arma tanto ruido?
La estrategia es clara, cualquier cambio será el culpable del deterioro del medio que, antes de dicho cambio, era limpio y eficiente. Me descojono. Y que conste que la votación, si es para censurar, no me parece bien.
Algo parecido está pasando con el tema de la educación, el sistema ya estaba moribundo y "tocado", las nuevas medidas de recortes lo único que van a conseguir es hundirlo. Pero ésta es otra guerra.
Lo que se necesita es un cambio profundo estructural y ventilar las cortinas de humo que juegan al despiste y evitan que se hagan análisis sosegados, con inteligencia y honestidad.

pd. Como ejemplo ilustrativo, vía meneame.net, he encontrado un video muy interesante y bonico donde se dicen verdades como puños que no pudimos ver en RTVE muuuucho antes de la dichosa votación (que por cierto ya se ha rectificado, aquí lo cuenta la prensa convencional)


La respuesta censurada from LaVerdadOculta on Vimeo.

martes, agosto 23, 2011

Corto de misterio

Para cambiar de tercio vamos a ver un cómic bien simple y bien bonico, creo que a estas obras maestras hay que darle difusión. La imaginación no requiere de grandes programas de animación,... ¡A-le! a disfrutarlo: http://comic.naver.com/webtoon/detail.nhn?titleId=350217&no=20&weekday=tue

PD. Aunque esté en coreano tú dale a la ruleta del ratón hacia abajo.
Si alguien lo sabe traducir del coreano que lo publique...

Vía: http://www.meneame.net/story/piensalo-bien-antes-llegar-fin-esta-pagina-jap

martes, agosto 09, 2011

Instalar el kernel v. 3.1.0-rc1 en Ubuntu 10.10 al "Debian Style"



Explico en esta entrada la forma de instalar el kernel más reciente - a día de hoy- en Ubuntu (10.10) al estilo Debian es decir, generando paquetes .deb pero descargando el núcleo desde kernel.org (fuera de los repos de Ubuntu).

Primero habrá que comprobar que tenemos instalados los siguientes paquetesgit-core kernel-package fakeroot build-essential libncurses5-dev

Si no los tenemos, los instalamos:
$sudo apt-get install git-core kernel-package fakeroot build-essential libncurses5-dev

Después hay que seguir los siguentes pasos:

1) Ir al directorio home
$ cd $HOME

2) Obtener el kernel -fuentes- de la línea principal (torvalds) mediante git:

$git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

3) Una vez descargadas las fuentes del kernel el paso siguiente sería configurar el kernel con las opciones idóneas para nuestro hardware. Este proceso exige un buen conocimiento del hardware de nuestro equipo, por lo que una buena opción es tomar la configuración del kernel anterior -uno que funcione- ya que tendrá la mayoría de las opciones hardware configuradas correctamente. Después sólo queda indicar las nuevas funcionalidades que nos vaya pidiendo el nuevo kernel. Ante la duda conviene tomar las que vienen por defecto. Así, para configurar el kernel de esta manera, haremos lo siguiente:

Obtener la configuración del kernel antiguo:

$cp /boot/config-`uname -r` .config

Configurarlo:

$make oldconfig

4) El siguiente paso será comentar las líneas "echo "+"" del archivo scripts/setlocalversion con #, de lo contrario fallará la compilación.

Lo podemos hacer de forma automática con:

$sed -rie 's/echo "\+"/#echo "\+"/' scripts/setlocalversion

5) Construimos los archivos linux-image and linux-header .deb mediante:
CONCURRENCY_LEVEL=`getconf _NPROCESSORS_ONLN` fakeroot make-kpkg --initrd --append-to-version=-jorgeroden kernel_image kernel_headers

*nota: cambia -jorgeroden por lo que quieras.
Probablemente salgan algunos errores de hardware que no impedirán que funcione.

6) Instalamos los paquetes .deb generados en el nivel superior del directorio (en mi caso):

$sudo dpkg -i linux-image-3.1.0-rc1-jorgeroden_3.1.0-rc1-jorgeroden-10.00.Custom_i386.deb
$sudo dpkg -i linux-headers-3.1.0-rc1-jorgeroden_3.1.0-rc1-jorgeroden-10.00.Custom_i386.deb
7) Hacemos que el kernel sea arracable en nuestro sistema con grub2

$sudo update-initramfs -ck 3.1.0-rc1-jorgeroden 
$sudo update-grub2
8) Reiniciamos el sistema y arrancamos con el nuevo kernel y ¡a disfrutar de lo más cool!.

*nota: En la versión release candidate 1 (-rc1) sale un error durante el arranque: Error: Driver 'mdio-gpio' is already registered, aborting... pero sin ninguna repercusión en el buen funcionamiento del sistema. Ya he informado del error. Supongo que en breve habrá alguna explicación.
De momento las impresiones son buenas, parece que arranca más rápido y que las aplicaciones funcionan correctamente.

Actualización:
Si alguien quiere probar mis .deb generados y ahorrarse los pasos de arriba, los puede descargar desde los siguientes enlaces:
linux-headers
linux-image


Se admiten todo tipo de comentarios (gracias).
Obviamente no ofrezco ninguna garantía de funcionamiento (como no podía ser de otra forma).

Fuente: https://wiki.ubuntu.com/KernelTeam/GitKernelBuild

jueves, julio 21, 2011

El peligro de los ebooks (The danger of ebooks)

Paso a traducir uno de los artículos del boletín de la Free Software Foundation que nos envían periódicamente, en papel, a los miembros de la fundación. El artículo es de Mr. Stallman:

FSF Bulletin.
Issue 18
June 2011

"The danger of ebooks" by Richard Stallman
Translation: Jorge Muñoz Rodenas FSF member 5687

En una época donde las empresas dominan a nuestros gobiernos y escriben nuestras leyes, cada avance tecnológico les ofrece una oportunidad para imponer nuevas restricciones al público.
Las tecnologías, que nos podían haber enriquecido, se usan sin embargo para encadenarnos.
Con los libros impresos:
  • Puedes comprar cualquier libro en metálico, de forma anónima,  y una vez hecho esto te pertenece.
  • No se solicita que firmes una licencia que te restrinja su uso.
  • El formato se conoce y no se necesita tecnología propietaria para leer el libro.
  • Puedes dar, prestar o vender el libro a cualquiera.
  • Puedes, físicamente, escanear y copiar el libro, siendo esto en ocasiones lícito en el ámbito del copyright.
  • Nadie tiene la capacidad de destruir tu libro. 
Esto contrasta con los libros de Amazon:

  • Amazon solicita a los usuarios identificarse para obtener un ebook.
  • En algunos países, Amazon le dice al usuario que el libro no le pertenece.
  • Amazon también requiere del usuario que acepte una licencia restrictiva para el uso del ebook.
  • El formato es secreto, y sólo un software restrictivo-privativo puede leer el libro en toda su amplitud.
  • Para algunos libros se permite un "sucedaneo" de préstamo sólo posible si se especifica el nombre del usuario al que se presta el ebook. Dicho usuario ha de estar registrado.
  • No se permite dar o vender ebooks.
  • Copiar el libro es imposible debido a la gestión de derechos digitales (DRM) en el dispositivo lector y prohibido por la licencia, que es incluso más restrictiva que la propia ley de copyright.
  • Amazon puede, de forma remota, borrar el ebook usando una puerta trasera - Usó esta puerta trasera en 2009 para borrar miles de copias de la novela de George Orwell "1984".
Una sóla de estas infracciones deja a los ebooks a un paso por detrás de los libros impresos. Debemos rechazar los ebooks hasta que respeten nuestra libertad.
Las compañías de ebooks dicen que denegar la libertad que teníamos con el libro tradicional es necesario para continuar pagando a los autores - el sistema de copyright actual tiene un sistema de pago nefasto para los autores, pero es ideal para apoyar a esas compañías. Podemos mejorar nuestro apoyo a los autores de otras formas que no exijan restringir nuestra libertad, e incluso legalicen el acto de compartir.
Los dos métodos que he sugerido son:

  • Repartir fondos a los autores a través de impuestos basados en la raíz cúbica de la popularidad del autor.
  • Diseñar reproductores de ebooks para que los usuarios puedan hacer donaciones anónimas a los autores.
Los ebooks no necesitan menoscabar nuestra libertad, pero lo harán si las compañias así lo deciden. De nosotros depende pararles. La lucha acaba de empezar.

NdT:
ebook: libro electrónico.
copyright: derechos de copia.
Published with Blogger-droid v1.7.4



Copia y pega este texto si permiso para cualquier propósito. Lo único que pido es que menciones las fuentes, es decir, al autor de la traducción y al blog.

viernes, julio 15, 2011

Botonera para servos con Arduino UNO

Trasteando de nuevo con Arduino he hecho un montaje casero para almacenar y reproducir con sendos pulsadores la posición de un servo que se maneja o, mejor dicho, sigue a un potenciómetro. Esto me ha permitido jugar un poco con la librería Servo.h y las instrucciones para escribir y leer datos en la EEPROM de 1Kb que lleva el modelo Arduino UNO.

Ahí va la inmortalización del evento de pruebas:



El código fuente:
 
/*
Potentiometer-Servo-button-command
Author: Jorge Muñoz Rodenas jorgeroden1@gmail.com
License: GPL v.3
Date: 14/7/2011
Version: 0.2 (alpha)
Description: to do
 */

#include <eeprom.h>
#include <servo.h>

Servo myservo1;  
Servo myservo2;

// Constants

const int buttonPinMem1 = 2;               // digital pin Mem button1
const int buttonPinAct1 = 3;               // digital pin Act button1
const int buttonRelease = 12;              // digital pin RELEASE button
const int servo1Pin = 10;                  // Servo1 PWM pin
const int servo2Pin = 11;                  // Servo2 PWM pin
const int ledPin =  13;                    // the number of the LED pin (soldered on board)
const int potpin1 = 0;                     // analog pin used to connect the potentiometer1
const int potpin2 = 1;                     // analog pin used to connect the potentiometer2
const int addr0 = 0;                       // EEPROM 1st address  (Mem1-servo 1)
const int addr1 = 1;                       // EEPROM 2nd address  (Mem1-servo 2)

// Variables  

int val1 = 0;
int val2 = 0; 
int posPot1 = 0;
int posPot2 = 0;
byte pos1, pos2;                             //Servo position
int buttonStateMem1 = LOW;                   // memory pushbutton1 status
int buttonStateAct1 = LOW;                   // action pushbutton1 status
int buttonStateRelease = LOW;
boolean running = true;

void setup() {
  
   myservo1.attach(servo1Pin);                     // attaches the servo on pin 9 (digital) to the servo object 
   myservo2.attach(servo2Pin);                    // attaches the servo on pin 10 (digital) to the servo object 
   pinMode(ledPin, OUTPUT);          
   pinMode(buttonPinMem1, INPUT);  
   pinMode(buttonPinAct1, INPUT);  
}

void loop(){
    
  //Reads analog input
  
  val1 = analogRead(potpin1);              // reads the value of the potentiometer (value between 0 and 1023)   
  val1 = map(val1, 0, 1023, 0, 179);       // scale it to use it with the servo (value between 0 and 180) 
  val2 = analogRead(potpin2);              // reads the value of the potentiometer (value between 0 and 1023) 
  val2 = map(val2, 0, 1023, 0, 179);       // scale it to use it with the servo (value between 0 and 180)   
  
  //Reads digital input
  
  buttonStateMem1 = digitalRead(buttonPinMem1);
  buttonStateAct1 = digitalRead(buttonPinAct1);
  buttonStateRelease = digitalRead(buttonRelease);
  
  //Servo 1 and 2
  
  if (running == true)
  {
    myservo1.write(val1);
    myservo2.write(val2);
  }
 
 // Program 1
 
  if (buttonStateMem1 == HIGH) {    
    
    digitalWrite(ledPin, HIGH);          //LED 13 on
    EEPROM.write(addr0, val1);
    EEPROM.write(addr1, val2);
    digitalWrite(ledPin, LOW);           //LED 13 off
          
  } 
  
  if (buttonStateAct1 == HIGH) {     
 
    running = false;
    digitalWrite(ledPin, HIGH);                 //LED 13 on
    pos1 = EEPROM.read(addr0);
    pos2 = EEPROM.read(addr1); 
    myservo1.write(pos1);                       // sets the servo position according to the scaled value 
    myservo2.write(pos2);                       // sets the servo position according to the scaled value 
    digitalWrite(ledPin, LOW);                  //LED 13 off

    } 
 
    // Release button
  
  if (buttonStateRelease == HIGH) {    
    digitalWrite(ledPin, HIGH);                 //LED 13 on
    running = true;   
    delay(40);
    digitalWrite(ledPin, LOW);                 //LED 13 off      
  } 
   
}


Sobre el tema de las conexiones, los pines vienen en el software aunque si alguien lo quiere montar, y tiene dudas de cómo se conectan los servos, pulsadores y potenciómetros aquí dejo unos garabatos a mano (hoy paso del Eagle) a modo de recordatorio.

Ciao!


domingo, marzo 20, 2011

Arreglar Arduino UNO para Ubuntu (10.10)

Hace unos días me compré una nueva Arduino para jugar con ella. Es el modelo Arduino UNO y, paradojas de la vida, a pesar de ser un proyecto MUY libre, no tiene buen soporte para gnu/linux (Ubuntu que es mi caso a día de hoy). Hay un bug en el firmware para la comunicación serie-USB.
La solución está en cargar un nuevo firmware, siguiendo los siguientes pasos (bajo la responsabilidad de cada uno, que todo esto es gratis ):

Paso 1:
Ir a https://github.com/arduino/Arduino/tree/master/hardware/arduino/firmwares/arduino-usbserial/   y descargar la última versión de Arduino-usbserial-uno.hex 
Ojo, hay que descargarse el código hexadecimal tal cual (no el html). Para ello hacemos click sobre el archivo y después click derecho en la opción "raw" (guardar enlace como).

Paso 2: Instalar Device Firmware Update para chips Atmel:

 $sudo dpkg -i linux-headers-2.6.38-020638_2.6.38-020638.201103151303_all.deb  

Paso 3: Poner el chip en modo programación conectando los siguientes cables:

Con el cable USB conectado:

  • Mantén el primer cable en la posición indicada.
  • Mantén el segundo cable en la posición indicada.
  • Desconecta el segundo cable.
  • Desconecta el primer cable.

Paso 4: Reprogramar el firmware:

 $sudo dfu-programmer at90usb82 erase  
 $sudo dfu-programmer at90usb82 flash --debug 1 Arduino-usbserial-uno.hex  
 $sudo dfu-programmer at90usb82 reset  
Paso 5:

Desconectar y volver a conectar el cable USB...y a rular.

Fuentes:

http://arduino.cc/forum/index.php?topic=55736.0
http://es.scribd.com/doc/45913857/Arduino-UNO
http://www.strangeparty.com/2010/12/13/fix-your-arduino-uno-for-linux/

kernel 2.6.38 en Ubuntu 10.10 por la vía rápida

Si estás ansioso por probar el nuevo kernel 2.6.38 que trae bastantes mejoras, tienes instalada una Ubuntu 10.10 (Maverick) y no quieres esperar a la versión 11.04 (será la que llevará dicho kernel de fábrica), puedes hacerlo por la vía rápida descargando e instalando los siguientes paquetes (arquitectura i386):

Paquete 1:
http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.38-natty/linux-headers-2.6.38-020638_2.6.38-020638.201103151303_all.deb

 $sudo dpkg -i linux-headers-2.6.38-020638_2.6.38-020638.201103151303_all.deb  

Paquete 2:
http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.38-natty/linux-headers-2.6.38-020638-generic_2.6.38-020638.201103151303_i386.deb

 $sudo dpkg -i linux-headers-2.6.38-020638-generic_2.6.38-020638.201103151303_i386.deb  

Paquete 3:
http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.38-natty/linux-image-2.6.38-020638-generic_2.6.38-020638.201103151303_i386.deb

 $sudo dpkg -i linux-image-2.6.38-020638-generic_2.6.38-020638.201103151303_i386.deb  

Finalmente se actualiza el grub:

 $sudo update-grub2  
y a reiniciar y probar... ¡por cierto!,  funciona ok.



Fuentes:

http://www.chimerarevo.com/2011/02/07/ubuntu-10-10-come-installare-il-kernel-2-6-38/