martes, mayo 17, 2016

No cree una cuenta de usuario "user"

Leyendo Hacker News encuentro que en Windows 8.1, si creás una cuenta de usuario que contenga la cadena de texto user, el proceso taskhost.exe puede llegar a desbocarse y consumir CPU en forma desproporcionada.

¿El motivo? "This is a problem in the component DFPCommon.dl in Windows 8.1." ¿La solución? El título de este post.

Tan claro como eso. Ya lo habíamos hablado tiempo atrás. Debí haberlo imaginado.

viernes, febrero 19, 2016

jueves, octubre 15, 2015

Post instalación Debian GNU/Linux 8 (Jessie)

En abril de este año salió una nueva versión de la rama estable de Debian, y para continuar la secuencia de recomendaciones post-instalación que inició con un post de Tomás referido a Ubuntu, es buen momento de llevar mi humilde sugerencia de paquetes para un escritorio usable a esta nueva versión.

Para repasar, al igual que la vez anterior, este post tiene dos objetivos principales:

  • para el que quiera tener una instalación de debian jessie (estable) usable, vale decir, con algunas aplicaciones más modernas que las que trae por defecto pero tratando de no salir demasiado de los repos oficiales;
  • y para mí, para no perder tiempo haciendo memoria en el caso de tener que reinstalar el sistema.

Pero a diferencia de aquel post para Debian Wheezy, en el cual recomendé instalar como escritorio a GNOME Clásico, en esta oportunidad la recomendación de entorno de escritorio será KDE, pues me ha resultado más completo y usable que las últimas versiones de los demás escritorios. Además, mientras antes se requería un equipo bastante potente para aprovecharlo completamente, a la fecha los equipos con suficiente poder de cómputo y memoria ya están masificados. Por otro lado, según comentan en Slashdot, hoy es el cumpleaños del proyecto KDE así que resulta un momento justo para navegar en la nostalgia y volver a recomendarlo.

Paso 1

Para comenzar, partimos de la instalación base de Debian Jessie. Para que se den una idea, hay que seguir la instalación tradicional y cuando presenta el uso que se dará (escritorio, servidor, etc), desmarcar todas las opciones y continuar normalmente.

Paso 2

Una vez instalado y hecho el primer arranque, luego de iniciar sesión lo que suelo hacer al toque es deshabilitar la opción de instalación de paquetes recomendados, puesto que pocas veces son necesarios y además engordan sobremanera el espacio ocupado por el sistema. Para ello basta con ejecutar la línea siguiente para que las próximas instalaciones eviten instalarlos.

echo "APT::Install-Recommends \"false\";" > \
  /etc/apt/apt.conf.d/90-jessie-powerup-disable-recommends.conf

Paso 3

Luego, sólo si están detrás de un proxy, hay varias formas de configurarlo: puede ser globalmente mediante las variables de entorno http_proxy, https_proxy y ftp_proxy, o bien mediante la configuración de APT para aquellos casos donde dispongan de un servidor de caché como APT-Cacher. Por ejemplo:

PROXY="http://proxy.miorganizacion.com.ar:8080/"
export http_proxy=$PROXY
export https_proxy=$PROXY
export ftp_proxy=$PROXY
echo "Acquire::http::Proxy \"$PROXY\";" > /etc/apt/apt.conf.d/90-jessie-powerup-proxy.conf
echo "Acquire::ftp::Proxy \"$PROXY\";" > /etc/apt/apt.conf.d/90-jessie-powerup-proxy.conf

Paso 4

Verificar que están configurados los repositorios oficiales de la distribución, más el repositorio de backports. Para ello, el archivo /etc/apt/sources.list debería listar, al menos, los siguientes:

deb http://httpredir.debian.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb http://httpredir.debian.org/debian/ jessie-backports main contrib non-free

Paso 5

Agregar algunos repositorios externos (no oficiales) que contienen software útil, por ejemplo mozilla-debian para la última versión de Firefox, el de Dropbox y el de Google Chrome. Se pueden agregar en un archivo denominado /etc/apt/sources.list.d/repos-externos.list

deb http://mozilla.debian.net/ jessie-backports firefox-release
deb [arch=i386,amd64] http://linux.dropbox.com/debian jessie main
deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main
deb http://repository.spotify.com testing non-free

Paso 6

Clásico: actualizar la lista de paquetes. Utilizaremos apt en vez de apt-get sólo por cuestión de gusto, y para ir probando qué tal funciona esta nueva interfaz de gestión de paquetes.

apt update

Paso 7

Instalar un entorno gráfico y los controladores de la placa de video. Para la interfaz gráfica hay varios metapaquetes que se corresponden a cada entorno de escritorio, los más conservadores son los siguientes: para Gnome, instalando gnome-core alcanza; para KDE, instalen kde-plasma-desktop; para XFCE instalen xfce4; para LXDE instalen lxde; incluso pueden instalar Mate o Cinnamon mediante los paquetes mate-desktop-environment o cinnamon-desktop-environment.

Eventualmente puede ser necesario instalar un driver privativo, por ejemplo para placas GPU AMD/ATI suele ser necesario el paquete fglrx-driver, mientras que para placas GPU nVidia el paquete a instalar es xserver-xorg-video-nvidia. También hay versiones para chipsets más antiguos (aparecen como paquetes con el nombre legacy). Si tienen un chipset Intel, con lo que viene por defecto suele alcanzar. Sobre el entorno gráfico, como comentaba al inicio del artículo, mi recomendación esta vez es utilizar KDE Plasma Desktop.

apt install xorg lightdm lightdm-kde-greeter \
    kde-plasma-desktop kde-l10n-es pinentry-qt4

Superpaso 8

Instalar paquetes desde los repositorios oficiales. Como en la línea anterior, cada paquete está enlazado a su descripción en el sitio de Debian.

Paso 8.1. Controladores y servicios útiles

apt install amd64-microcode dkms fail2ban intel-microcode \
    ntfs-3g ssh uptimed

Paso 8.2. Herramientas útiles de línea de comando

apt install alsa-utils aptitude bash-completion ccze \
    clamav colordiff colortail curl deborphan dialog file \
    flac hexedit highlight htop iotop imagemagick \
    irqbalance jmtpfs less lftp libav-tools markdown mc \
    mlocate nano netcat-openbsd nethogs nmap os-prober \
    p7zip p7zip-full pv pxz qemu-kvm screen sshfs trickle \
    tshark unattended-upgrades unrar unzip vbindiff w3m \
    wget zip

Paso 8.3. Lenguajes de programación, herramientas y documentación

apt install build-essential git git-doc idle ipython \
    pylint python python-doc sqlite3 sqlite3-doc

Paso 8.4. Programas gráficos para fines variados (editores, reproductores, etc)

apt install chromium chromium-l10n desktop-base filezilla \
    fslint gstreamer1.0-libav hardinfo icedove \
    icedove-l10n-es-ar keepassx mpv openbox \
    owncloud-client owncloud-client-l10n sqlitebrowser \
    synaptic vlc wireshark xdg-user-dirs xterm

apt install audex calligra-l10n-es filelight k3b k3b-i18n \
    kde-standard kdegraphics-thumbnailers kdiff3 \
    kio-audiocd kio-mtp kompare krita okteta plasma-nm \
    soundkonverter transmission-qt

Paso 8.5. Iconos y temas de escritorio

apt install dmz-cursor-theme faenza-icon-theme \
    tango-icon-theme

Paso 8.6. Versión más moderna del kernel (4.3 para 64 bits)

apt -t jessie-backports install firmware-linux \
    linux-headers-amd64 linux-image-amd64 linux-doc

Paso 8.7. Versión más moderna de VirtualBox (5.0.16)

apt -t jessie-backports install virtualbox \
    virtualbox-dkms virtualbox-qt

Paso 8.8. Versión más moderna de LibreOffice (5.1.1)

apt -t jessie-backports install libreoffice \
    libreoffice-kde libreoffice-help-es \
    libreoffice-l10n-es libreoffice-style-sifr \
    libreoffice-style-tango fonts-opensymbol

Paso 8.9. Versión más moderna de Firefox (45)

apt -t jessie-backports install firefox firefox-l10n-es-ar

Paso 8.10. Tipografías

apt install fonts-cantarell fonts-crosextra-caladea \
    fonts-crosextra-carlito fonts-dkg-handwriting \
    fonts-humor-sans fonts-droid fonts-font-awesome \
    fonts-liberation fonts-roboto ttf-dejavu \
    ttf-mscorefonts-installer

Paso 9

Instalar paquetes desde repositorios externos:

apt install dropbox google-chrome-stable

Además de estos paquetes, suelo instalar PyCharm, Netbeans y Skype, para programar cómodamente y hacer alguna videoconferencia cuando es necesario, pero aquí la instalación es particular para cada software.

Paso 10

Listo, con eso les queda un sistema operativo de unos 5 GB, a mi juicio, casi perfecto. Todo lo documentado aquí está disponible en un sencillo script que instala KDE y ejecuta estos pasos de un saque. Lo dejo disponible por si les sirve: jessie-powerup.sh

Algunos consejos adicionales:

  • Para tener la tipografía clásica en las terminales Fx, ejecuten dpkg-reconfigure console-setup y en "Tipo de letra para la consola" seleccionen "No cambie la tipografía del arranque".

Vuelvo a recomendar que se den una vuelta por el post de Tomás pues el da también una buena lista de software para instalar, y si me olvido de algo, o ven algo que sobra, abajo están los comentarios...

sábado, octubre 10, 2015

Abandonado

Este es un instrumental que ha quedado grabado en mí desde los tiempos sin memoria. La cadencia, la selección de notas y, particularmente, la selección de silencios.

Tiene cinco o seis minutos? Hágame caso:
baje la luz, ponga el video en pantalla completa, y suba el volumen del equipo de música.

Marooned, en The Division Bell, por Pink Floyd

En un buen equipo de audio, y con el video que lo acompaña, con imágenes de la ISS y de Pripyat, pone la piel de gallina. Para un tema que salió improvisado, es la definición de una obra de arte. Coincidimos, Andrea.

lunes, mayo 11, 2015

Kernels nuevos en Debian Jessie

Vengo siguiendo bastante de cerca la publicación de versiones estables del kernel de Linux. A fines de diagnóstico suelo compilar la última versión disponible e instalarla en varias de las máquinas sobre las que tengo acceso. Como quizás le sirva a más de uno, acá dejo disponible la última versión que compilé en casa.
Todas estas son directamente instalables sobre Debian GNU/Linux 8.0 Jessie de 64 bits sin quilombo de dependencias. Cada directorio contiene los paquetes con la imagen del kernel, los encabezados, el firmware y la configuración utilizada en la compilación.
Si les interesa saber qué hay de nuevo, les dejo el resumen de Diego Calleja, un post de Phoronix donde se listan algunas de las mejoras e incorporaciones, y el clásico resumen hecho por la gente de KernelNewbies.
A medida que vayan saliendo nuevas versiones iré actualizando este pequeño "repositorio" para mantenerlo al día.

Actualización 2017: en función a la reciente publicación de la nueva versión estable Debian GNU/Linux 9.0 Stretch, y tras haber migrado los equipos que utilizo habitualmente, este repositorio dejará de alojar versiones de kernel pues no podré compilarlos para la versión Jessie. Les recomiendo actualizar la versión del sistema operativo y, en caso de preferir versiones de kernel más modernas, utilizar aquellas disponibles en los repositorios Sid y/o Experimental.

lunes, abril 13, 2015

FLISOL 2015 - Festival Latinoamericano de instalación de Software Libre

El FLISoL - Festival Latinoamericano de Instalación de Software Libre es un evento de difusión de Software Libre que se realiza anualmente desde 2005 en ciudades de toda Latinoamerica y España. El Software Libre, como filosofía, asegura que los usuarios puedan usar el programa para cualquier propósito, estudiar como funciona, modificarlo para adaptarlo a sus necesidades y redistribuirlo con o sin modificaciones.

El próximo Sábado 25 de abril la Universidad Nacional de Luján se unirá a las distintas sedes del festival, siendo una excelente oportunidad para asistir a charlas y talleres relacionados con la temática, así como también llevarse instalado gratuitamente un sistema operativo libre.

El grupo de usuarios de Software Libre de la UNLu (UNLuX) los invita a conocer más sobre el Software Libre en sus múltiples facetas: artística, técnica, cultural y filosófica. Dentro del ámbito académico, los principios propuestos por el Software Libre son especialmente útiles, ya que sus diversos proyectos nos proporcionan una inmensa cantidad de herramientas con las que podemos experimentar y aprender (programas, bibliotecas, lenguajes de programación, etc).

Desde su base, la filosofía pretende que nosotros, los usuarios, controlemos la tecnología y que podamos utilizarla sin restricciones, a diferencia del software no-libre, que está limitado según las restricciones impuestas por su fabricante. El software libre es necesario para una sociedad libre.

Invitamos a estudiantes, profesores, organizaciones culturales y al público en general a participar, ya sea ayudando a difundir el evento, presentando una charla, colaborando con la organización, o simplemente acercándose a disfrutar del festival.

Inscripción

Podes registrarte mediante el siguiente enlace: http://flisol.usla.org.ar/sede/Lujan/registration
Si bien el registro no es obligatorio, nos permitirá brindarte un espacio físico adecuado y nos preparará para realizar las instalaciones que sean necesarias.

En agenda

lunes, diciembre 22, 2014

Analizando logs en 5 minutos con ELK

A partir de una idea de Santiago, y tomando como base algunos componentes que los muchachos de MercadoLibre utilizan para su infraestructura de gestión de logs, se me ocurrió hacer una prueba de concepto de a lo que es posible arribar rápidamente utilizando la tríada ElasticSearch + Logstash + Kibana, más conocida com ELK.

Para dar una mínima introducción, diremos que ElasticSearch es un motor de búsqueda RESTful basado en el archiconocido Lucene, Logstash es una especie de concentrador/manipulador/estandarizador de logs provenientes de múltiples fuentes, y Kibana es un visualizador de eventos que corre enteramente en el navegador. Los tres son componentes que pueden utilizarse en forma separada, pero en conjunto aplican precisamente esto de que el todo es más que la suma de las partes. De hecho yo había estado viendo Logstash aparte para una charla sobre logging que diera algunos años atrás, cuando aún era un proyecto incipiente, y ahora me encuentro con que es un proyecto ampliamente utilizado en un montón de lados.

Pero hoy no quiero detenerme demasiado en la teoría; la idea de este post es analizar registros yendo de 0 a 100 en 5 minutos (o lo que tarde en bajar cada aplicación) y para ello nada mejor que arrancar ahora. Así que...

Analizando logs en 5 minutos con ELK

Prerrequisitos

Como prerequisito es necesario el motor de ejecución java 1.6 o 1.7. En distribuciones basadas en debian alcanza con instalar openjdk-6-jre u openjdk-7-jre. O eso creo, a lo mejor es necesario el jdk también; prueben por las dudas. El resto de los pasos se pueden hacer sin necesidad de ser root, como usuario común.

Paso 0. Ubicarnos en un directorio limpio

mkdir elk
cd elk

Paso 1. Obtener logstash

wget -c https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz
tar zxf logstash-1.4.2.tar.gz

Paso 2. Obtener elasticsearch

wget -c https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.1.1.tar.gz
tar zxf elasticsearch-1.1.1.tar.gz

Paso 3. Obtener un log de apache

... de algún lado. Si tienen un apache a mano, cópiense el archivo al directorio actual y dénle permisos de lectura para su usuario

cp /var/log/apache2/access.log access.log
chmod go+r access.log

O si no tienen ninguno a mano, acá les dejo uno que es un fragmento del log de este mismo sitio. Ustedes pueden hacer lo que les plazca con él, total este es un blog personal. Si quieren optar por otra alternativa, google hacking es su amigo y yo no se los recomendé.

wget http://maurom.com/files/access.elk.log -O access.log

Paso 4. Iniciar elasticsearch

echo Iniciando Elasticsearch. Aguarde 15s ...
elasticsearch-1.1.1/bin/elasticsearch &
sleep 15

Paso 5. Crear un archivo de configuración para parsear logs de apache

Para ello, creen un archivo de texto llamado logstash-apache.conf en el directorio actual y copien y peguen el siguiente bloque. Luego editen la ruta al archivo de logs, indicándola en forma absoluta, y configuren el tipo de entradas de log y el lenguaje de los meses según corresponda (sino tira unos errores horribles).
input {
  file {
    # apuntar a donde haga falta, con ruta absoluta!
    path => "/home/usuario/elk/access.log"
    # desde dónde leer el log, o
    # "end" para tomar datos en vivo
    start_position => beginning
  }
}
filter {
  if [path] =~ "access" {
    mutate { replace => { "type" => "apache_access" } }
    grok {
      # depende del formato de archivo
      match => { "message" => "%{COMBINEDAPACHELOG}" }
      #match => { "message" => "%{COMMONAPACHELOG}" }
    }
    kv {
      #con esto parsea incluso querystrings
      source => "request"
      target => "params"
      field_split => "?&"
    }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
    # si los meses estan en ingles, o
    # "es" si estan en castellano
    locale => "en"
  }
}
output {
  elasticsearch { host => localhost }
  # salida estandar coloreada, util para debug
  #stdout { codec => rubydebug }
}

Todo este archivo tiene su lógica según la documentación de logstash.

Paso 6. Iniciar logstash+kibana con la configuracion dada

echo Iniciando Logstash. Aguarde 15s ...
logstash-1.4.2/bin/logstash -f logstash-apache.conf -- web &
sleep 15

Paso 7. Levantar un navegador web

xdg-open "http://localhost:9292/index.html#/dashboard/file/logstash.json"

Paso 8. Jueguen con los filtros, los gráficos y deléitense con la visualización

Fíjense de qué epoca son las entradas del log, pues puede que tengan que modificar algunas cosas para que Kibana les encuentre los eventos para esas fechas. Por ejemplo, el log de apache que les pasé solo tiene entradas para el mes de julio de 2014, así que seleccionen ese rango en el filtro de fechas de Kibana.

Acá les dejo algunas capturas de lo que pueden llegar a hacer, que si bien no son de análisis de apache, dan una idea de las posibilidades:

 

Paso 9. Terminar la tarea

Para cerrar los procesos, matelos sanamente con kill PID a cada proceso java asociado.

Ah, y una mención antes de terminar: cada vez que logstash procesa un archivo, anota hasta donde leyó para no volver a cargar la información, por lo que si están jugando con la configuración van a tener que borrar unos archivos .sincedb_algo que genera en el directorio $HOME del usuario para que vuelva a recorrer el mismo log.

Por último, en este caso estamos parseando son entradas de accesos a un sitio web, pero el combo ELK puede procesar casi cualquier tipo de flujo de eventos, y si bien java mucho no me atrae, todo este paquete vale la pena; piensen cuanto habrían tardado en programar ustedes una interfaz tan flexible y completa...

Como sé que ustedes son tan haraganes como yo, acá tienen todo en un solo script que lo hace de una.

Si se quedaron manija, acá van algunas demos y algo de documentación:
Eso es todo por hoy. Feliz análisis y Felices fiestas!

lunes, noviembre 17, 2014

Tipografía práctica

Desde pequeño tuve predilección por las tipografías y por el aspecto visual de los textos y documentos que he encontrado. Más allá de que nunca tuve buen gusto para ello, siempre trato de ceñirme a las mejores prácticas del entorno, lo que me ha dado una buena dosis experiencia con las aplicaciones de maquetación, diseño y procesamiento de texto, entendiendo, por ejem­plo, que siempre resulta mucho mejor definir el formato de un texto mediante estilos en vez de aplicar atributos a diestra y siniestra con el cursor del ratón.

Buscando un sumario de reglas generales referidas al diseño de textos impresos y de sitios web di con el libro Practical Typography de Matthew Butterick, que tras haber leído detenidamente considero indispensable para todo aquel que se haya dedicado tres minutos de su vida a plantearse con qué fuente plasmar, con qué alineación, o cómo dar énfasis a un texto que se encontraba escribiendo. Butterick es autor de diversas tipografías que provee en su sitio web, pero como diseñador viene de un trasfondo de letras: es escritor y es abogado, una profesión donde los documentos escritos son ineludibles.

Del sitio web del libro, que está disponible enteramente en línea, comiencen por “Typography in ten minutes”, luego pasen a “Summary of key rules” y, si les interesa lo que ven, sigan por el resto. En el texto, Butterick -menos teórico y más pragmático- también recomien­da varias familias de tipografías y reniega de muchas otras, da exce­lentes consejos sobre cómo dar formato al texto y componer las páginas de un documento, y presenta además algunos ejemplos de diseño de elementos tales como artículos de investigación, encabeza­dos, currículums, entre otros. Todos consejos bien fundamentados y con los que coincido casi plenamente; creo que la única diferencia que tengo es sobre el tamaño de letra que utiliza en el sitio web, pero eso se arregla fácilmente con el zoom del navegador.

Por lo demás, Practical Typography.

lunes, noviembre 10, 2014

SRC: Control de versiones para proyectos de un solo archivo

Tiempo atrás consulté con mis amigos cual sería la forma adecuada de mantener el histórico de versiones de distintos proyectos que están conformados por un único archivo de código fuente; o alternativamente, si alguno conocía un sistema de control de versiones tal como subversion, mercurial o git, que permitiera mantener esa información sin tener que crear todo el proyecto en un nuevo directorio y sin el overhead de trazar cambios en jerarquías de carpetas y similares. La idea es sencilla: muchas veces hago scripts sueltos que no merecen estar alojados en un repositorio de código particular -están todos juntos en un directorio “scripts”-, pero de los que me interesa mantener un historial de cambios y revisiones.

Tomás me recomendó GistBox, que parece bastante piola puesto que en cierta forma está destinado a mantener esa “biblioteca” de código variado que uno va acumulando con el tiempo. Además los Gists siguen siendo repositorios git, por lo cual tienen todas las ventajas de un control de versiones. Pero aquí ya uno depende un poco de los servicios en la nube y además sigue siendo necesario mantener los archivos fuente en directorios aparte.

Salvando GistBox, hasta el momento no había encontrado ningún software que realice tal tarea, e incluso estuve tentado a comenzar un proyecto propio para tal fin.

Sin embargo, recientemente di con un post de Eric Raymond en el cual menciona la creación de un nuevo proyecto denominado SRC o “Simple Revision Control”, basado en RCS y definido como “Revision control with a modern UI for single-file solo projects kept possibly more than one to a directory”. En palabras sencillas, justo lo que estoy buscando.

Según el sitio web del proyecto -que al involucrar múltiples archivos, está mantenido en git, pun intended!-, Simple Revision Control es:
RCS recargado -un pequeño y cómodo sistema de control de versiones para proyectos de único archivo, único desarrollador, tal como todos esos pequeños scripts en el directorio ~/bin. Cuenta con operación libre de bloqueo, una interfaz de usuario limpia y moderna similar a la de subversion, documentación integrada, y los archivos de historia son archivos sencillos de RCS.
A primera vista tiene tres ventajas: a) cumple con lo que yo había solicitado; b) está desarrollado en python; y c) por el propio autor de “The Art of UNIX Programming”. Más no se puede pedir.

Y mientras estaba leyendo el artículo, en los comentarios aportan otra utilidad similar (que también desconocía): Zit, the git-based single file content tracker. Por ahora voy a probar SRC y ver si se ajusta a mi forma de trabajo. En un tiempo les comento que tal fue.

lunes, noviembre 03, 2014

Post instalación Debian GNU/Linux 7 (Wheezy)

Inspirado en un post de Tomás -bah, debo decir: copiando inescrupulosamente su texto- referido a las tareas post-instalación de Ubuntu caí en la cuenta de que de requerir volver a instalar Debian, por la razón que fuera, no es mala idea tener documentado cuál es el software que suelo agregar al sistema una vez terminada la instalación inicial, por lo que éste es un post que servirá por dos puntas:
  • para el que quiera tener una instalación de debian wheezy (estable) usable, vale decir, con algunas aplicaciones más modernas que las que trae por defecto pero tratando de no salir de los repos oficiales;
  • y para mí, para no perder tiempo haciendo memoria en el caso de tener que reinstalar el sistema.

Paso 1

Para comenzar, partimos de la instalación base de Debian Wheezy. Para que se den una idea, hay que seguir la instalación tradicional y cuando presenta el uso que se dará (escritorio, servidor, etc), desmarcar todas las opciones y continuar normalmente.

Paso 2

Una vez instalado y hecho el primer arranque, luego de iniciar sesión lo que suelo hacer al toque es deshabilitar la opción de instalación de paquetes recomendados, puesto que pocas veces son necesarios y además engordan sobremanera el espacio ocupado por el sistema. Para ello basta con ejecutar la línea siguiente para que las próximas instalaciones eviten instalarlos.
echo "APT::Install-Recommends \"false\";" > /etc/apt/apt.conf.d/90-wheezy-powerup-disable-recommends.conf

Paso 3

Luego, sólo si están detrás de un proxy, hay varias formas de configurarlo: puede ser globalmente mediante las variables de entorno http_proxy, https_proxy y ftp_proxy, o bien mediante la configuración de APT para aquellos casos donde dispongan de un servidor de caché como APT-Cacher. Por ejemplo:
PROXY="http://proxy.miorganizacion.com.ar:8080/"
export http_proxy=$PROXY
export https_proxy=$PROXY
export ftp_proxy=$PROXY
echo "Acquire::http::Proxy \"$PROXY\";" > /etc/apt/apt.conf.d/90-wheezy-powerup-proxy.conf
echo "Acquire::ftp::Proxy \"$PROXY\";" > /etc/apt/apt.conf.d/90-wheezy-powerup-proxy.conf

Paso 4

Verificar que están configurados los repositorios oficiales de la distribución, más el repositorio de backports. Para ello, el archivo /etc/apt/sources.list debería listar, al menos, los siguientes:
deb http://cdn.debian.net/debian/ wheezy main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib
deb http://cdn.debian.net/debian/ wheezy-backports main contrib non-free

Paso 5

Agregar algunos repositorios externos (no Debian) que contienen software útil, por ejemplo mozilla-debian para la última versión de Iceweasel, el de Dropbox y el de Google Talk. Se pueden agregar en un archivo denominado /etc/apt/sources.list.d/repos-externos.list
deb http://mozilla.debian.net/ wheezy-backports iceweasel-release
deb http://linux.dropbox.com/debian wheezy main
deb http://dl.google.com/linux/talkplugin/deb/ stable main

Paso 6

Clásico: actualizar la lista de paquetes.
apt-get update

Paso 7

Instalar un entorno gráfico y los controladores de la placa de video. Para la interfaz gráfica hay varios metapaquetes que se corresponden a cada entorno de escritorio, los más conservadores son los siguientes: para Gnome, instalando gnome-core alcanza; para KDE, instalen kde-plasma-desktop; para XFCE instalen xfce4; para LXDE instalen lxde; incluso pueden instalar Mate desde backports mediante el paquete mate. Eventualmente puede ser necesario instalar un driver privativo, por ejemplo para placas GPU AMD/ATI suele ser necesario el paquete fglrx-driver, mientras que para placas GPU nVidia el paquete a instalar es xserver-xorg-video-nvidia. También hay versiones para chipsets más antiguos (aparecen como paquetes con el nombre legacy). Si tienen un chipset Intel, con lo que viene por defecto suele alcanzar. Sobre el entorno gráfico, yo tengo predilección por el Gnome clásico.
apt-get install xorg xserver-xorg xserver-xorg-video-all \
    gnome-core gnome-session-fallback

Superpaso 8

Instalar paquetes desde los repositorios oficiales. Como en la línea anterior, cada paquete está enlazado a su descripción en el sitio de Debian.

Paso 8.1. Controladores y servicios útiles

apt-get install amd64-microcode dkms fail2ban \
    intel-microcode libmtp-runtime ntfs-3g ssh \
    uptimed

Paso 8.2. Herramientas útiles de línea de comando

apt-get install alsa-utils bash-completion clamav \
    colordiff colortail curl flac hexedit highlight \
    htop iotop less lftp libav-tools mc mlocate nano \
    nmap netcat-openbsd os-prober p7zip p7zip-full pv \
    qemu-kvm screen sshfs tshark unrar unzip vbindiff \
    w3m wget zip

Paso 8.3. Lenguajes de programación, herramientas y documentación

apt-get install build-essential idle ipython python \
    python-doc sqlite3 sqlite3-doc

Paso 8.4. Programas gráficos para fines variados (editores, reproductores, etc)

apt-get install audacious chromium chromium-l10n \
    desktop-base file-roller filezilla \
    flashplugin-nonfree fslint gedit gedit-plugins \
    geeqie ghex gimp gksu gnome-specimen gnome-tweak-tool \
    gpicview gstreamer0.10-ffmpeg hardinfo icedove \
    icedove-l10n-es-ar keepassx leafpad meld mplayer-gui \
    mplayer2 openbox sound-juicer sqlitebrowser synaptic \
    totem transmission-gtk vlc wireshark \
    xdg-user-dirs-gtk xterm

apt-get -t wheezy-backports install geany geany-plugins \
    pepperflashplugin-nonfree

Paso 8.5. Iconos y temas de escritorio

apt-get install clearlooks-phenix-theme dmz-cursor-theme \
    gnome-colors human-icon-theme murrine-themes \
    shiki-colors tango-icon-theme

Paso 8.6. Versión más moderna del kernel (3.16 para 64 bits)

apt-get -t wheezy-backports install firmware-linux \
    linux-headers-amd64 linux-image-amd64 linux-doc

Paso 8.7. Versión más moderna de VirtualBox (4.3.14)

apt-get install libqt4-network libqt4-opengl libqtcore4 \
    libqtgui4

apt-get -t wheezy-backports install virtualbox \
    virtualbox-dkms virtualbox-qt

Paso 8.8. Versión más moderna de LibreOffice (4.3.2)

apt-get -t wheezy-backports install libreoffice \
    libreoffice-gnome libreoffice-help-es \
    libreoffice-l10n-es libreoffice-style-tango \
    fonts-opensymbol

Paso 8.9. Versión más moderna de Iceweasel/Firefox (33)

apt-get -t wheezy-backports install iceweasel \
    iceweasel-l10n-es-ar

Paso 8.10. Tipografías

apt-get install fonts-cantarell fonts-crosextra-caladea \
    fonts-crosextra-carlito fonts-dkg-handwriting \
    fonts-humor-sans fonts-droid fonts-font-awesome \
    fonts-liberation fonts-roboto ttf-dejavu \
    ttf-mscorefonts-installer

Paso 9

Instalar paquetes desde repositorios externos: dropbox, skype, google-talkplugin (pendiente de documentar)

Paso 10

Listo, con eso les queda un sistema operativo de unos 5 GB, a mi juicio, casi perfecto. Todo lo documentado aquí está disponible en un sencillo script que instala Gnome y ejecuta estos pasos de un saque. Lo dejo aquí disponible por si les sirve: wheezy-powerup.sh
Algunos consejos adicionales:
  • Antes de iniciar sesión, conviene elegir la sesión "Gnome Classic" y establecerla por defecto.
  • Una vez en el escritorio, cambien el tapiz y utilicen gnome-tweak-tool para habilitar los íconos en el fondo, cambiar la tipografía y los temas visuales.
  • Pueden añadir applets a las barras superior e inferior manteniendo presionada la tecla Alt y haciendo clic con el botón derecho del ratón sobre alguna de ellas. Si con Alt no funciona, prueben con Win+Alt
  • Para tener la tipografía clásica en las terminales Fx, ejecuten dpkg-reconfigure console-setup y en "Tipo de letra para la consola" seleccionen "No cambie la tipografía del arranque".
Les recomiendo que se den una vuelta por el post de Tomás pues el da también una buena lista de software para instalar, y si me olvido de algo, o ven algo que sobra, abajo están los comentarios...

lunes, octubre 20, 2014

La RAE y su incorrecta acepción de hacker

A partir del dato que pasó Raúl Batista en el blog Segu-Info, leo con mucho desagrado que la Real Academia Española (RAE) ha incorporado a la 23a. edición del Diccionario de la Lengua Española el término "hacker", con la siguiente acepción:
hacker (Voz ingl.): m. y f. Inform. pirata informático.
aclarando que la explicación de pirata informático tambien en rae.es:
Pirata informático: Traducción recomendada para la voz inglesa hacker, ‘persona con grandes habilidades en el manejo de ordenadores, que utiliza sus conocimientos para acceder ilegalmente a sistemas o redes ajenos’: "Un pirata informático logró jaquear los sistemas de seguridad" (Clarín@ [Arg.] 19.6.05).
Por mi parte, continuaré utilizando la definición existente en el Jargon File, de Eric S. Raymond, que surge desde el propio movimiento hacker y es aceptada ampliamente por la comunidad de software libre, según la cual un hacker es, entre otras cosas:
hacker: n. A person who enjoys exploring the details of programmable systems and how to stretch their capabilities, as opposed to most users, who prefer to learn only the minimum necessary. RFC1392, the Internet Users' Glossary, usefully amplifies this as: A person who delights in having an intimate understanding of the internal workings of a system, computers and computer networks in particular. (Jargon File)
hacker: s. Una persona que disfruta explorando los detalles de los sistemas programables y cómo extender sus capacidades, a diferencia de la mayoría de los usuarios que prefieren aprender sólo el mínimo necesario. La RFC1392, el Glosario de los Usuarios de Internet, amplía eficazmente la definición como: Una persona que se deleita en tener un entendimiento profundo del funcionamiento interno de un sistema, de las computadoras y de las redes informáticas, en particular.
Desconozco qué es lo que ha llevado a los editores de la RAE a tomar tan equivocada definición del término. Probablemente lo que apunta Raúl acerca de el uso habitual en los medios de comunicación tenga algo que ver, pero sin dudas me ha desilusionado sobremanera que la gente de la Real Academia haya incorporado esta acepción sin haber consultado previamente a los propios referidos por el término. Para decirlo sencillo: "un cirujano no es un asesino, por más que abra la gente al medio".

Actualización: Chema Alonso se suma a la protesta y ha iniciado una petición en Change.org para que se cambie la definición de hacker. Firmas aquí!

domingo, julio 06, 2014

Call for Charlas PyDay Luján 2014

El Grupo de Usuarios de Software Libre (UNLUX) de la Universidad Nacional de Luján invita a la comunidad de usuarios de Python y de Software Libre en general a proponer presentaciones y charlas para el encuentro PyDay Luján 2014, que tendrá lugar en la Sede Central de la Universidad Nacional de Luján (UNLu) el sábado 20 de septiembre de 2014.

Sobre el PyDay

PyDay es el nombre coloquial con el que se conoce a las jornadas de lenguaje Python de un día de duración.
Este evento se presenta como una oportunidad de encuentro e intercambio de experiencias entre desarrolladores, programadores y usuarios del lenguaje en ámbitos que se extienden a la empresa, la academia, el arte y, desde luego, el ocio.
La temática del evento es el lenguaje de programación de propósito general Python, en niveles introductorios e intermedios tanto teórico (charla) como práctico (talleres), si bien también serán recibidas aquellas propuestas de temas más avanzados y afines.
Cada disertante dispondrá de 45 minutos para su exposición, incluyendo el tiempo para preguntas. Habrá unos 15 minutos de intermedio entre charlas. Además, el día del evento se se pondrá a disposición de los presentes un listado para recibir propuestas de Charlas Relámpago.

Envío de propuestas

Para acercarnos una propuesta de charla, ingrese a la sección "Charlas" en el sitio oficial del evento y complete el formulario de propuesta allí presente. El material de las presentaciones se hará disponible a los asistentes, por lo que solicitamos se brinde bajo una licencia que permita su libre distribución.

Fecha límite

La recepción de propuestas finaliza el día 15 de agosto del corriente año a la medianoche. Las presentaciones fuera de plazo podrán ser considerados para su inclusión en la conferencia principal en caso de quedar espacio disponible. Una vez evaluadas las propuestas, se informará a los autores el resultado de la selección.

Para contactarse en forma privada respecto a su propuesta, por ideas más generales o preguntas sobre el evento, por favor envíenos un correo electrónico a pydaylujan@gmail.com

Esperamos contar nuevamente con Uds. en la UNLu para compartir momentos memorables durante este PyDay.

Agradecemos la difusión de este llamado y del encuentro en sí.

viernes, junio 20, 2014

Indistinguible de la magia

En 1981, una IBM PC XT no podía reproducir video en una tasa de cuadros que fuera satisfactoria para el ser humano.

Hoy, en el mismo equipamiento:


Todo gracias a la curiosidad del genial scener Jim Leonard (trixter), que redacta en su blog la complejidad de lograr tal hazaña en su demo 8088 Domination. Mierda, se me caen las lágrimas.

Vía OSNews

domingo, mayo 25, 2014

Haciendo puentes SSH entre distintos hosts con netcat

Por si en algún momento les toca hacer SSH a una máquina, para hacer SSH a otra máquina, para hacer SSH a una máquina final, como me toca hacer ahora, donde los números de puerto o los nombres de usuario son distintos, la utilización de ssh con netcat propuesta en este artículo es de suma utilidad:

Editar (o crear, si no existiera) el archivo ~/.ssh/config e incorporar las siguientes lineas (reemplazando los nombres de host donde correspondan):
Host buenvecino
    User mauro
    Hostname buenvecino.domain.net
    Port 1022

Host www
    User bitnegro
    Hostname www.example.net
    ProxyCommand ssh -q buenvecino nc -q0 www.example.net 4020

Host destino
    User bitnegro
    ProxyCommand ssh -q www nc -q0 192.168.57.215 22
Y con esto definido, es posible hacer directamente
$ ssh destino
mauro@buenvecino.domain.net's password:
bitnegro@www.example.net's password:
bitnegro@192.168.57.215's password:

Last login: Fri May 16 20:31:01 2014 from www.example.net
bitnegro@destino:~$ echo Success!!
Pero la mayor utilidad de todo esto, la crème de la crème, es que es posible hacer SCP pasando archivos de un lado a otro sin tener que hacer las copias intermedias, por lo que esta alternativa de configuración es, a mi criterio, un go-la-zo.

Créditos al autor original, al que le debo una docena de facturas.

martes, mayo 20, 2014

El mejor consejo que recibí sobre programación

Vía Hacker News leo un viejo artículo de Russ Olsen en el que comenta cual fue el mejor consejo que recibió sobre programación.
Por motivos que resultarán evidentes, yo no coincido con el consejo, sino con lo que afirma el autor en el último párrafo, que sin su permiso transcribo a continuación:
Años más tarde, en la medida que me encontré construyendo y gestionando equipos de desarrollo, advertí que había en aquel antiguo proyecto probablemente una docena de programadores que sabían por qué el sistema andaba tan lento, y cómo resolverlo. Lo sabían, pero se mantuvieron en silencio ya que en esa organización había ciertas cosas que eran más importantes que mejorar el sistema. [La frase] En el futuro, no te metas en el código ajeno* asume que habrá un futuro. Pero la mejor manera de tener un futuro es ser parte de un equipo que valora el progreso por sobre la política, las ideas por sobre el territorio y la iniciativa por sobre el decoro.
Impecable.

* por no elegir una traducción más explícita.

domingo, abril 06, 2014

FLISOL 2014 - Festival Latinoamericano de Instalación de Software Libre

El grupo de usuarios de Software Libre de la Universidad de Luján -UNLUX- invita a toda la comunidad a participar de la edición 2014 del FLISOL - Festival Latinoamericano de Instalación de Software Libre en la ciudad de Luján, a llevarse a cabo el día sábado 26 de abril, en concordancia con numerosas ciudades de Argentina y el continente. Las actividades se desarrollaran en la Sede Central de la Universidad Nacional de Luján (UNLu) a partir de las 13:00 hs.

Al igual que en ediciones anteriores, los integrantes del grupo instalarán Software Libre (GNU/Linux, Firefox, etc.) de forma gratuita y totalmente legal en los equipos informáticos que los asistentes acerquen al encuentro.

Durante la ejecución del mismo se ofrecerán charlas informativas y técnicas sobre diferentes aspectos relacionados con el Software Libre. Los invitamos a participar acercando sus equipos tanto para la instalación de Software Libre, la resolución de problemas sobre instalaciones existentes o simplemente para participar de una jornada distinta para intercambiar experiencias sobre Software Libre o compartir una tarde en un ambiente agradable.

Sobre el FLISOL

El Festival Latinoamericano de Instalación de Software Libre es un evento que se viene desarrollando de forma anual desde hace casi una década, donde se promueve el trabajo colaborativo ayudando a personas a conocer el mundo del Software Libre.

Está organizado por varios grupos de usuarios de los países involucrados congregados alrededor de esta iniciativa que reúne participantes de Argentina, Bolivia, Brasil, Chile, Colombia, Cuba, Ecuador, El Salvador, Guatemala, Honduras, México, Nicaragua, Panamá, Paraguay, Perú, Uruguay y Venezuela, entre otros. En Argentina ya está confirmada la realización de FLISOL en distintas ciudades.

El encuentro está dirigido a todas las personas que desean conocer más sobre software libre, instalarlo y usar sus computadoras preservando sus libertades, en condiciones de legalidad y sin estar preocupados por virus y otros problemas comunes del software privativo. Durante la jornada, se realizan instalaciones en forma totalmente gratuita, mientras que en paralelo se ofrecen diversas charlas de divulgación para promover el uso y la filosofía del Software Libre.

Cronograma de Charlas

El cronograma de charlas se está actualizando constantemente. Revisa los sitios flisol.info/FLISOL2014/Argentina/Lujan o www.unlux.com.ar para estar al tanto de las novedades.

Inscripción

Llenando este formulario, nos ayudas a estimar la asistencia de público y preparar mejor los espacios disponibles:

http://eventosimple.net/event/sp/publication/flisol-unlu/register

Sin embargo, la entrada es libre y gratuita, no es necesario registrarse para asistir a las charlas. Si pensás traer un equipo para instalar o configurar, por favor registrate y lee detenidamente las aclaraciones y datos al respecto.

Sobre el UNLUX

El UNLUX es un grupo de usuarios y entusiastas del Software Libre, que existe desde el 2005 y realiza sus actividades en el marco de la Universidad Nacional de Luján. Participa en el FLISOL desde el 2006, instalando y difundiendo diferentes ventajas de usar el Software Libre en el ámbito Educativo, Social, Técnico, Profesional y Personal.

Para conocer las vías de comunicación, podés empezar por www.unlux.com.ar y suscribirte a la lista de correo y el canal IRC.

En agenda

jueves, febrero 27, 2014

Fin de semana

Boulet otra vez refleja la vida mejor que uno mismo.

Press START !!
Me pregunto... ¿cómo hace para meterse en mis pensamientos?

domingo, febrero 23, 2014

Analizando ejecutables de Windows con software libre

Tras haber repasado durante la creación de gpefile.py las estructuras internas del formato Portable Executable (PE) que describe a los ejecutables de Windows, otro de los pet projects en los que he picado código es un sencillo generador de gráficos de flujo de control (control flow graphs) para comprender el flujo de ejecución de los binarios de dicha plataforma.

Haciendo uso de pefile, pygraphviz y principalmente pymsasid, con unas 400 líneas de python es posible partir de un ejecutable cualquiera y obtener un gráfico como el siguiente.

autochk-fragment2autochk - full image (big!) - dot file

Desde luego este es un ejemplo extremadamente sencillo y trivial, analizando el binario autochk.exe de ReactOS 0.3.16, un sistema operativo binary-compatible con Windows. El gráfico de flujo de control para un ejecutable moderno crece rápidamente a raíz de los distintos caminos que el compilador debe generar para representar las instrucciones presentes en el código fuente original de la utilidad (autochk.c.

El diagrama siguiente fue construido a partir del ejecutable hideflag.exe, que es un código histórico en este blog. He marcado en amarillo el bucle principal que se puede apreciar en el código fuente de la aplicación (en pascal, esta vez).

hideflag-fragment2hideflag -full image (big!) - dot file

Para el despliegue de los gráficos, dado que los visores en Debian se mambean con imagenes de varios megapíxeles (bugs 581891 y 163090 ya reportados en varios lugares), les recomiendo descargar los archivos .dot originales y visualizarlos directamente con la excelente utilidad xdot (también hecha en python, de paso).

En el diagrama, cada bloque básico inicia con un punto de entrada (primera instrucción a ejecutar, EIP, o destino de un salto) y finaliza con otro salto, una instrucción de retorno (ret), o bien abruptamente como resultado de un límite impuesto arbitrariamente por mí (esto último para evitar generar gráficos grandes con los cuales dot se marea, y créanme que algunos tardan más de diez minutos en desplegarse).

El bloque marcado en verde es comúnmente el primero en ejecutarse. Las flechas de colores indican, obviamente, el flujo de ejecución posible. Los códigos son los siguientes:
  • Flechas azules salto incondicional;
  • Flechas negras continuación/fall-thru (instrucción que sigue directamente a la actual);
  • Flechas violetas llamada a función (sólo la ida, se asume que la llamada a función retorna a la instrucción siguiente);
  • Flechas verdes bloque a ejecutar en un salto condicional si la condición evaluada resulta verdadera;
  • Flechas rojas bloque a ejecutar en un salto condicional si la condición evaluada resulta falsa;
  • Flechas celestes callback al que apunta algún argumento del código (no implica que la función sea llamada en ese momento)
Las flechas punteadas representan saltos encadenados (JMP-to-JMP) que suelen verse en los binarios y que el script trata de reducir a fin de simplificar las secuencias en los gráficos generados (de ahí que el destino no coincida con las dirección del salto original, pero a la larga termina allí).

En algunas instrucciones, si el operador es una dirección de memoria válida y refiere a la sección de datos del ejecutable, el script añade el contenido de dicha dirección como comentario a la instrucción desensamblada (útil para ver cadenas de formato pasados como parámetro a llamadas a impresión en pantalla); si en cambio refiere a la sección de código, interpreta que se trata de un puntero a función utilizada como callback. De forma similar, trata de interpretar las llamadas a funciones de bibliotecas (resumiendo CALL y CALL-to-JMP) mediante información existente en la IAT si estuviera disponible.

Desde ya, el código que genera estos gráficos tiene innumerables errores y limitaciones (ej, evaluación de saltos indirectos, mejor detección de callbacks, interpretación de loop/loopX y muchas más cosas). En resumen, es sumamente borrador, por eso no lo puse en línea con esta entrada. En realidad lo estoy utilizando como preprocesador para una fase siguiente de decompilación. En cuanto lo tenga mas o menos prolijo lo subo a una cuenta de github, por si a alguno le interesa. También me va a servir a mí para acostumbrarme a usar ese servicio, hehe.

Lo curioso de todo es lo cómodo que resulta Debian para hacer análisis de ejecutables de Windows, jaj.