Archivo del sitio

[Android] Actualizando HTC Desire en Linux (I)

Desde hace algún tiempo tengo un equipo HTC Desire (bravo) original de Digitel:

HTC Desire Bravo

HTC Desire (bravo)

Preámbulo y otras yerbas

El equipo ha sido fiel hasta donde más, le he comprado una batería de polímero extra-grande que me permite llevarlo encendido full-operativo por más de 2 días y le tengo una memoria microSD class6 SDHC para almacenamiento, fue uno de los primeros teléfonos en poseer un CPU ARM snapdragon de 1Ghz y a pesar de lo que digan, todavía le queda mucho por ofrecer.

Inicialmente viene con Android 2.2 Froyo, en el “boom” de los smartphones que vino después de Froyo (Samsung Galaxy S1, Motorola Milestone y Xperia Sony) pues HTC lanzó una carrera de teléfonos (entre ellos el HTC Hero y el HTC one) dejando abandonado en el camino a este guerrero, que jamás recibió actualización alguna vía OTA (Over-The-Air) de Android.

Ya he actualizado mi tablet Lenovo K1 hasta el cansancio (no he hecho un post, porque aún no he conocido a alguien *que no sea mi esposa* que tenga una Lenovo K1 en Venezuela); nunca me había atrevido a instalar algo más que no fueran actualizaciones al teléfono, mucha gente optó por abandonarlo, pero yo no!.

Actualizando desde GNU/Linux

En la mayoría de los casos la gente olvida que Android es Linux y mucha gente entusiasta de la plataforma desarrolla herramientas para interactuar con él solo para Windows, lo que dificulta mucho el realizar operaciones sobre él, sin embargo, este no es el caso.

¿Qué vamos a actualizar?

Hay 4 cosas que debemos actualizar antes de pensar en montarle una nueva ROM (versión modificada de Android) estas son:

* Radio: software que gestiona la comunicación con el radio del teléfono, la última versión mejora notablemente el consumo de energía en comunicaciones de datos 3G, además, es esta opción la que “libera las bandas” desbloqueando el teléfono para cualquier operadora (SIM-Lock).

* S-Off: Permite escribir en la ROM del equipo, desactivando las protecciones en la misma

* HBOOT: el sistema de arranque del HTC Boot, incluye el recovery y el fastboot (algo así como los modos de recuperación del teléfono, si algo llega a pasar mal, deberán entrar en modo “fastboot”).

* Root: root significa realmente “ganar SU”, es decir, ganar privilegios de super-usuario (como cualquier linux) por lo que ganas el control total sobre el equipo.

NOTA: Recuerda activar la depuración de USB (Ajustes -> Aplicaciones -> Desarrollo -> Depuración USB) y conectar el telefono al computador mediante su cable micro-USB.

Requerimientos:

Android Debug Bridge (ADB)

Hay muchas guías de cómo instalar ADB en Linux, yo simplemente me descargue la SDK de Android y luego colocando la carpeta “platform-tools” en el PATH, para así poder llamar a los comandos “adb” y “fastboot”.

Advertencia!

Este proceso es altamente técnico, pueden dejar el teléfono inservible (bricked, volverlo un ladrillo) o en un estado inconsistente, además, perderán TODOS los datos en él (recomiendo una aplicación como Titanium Backup y SMS backup&Restore para respaldar todos sus datos).

OJO!, no nos hacemos responsables en este blog por el daño o pérdida de equipos por impericia o mal uso de las herramientas, para conocer más, es mejor pasear un rato y leer por los foros de xda-developers.

– Actualizando la Radio

Para actualizar la radio he obtenido información de acá:

Foro: http://forum.xda-developers.com/showthread.php?t=687464
Y de este post: http://www.mofirouz.com/wordpress/2011/03/htc-desire-radios/

He extraído la información para descargar la última radio para mi HTC Desire (5.17.05.23)

He descargado este .zip y la he descomprimido (un archivo, llamado radio.img está dentro del teléfono)

http://www.mofirouz.com/ahp/?file=htcdesire/radios/32.56.00.32U_5.17.05.23.zip

* Conectamos vía USB el teléfono y reiniciamos en el bootloader:

adb reboot bootloader
* daemon not running. starting it now on port 5037
** daemon started successfully *

Revisamos que fastboot detecta nuestro teléfono:

fastboot devices
SH12GPL05338 fastboot

El valor inicial es el serial (n° de serie) del teléfono, que lo pueden verificar en una etiqueta que está detrás de la batería.

* Ejecutamos el proceso de volcado de la nueva radio:

fastboot flash radio /home/jesuslara/android/htc/32.56.00.32U_5.17.05.23/radio.img
sending ‘radio’ (26112 KB)…
OKAY [ 3.800s]
writing ‘radio’…
OKAY [ 29.446s]
finished. total time: 33.246s

Luego de finalizado el proceso, seleccionamos “POWER DOWN” (botones de volumen para navegar y POWER para seleccionar), apagamos el equipo y entramos “de nuevo” en modo fastboot (tecla BACK + tecla POWER juntas por 7 segundos hasta que se ponga la ventana en blanco).

Verificamos la versión de la radio: RADIO-5.17.05.23

Procedemos a cambiar el modo S-ON a S-OFF (posibilidad de escribir en la ROM del teléfono) con “revolutionary”.

– Permitiendo escribir la ROM (S-OFF)

* Se conectan a la siguiente página web: http://revolutionary.io/

En esta página, descargan la versión para Linux, es necesario que la descarguen de allí, ya que un asistente les generará el beta-key (una llave) que les permitirá ejecutar revolutionary.

Luego de descargada y generada la clave, es muy fácil, le dan privilegios de ejecución a revolutionary:

chmod +x revolutionary

Y lo ejecutan con el teléfono encendido y conectado al USB (recuerden la nota USB-Debugging activo):

* Verifiquen qué el teléfono está conectado:

adb devices
List of devices attached
SH12GPL05338 device

Al ejecutar:

./revolutionary
=============================================
| Revolutionary S-OFF & Recovery Tool 0.4pre4 |
=============================================
Brought to you by AlphaRev & unrEVOked.

Este procederá a apagar el S-ON del teléfono, te preguntará la beta-key y luego si deseas instalar ClockworkMod Recovery a lo que indicarás que si (necesario para instalar muchas otras cosas):

Do you want to download (Internet connection required) and flash ClockworkMod Recovery? [Y/n] Y
Downloading recovery for your phone (bravo)…
Downloading recovery for your phone (bravo)…Done.
Rebooting to fastboot…
Flashing recovery over fastboot…SUCCESS!

* Al finalizar, el teléfono quedará en fastboot e indicará arriba que tiene revolutionary y S-OFF, vamos a actualizar el HBOOT.

HTC-Desire-A8181-S-OFF-and-custom-recovery-installed

– Actualizando HBOOT

Para actualizar el HBOOT de nuestro HTC podemos hacer uso del listado de HBOOT disponble en la página web de AlphaRev: http://alpharev.nl/

Cada HBOOT distribuye el espacio de acuerdo a ciertos factores como disponibilidad de espacio para /system, caché o no caché y cantidad de espacio que queda para /data (datos internos de usuario); por ahora vamos a lanzar la actualización de HBOOT stock:

http://alpharev.nl/bravo_alphaspl.img

NOTA: revisen la ROM que deseen, algunas versiones de HBOOT (como CWM7) son necesarias para funcionar.

* Encendemos directamente en fastboot (botón “BACK” + botón “POWER” ó Volumen Arriba-Volumen Abajo-POWER, esperan 7 segundos y en la opción “FASTBOOT” presionan “POWER”).

* Ya en fastboot; ejecutamos:

fastboot flash hboot /home/jesuslara/android/htc/bravo_alphaspl.img
sending ‘hboot’ (512 KB)…
OKAY [ 0.089s]
writing ‘hboot’…
OKAY [ 0.137s]
finished. total time: 0.226s

* Reiniciamos el fastboot:

fastboot reboot-bootloader
rebooting into bootloader…
OKAY [ 0.162s]
finished. total time: 0.162s

* limpiamos la cache:

fastboot erase cache

Listo!, ya tenemos el equipo con HBOOT, ClockworkMod Recovery, S-OFF y Radio actualizada, ¿qué nos falta?, root y una buena ROM!.

– Rooting con S-OFF

Al contar con S-OFF y acceso vía ClockWorkMod al ROM del teléfono, ya podemos instalar superuser (http://downloads.androidsu.com/superuser/Superuser-3.0.7-efgh-signed.zip) en el teléfono, para ello simplemente descargamos superuser, lo copiamos a una memoria SD del teléfono y entramos en modo recovery del teléfono:

* Encender en recovery (Volumen Arriba-Volumen Abajo + POWER) esperar 7 segundos y con los botones de volumen seleccionar la opción RECOVERY y luego presionar POWER, entramos en modo recovery (que gracias al CWM Recovery se ve cómo esta imagen):

HTC-Desire-A8181-Revolutionary-CWM-v4.0.1.4

* Seleccionar “install zip from sdcard” (se puede usar el trackball central para navegar por el menú y hacer click)
* Seleccionar “choose zip from sdcard”
* Seleccionamos el archivo zip “Superuser-3.0.7-efgh-signed.zip”

Esperamos a que el proceso termine, presionamos botón “BACK” y luego “reboot system now”.

Y listo!, tenemos el teléfono desbloqueado, actualizada la radio, con root y con un recovery para instalar lo que necesitamos, ¿y qué necesitamos?, una BUENA ROM!, pero eso es parte de un segundo artículo!.

Happy Hacking!

[postgreSQL] Una instalación de postgreSQL básica (¡pero mejor!)

PostgreSQL: Introducción

PostgreSQL es una de las grandes maravillas del software libre, robusto, potente, altamente funcional, distribuido en miles de formas posibles (greenplum=clusterizador masivo, postgres Plus=”imitador” de Oracle,deepgreen=granjas de datawarehousing con postgreSQL, etc) puede ser optimizado (como todo lo que es software libre) de maneras inimaginables para cada necesidad específica. Entonces, ¿por qué hay gente que denigra de él? …

El primer error que comete la gente, es pretender que un sistema tan necesario como la base de datos, sea utilizado “directamente” luego de su instalación; un detalle de distribuciones Linux como Debian, es no optimizar para ningún aspecto (ya que son meta-distribuciones genéricas sin una orientación específica).

Mientras Oracle saca libros de 900 páginas de cómo optimizar al máximo hardware, sistema de archivos, sistema operativo y la base de datos como tal, mucha gente piensa “migrar” a postgreSQL ejecutando un “aptitude install postgresql” y dejándolo así … nada más perdido y lejos de la realidad.

Acá, ejecutaremos una instalación que debería ser “básica”, la más básica, para un entorno pequeño de datos, para que sus sistemas “rindan”.

Preámbulo

Uno de los aspectos más importantes es que postgreSQL “no debería” compartir acceso a disco con el sistema operativo, esto es, si es posible que postgreSQL esté en una partición distinta a “root” (incluso un disco separado, de ser recomendable); por lo que la opción “instalar y usar” no debería ser para instalaciones en producción de postgreSQL 9.1.

Hay que tomar en cuenta que postgreSQL (como cualquier otra base de datos) debería ser optimizada posteriormente a su instalación de manera correcta, una de las optimizaciones más necesarias (pero que casi nadie sigue) es gestionar los espacios de datos y separarlos del tablespace pg_default (que gestiona la DB “postgres”, la DB de “information_schema” y demás información, por lo general en “/var/lib/postgresql/9.1/main”); además, ambos deberían estar separados de la partición raíz donde está el sistema operativo.

Las optimizaciones acá realizadas son de las más sencillas a nombrar para postgreSQL, se tomó una máquina virtual en Xen 4.1 en una portátil y se optimizó de lo más básico, para demostrar, que hasta en los cambios más sencillos, pueden afectar el “performance” de aplicaciones diseñadas con postgreSQL.

Preparación primaria

Si estamos instalando un servidor de datos, lo primero que debemos pensar es en separar el montaje de /var del resto del sistema, de hecho, si podemos incluso separar /var/log sería muy apropiado; también es bueno separar /tmp (más 1Gb es innecesario) ya que si no separamos /tmp, Debian GNU/Linux utilizará un tmpfs montado en RAM para gestionar /tmp (restándonos un poco de RAM para trabajar, además que postgreSQL no utiliza la partición /tmp).

Un esquema básico podría ser:

  • / (raiz) (Debian GNU/Linux no ocupa más de 5Gb en este modo)
  • /tmp (1Gb como máximo)
  • swap (Lo necesario, aunque no mayor a 2GB en sistemas con más de 4Gb de RAM)
  • /var (2~4GB ya que será un servidor en producción)

Y de resto, un volumen lógico (LVM) que podemos modificar de tamaño de acuerdo a nuestra necesidad.

Luego de instalado el sistema, procedemos a instalar PostgreSQL.

Instalación

La instalación de postgreSQL 9.1 en Debian GNU/Linux es bastante sencilla:

  • Instalamos postgreSQL 9.1 (pero así no se debería quedar):
    apt-get install postgresql-9.1

PostgreSQL por defecto, creará una carpeta de configuración en: /etc/postgresql/9.1/main/

Y creará un espacio de datos en: /var/lib/postgresql/9.1/main/

Que no utilizaremos para nuestra base de datos, ya que crearemos un espacio propio.

Configuración inicial

Siempre es recomendable dejar el usuario “postgres” (el super-usuario de PostgreSQL) como un usuario “para accesos de emergencia”, ya que este usuario tiene garantizado el acceso a todas partes(si eres root en el sistema), es recomendable que NINGUNA base de datos tenga como “owner” el usuario postgres (y evitar en lo posible utilizarlo como usuario de acceso desde sistemas, aunque esto, obviamente lo he visto más de una vez ocurrir hasta en sistemas web).

  • Creamos un super-usuario para nuestras necesidades, primero cambiamos al usuario postgres:
    su postgres
  • Creamos un usuario, que será nuestro “super-usuario” para “nuestros” accesos, evitando así el usuario postgres:
    createuser -sPl jesuslara
    
    -- ingresamos nuestra contraseña
    Enter password for new role: 
    Enter it again:
  • Ejecutamos la consola SQL de postgreSQL:
    psql
  • Garantizamos al usuario que creaste acceso irrestricto sobre el la DB postgres:
    psql (9.1.3)
    Type "help" for help.
    
    postgres=# grant all on database postgres to jesuslara;
    GRANT

Y salimos de la consola:

postgres=#\quit

Configuración de postgreSQL

  • Accedemos al directorio /etc/postgresql/9.1/main
    cd /etc/postgresql/9.1/main
  • Si vamos a acceder de manera remota a nuestro postgreSQL, agregamos la siguiente línea al archivo pg_hba.conf:
    # la forma es:
    # host -> database (all: todas las db) -> usuario (all: todos los usuarios) -> subnet (de nuestra red) -> modo de clave
    host    all     jesuslara       192.168.100.0/24        md5
  • Habilitamos el acceso remoto en nuestro postgreSQL:

archivo /etc/postgresql/9.1/main/postgresql.conf

listen_addresses = '*'

Optimización del archivo postgresql.conf

  • Y cambiamos algunas opciones básicas del archivo postgresql.conf:
    shared_buffers = 256MB

‘shared_buffers': Es la memoria de trabajo compartida para todo el servidor postgreSQL, fíjese que por defecto en Debian GNU/Linux la opción es 24MB (y el valor por defecto si comentamos es 32MB), sin embargo, como esta es la memoria utilizada para trabajo de postgreSQL, es recomendable “al menos” el 25% de la RAM disponible (y jamás > 40%).

temp_buffers = 16MB

‘temp_buffers': La memoria temporal utilizada por cada sesión para las tablas temporarias y para apertura de tablas en cada sesión de cada base de datos, tome en cuenta que este valor dependerá obviamente de la cantidad de datos que carga cada sesión y dependerá muchísimo del sistema que se utiliza.

work_mem = 16MB

‘work_mem': uno de los valores más importantes y más despreciados, “work_mem” se refiere a la memoria temporal utilizada por cada sesión, para las operaciones de ordenamiento (ORDER BY) para las sesiones de diferenciación (GROUP … HAVING y DISTINCT) y para la gestión de hash (uniones HASH, indices HASH, hash_aggregations), si en nuestro sistema realizamos muchísimas consultas ordenadas, agrupadas, diferenciadas por cadenas, etc se crearán mucho de estos buffers de manera paralela, mientras más memoria asignemos, menos probabilidades hay que los ordenamientos y otras operaciones se hagan con archivos temporales en disco (más lentos que la memoria RAM).

max_stack_depth = 8MB

‘max_stack_depth': define el tamaño del espacio utilizado para cómputo de operaciones complejas, su valor está asociado al límite máximo que un usuario (en este caso, “postgres”) tiene derecho a reservar un stack, el valor soportado por nuestra distribución se determina con “ulimit -s”.

shared_preload_libraries = '$libdir/plpython2.so'

‘shared_preload_libraries': Permite cargar una librería específica cuando arranca el sistema, si utilizamos muchos procedimientos almacenados en un lenguaje específico (ej: python, perl, tcl, java, etc), es bueno pre-cargarla para que esté disponible cuando se utilice por primera vez. Nota: esta opción ralentiza un poco el reinicio del sistema.

bgwriter_delay = 500ms

‘bgwriter_delay': El background-writer es un proceso del servidor que se encarga de escribir a disco todos los “shared_buffers” modificados, este proceso conlleva una carga de I/O sobre el disco, su modificación permite o reducir el valor para evitar en lo más posible pérdidas de datos en equipos que pueden fallar, o su incremento permite reducir el I/O al disco duro en sistemas perfectamente protegidos.

Modificados estos parámetros básicos, vamos a modificar nuestro sistema operativo.

Optimización de Linux para postgreSQL

Una de las cosas que olvidamos “optimizar” (tunning) es nuestro sistema operativo GNU/Linux, con grupo de valores en el sysctl ya podemos ayudar “mucho” a nuestro postgreSQL.

  • Agregamos al archivo sysctl.conf

archivo: /etc/sysctl.conf

kernel.sem = 100 32000 100 128
kernel.shmall = 3279547
kernel.shmmax = 289128448
kernel.shmmni = 8192
fs.file-max = 287573
vm.dirty_bytes = 67108864
vm.dirty_background_bytes = 134217728

Nota: observe el valor de shmmax, la cantidad de “memoria máxima reservada para un shared_buffer” que puede crear una aplicación debe ser igual o mayor al valor del shared_buffer de postgreSQL, este valor está en bytes y es ~ 275MB.

La cantidad máxima de archivos que pueden abrirse en un sistema, dependerá obviamente del nivel de trabajo de la DB, durante una operación regular, la gente puede ejecutar “lsof | wc” para obtener la cantidad de archivos abiertos.

  • Y luego, las aplicamos:
    sysctl -p
    
    --
    kernel.sem = 100 32000 100 128
    kernel.shmall = 3279547
    kernel.shmmax = 289128448
    kernel.shmmni = 8192
    fs.file-max = 287573
    vm.dirty_bytes = 67108864
    vm.dirty_background_bytes = 134217728

Ya, con estos sencillos cambios, podemos reiniciar el postresql:

/etc/init.d/postgresql restart
Restarting PostgreSQL 9.1 database server: main.

Y estamos listos para crear una partición y tablespace para nuestra DB.

Creación del espacio de tablas

Creamos una partición del tamaño necesario para contener “al menos” nuestra base de datos (esta es una guía básica, no hablaremos de particiones adicionales para metadatos, para índices y demás).

Nota: en nuestro caso, la partición es /dev/xvdb1 y mide 10GB.

El “journal”, para quien no lo conoce, es la razón por la cual no existe software de “desfragmentación” en Linux, todos los sistemas operativos que lo soportan (ext3, ext4, jfs, reiserfs, xfs, zfs, etc) tienen servicios que se encargan de ordenar, desfragmentar y gestionar tanto la data como los metadatos (información acerca de los archivos y carpetas en sí), pero además, los journal cumplen otras funciones, entre ellas, recuperar desde sus logs la data que pudiera “haberse perdido” luego de un fallo de energía y/o de sistema.

En sistemas de base de datos, la data es contenida en uno o más (y diversos) tablespaces, espacios de tablas donde la data, metadata e índices es contenida, como es la base de datos la encargada de gestionar la posición de los datos en ellos, el Sistema Operativo no requiere la presencia de un journal, o al menos, de un journal más relajado y menos estricto.

Formateando la partición

  • Se formatea la partición (disco):
    mkfs.ext4 -E stride=32 -m 0 -O extents,uninit_bg,dir_index,filetype,has_journal,sparse_super /dev/xvdb1

Utilizamos ext4, porque en modo “writeback” tiene un mayor performance que XFS para almacenar los tablespaces y tiene menor propensión a fallos.

  • Habilita el journal en modo writeback:
    tune2fs -o journal_data_writeback /dev/xvdb1
  • Si simplemente desea eliminar el journal, ejecute:
    tune2fs -O ^has_journal /dev/xvdb1
  • Nota: utilice esta opción a su propio riesgo, recuerde que no tener un journal afecta de 2 modos:
  • La data no es colocada en orden en el disco, fragmentando el mismo
  • Ante un fallo de energía, el FS no podrá recuperar desde el journal las últimas actividades para recuperar esos datos.
  • Se ejecuta un chequeo de archivo básico:
    e2fsck -f /dev/xvdb1
  • Creamos la carpeta de postgresql:
    mkdir /srv/postgresql
  • Y luego se monta con las opciones que describiremos más abajo:
    mount -t ext4 /dev/xvdb1 /srv/postgresql -o  noatime,nouser_xattr,noacl,discard,nodelalloc,data=writeback,barrier=0,commit=300,nobh,i_version,inode_readahead_blks=64,errors=remount-ro

Las opciones son:

Opciones de FS Linux:

noatime

No guardar la información del timestamp del último acceso a los archivos, esta información no es necesaria ya que postgreSQL gestiona apropiadamente el acceso a los tablespaces.

nouser_xattr

Deshabilita el uso de atributos extendidos de usuario, esto es seguro en postgreSQL ya que la carpeta donde se guardan los tablespaces no requiere ninguno de esos atributos.

noacl

No utilizar atributos extendidos ni ACLs POSIX, no son necesarias ya que solamente postgreSQL tendrá acceso a los archivos en esta partición.

Opciones específicas de ext4:

nobh

ext4 asocia buffers de datos con las páginas de datos, esos bloques de cache proveen garantía de ordenamiento de los datos; “nobh” evita el uso de estos buffers de ordenamiento de datos (sólo activable con “data=writeback”).

data=writeback

No se preserva el ordenamiento de los datos, la data será escrita en el sistema de archivos solo después que la metadata ha sido guardada en el journal. Aunque hay personas que recomiendan desactivar el “journaling” del disco, esto no es recomendable pues, aunque postgreSQL gestiona correctamente los datos, los metadatos (información de los archivos y carpetas en el FS) es responsabilidad de mantenerla consistente el FS.

commit=seconds

Los datos y metadatos son escritos a disco cada “n” cantidad de segundos, el valor por defecto son 5 segundos (commit=0 es igual a dejar el valor por defecto), un valor más bajo puede mejorar la seguridad de los datos, un valor muy alto mejora el performance pero ante un fallo podría perderse datos.

barrier=0

Deshabilita el uso de barreras de escritura, las barreras de escritura fuerzan el uso de ordenamiento on-disk de los commits al journal, haciendo las caché de disco seguras de usar, pero un daño en el performance del disco.

inode_readahead_blks=n

Cantidad de inodes que el sistema de pre-lectura de ext4 lee al buffer caché, el valor por defecto de n es 32, pero un valor de 64 es normal para optimizar las lecturas.

discard

Permite decidir que realiza con los bloques que son liberados, por lo general ext4 ejecuta una operación de trim (limpieza), con esta opción, ellos simplemente son marcados como descartados, evitando la escritura innecesaria de bloques.

i_version

Permite indicar que los inodes serán de 64-bits, solo disponible si se está en un sistema a 64 bits.

  • Luego de montada de esta manera, lo fijamos en el /etc/fstab
# particion para postgresql
/dev/xvdb1 /srv/postgresql ext4 rw,noatime,errors=remount-ro,nouser_xattr,noacl,commit=300,barrier=0,i_version,nodelalloc,data=writeback,inode_readahead_blks=64,discard 0 0
  • Comprobamos:
    mount -a

Y ya estamos listos para crear el espacio de datos para nuestra DB!.

El espacio de tablas (tablespace)

Crearemos un simple espacio de tablas en nuestro optimizado sistema de archivos ext4 para contener nuestra base de datos:

  • cambiamos el propietario a la carpeta /srv/postgresql
    chown postgres.postgres /srv/postgresql
  • cambiamos al usuario “postgres” y abrimos la consola ‘psql':
    su postgres
    psql
  • En la consola, ejecutamos el comando para crear un espacio de tablas:
    postgres=# CREATE TABLESPACE db_sistema OWNER jesuslara LOCATION '/srv/postgresql';

Y listo!, ya tenemos un espacio de tablas disponible para crear bases de datos y optimizado!

Usando el espacio de datos optimizado

Para crear una DB que no esté asociada al espacio “por defecto” (pg_default) ejecutamos:

  • Crear una DB:
CREATE DATABASE sistema WITH ENCODING='UTF8' OWNER=jesuslara TEMPLATE=template0 TABLESPACE=db_sistema;

Y como verán, le pasamos el tablespace “db_sistema” que hemos creado anteriormente.

¿Alguna prueba de la eficiencia?

La configuración siguiente no se hizo en un sistema dedicado para tal, se realizó en una portátil, corriendo Xen 4.1 y en una VM con 1GB de RAM se instaló el postgreSQL con las opciones nombradas, sin embargo, es posible notar una mejora en el performance general de las consultas (y eso que son solamente optimizaciones básicas).

Para ello, creamos una DB adicional, de un sistema administrativo (migrado desde Oracle hasta postgreSQL) que un amigo amablemente me facilitó para esta prueba.

Para ello, se movieron algunas funciones de código “Visual Basic” a código PL/Python y PL/pgSQL y se creó una consulta semi-compleja, de unas 26 líneas de extensión, que unifica unas 6 tablas del sistema para calcular una simple pre-nómina (ivss, paro forzoso, caja de ahorros, faov, isrl, etc); hay que notar que en la versión “cliente-servidor” de la aplicación, la nómina de 13 mil empleados dura varias minutos hasta horas con múltiples conceptos; para nuestra versión “simplificada” (5 asignaciones y 3 deducciones y cálculo de salario integral); la consulta se ejecutó en: 33068ms Para 13674 registros.

Pero, lo mejor ocurre si lo ejecutas por segunda vez!, ya que los buffers de trabajo mantienen en cache las operaciones de hash_aggregate (necesarias para algunos de los cómputos de agregado realizados), la segunda ejecución fué: 3107 milisegundos (3 segundos)

¿13 mil cómputos de empleados en 3 segundos?, ¡Nada mal para ser una portátil!

Conclusiones

Estas optimizaciones no son ni la décima parte de las que podemos optimizar de postgreSQL, pero es un comienzo, esta guía surge de la necesidad de orientar a las personas, que creen que pueden poner un sistema en producción de un postgreSQL recién instalado, estas optimizaciones mínimas, que cualquiera puede seguir, son un ejemplo y un comienzo.

No se dejen engañar con esas personas que dicen que “postgreSQL no rinde como Oracle” y un largo etcétera de excusas baratas, si alguien en su sano juicio instala Oracle cambiando parámetros en el sysctl, modificando los valores de tunning del sistema operativo o del sistema de archivos, clusterizar al máximo e incluso hace cosas más “malandras” como generar índices “al vuelo” por aquellos DBA vagos que jamás piensan bien sus bases de datos; ¿por qué la gente no hace lo mismo con postgreSQL?, tal vez porque ser un DBA “certificado postgreSQL” es más difícil y hacer entender a la gente, cuando crean un sistema conectado a datos, que su principal preocupación no debería ser “si usar PHP o Python” sino ver de qué formas optimizarás el S.O, el sistema de archivos, las consultas, el planificador, el acceso a disco y la gestión de índices para lograr que te sea “inocuo” si la gente utiliza perl o Visual Basic como Front-End.

Al final, postgreSQL debe tener el mando de los datos de la aplicación, y aprender a “verdaderamente” instalarlo, es el primer paso!.

¡Happy Hacking!

[Linux] Instalando Debian Wheezy a una Lemote Yeeloong

Ya hace algún tiempo había creado un artículo donde explicaba como montar Debian Squeeze a una Lemote Yeeloong (portatil china con arquitectura MIPSEL).

http://phenobarbital.gnu.org.ve/doku.php/weyu:lemote:yeeloong

Lemote Yeeloong

Lemote Yeeloong

El equipo tenía Debian Squeeze, pero tenía el inconveniente de que corría en modo VESA (pues un bug del driver siliconmotion y del Xserver-xorg hacían imposible correrla en otro modo); en marzo del 2011 me enteré que habían corregido ese fallo para la última versión de X.org (1.7+ que está en Debian Wheezy) y que además paquetes como el kernel loongson-2F (el Microprocesador de la Lemote Yeeloong) y el grub para la yeeloong (grub-yeeloong) habían sido incorporados a Debian Wheezy …

Asi que, ¡Manos a la obra! …

Pasos previos

Es ALTAMENTE recomendable actualizar el BIOS a la versión 1.4.9a como lo indico en mi wiki > http://phenobarbital.gnu.org.ve/doku.php/weyu:lemote:yeeloong.

ADVERTENCIA: haga la actualización del BIOS bajo respaldo energético, una pérdida de energía durante el proceso puede dejarlo sin computador …

La versión 1.4.9a (revisión a) incorpora una serie de mejoras, como por ejemplo, poder “arrancar” directamente desde el pendrive (USB) y una mejora más que notable en el arranque del initrd (que baja de minutos, a solo segundos), se puede *personalizar* el boot splash del BIOS entre otras cosillas (revisar Wiki).

Preparando el pendrive

Usaremos un USB para instalar el equipo, en mi caso, un viejo pendrive de 256 Mb fué más que suficiente), formateamos el pendrive en EXT2, partición activa primaria y en él vamos a copiar los siguientes archivos:

El Kernel (Linux-Libre lemote)

http://archive.gnewsense.org/gnewsense-metad/installer/current/mipsel/loongson/netboot/vmlinuz-2.6.35.8-libre2-lemote

Renombrenlo simplemente a “vmlinuz” al copiarlo al pendrive.

El initrd:

http://d-i.debian.org/daily-images/mipsel/daily/malta/netboot/initrd.gz

Y bajense el archivo “rescue” para que tengan una forma de iniciar un busybox desde el pendrive:

http://dev.lemote.com/files/binary/system/v1.1.2/rescue

Tendríamos entonces los siguientes archivos:

  • vmlinuz
  • initrd
  • rescue

Ahora, creamos un “archivo de arranque” en el pendrive (para no tener que iniciar nosotros mismos, con el fatídico “SUPR+SUPR+SUPR+SUPR+ hasta que sale el prompt del BIOS PMON):

Creamos un archivo “boot.cfg” en la raíz del pendrive con la siguiente información:

default 0
timeout 3
showmenu 1

title Instalar Debian Wheezy Lemote
kernel	(usb0,0)/vmlinuz
initrd  (usb0,0)/initrd.gz
args    console=tty no_auto_cmd matchtype=lemote-yeeloong-2f-8.9inches

title   Consola de recuperacion
kernel	(usb0,0)/rescue
args    console=tty no_auto_cmd matchtype=lemote-yeeloong-2f-8.9inches

title  Iniciar desde el disco duro
kernel (wd0,0)/vmlinux-2.6.38-2-loongson-2f
args console=tty no_auto_cmd root=/dev/sda5 rootdelay=8 matchtype=lemote-yeeloong-2f-8.9inches

Esto nos permitirá tener tres opciones de menú, la primera, el arranque del Instalador (Netinstall) de Debian, la segundo, un “modo de rescate” con una busybox mínima en caso de fallas y la última, un modo para poder arrancar desde el disco duro ya instalado.

Nota: hay que asumir las rutas de los discos duros, como yo “separo” root de boot y pongo a root en la partición extendida, su numeración es “sda5″, pero si root es primaria (la segunda después de boot) sería sda2, si boot  y root quedan juntos, root será igual a sda1.

NOTA: si desean instalar desde una ISO netinstall, deben descargarla y copiarla al pendrive, de lo contrario, se conectará a Internet para descargarse todos los paquetes.

Al tener el pendrive listo, procedemos a “reiniciar”.

Instalación de Debian Wheezy

La instalación ocurre como cualquier otra, las opciones iniciales:

  • Idioma: Español
  • País: Venezuela
  • Teclado: Latinoamericano
  • Desea continuar sin cargar los módulos de núcleo? Respuesta: Si
  • Configurar red?: Si
  • Mirror de red: Estados Unidos > ftp.us.debian.org (o el que escojan, que tenga arquitectura MIPSEL)
  • Nos dirá que no cuenta con módulos LVM ni RAID, presionar “Si” y continuar.
  • Particionado: boot (hda1) de 256 MB-ext2 primaria y activa, root(hda2) de 10Gb tipo ext3 tipo lógica , (partición extendida: home(hda4) ext4 del resto del espacio, swap (hda5) de 2Gb)
  • Tasksel: Sistema Estándar y Equipo portátil
  • No se ha encontrado un kernel, desea continuar sin instalar un kernel? respuesta: Si

Adicionalmente, ha determinado que no encontró o no se instaló un gestor de arranque, por lo que debemos iniciar “manualmente” al finalizar la instalación.-

Primer arranque del sistema

Al reiniciar el instalador, lo primero que debemos hacer es presionar múltiples veces la tecla SUPR (DEL) hasta caer en el prompt (cónsola) del BIOS PMON,

PMON>

Al caer allí, ejecutamos:

dir (wd0,0)

Verán el contenido de la carpeta “/boot”.

Ejecuten para cargar el kernel Linux:

load (wd0,0)/vmlinux-2.6.38-2-loongson-2f

Y luego, indicamos que deseamos cargar DESDE el disco duro:

g console=tty root=/dev/sda5 no_auto_cmd rootdelay=8

O también pueden escoger la opción que para tal fin agregué al boot.cfg del pendrive que dice “Arrancar por el disco Duro”.

En ambos modos, terminaremos con una consola en un sistema básico.

Lo primero, configurar los repositorios:

/etc/apt/source.list

# repositorio oficial
deb http://ftp.us.debian.org/debian/ wheezy main
deb-src http://ftp.us.debian.org/debian/ wheezy main

# repositorios lemote loongson2f
deb http://www.anheng.com.cn/loongson2f/wheezy/ ./ main

Nota: el repositorio oficial “chino” a veces tiene problemas de alcance (se la pasa muchas veces caído), utilicen un repositorio “copia” más cercano como:

deb http://apt.vds-host.org/anheng/wheezy/ ./ main contrib

Definan la prioridad de los repositorios:

vim.tiny /etc/apt/preferences.d/anheng

Package: *
Pin: release o=Debian
Pin-Priority: 1

Package: *
Pin: origin www.anheng.com.cn
Pin-Priority: 2000

Package: *
Pin: origin apt.vds-host.org
Pin-Priority: 2000

Ejecuten la actualización del apt:

apt-get update

Y ya estamos listos para empezar a instalar aplicaciones.

Configuración de Entorno Gráfico

Instalamos los siguientes paquetes:

apt-get install xserver-common xserver-xorg-core xserver-xorg-video-siliconmotion

Luego de instalados, configuramos las X, creamos los archivos:

/usr/share/X11/xorg.conf.d/10-device.conf

Section "Device"
        Identifier      "Configured Video Device"
        Driver          "siliconmotion"
        Option          "HWCursor"       "true"
        Option          "VideoKey"       "45000"
        Option          "UseBIOS"        "false"
        Option          "PanelSize"      "1024x600"
        Option     	"pci_burst"      "true"
        Option          "AccelMethod"    "UXA"
        Option          "MonitorLayout" "CRT,LFP"
        Option          "DevicePresence" "true"
EndSection

/usr/share/X11/xorg.conf.d/20-screen.conf

Section "Monitor"
        Identifier      "Configured Monitor"
        Option          "DPMS"
        HorizSync    	30-70      #30-85
        VertRefresh  	50-80      #40-75
        DisplaySize     197 117   # 1024x600  130 dpi
        gamma 1.0
	modeline     	"1024x600@59.9" 49.00  1024 1072 1168 1312  600 603 613 624 -hsync +vsync
EndSection
Section "Screen"
        Identifier      "Default Screen Section"
        Monitor         "Configured Monitor"
        DefaultDepth    16                           # or 24
        SubSection "Display"
		Viewport   0 0
                Virtual   1024 600
		Depth     16
		Modes   "1024x600@60" "1024x600@54" "1024x768@60" "800x600@60"
	EndSubSection
        SubSection "Display"
		Viewport   0 0
                Virtual   1024 600
		Depth     24
		Modes   "1024x600@60" "1024x600@54" "1024x768@60" "800x600@60"
	EndSubSection
EndSection

/usr/share/X11/xorg.conf.d/30-serverflags.conf

Section "Extensions"
        Option "Composite" "Enable"
        Option "RENDER" "Enable"
        Option "DAMAGE" "Enable"
EndSection

Section "ServerFlags"
        Option  "AllowGLXWithComposite" "true"
        Option  "XAANoOffscreenPixmaps" "true"
        Option  "AddARGBGLXVisuals"     "True"
        Option  "RandR"                 "on"
        Option  "RENDER"                "on"
        Option  "AIGLX"                 "True"
        Option  "GlxVisuals"            "all"
        Option  "AutoAddDevices"        "True"
        Option  "AutoEnableDevices"     "True"
        Option  "AllowEmptyInput"       "False"
	Option  "NoPM"  		"true"
EndSection

Acerca de la configuración de video

El driver siliconmotion no es un driver muy potente, de hecho, si desean un máximo performance para las actividades cotidianas (abrir ventanas, etc), el modo recomendado es:

  • Modo: XAA
  • Resolución: 16 bits

Instalando el entorno de escritorio

Ejecutamos:

mkfontdir /var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType

E instalamos:

aptitude install mesa-utils libgl1-mesa-glx

E instalamos un entorno de escritorio, por ser gnome tan pesado, me he decidido por slim con lxde:

aptitude install lxde slim desktop-base

Generar el arranque

Instalamos grub-yeeloong:

aptitude install grub-yeeloong

Y luego, creamos un archivo /boot/boot.cfg

default 0
timeout 3
showmenu 1

title Boot with Grub
        kernel (wd0,0)/grub.elf
        args console=tty no_auto_cmd

title GNU/Linux Debian Wheezy 2.6.38 Lemote
        kernel vmlinux-2.6.38-2-loongson-2f
        args console=tty root=/dev/sda5 no_auto_cmd matchtype=8.9 acpi=force apic vga=792 video=siliconmotion:1024x600

Tome nota, que si colocamos “showmenu” en 0 y timeout en 1, no mostrará menú de arranque PMON y caerá directamente en el grub de Debian.

Editamos las flags de GRUB (/etc/default/grub):

GRUB_CMDLINE_LINUX=”console=tty root=/dev/sda5 resume=/dev/sda6 splash  no_auto_cmd matchtype=8.9 acpi=force apic lapic idebus=66 vga=792 video=siliconmotion:1024×600″
 

Nota: root=”” apunta a root (/) de nuestro sistema, resume=”” apunta a la partición SWAP.

Actualizamos grub:

update-grub

Y reiniciamos el equipo.

Aplicaciones de usuario

Como sabrán, el entorno de escritorio por defecto en Debian es GNOME y la mayoría de los meta-paquetes vienen orientados en ese aspecto, así que instalé por mi parte LXDE, SLIM y entonces, queda por instalar aplicaciones, en este capítulo, usaré desde aptitude la instalación de tareas de tasksel:

aptitude install ~t^laptop ~t^desktop

La primera instalará network-manager y el resto de aplicaciones (como acpid) para portátiles, la segunda, las aplicaciones de escritorio comunes como LibreOffice, Iceweasel, gimp, totem, gnash, etc.

Optimizaciones varias

Prelink, Preload, Readahead 

Prelink, preload y readahead, insserv, son 4 aplicaciones que mejoran notablemente el performance general del equipo:

Prelink: Modifica las librerías, para que carguen más rápido (pre-binding)

Preload: Carga en RAM las aplicaciones y librerías más usadas, para un inicio más rápido.

Readahead-Fedora,Insserv: Re-organizan los servicios para mejorar el arranque inicial del equipo.

Instalamos:

aptitude install prelink preload readahead-fedora insserv

Editamos:

vim.tiny /etc/default/readahead-fedora

Cambiamos:

# enable readahead at system startup

READAHEAD=”yes”

Y descomentamos y modificamos el IO:

IO_PRIORITY=”real-time”

Editamos:

vim.tiny /etc/default/prelink 

Modificamos:

PRELINKING=yes

 Luego, ejecutamos:

prelink --all

Para que haga un análisis de todos los ejecutables y librerías (puede tardar unos minutos).

Luego, editamos:

vim.tiny /etc/init.d/rc

Y cambiamos el nivel de concurrency a:

CONCURRENCY=makefile

Modificaciones del Sysctl

Sysctl permite cambiar dinámicamente opciones del sistema (en general), de módulos y del kernel en sí mismo, las opciones a habilitar tienen que ver con la reducción del impacto general sobre la memoria virtual del kernel, la reducción de uso de SWAP, entre otras.

vim.tiny /etc/sysctl.conf
# —-
#disminuir el uso de swap
vm.swappiness=1

 

#shared buffers
kernel.shmmni = 4096
kernel.shmall = 536870912
kernel.shmmax = 2147483648

 

#cantidad de hilos maximos
kernel.threads-max = 98006

 

#cantidad de archivos máximos abiertos
fs.file-max = 307615
fs.aio-max-nr = 1048576

 

# frecuencia de flush del demonio writeback
vm.dirty_background_ratio = 10
# porcentaje de RAM que será usada para memoria paginada (dirty memory)
vm.dirty_ratio=25
# para equipos con poca RAM, se usará solamente el 40% de la RAM como cache
vm.vfs_cache_pressure = 40
# wine, qemu y otras aplicaciones, requieren mapear Low-memory
vm.mmap_min_addr=4096
# una aplicacion no podrá usar más de 4096Kb de memoria baja
# Habilitamos el schedule autogroup y su velocidad de respuesta
kernel.sched_autogroup_enabled=1
kernel.sched_rt_runtime_us = 960000
# —

* ejecutamos:

sysctl -p

Para aplicar los cambios.

Performance del Disco

Instalamos hdparm

aptitude install hdparm

Luego de mejorar el performance de los sistemas de archivos, habilitamos 2 cosas importantes al disco duro:

hdparm -W1 -A1 /dev/sda

-W1 habilita el caché del disco duro

agregamos la siguiente información al /etc/hdparm.conf

/dev/sda {
lookahead = on
write_cache = on
}

Y ejecutamos con el comando, para que se active:

hdparm -q -W1 -A1 /dev/sda

CGROUPS

Es una técnica del Kernel Linux para aislar, solapar, limitar o contabilizar todos los recursos hardware de la máquina (CPU, Memoria RAM, Disk I/O) en forma de contenedores de procesos aislados, con el fin de mejorar la eficiencia del kernel Linux, al paralelizar de manera óptima los procesos.

Esta técnica permite priorizar tareas y organizarlas jerárquicamente por criterios definidos, mejorando notablemente el performance general del sistema.

Instalaramos lo que necesitamos para administrarlos en GNU/Linux (> 2.6.38)

aptitude install cgroup-bin libcgroup1 libpam-cgroup

* editamos el archivo cgconfig e indicamos donde se encuentra la ruta donde se montarán los CGROUPS:

vim.tiny /etc/cgconfig.conf

En Debian esa ruta es:

/sys/fs/cgroup/

Quedando:

mount {
all = /sys/fs/cgroup;
}

Editamos el cgrules:

vim.tiny /etc/cgrules.conf

Y creamos un grupo “especial”, llamado default, donde se agregarán los procesos de todos los usuarios (procesos no de sistema):

* * default/

Editamos:

vim.tiny /etc/pam.d/common-session

Y agregamos el pam_cgroup, esto con el fin de que las tareas de usuario, sean agrupadas y gestionadas por el control CGROUP:

session optional pam_cgroup.so

libpam-cgroup clasifica los trabajos interactivos que implican inicio de sesión.

Inittab

Reducimos las consolas TTY al mínimo (cada cónsola consume recursos):

Editamos: /etc/inittab y comentamos:

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
#3:23:respawn:/sbin/getty 38400 tty3
#4:23:respawn:/sbin/getty 38400 tty4
#5:23:respawn:/sbin/getty 38400 tty5
#6:23:respawn:/sbin/getty 38400 tty6

Dejando solo las 2 primeras.

Luego de todos los cambios, reiniciamos el equipo.

Limpieza General

Eliminé los siguientes paquetes (no los necesito en mi portatil de escritorio)

aptitude purge rpcbind portmap exim4 exim4-base exim4-config exim4-daemon-light

Limpiamos la caché del aptitude

aptitude clean

Instalamos localepurge y deborphan

aptitude install localepurge deborphan

Y limpiamos paquetería innecesaria con deborphan:

aptitude purge `deborphan` `deborphan --find-config` `deborphan --libdevel` `deborphan --guess-all`

TODO:

* Instalar la temática Canaima

* Hacer un kernel tunning extra-personalizado y monolítico para la Lemote Yeeloong

* Hacer que el driver siliconmotion pueda dar direct-rendering sin usar Software

* Mejorar el rendimiento general del sistema y las flags del filesystem según > https://phenobarbital.wordpress.com/2011/05/13/linux-debiancanaima-en-soneview-n110-mini-laptop-classmate/

 

* Hacer mediciones de benchmark y performance

Ver más:

http://phenobarbital.gnu.org.ve/doku.php/weyu:lemote:yeeloong

http://wiki.debian.org/DebianYeeloong/HowTo/Install

http://romanrm.ru/en/loongson/debian

Creando un instalador de Debian Squeeze en un pendrive USB (actualizado)

Hasta Debian Lenny se tenía que usar un archivo boot.img.gz y el comando zcat para construir un instalador de Debian (incluido Squeeze testing).

Ahora, con el nuevo Debian Installer Hybrid, simplemente descargamos la ISO de nuestra preferencia (en mi caso, descargué la multi-arch, que permite instalar en equipos de 32 y 64 bits):

http://cdimage.debian.org/debian-cd/6.0.0/multi-arch/iso-cd/debian-6.0.0-amd64-i386-netinst.iso

Y luego un simple “dd” les permitirá copiar la ISO al USB drive sin problemas:

dd if=debian-6.0.0-amd64-i386-netinst.iso of=/dev/sdX

Donde X es la unidad física (sin particiones, ejemplo /dev/sdb, /dev/sdc, etc)

Y verán algo como esto:

dd if=debian-6.0.0-amd64-i386-netinst.iso of=/dev/sdb
844028+0 records in
844028+0 records out
432142336 bytes (432 MB) copied, 102,212 s, 4,2 MB/s

Y listo!, ya pueden instalar víaUSB Debian GNU/Linux sin problemas …

¿Sencillo no?

 

GNU Debian Squeeze será estable (por fin)

Luego de una espera bastante larga, el grupo de la distribución Debian ha anunciado la finalización de las últimas pruebas de Debian Squeeze (versión 6) y le han puesto fecha al lanzamiento de la versión estable:

5 y 6 de Febrero

El anuncio de la finalización de pruebas del release candidate 2 fueron realizadas el 19 de Enero, con lo que la fijación de la fecha definitiva (fijada el día 25) queda pautada y ya -por fin- tendremos a Debian Squeeze como próximo estable.

Debian Squeeze trae algunas novedades (que comenté meses atrás cuando comenté su congelamiento), pero considero que las más destacadas son:

* Ambiente multi-arquitectura (cross-architecture y cross-compiling) para arquitecturas heterogeneas (no solamente i386/amd64)

* Primer kernel No-linux estable (freeBSD)

* Limpieza de la gran cantidad de compatibilidad -hacia atrás- que tenía a Debian estancado, entre ellos el uso de deb ver. 3 y la eliminación de módulos deprecated (como dsp y video4linux versión 1)

Para más información acá.

¿Qué pasará ahora?

* La versión estable (squeeze) reemplazará a Lenny (ahora old-stable)

* La Old-Stable (etch) desaparecerá de todos los repositorios del planeta (será un grato recuerdo)

* La versión testing pasará a llamarse wheezy (los extraterrestres de 3 ojos)

* Esperemos que Canaima GNU/Linux prontamente sea basada en Squeeze

* Nadie salvará a Sid de ser un enfermo inestable …

Canaima/Trisquel vs. Debian: Distribuciones para usuario final

Estan son ideas aisladas que logré hilvanar luego de mi participación en el “Dia Debian Barquisimeto” y es una reflexión sobre hacia donde debemos llevar a los nuevos usuarios y a la distribución nacional Canaima …

Puede que hiera algunas susceptibilidades, pero considero que es discusión necesaria …

Mi concepto de usuario final …

¿A quién considero yo un “usuario final”?, es aquella persona que utiliza el computador como una herramienta, lo ayuda en sus quehaceres y le permite navegar en Internet, conectarse a redes sociales y por qué no, jugar a la granjita …

Un usuario final usa la computadora como quien usa un celular, un microondas o un vehículo, el 80% de las personas que conducen no tienen por qué saber mecánica para poder manejar … hay quien te dirá que “es necesario saber al menos lo básico”, pero todos sabemos que no lo es …

Bueno, claro, te quedarás varado en espera de una grua si no sabes siquiera lo más básico, pero comprendamos que esto no será la mayor parte del tiempo …

Por el contrario, nosotros vivimos de esto (al menos yo) y pues es lógico que necesitamos saber muchisimo más que el resto de los usuarios de computadoras …

¿Qué es GNU/Linux Debian?

Debian es una meta-distribución, como tal, es genérica y trae todo lo que necesitas para convertirla en TODO lo que necesitas, desde servidores a dispositivos imbuidos, pasando por teléfonos y como no, estaciones de trabajo y escritorio …

¿Puede ser Debian (o una distribución basada nativamente en Debian sin personalizaciones) una distribución apta para el usuario final nombrado líneas más arriba? …

Y mi respuesta es … NO!

¿Qué diferencias hay?

Notemos algunas diferencias que a la primera se daría cuenta cualquier persona:

  • Ubuntu ya trae todo el firmware privativo instalado para *casi* cualquier dispositivo, activar tu inalámbrica pasa por simplemente poner en *on* el switch de la misma.
  • En Trisquel no vendrán esos binarios, así que cierto hardware no funcionará, pero en su defecto, trae un kernel libre mucho más ligero (hay menos mutexes y paradas del kernel esperando la inicialización de binarios externos) que además, trae el parche (por defecto) de Ingo Molnar para respuesta “realtime” preemptiva, esto nos da una sensación de uso más “suave” del equipo y una mejor respuesta ante aplicaciones críticas de usuario (edición de audio o de video, 3D, blender y otras aplicaciones).
  • Ubuntu *por defecto* tarda unos 15 a 25 segundos en iniciar, un Debian Squeeze *por defecto* tarda unos 25 a 30 segundos en iniciar (en mi hardware, sin tunning), Trisquel tarda unos increíbles 12 segundos en iniciar.
  • Debian trae un kernel compilado para arquitectura i386 (si usan amd64, al menos podrán contar con un kernel x86_64) con una velocidad de reloj de latencia de 300Mhz, una respuesta pre-emptiva de 250Mhz, con la mayoría del tiempo de proceso dedicado a los servicios y no al espacio de usuario.
  • Ubuntu trae un kernel “personalizado” con respuesta de 700Mhz y una latencia pre-emptiva de 1000Mhz.
  • Trisquel trae un kernel “dietético” sin binarios privativos que deban ser inicializados y ralentizando el kernel, con una velocidad de 1000Mhz y tickless (respuesta pre-emptiva en tiempo real, menor a 100 ms).

¿Por qué basar una distro en Debian?

Una distribución de GNU/Linux debería estar basada en Debian siempre y cuando se vayan a tener varios “targets” o destinatarios y tipos de usuarios, la gente de gNewSense cambió de Ubuntu a Debian porque entre otras cosas sugirieron en la lista de discusión la “posibilidad” de crear proyectos como *servidores libres* (gNewSense con configuración óptima para servidores pero usando un kernel GNU Linux-Libre).

Sin embargo, basar una distro en Debian cuando su destino final es “el usuario final” (como Canaima Linux) tiene como consecuencia un trabajo “mayor” de los organizadores pues estos tendrán que poner a punto las configuraciones de distintos paquetes de software (para que el usuario no tenga que unir *a mano* el PulseAudio con el Jack o tenga que configurar a *al pelo* su tarjeta de video).

Si al final, tomamos los paquetes y el núcleo de Debian y le hacemos un “maquillaje estético” a la distribución, le estaremos instalando un Servidor de archivos (y no una estación de trabajo óptimizada) al usuario, con las consecuencias de lentitud, nivel de respuesta y adaptación del usuario …

Y ni hablar cuando esa distribución se base en la versión *estable* de GNU/Linux Debian.

Pero, ¿Por qué no puede configurarla a su gusto el usuario?

Si, yo uso Debian, anteriormente usaba en el mismo entorno y partición una versión “desktop” con kernel personalizado (vanilla-flavor) para “navegar y jugar” y en esa misma partición, montaba Xen-Linux-System y toda mi plataforma para trabajar (VMs con postgreSQL, mySQL y MariaDB, Samba, etc); solo diferenciados por el arranque del GRUB, ahora las configuraciones de tunning y *performance* para una *óptima* versión escritorio y una *óptima* versión de servidor son tan distintas que llegué a la conclusión que tener 2 entornos completamente separados, un Debian para trabajar y un GNU Trisquel para jugar, navegar y transmitir por RadioGNU era algo necesario.

Claro, yo en mi GNU/Linux Debian tengo aún esa “versión optimizada para escritorio” donde a pelo y configurando “a lo agrícola y artesanal” he modificado:

  • Modificado el GRUB para una larga lista de opciones de optimización
  • Fijar los fallos de asignación MTRR para una mejor respuesta del video
  • Cambios para usar nativamente la GPU y aceleración openGL en todo el entorno de escritorio y video
  • Modificaciones en los parámetros de HDPARM, para sacarle el máximo provecho a mi disco SATA-2
  • Apagar la acústica del disco duro, no me importa que suene, pero va más rápido
  • Modificado las variables de sysctl para que gestione mejor la memoria de userspace.
  • Uso y configuración de preload en Debian para una carga optimizada de aplicaciones (preload y prefetch vienen ya configurados por defecto en Ubuntu y Trisquel)
  • He cambiado el comportamiento en sysctl del “swappiness” ya que con 4Gb de RAM en un entorno de escritorio, es innecesario que Linux use Swap.
  • He desactivado cosas que no uso (como IPv6) para mejorar la velocidad en general de la red.
  • Re-optimización de módulos del kernel (como mi inalámbrica, para que soporte 150Mbps, ya que tengo un Access Point Wireless-N).
  • He recompilado algunas aplicaciones usando directivas de pre-compilación para mi arquitectura específica (-march=nonona, la arquitectura de 64-bits de Intel, si quieres 32-bits usas prescott) y muchas las compilo con “-O3″ (máximo performance).
  • Uso de aceleración GL y no *por software* en las aplicaciones de video (que lo soportan), esto ahorra CPU una barbaridad.
  • Uso de un kernel RT (realtime), he parcheado (Ingo Molnar patch) un kernel vainilla 2.6.33-7 y he obtenido rendimiento realtime, con respuestas menores a 100 ms en las actividades directamente dedicadas al Kernel, incluso he podido iniciar IDJC en modo “real time” sin obtener XRUNS, claro, eso en Trisquel ya viene “por defecto” y no tuve que parchear ni compilar Kernel.

La conclusión a esta larga lista de cambios, es que mi estación de trabajo (donde programo, etc) GNU/Linux Debian es tanto o más eficiente que un Ubuntu o Trisquel corriendo en esta misma PC.

Claro, la cantidad de cambios y personalizaciones que tuve que hacer para llegar al *punto óptimo* de ejecución de mi portátil raya en las personalizaciones de sistemas como Linux Arch o Gentoo Linux.

A la vista del “eye-candy”

Mucho del escritorio GNU/Linux, sobre todo KDE4+plasma o Gnome+Compiz, vende *gracias* a su capacidad de asombrar con el “eye-candy”; pero como afirmo allá arriba, no es lo mismo mi escritorio, donde con varios “tweaks” he hecho que el sistema de video use la GPU y la aceleración por hardware del video (y no el “indirect-rendering” que usa emulación de aceleración 3D por software) al de un usuario con un “Canaima básico” usando intel-vesa con framebuffer por software que pensará que su computador es un “pote” inútil o que Linux es “dificil” porque para lograr esos *tweaks* requiere conocer de física nuclear y matemáticas avanzadas y que por tanto “esa cosa difícil del Linux” no es para él.

¿Y eso tiene algo de malo?

Para un usuario final si lo tiene, no podemos pretender que todo el mundo sepa mecánica para evitar las congestiones por gruas, tampoco podemos pretender que la gente monte un GNU/Linux Debian (o un Canaima: Debian Lenny Edition) y se la pase *paseando* todos los días por foros o listas de correo de soporte preguntando una y otra vez como se configura el modem 3G de movistar para conectarse a Internet en Canaima Linux.

Es injusto (por partida doble) que la gente no cuente (son simples scripts que se pueden correr en conjunto con los scripts *laptop-detect* que permitirían personalizar el hardware de manera automática) con equipos “óptimos” para su día a día; pero que además, tengan que enfrentar listas de correo de soporte para responder a sus problemas, una y otra y otra vez, para llenar egos inflados de Debianitas Pro-Canaima que quieren siempre responder a esas preguntas para “demostrar que saben” …

Al final de cuentas, una persona ve un GNU/Linux Debian como el mio y lo compara con su Canaima y siempre terminan llenos de frustración por la imposibilidad de “enchufar su modem 3G” y hacerlo funcionar con un simple “asistente gráfico” y en vez de recibir esas mejoras (o scripts automáticos que lo ayuden en su personalización) recibe respuestas en listas de correo donde le piden que abra una consola y utilice el comando wvdial.

Un usuario final, ni siquiera sabrá para qué le sirve una consola.

Activando Wacom Tablet PC en Trisquel/Ubuntu

Como lo dije en un artículo anterior, he cambiado de Debian Squeeze a GNU/Linux Trisquel y han cambiado algunas cosas como se configura todo (se nota que es hijo de Ubuntu, nieto de Debian), entre ellas como configurar correctamente la Wacom Tablet PC.

Habilitando opciones de la Wacom en Ubuntu y GNU/Linux Trisquel

Aunque los dispositivos wacom son detectados y habilitados en Ubuntu y Trisquel, no todas las opciones son habilitadas, sin embargo, la receta tradicional “Debian” de colocar un archivo xorg.conf ya no es útil.

Esto es debido a que en nuevas versiones de Debian (squeeze), Ubuntu y derivados (ej. Trisquel) se recomienda que se utilice el directorio /usr/lib/X11 para todo lo que tenga que ver con configuración del sistema X.
Dentro, encontraremos un directorio llamado xorg.conf.d/ donde siguiendo las reglas de carga de muchas configuraciones, (números más bajos cargan primero).
Una lista del directorio:

-rw-r--r-- 1 root root  946 2010-03-31 01:59 05-evdev.conf
-rw-r--r-- 1 root root  766 2010-04-15 17:07 10-synaptics.conf
-rw-r--r-- 1 root root  139 2010-04-22 10:44 10-vmmouse.conf
-rw-r--r-- 1 root root 3201 2010-07-03 20:46 10-wacom.conf

10-screen.conf y 10-wacom.conf fueron creados para configurar la tarjeta de video y el dispositivo wacom respectivamente (aunque podria ser 15-wacom, ya que debería ser configurado luego de evdev (teclado/ratón) del synaptic y de la tarjeta de video).

el archivo 10-wacom.conf contiene:

#clase que identifica a todos los dispositivos wacom
Section "InputClass"
 Identifier "Wacom class"
 MatchProduct "Wacom|WACOM"
 MatchDevicePath "/dev/input/event*"
 Driver "wacom"
EndSection

# N-Trig Duosense Electromagnetic Digitizer
Section "InputClass"
 Identifier "Wacom N-Trig class"
 MatchProduct "HID 1b96:0001"
 MatchDevicePath "/dev/input/event*"
 Driver "wacom"
EndSection

Section "InputClass"
 Identifier "Wacom serial class"
 MatchProduct "Serial Wacom Tablet"
 Driver "wacom"
 Option       "ForceDevice"   "ISDV4"
 Option       "USB"            "on"
 Option       "Button1"        "1"  # El click con el stylus sera boton primario de raton
 Option       "Button2"        "2"  # El boton del lapiz es el click central
 Option       "Button3"        "3"  # El borrador hara de boton derecho
 Option       "TopX"           "27"
 Option       "TopY"           "-21"
 Option       "BottomX"        "24641"
 Option       "BottomY"        "18504"
 Option       "tilt"           "on"  # add this if your tablet supports tilt
 Option       "Threshold"      "5"   # the official linuxwacom howto advises this line
EndSection

#esta seccion permite que la wacom se comporte como cursor
Section "InputDevice"
 Driver        "wacom"
 Identifier    "cursor"
 Option        "Device"        "/dev/ttyS0"
 Option        "Type"          "cursor"
 Option        "ForceDevice"   "ISDV4"
 Option        "Mode"          "Absolute"
EndSection

Luego de creado el archivo, reiniciamos las X o simplemente reiniciamos el equipo.

Luego de reiniciadas las X, encontraremos en el archivo log /var/log/Xorg.0.log información sobre la carga de la wacom:

(II) config/udev: Adding input device Serial Wacom Tablet (/dev/ttyS0)
(**) Serial Wacom Tablet: Applying InputClass "Wacom serial class"
(II) LoadModule: "wacom"
(II) Loading /usr/lib/xorg/modules/input/wacom_drv.so
(II) Module wacom: vendor="X.Org Foundation"
 compiled for 1.7.6, module version = 0.10.5
 Module class: X.Org XInput Driver
 ABI class: X.Org XInput driver, version 7.0
(**) Option "Device" "/dev/ttyS0"
(II) Serial Wacom Tablet: type not specified, assuming 'stylus'.
(II) Serial Wacom Tablet: other types will be automatically added.
(**) Serial Wacom Tablet: always reports core events
(**) Option "TopX" "27"
(**) Option "TopY" "-21"
(**) Option "BottomX" "24641"
(**) Option "BottomY" "18504"
(**) Option "Button1" "1"
(**) Option "Button2" "2"
(**) Option "Button3" "3"
(II) Serial Wacom Tablet: hotplugging dependent devices.
(**) Option "Device" "/dev/ttyS0"
(**) Serial Wacom Tablet eraser: always reports core events
(**) Option "TopX" "27"
(**) Option "TopY" "-21"
(**) Option "BottomX" "24641"
(**) Option "BottomY" "18504"
(**) Option "Button1" "1"
(**) Option "Button2" "2"
(**) Option "Button3" "3"
(II) XINPUT: Adding extended input device "Serial Wacom Tablet eraser" (type: ERASER)
(**) Option "StopBits" "1"
(**) Option "DataBits" "8"
(**) Option "Parity" "None"
(**) Option "Vmin" "1"
(**) Option "Vtime" "10"
(**) Option "FlowControl" "Xoff"
(WW) Serial Wacom Tablet eraser: Waited too long for answer (failed after 3 tries).
(WW) Serial Wacom Tablet eraser: Waited too long for answer (failed after 3 tries).
(II) Serial Wacom Tablet eraser: serial tablet id 0x90.
(--) Serial Wacom Tablet eraser: using pressure threshold of 7 for button 1
(--) Serial Wacom Tablet eraser: Wacom General ISDV4 tablet speed=38400 maxX=24576 maxY=18432 maxZ=127 resX=2540 resY=2540  tilt=disabled
(--) Serial Wacom Tablet eraser: top X=27 top Y=-21 bottom X=24641 bottom Y=18504 resol X=2540 resol Y=2540
(II) Serial Wacom Tablet: hotplugging completed.
(II) XINPUT: Adding extended input device "Serial Wacom Tablet" (type: STYLUS)
(--) Serial Wacom Tablet: top X=27 top Y=-21 bottom X=24641 bottom Y=18504 resol X=2540 resol Y=2540
Nota: (**) es tomado de un archivo de configuración, (–) es asumido por el controlador, (WW) es una advertencia y (II) es una sección informativa.

Tomen en cuenta que en archivo Xorg.0.log, una línea que empieza en (**) indica que fué tomada de un archivo de configuración, con eso sabemos que nuestro archivo funciona correctamente.

El comando xsetwacom y la configuración de la tablet

Aunque por lo general los comandos de configuración agregados al xorg.conf.d son permanentes, podemos por ejemplo, cambiar el threshold, la sensilibidad de presión al click u otras opciones (incluso, rotar la posición de los botones) sin necesidad de cambiar las X, simplemente usando el comando xsetwacom.

El comando xsetwacom tiene la siguiente sintaxis:

xsetwacom set "DEVICE" option "value"

El nombre del dispositivo lo podemos descubrir con:

> xsetwacom --list

La respuesta sería:

Serial Wacom Tablet eraser ERASER
Serial Wacom Tablet STYLUS    

Esto muestra que tenemos un ERASER (borrador) llamado “Serial Wacom Tablet eraser” y un STYLUS (apuntador) llamado “Serial Wacom Tablet”

Con ambos valores, construimos nuestro archivo xinitrc (uno por usuario)

/~.xinitrc

En mi caso, el archivo estará en /home/jesuslara/.xinitrc

xsetwacom set "Serial Wacom Tablet eraser" Suppress "2"
xsetwacom set "Serial Wacom Tablet eraser" RawSample "4"
xsetwacom set "Serial Wacom Tablet eraser" ClickForce "6"
xsetwacom set "Serial Wacom Tablet eraser" PressCurve "0 0 100 100"
xsetwacom set "Serial Wacom Tablet" TPCButton "on"
xsetwacom set "Serial Wacom Tablet" Button3 "Button 3"
xsetwacom set "Serial Wacom Tablet" Button2 "Button 3"
xsetwacom set "Serial Wacom Tablet" Button1 "Button 1"
xsetwacom set "Serial Wacom Tablet" Suppress "2"
xsetwacom set "Serial Wacom Tablet" RawSample "4"
xsetwacom set "Serial Wacom Tablet" ClickForce "6"
xsetwacom set "Serial Wacom Tablet" PressCurve "0 0 100 100"
xsetwacom set "Serial Wacom Tablet eraser" bottomy "18504"
xsetwacom set "Serial Wacom Tablet eraser" bottomx "24641"
xsetwacom set "Serial Wacom Tablet eraser" topy "-21"
xsetwacom set "Serial Wacom Tablet eraser" topx "27"
xsetwacom set "Serial Wacom Tablet" bottomy "18504"
xsetwacom set "Serial Wacom Tablet" bottomx "24641"
xsetwacom set "Serial Wacom Tablet" topy "-21"
xsetwacom set "Serial Wacom Tablet" topx "27"
# run the primary system script
. /etc/X11/xinit/xinitrc

Tenemos opciones como:

ClickForce: fuerza del click, menos presión y se considerará una selección, más y se considerará un click
PressCurve: depende obviamente de los niveles de sensibilidad, una Wacom Intuos o Bamboo tienen 256 niveles de presión, mi tablet solo tiene 100 niveles de presión
topy – topx – bottomy . bottomx : coordenadas en pixeles que permiten cuadrar el dispositivo (las obtuve con una herramienta de calibración que compilé para wacom)

Hay muchisimas más opciones, aunque realmente mi tablet pc no tiene tantas como una Wacom Intuos o una Wacom Bamboo.

Usando myPaint

myPaint (www.mypaint.info) es una herramienta completamente libre y multi-plataforma, para dibujo usando una tableta digitalizadora, posee una gran colección de pinceles, brochas y efectos, que pueden ser personalizados y guardados en paletas diferentes, muy útil para artistas, ya que de hecho, son artistas como Martin Renold y Artis Rozentāls quienes dieron origen al proyecto, como una versión “libre” de Corel Painter.

Un screenshot:

Es una interfaz bastante sencilla, soporta capas, múltiples pinceles, patrones y brochas, permite guardar varios bocetos en un mismo archivo y recuperarlos y a diferencia de GIMP, tiene un especial reconocimiento a la sensibilidad de presión, recorrido, velocidad y actividad de la tableta digitalizadora.

Usando "Lapiz" en myPaint

Otro punto a favor de myPaint es que reconoce cuando el borrador está sobre el lienzo y me permite borrar de manera natural.

Incluso hay un grupo en Flickr de dibujantes y diseñadores con la herramienta.

Cambiando de Debian a Trisquel: Consejos

Preámbulo

Luego de experimentar algunos problemas en Debian Squeeze y bajo la experimentación de algo más “amigable al usuario” pero aún así libre, he cambiado mi distribución de escritorio (de uso regular) de Debian Squeeze a GNU/Linux Trisquel, una versión basada en Ubuntu pero sin binarios privativos en el Kernel y sin aplicaciones no-libres.

A pesar de lo que la gente piense, la distribución funciona “bastante bien” en mi portatil, incluso se nota que es una distribución para “usuario final” puesto que tiene algunas ventajas sobre Debian Squeeze:

Kernel realtime

* Kernel Realtime con parche de tickless Kernel: todo ese palabrerío loco significa que el soporte a actividades en “tiempo real” y el parche para un kernel sin “tiempos muertos” es agregado Por defecto dentro del kernel libre de Trisquel, esto trae como consecuencia que las actividades de usuario (acceso a dispositivos, sonido, recursos en userspace) se haga en tiempo real (y no cada 300 mhz como ocurre con el kernel oficial de Debian Squeeze), ¿ventajas de esto?:

  • Gózenla!: El equipo levanta en solamente 12 segundos, no el minuto y algo más que ya estaba tardando mi Debian Squeeze.
  • Soporte para PulseAudio y Jackd en tiempo real, gestiono mi radio por Internet de Radio GNU por ahí (es como tener Ubuntu Studio, pero libre)
  • El acceso a dispositivos es rápido, la digitalizadora Wacom de la tablet PC funciona que es una maravilla.

Ningún soporte a Binarios privativos

No se crean que podrán “ensuciar” este kernel, un script “de-BLOBber” remueve toda posibilidad de inclusión de binarios dentro del kernel, esto hace que por ejemplo, el módulo del kernel “iwlagn” que levanta la inalámbrica, aún cuando el firmware se encuentre en /lib/firmware, fallará con un error “module [deblobbed], don’t load device” y pues, estoy sin tarjeta inalámbrica en GNU/Linux Trisquel.

Esto es una ventaja aunque no lo crean, ver que la mayoría de los fabricantes han hecho un equipo (en mi caso un Lenovo X61 tablet PC) que *casi* no necesita binarios privativos, todo funciona:

  • Bluetooth funciona por defecto y “out of the box” en trisquel
  • El módulo SDHCI levanta perfectamente la lectora de memorias SD
  • El Firewire funciona, lo probé con una camara de video Samsung que tengo.
  • La Wacom funcionó al terminar de instalar, faltó configurar algunas cosas
  • Thinkpad buttons funcionan, ya asocié el Thinkvantage button para que abra un Nautilus
  • La aceleración 3D la detecta en modo UXA, la he cambiado a modo EXA para soportar AIGLX para compiz
  • La salida de video funciona dual y correctamente

Solamente faltó probar el infrarrojo, el modem 56K y el lector de huellas dactilares, pero recuerdo que ninguno requería binarios privativos.

Mientras, buscaré una tarjeta inalámbrica mini-PCI-express que me permita usarla sin binarios, como por ejemplo, las atheros o las realtek.

Como Ubuntu, pero sin Ubuntu …

Realmente Trisquel es un Ubuntu completamente libre, como gNewSense, hay gente que pensaría que al no permitir cosas “multiverse” privativas o “non-free” quedaríamos “mochos” y sería peor que usar Debian Squeeze; pero admito que estaba equivocado, cosas que encontraremos interesantes:

  • Reemplazo de gnome-audio por PulseAudio: el gestor de pulseaudio es mucho más óptimo que el que usa Debian por defecto (al menos hasta squeeze), alguien acá pondría que podrías tener pulseAudio en Debian, claro, pero acá viene por defecto y ya configurado.
  • BlueMon carga por defecto: si detecta bluetooth, carga por defecto, en mi Debian Squeeze me tocó montarlo y además, encender la antena bluetooth con un cat “enable” al /proc del device, algo “no muy intuitivo” y “user-friendly”
  • Levante más rápido: claro, a lo Debian/Ubuntu, si esto fuera un Arch Linux, los servicios no levantarían a menos que uno lo solicitara; pero al menos prelink y preload vienen “por defecto” por lo que el arranque de ejecutables y el “levante” de librerías es más rápido.
  • Uso de ext4 por defecto en el root; al igual que en Ubuntu, soporta ext4 para usarlo en root; en Debian había que crearla como ext3 y *luego* convertirla a ext4.
  • La ausencia de Java-Sun ha hecho que algunos módulos de Eclipse (como el Eclipse-Mercurial) no funcionen correctamente, espero ver como corrijo el problema.

Conclusiones

Es más que obvio que Debian Lenny y Squeeze seguirán en una partición en mi disco, más que todo por mis experimentos en Servidores, otras plataformas, Directorio Libre y una gran cantidad de proyectos, pero para cosas como la Radio Libre de RadioGNU, mi escritorio de usual, jugar y el resto de cosas “que la gente común hace” entonces seré un usuario Trisquel.

Y … ¿Por qué no?

Arch: Arch Linux es una distro por demás interesante, te lleva a conocer más de linux que otras distribuciones, *realmente* debes saber el por qué de los problemas, leer configuraciones, es como Gentoo pero más “comunitario” y con posibilidades como AUR que permiten tener paquetes desde casi cualquier lado. Arch definitivamente es una distribución por la que cualquier fanático Linux debería pasar. Pero ya yo pasé por eso.

Fedora: Fedora siempre me ha parecido extremandamente fácil, útil y es una de mis favoritas, pero ya sabemos que servidores y distribuciones personalizadas (como Canaima) nacen de Debian, por lo que otro perder tiempo en otro LSB (Linux Standard Base: organización de los directorios, archivos de configuración y aplicaciones), otro sistema de empaquetamiento (RPM: aunque es más fácil empaquetar en RPM que el suplicio de DEB, ¿qué vamos a hacer?, Debian es más popular en muchos ámbitos), incluso con el único mirror Debian+Trisquel que tengo, puedo suministrar paquetes a Canaima, a Ubuntu y a otras distribuciones.

Ubuntu: El problema con Ubuntu no es la distribución en sí sino los usuarios, muchos de ellos niegan decirle a la gente que no es una distribución libre; el que los repositorios non-free y multiverse vengan “por defecto” activados y muchos binarios sean por defecto instalados, hace que uno piense ¿realmente esta es mi computadora?, ni siquiera Fedora instala codecs privativos, como mp3 o AC3, pero en Ubuntu todos se montan por defecto.

Gentoo: Gentoo es como el Everest, como el Kilimanjaro, es un lugar interesante para ir, donde aprenderás muchas cosas, pero definitivamente no es algo para “vivir” ahí.

Instalando Debian Squeeze en una Lemote Yeeloong netbook

La lemote Yeeloong China:

Es un equipo Chino basado enteramente en especificaciones abiertas, usando un microprocesador de arquitectura MIPS-sel llamado Loongson-2F.

El equipo está diseñado para correr sistemas operativos libres como Linux, ya que ninguno de los dispositivos de hardware que lo componen requiere binarios privativos para su uso.

Ya mucha gente ha logrado correr varias versiones de Linux:

Una Linux Lemote con GNU/Linux Canaima cortesía de Nerissa Aguilera

Correr un Linux inestable (ejemplo, un Debian Squeeze) es ya otra historia.

Estoy colocando en mi Wiki HOWTO para varias versiones de Linux:

  • GNU/Linux Debian Squeeze (testing)
  • GNU/Linux Canaima (venezolana)
  • Google Android
  • FSF GNU gNewSense

Así como cualquier otra distro que podamos montar usando arquitectura MIPSEL; además agrego una sección de trucos para la Lemote Yeeloong, espero les guste y tengan comentarios para mejorar esta ayuda.

El enlace al Wiki acá: http://phenobarbital.gnu.org.ve/doku.php/linux:lemote

Software Libre y la quinta libertad …

Luego de leer un artículo de Angel Mendoza en su blog; como siempre me ha llamado mucho la atención el tema y quise exponerlo por acá.

Gracias a él, refresquemos las 4 libertades esenciales del Software Libre:

  1. Libertad para ejecutar el programa en cualquier sitio, con cualquier propósito y para siempre.
  2. Libertad para estudiarlo y adaptarlo a nuestras necesidades. Esto exige el acceso al código fuente.
  3. Libertad de redistribución, de modo que se nos permita colaborar con vecinos y amigos.
  4. Libertad para mejorar el programa y publicar las mejoras. También exige el código fuente.

Según él, la idea de Richard Stallman de que “Todo el Software sea Libre” es “radical y extremista” y amenaza a una libertad fundamental, como es la libertad de elegir (Freedom of Choice).

Nota: cualquier asociación con la “freedom of choice act” que legaliza el aborto en EUA, es pura coincidencia.

La pregunta básica que se hace en el artículo es:

¿qué pasa con los usuarios que gustan de usar estos programas privativos?

y me gustaría ampliar la respuesta del “comentario” que le hice en su blog.

¿Qué es la libertad de elegir?

La escogencia entre diversos modelos y tendencias, sean estos religiones, vehículos, tendencias políticas o tipo de ropa, vienen asociados a un derecho fundamental del ciudadano, la libertad de elección, pero primariamente, el libre acceso al conocimiento, no se puede ser libre de elegir si tu conocimiento acerca de un hecho están parcializados, sesgados o peor aún, netamente coartados.

Eres Católico por convicción y herencia paterna, no porque “elegiste serlo” luego de estudiar todas las religiones del planeta para determinar la que te gusta …

Comprar un carro viene de un estudio de tu parte, acerca de las ventajas, posibles libertades y limitaciones que este te presta … si toda tu vida se rige por un estudio de las opciones para poder elegir y tomar una decisión acertada, ¿por qué no hacer lo mismo con el software?.

… La libertad de elegir es fundamental, Hasta ahí vamos bien …

La quinta libertad, supeditada …

La libertad de elección no es un “derecho fundamental” prioritario sobre otros derechos; por ejemplo, no podemos pedir que una persona elija “ser esclavo, a cambio de un vehículo, casa y comida”, aun cuando la persona afirme positivamente a la renuncia de sus derechos; tampoco podemos pedir (y fué el argumento base de los constituyentistas de 2000 en Venezuela) que por haber escogido ser militar, pierdas un derecho fundamental (el derecho al voto). Los derechos y libertades son irrenunciables, por lo que la “libertad de elegir” está obviamente por debajo de tus derechos y libertades fundamentales, y más aún, al conocimiento de los mismos …

… El que la sociedad (en este caso, las empresas y casas de software) te hayan limitado o simplemente cercenado ese conocimiento, no significa que haz renunciado a él; ¿o sí? …

y … ¿como viola mis libertades un software?

Ahora expondemos algunos casos serios de violación de tus derechos por parte de las empresas fabricantes de software (o hardware) privativo (la gente suele decir “propietario” para referirse a un software con propiedad intelectual y patente industrial, como parte de la comunidad de software libre, suelo usar la palabra “privativo” para indicar que este software suele “privarme” de derechos y libertades fundamentales).

En 2008, El gobierno de Alemania dejó de comprar licencias de Microsoft Windows, porque MS se negó a revelar que eran los 450K de datos que salen de toda computadora con MS Windows hacia sus servidores, ellos “alegan”  que no es nada para violar tu privacidad, pero nadie puede estar seguro puesto que nadie puede acceder al código fuente para determinar que esto es cierto o falso (y el negárselo abiertamente a un gobierno soberano es símbolo de que lo que viaja ahí no es nada bueno).

en 2005; la NSA (National Security Agency: La agencia de inteligencia y espionaje nacional) aceptó que incorporaba “secciones privadas” dentro del núcleo de cada sistema Microsoft con fines de “seguridad de la nación” y como parte del cumplimiento de Microsoft a la “Ley Patriota”, también la NSA negó la posibilidad de indicar qué incorporaba.

RIM (Research In Motion, fabricante exclusivo del popular smartphone blackberry) aseguró que sí almacena en sus servidores los mensajes de su sistema BB Messenger (el famoso “BB Pin”)  por un tiempo “indeterminado”, su alegato es que “para poder cumplir las metas y calidad de servicio”, esto debía hacerse así; sin embargo, también aseguran que deben cumplir las normativas de seguridad dictadas por la “Homeland Security” y por ende, los organismos de inteligencia nortamericanos, canadienses e ingleses pueden acceder a toda la información allí contenida, incluyendo mensajes y perfiles de usuario.

Estos simples 3 ejemplos demuestran como nuestros derechos más fundamentales, como la privacidad, las comunicaciones seguras o la inviolabilidad del correo y las comunicaciones, son simplemente “pasadas de lado” porque la persona “escogió” libremente a la renuncia de sus derechos.

Conclusiones

A la final, Las “viscisitudes técnicas” de “si es más bonito, funcional o me corre mejor en Windows” deberían ser triviales, lo que se le debe responder primeramente, sin miedo y sin tapujos es: ¿Está usted aceptando, abierta y decididamente, que desea renunciar a ciertos y privilegiados derechos, con el fin de usar un software? …

Si la respuesta aún sigue siendo afirmativa …  no tengo más nada que agregar, bienvenido al clan de los esclavos del siglo XXI.

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 3.231 seguidores

A %d blogueros les gusta esto: