Linux Containers

Linux — Domingo 07 de Abril de 2013, 19:15


A nivel de máquinas virtuales de uso genérico (por lo tanto descartando ScummVM o cosas similares) siempre me manejé con VirtualBox. Aunque ahora es de Oracle y no lo miro con buenos ojos, siempre funcionó bastante bien (sin pedirles cosas demasiado locas) y es una buena manera de tener un Windor corriendo aunque uno esté todo el día en Linux (por ejemplo, para poder hacer facturas en la AFIP, la puta que los parió).

Incluso, cuando laburaba en Ericsson, que me obligaban a usar Windor, tenía un VMWare con un Ubuntu instalado (un Gutsy, o un Hardy, creo... cuanta agua bajo el puente!) que me servía para cuando tenía que hacer cosas serias a nivel de red, o para el caso cualquier cosa divertida.

Pero nunca había encontrado una forma piola de tener máquinas virtuales de Linux bajo Linux. Y con "piola" me refiero a que funcione bien y que sea relativamente fácil de armar.

Y acá entra LXC.

Linux container

Aunque LXC no es propiamente dicho una "máquina virtual" (es más bien un "entorno virtual"), igual permite la ejecución de un linux que no se mezcla a nivel de configuraciones ni de paquetes instalados ni de lo que uno puede romper del sistema con la máquina que uno tiene.

¿Para qué se puede usar? En mi caso lo uso mucho en el laburo, ya que mi máquina de desarrollo es un Ubuntu Quantal, pero los sistemas que corren en los servers son bajo Precise o Lucid (entonces tengo un container para cada uno). Y también los tengo pensado usar para probar instalaciones desde cero (por ejemplo, al armar un .deb por primera vez, probar de instalarlo en una máquina limpia).

¿Cómo se arma y usa un contenedor? Luego de instalar los paquetes necesarios (sudo apt-get install lxc libvirt-bin), la creación de un contenedor es bastaaaaante simple (de acá en adelante reemplazar en todos lados el "mi-lxc" por el nombre que ustedes quieran para el contenedor):

    sudo lxc-create -t ubuntu -n mi-lxc -- -r precise -a i386 -b $USER

Desmenucemos. El -t es el template a tomar, y el -n es para el nombre que le vamos a dar. A partir de ahí vemos un "--", lo que significa que el resto son opciones para el template propiamente dicho. En este caso, que use el release Precise, la arquitectura i386, y mi mismo usuario.

Lo maravilloso de esto es que el container, adentro, tiene mi usuario, porque el home es compartido! Y con esto todas las configuraciones de bash, vim, ssh, gnupg, etc, con lo cual "hacer cosas" adentro del lxc es directo, no hay que configurar todo (pero, al mismo tiempo, podemos "romper" el home desde adentro del container, ojo al piojo).

Para arrancar el container podemos hacer

    sudo lxc-start -n mi-lxc

Y esto nos va a dejar con el prompt listo para loguear, y acá alcanza con usar los propios usuario y password. Una vez adentro, usamos el container como si fuera una máquina nuevita.

Todo muy lindo, pero igual me gustan hacerle algunas configuraciones que hacen el uso aún más directo y sencillo. Y estas configuraciones, a nivel de sistema, son basicamente para que podamos entrar al container más fácil, y usar desde adentro aplicaciones gráficas.

Para entrar más fácil, tenemos que tener Avahi configurado. Más allá de instalarlo (sudo apt-get update; sudo apt-get install avahi-daemon), hay un detalle a toquetear.  Adentro del lxc, abrir el archivo /etc/avahi/avahi-daemon.conf y aumentar bastante el rlimit-nproc (por ejemplo, de 3 a 300).

Con esto ya estamos listos para entrar fácil al container. Lo podemos probar en otra terminal; hacer:

    ssh mi-lxc.local

Lindo, ¿no?. Pero también está bueno poder forwardear los eventos de X, así podemos levantar aplicaciones gráficas. Para eso tenemos que tocar lo siguiente en el host (o sea, no en el container sino en la máquina "real"): editar /var/lib/lxc/mi-lxc/fstab y agregarle la linea:

    /tmp/.X11-unix tmp/.X11-unix none bind

En el container, tenemos que estar seguros que /tmp/.X11-unix exista, y reiniciarlo luego de estas configuraciones.

También necesitamos setear DISPLAY. Esto yo lo mezclé en el .bashrc, poniendo algo también para que cuando entro por ssh me cambie el color del prompt (incluso, poniendo distintos colores a distintos containers). Lo que estoy usando es:

    if [ `hostname` = "mi-lxc" ]; then
        export PS1='\[\e[1;34m\]\u@\h:\w${text}$\[\e[m\] ';
        export DISPLAY=:0
    fi

Para terminar, entonces, les dejo los tres comandos que más uso en el día a día con los containers, más allá de la instalación en sí: levantar el container (fíjense el -d, que lo levanta como un demonio, total nos conectamos por ssh); conectarnos (fíjense el -A, para que forwardee la conexión del agente de autenticación); y finalmente apagar el container:

    sudo lxc-start -n mi-lxc -d
    ssh -A mi-lxc.local
    sudo lxc-stop -n mi-lxc

Que lo disfruten.


Internet por el celular

Linux — Jueves 31 de Diciembre de 2009, 17:29

Con Moni y Feli pasamos unos días en Cardales, entre Navidad y Año Nuevo, en la casa de unos amigos que se iban de vacaciones toda la semana.

El lugar no tiene Internet, y aunque esto a mí no me jode porque tengo siempre laburo para hacer estando offline, se me ocurrió hacer una prueba... ¿cómo me conecto a Internet en la laptop, pero usando el transporte de datos de la red celular?

Nunca lo había hecho, y encima tenía que comunicar la laptop con el teléfono a través de bluetooth, lo que siempre que probé resultó ser una tarea no trivial... pero nunca lo había probado con Ubuntu Karmic.

Agarré el fonito entonces y le prendí bluetooth, y lo mismo hice con la laptop (los tenía apagados en ambos para que no consuman energía).

En la laptop me apareció un iconito de bluetooth, al que le hice click y elegí la opción de Configurar dispositivo nuevo. Me apareció una pantalla que me contaba que me iba a guiar a través de la configuración, se puso a buscar dispositivos y me encontró el teléfono.

Lo seleccioné y me apareció un número de unos pocos dígitos, indicando que pusiera lo mismo en celular. Voy a este y veo que ya estaba pidiéndome la clave. Ingresé el número y ya estaba listo: ambos dispositivos quedaron acoplados.

La pantalla que me guiaba en la laptop avanzó sola al mensaje final, en el que me decía justamente que el dispositivo ya estaba configurado. Pero en este ventana también había un checkbox que decía "usar este dispositivo para conectarse a Internet".

Hice click en el mismo, y automáticamente hizo que el teléfono se conectara, y que la máquina usara esa conexión: unos segundos después el Network Manager me indicaba que estaba conectado a la red usando el teléfono. ¡Y listo! Ya podía usar Internet.

La verdad, todo el proceso me sorprendió mucho, ya que en cuatro clicks y sin tener que consultar ninguna documentación ni hacer cosas raras (ni siquiera cargar un driver del teléfono, o indicar qué modelo de teléfono tenía), pude conectar mi máquina a Internet de esta manera.

Bugfixes y paquetes

Linux — Martes 17 de Febrero de 2009, 08:19

En el lugar en donde estoy actualmente trabajando (Senior Software Developer, en Canonical, programando Python), hacemos en general algún software que es propietario, y algún software que será liberado a la comunidad.

Este post es sin embargo acerca de otra faceta del laburo, faceta en la que incursioné durante estos días a raiz de un problema que tenía al hacer unos tests. Esta faceta es la de trabajar en un paquete que nosotros usamos pero que no es nuestro, e invertir tiempo del laburo (horas, días) en solucionar algo... en definitiva, devolver algo a la comunidad del software libre del que tanto uno toma.

Durante dichos tests, necesité levantar los attributos extras de un archivo. Como obviamente las pruebas las hago desde Python, lo primero que probé usar es la biblioteca xattr, pero me tiraba un error extraño y feo.

Al principio dudé de la biblioteca en sí, y me puse a excavar desde la misma, hasta las llamadas del sistema directamente, con lo cual aprendí bastante de estos atributos extendidos. Pero vi que estaba todo bien.

Luego empecé a subir desde la llamada del kernel a la biblioteca FUSE (que es la que te permite codear vos mismo un sistema de archivos y usarlo sin tener que integrarlo al kernel). Acá es donde encontré un problema. Entendí cómo debería funcionar, vi que estaba mal, busqué el código fuente del proyecto, y verifiqué que incluso en lo más actualizado de ese código (en trunk) también estaba mal.

Así que me traje el código, lo compilé y empecé a probar nuestro sistema con la versión que iba corrigiendo, hasta que solucioné el problema. Una vez que verifiqué todo, generé el parche correspondiente y lo subí a Launchpad, en un bug que abrí por este problema, para que sea considerado su inclusión en futuras versiones y que esto esté resuelto para todos.

Por otro lado, en el laburo, para algunas cosas en desarrollo armamos Paquetes Privados de software, de manera que los desarrolladores nos suscribimos a ello y si hay actualizaciones estas son ofrecidas a nosotros a través del mismísimo Administrador de Actualizaciones del Ubuntu (este es una funcionalidad pública del Launchpad llamada Personal Package Archives (PPA)).

Entonces, como nosotros para desarrollo necesitamos esto corregido, me puse a agregar a nuestro PPA una nueva versión de este paquete. Paso a comentarles cómo es este proceso.

Bajé las fuentes limpias del paquete (apt-get source python-fuse). Hice esto en un directorio vacío y ví que aparte del directorio con las fuentes, aparecieron unos archivos de control, los cuales borré prestamente porque no los iba a necesitar. Copié el parche que había creado al directorio correspondiente de las fuentes (debian/patches), agregando el nombre de ese parche en el archivo debian/patches/00list. Finalmente anoté una entrada en el changelog de las fuentes (esto se hace con un programita auxiliar, ya que deben tener un formato específico; en mi caso hice dch -D <distro> -v <version_del_paquete> "mensaje para el changelog").

Ya con las fuentes modificadas, armé los archivos de control y paquete como para subir, lo que se hace con la órden debuild --no-tgz-check -S. Para saber que está todo bien, y que todo lo que armé se va a instalar bien, fui al directorio superior (donde antes tenía las fuentes, y ahora dejados por la órden anterior, nuevos archvivos de control), y usamos un programita que arma un root falso e instala todo lo que tiene que instalar para ver que nuestro paquete se acopla bien al resto del sistema: sudo pbuilder --build *.dsc.

Finalmente, para subir el paquete al Launchpad: dput -f <host> *.changes

Luego, lo dejé reposar algunas horas a fuego lento, y al rato Ubuntu nos indica que hay una actualización disponible, y es efectivamente este paquete, :)

Siempre con problemas de red en los hoteles

Linux — Viernes 02 de Mayo de 2008, 09:55

Estuve en Uruguay desde el domingo a la noche hasta el miércoles a la mañana.

Aunque sabía que el domingo iba a llegar directo a dormir, y que el laburo el lunes y martes iba a ser maratónico (y lo fue), me fijé si el hotel daba servicio de internet inalámbrica (wifi, bah), y si era gratis o no. El hotel es el Cala di Volpe, y sí, da internet, y está incluido en el precio de la habitación (o sea, no había que pagar extra).

El lunes a la noche, llegamos de la oficina al hotel y al toque nos fuimos a comer (sí, era así de tarde), pero un par de chicos tenían que dejar las cosas, hacer el check-in, y eso me daba diez minutos para probar la conexión. Booteé el Ubuntu, elegí la red Piso03 en el NetworkManager, y cuando me pidió la clave puse la que me habían indicado en recepción: Boutique03 (el slogan del hotel es "Boutique Hotel", y cada vez que le preguntas la clave al tipo de recepción, te dice, "Boutique, como está escrito acá", señalando el cartel que tienen en la pared de fondo).

De más está decir que no se conectó, sino no estaría escribiendo esto. Como estaba seguro de la clave, empezé a probar, en el NetworkManager, distintos tipos de clave, pero nada. Luego de dos o tres combinaciones (en cada una tenés que esperar a que no se conecte, lo cual tarda un par de minutos), tuve que bajar porque era la hora acordada para ir a comer.

Casi amaneciendo

Ya habían bajado algunos compañeros de trabajo, y les comenté que no me había podido conectar. Ellos me dijeron que sí habían podido, les pregunté el tipo de clave que habían usado, y no lo sabían (la interfaz no se lo había preguntado). En Windows, las máquinas de Ericsson tienen instalado el Intel Pro Wireless, un cliente de conexiones que anda muy bien, así que le eché la culpa al maldito de siempre, el NetworkManager de Ubuntu (pero, por otro lado, como no sé conectarme a mano utilizando los distintos tipos de claves, tuve que caer en él).

Fui a recepción, entonces, y le pregunté qué tipo de clave usaban. El flaco me contestó "¿cómo tipo?, es 'Boutique03'" (sí, señalando al cartel de su espalda). Le dije que habían distintos tipos de claves para wifi, que podían ser WPA, WEP, de 64 bits, de 128 bits, etc. El flaco dijo que no sabía. Le pregunté entonces si la clave era como estaba en el cartel, o era todo en mayúsculas o todo en minúsculas, y el flaco me contestó "así como en el cartel... igual es lo mismo, mayúsculas y minúsculas es lo mismo...". Yo que tengo una debilidad con esa confusión (me parece tan lúcido como decir que la Tierra es esférica o plana es lo mismo), internamente lo mandé a cagar y me fuí con mis compañeros de trabajo a comer.

Al volver, pensé en probar en Windows, a ver que pasaba. Ahí me dijo que la red era tipo "WPA Personal", pero igual no funcaba. Luego de probar distintas combinaciones, se conectó con la clave toda en minúsculas. Volví al Linux. Elegí esa clave, puse todo en minúsculas, y anduvo. Fui a linea de comando, tiré un "iwlist scan", y me encontraba la red en cuestión, indicando que era "WPA tipo 1" (o algo así).

Con sol

Como conclusión de todo este proceso, tengo dos detalles que quiero compartirles.

El primero es que parece que yo vivo en un mundo donde las mayúsculas y las minúsculas son dos cosas distintas, y parece que mucha gente no. No sé bien por qué, pero ni siquiera se plantean si una clave o frase está escrita de una manera o la otra. También me asusta cuando la gente escribe en letra de imprenta cosas como "eSTa", o, peor aún, cuando ni siquiera son consistentes con cada letra, dejando palabras totalmente mal "arMadAs".

El otro punto es esa tendencia de los programas a esconderte información, incluso cuando se ve que no la manejan correctamente. Si el Network Manager me hubiese mostrado directamente la info que recibía, me hubiese solucionado la vida. Pero no, lo quieren hacer lindo, pero lo hacen mal (se quedan a mitad de camino), y el que pierde es el usuario. Hay mucho camino por recorrer en ese aspecto.

PD: las fotos no tienen nada que ver, pero las saqué desde la habitación del hotel, y están lindas, :)

Arreglando varias cosas

Linux — Sábado 06 de Mayo de 2006, 09:33

Le dediqué finalmente un par de horas a la máquina de casa, y estuve arreglando varias cosas...

Lo primero que ataqué fue SSH, ya que no estaba seguro de que se pudiese acceder por ese protocolo desde la internet pública (podía acceder desde intranet, pero no desde afuera). Con la ayuda de Dani, compañero de trabajo, pude probarlo, y mediante un traceo con el Ethereal, me aseguré de que se puede entrar.

Como segundo paso, me fijé por qué el ddclient no me estaba actualizando Dyndns. Luego de buscar y buscar, al final encontré el problema: se ve que al tener dos direcciones IP en mi máquina (una pública y una interna), el ddclient no se decidía cual actualizar. Solución: toqué el archivo de configuración y ahora funca bien, pudiendo llegar a mi máquina desde afuera usando el nombre taniquetil.homelinux.net.

Ya que iba todo bien, fui a por lo más complicado: terminar de arreglar mi sitio (esto desde dónde ustedes están leyendo esto). El sitio andaba, pero con unas direcciones feas, y si configuraba para usar las direcciones lindas se rompía todo.

Me puse a leer con cuidado unos mails de Mariano, donde proponía tres soluciones, y me tiré a corregir el sitio usando la que era más elegante, pero en la que me metía con algo que nunca había hecho: reglas de conversión de direcciones de Apache.

Luego de jugar como una hora, terminé dejando todo lindo y pulidito. Puede ser que ahora haya algo que no ande, quizás debería tocar alguna configuración más. Si encuentran algo, por favor avisen.

Desastre

Linux — Miércoles 07 de Diciembre de 2005, 09:40

30 años de vida, 20 años cerca de una computadora, y sigo cometiendo errores (aunque más avanzados que antes, jeje).

Como aperitivo, antes de la historia, tres hechos en contra y tres a favor:

En contra:
  • No tenía backup
  • No tenía el /home en otra partición
  • Estaba seguro de que algo era de una manera, pero era de otra

A favor:
  • Algo de experiencia en esto tengo
  • Algo del tema sé
  • Tengo un orto a prueba de balas

Bueno, a la historia (esto se va a poner un poco techie).

Luego de una semana donde la máquina se cayó dos o tres veces por cortes de luz, luego de que se cuelgue un par de veces, y al haber encontrado varios errores en el filesystem de particiones que no eran la booteable (donde tengo montada la raiz), decidí correrle un fsck al barra.

Sabía que es todo un tema correrle el fsck a una partición que está montada, pero creí que era suficiente, para estar seguros, pasar a init 1, que es modo single-user. Estaba equivocado.

Pasé a single user mode, por supuesto habiendo bajado X, y corrí el fsck: empezó a dar unos errores feos. Cuando quise ejecutar alguna otra cosa, me daba error al tratar de encontrar los ejecutables (por ejemplo, el locate).

Al ver que no podía hacer nada, decidí rebootear antes de seguir tocando. El GRUB dió error, alpiste, no tenemos sistema operativo. Agarré el SysRescueCD, booteé este Linux de emergencia, y le corrí el fsck a la partición que parecía que se había roto, por supuesto sin montarla, y me daba un error tan feo como que no reconocía el no se qué, y que pruebe con una versión más nueva de fsck, :O.

¿Qué era lo más nuevo que podía instalar? Había recibido los CDs de Ubuntu 5.10 un par de semanas atrás, y por ellos al dormitorio fui, aprovechando que tenía justo una partición FAT de alrededor de 50GB que me había quedado libre luego de una redistribución de archivos que había hecho la semana pasada.

Instalé entonces Ubuntu (fácil, como es normal en Ubuntu, me encontró todo, preguntó poco, etc). Le corrí entonces el fsck a la partición que tenía rota, y empezó a encontrar mil errores. Bueno, no, mil no. Quince mil. Toneladas, infinidad. Tantos que en un punto me resigné, corté el fsck y lo volví a correr con -y, para que tome todas las respuestas automáticamente y haga lo que crea necesario.
Mientras tanto, con mi viejo buscábamos alguna forma de ver algo, a ver si se podía recuperar info o analizar algo de lo que estaba pasando. Hay un programa que se llama debugfs y que permite acceder en bajo nivel al sistema de archivos, ver y tocar cosas, etc, pero estaba más allá de nuestros conocimientos, así que basicamente nos resignamos, dejamos que termine el fsck, y cada tanto me pegaba la cabeza contra la pared por estúpido.

Finalmente terminó. Monté la partición y me encontré con quichicientos directorios con nombres como #23423, y archivos con la misma estructura. Empiezo a recorrer esos directorios... y fui encontrando archivos válidos.

Luego de revisar, revisar y revisar, fuí encontrando todo lo que necesitaba: mi /home, el /usr/local/bin donde tenía unos scripts que había hecho, el /etc que siempre tiene info de configuración que uno va armando, el /root, etc...

En otras palabras, terminé con la máquina usable, corriendo Ubuntu (lo estoy configurando de a poco en este momento, hace rato que lo quería probar y es una buena oportunidad), y con toda la info recuperada en otro disco.

Acabo de actualizar el sistema operativo con todos las últimas versiones de los paquetes que tiene instalados (Ubuntu no instala muchas cosas, así que los updates fueron pocos), y ni bien reinicie la máquina (porque una de las actualizaciones es el kernel mismo), voy a hacer backup.

Y para terminar el post, mi recomendación para ustedes: hagan un backup, ahora.

No no no, no digan después, háganlo ahora. Ahora. Ni siquiera terminen de leer este post. Hagan un backup, ya.

Ya.


Compartiendo Internet

Linux — Sábado 06 de Agosto de 2005, 14:26

En casa hay cuatro máquinas, algunas en producción y otras de desarrollo (¿?), y una está conectada a Internet (la mía). Me propuse compartir la conexión para que todas tengan banda ancha sin tener que pagar más conexiones.

Antes que nada, tenía que decir si era posible trabajar con una sola placa de red, conectando mi placa, las otras tres máquinas y el módem ADSL a un HUB. Para esto debía hacer que mi placa de red trabajase con dos IPs, la pública (que es la que me asigna Speedy) y una privada, para la LAN hogareña. Luego de investigar bastante en Internet, llegué a la conclusión de que no sólo es más complicado, sino que esta solución no funciona muy bien a menos que sepamos configurar muy bien el tema de las colisiones y demás inconvenientes ocasionados por la dualidad de IPs para la misma placa. Como no quería meterme en más de quince quilombos al mismo tiempo, decidí comprar otra placa de red y agregarla a mi máquina.

Como las placas de red son algo que duran, y no se ponen tecnológicamente viejas, compré una buena: 3Com. No sabía muy bien como instalar una segunda placa de red en el Linux, por lo que quise buscar un poco en Internet como hacerlo. Como no encontré nada en los primeros cinco minutos decidí probar a ver que pasaba. Abrí la máquina, coloqué la placa, cerré, enchufé, arranqué el Linux (Fedora Core 3). En tiempo de booteo, el Linux busca nuevo hardware, y me saltó un cartelito indicando que había encontrado una nueva placa de red (especificando el exacto modelo que yo tenía), que si la quería configurar ahora, después o nunca. Dije "ahora", le cargué la IP correspondiente, y listo, ¡voilá!, tenía dos placas de red.

El Linux terminó de arrancar y me quise conectar a Internet, pero no se conectaba. Como root tiré un ifconfig -a y me di cuenta que, aunque antes la única placa que tenía era eth0, la nueva placa se había puesto como eth0 y la vieja estaba como eth1. Entonces fui a la configuración de la red, y puse que Speedy estaba en eth1 y no en eth0 como antes. Listo, ahora también tenía Internet.

Siguiendo este howto, configuré algunos detallitos y reinicié la red para que tome los cambios (un comando, nada de apgar la PC ni esas cosas...). Este tutorial, sin embargo, me explicaba las reglas de ipchains para configurar el IP-Masquerading (que es lo que permite compartir conexión), así que seguí con este post en un foro que explicaba usando iptables (que es lo que traen los Linuxes modernos para decir qué entra y qué en la máquina a nivel de red).

Fui analizando que significaba cada opción, y ejecuté alguno de las órdenes que decía, otras no. Configuré la máquina de mi viejo, para la red nueva interna que había armado ahora, pero no funcionaba. Tenía ping al exterior, pero no DNS. Así que levanté un DNS en mi máquina, pero tampoco: entonces tenía que bajar un nivel a ver que pasaba. Abrí el ethereal y vi que mi máquina estaba rechazando las conexiones. Entonces me puse a ver las reglas de iptables y me di cuenta que estaba haciendo pasar por el firewall a las máquinas internas también. Puse para aceptar todo lo que venga de adentro, y listo, ¡funcionó!.

:D


El poder de las herramientas correctas

Linux — Miércoles 05 de Enero de 2005, 09:52

Esto lo escribo solamente como un ejemplo redondito del porqué una plataforma Unix o Linux es mucho más poderosa que una plataforma Windows. Ejemplos como este se suceden varias veces al día; el tiempo ganado ampliamente supera el invertido para aprender estas herramientas.

El trabajo que tenía que realizar era, de un archivo de log, saber cuales LAs se estaban supervisando. No entraré en detalle acá de qué significa una LA, pero consideren que se representa como un número. En otras palabras, tenía que extraer de un log cuales de esos "números" existían.

El log en cuestión estaba en un archivo que pesaba 333MB. Sí, un archivo de texto de 333 Megas. ¿Cantidad de lineas del archivo? Más de cinco millones.

Por supuesto, no me acordaba del formato interno del archivo, entonces debía ver algunas lineas del mismo para recordármelo. Piensen un segundo cómo editarían un archivo de esta magnitud en Windows. ¿Ya lo pensaron? Vuélvanlo a considerar, y sigan leyendo luego de que se den cuenta de cuantas veces van a tener que reiniciar la PC hasta poder terminar de trabajarlo.

Bueno, en Pytonisa (que es el Linux que tengo instalado en la oficina) hice un "head statlogs_20050102.txt", y me mostró instantáneamente las primeras diez lineas del archivo. Allí pude ver cual era el formato:

15842;S;01158353525;15842;Message delivered;00:00
15842;S;02616502229;15842;Message delivered;00:00
15005;S;02362535926;15005;Message delivered;00:00
15842;S;02616592586;15842;Message delivered;00:00
15842;S;03814423758;15842;Message delivered;00:00
15004;S;01154975858;15004;Message delivered;00:00
15004;S;02652483462;15004;Message delivered;00:00
15005;S;01158335496;15005;Message delivered;00:00
15005;S;01158268262;15005;Message delivered;00:00
15004;S;02914189236;15004;Message delivered;00:00

Yo tenía que ver cuales eran todos los numeros que estaban en la primer columna. ¿Complicado? ¡Para nada! Usé la órden...

awk -F';' '{print $1}' statlogs_20050102.txt | sort -u

...que me dió el resultado deseado:

111
15000
15002
15003
15004
(etc)

¡¡en 78 segundos!! ¡¡más de cinco millones de registros!! (consideren que es una PC de escritorio que está siendo compartida por varios usuarios; ya que estamos, les comento que hace 207 días que está prendida, trabajando sin chistar, sin tener que reiniciarla).

Y aún más importante, en este minuto y monedas, yo no tuve que hacer nada: así hubiese tardado diez minutos, trabajó la máquina sola, yo perdí veinte segundos en armar la órden y luego estuve leyendo mails, etc...

¿Cómo habrían hecho esto en Windows?

Instalando software en Linux

Linux — Viernes 27 de Agosto de 2004, 07:59
Hay un excelente artículo sobre como afinar las capacidades Multimedia de Fedora (está en los enlaces, a la derecha de la página, en la categoría de Linux). Su autor es Eric S. Raymond.

Es muy instructivo seguirlo, por las explicaciones de base que da. Incluso es bueno para aprender sobre las tecnologías de actualizaciones automática de Fedora (y otras distribuciones de Linux).

Específicamente, muestra como usar el up2date, yum y apt-get, explicando como configurarlo, precauciones a tener y demás info (al respecto, tuve algunos inconvenientes con los mirrors que recomendaba ESR, pero buscando encontré mirrors más cercanos).

El yum (que es el que más me gustó de los tres) es fantástico.

En Windows, cuando uno quiere instalar un software, debe buscar el instalador, bajarlo, ejecutar el instalador, y luego seguir los pasos indicados por el mismo para que el programa quede funcional. Peor, si uno quiere actualizar un software, debe bajar la nueva versión, enfrentarse a los pasos anteriores, y esperar que no traiga conflictos con la versión anterior instalada (o desinstalar previamente la anterior, con lo que tenemos el problema de cómo mantener las configuraciones y demás data entre ambas versiones, para que no se pierdan).

En Linux, con yum, es casi demasiado fácil. Por ejemplo con "yum update Mozilla", automáticamente trajo la última versión del Mozilla, la instaló (hizo la actualización de la anterior, manteniendo toda la configuración de los perfiles), sin mayor interacción por parte del mía.

O por ejemplo cuando quise instalar un nuevo programa, "yum install xmms", y listo. Luego de una barra de download, preguntarme si confirmaba la instalación, ya tenía el programa en mi máquina. No tuve que realizar toooodos los pasos que son necesarios en Windows.

Ah! Y también resuelve (verifica/baja/instala) el tema de las dependencias automáticamente, sin mayor inconveniente.



Powered by LifeType