Etapas de un programador

30 10 2008

Vía: LEMMKE

Veamos..

1. Que rara se ve esa función! :S

2. Esa linea creo que esta mal!

3. Si!!, ahí hay un error!!

4. Ya la corregí, si va a funcionar y a la primera! :D

5. Que bien se mira mi programa :)

6. Pero.. Por qué no corre bien? :|

7. Yo no veo errores , ¿y si no lo encuentro?! :S

8. ¡Que *! , que son esos ceros?!!!

9. por qué carajo pasa eso #$!@? !!!!!

10. No puedo hacerlo :(

11. ¿Y cual cree que es el problema doctor?

Si, creo que se apega a la realidad.





[How to]Creando y aplicando parches individuales

13 10 2008

Ya era hora de escribir otro tutorial :) , y elegí escribir sobre los tan comunes parches que por x razón ocupamos a cada momento.

(En GNU/Linux)

Comencemos por el concepto:

Cita wikipedia:

En informática, un parche es una sección de código que se introduce a un programa. Dicho código puede tener varios objetivos; sustituir código erróneo, agregar funcionalidad al programa, aplicar una actualización, etc.

Ahora vamos a aclarar que el patching se pueden aplicar a 2 tipos de cosas:

  • Al código fuente del programa
  • Al archivo binario (ya compilado)

Por ahora vamos a concentrarnos en el primer tipo.

/*Parcheando un código fuente*/

Supongamos que entramos a una web de algún proyecto open source, el código fuente de la aplicación que se esta creando en el proyecto esta disponible desde allí, nos ponemos a revisar el código y vemos algo como esto:

#include <stdio.h>

main() {

int *pnt;
int i, a[3]={1,2,3};

for(i=0; i<3; i++) {
pnt = &a[i];
printf(“Puntero = %d\n”, pnt);
}

return 0;

}

(Obviamente no es un programa real ni parte de ningún otro, solo un ejemplo que escribí que va a servir para demostrar el uso de los parches)

Ohh, ahí hay un error en una linea, si se compila de esa forma el programa no va a funcionar como debe.

printf(“Puntero = %d\n”, pnt);

En esa parte, hay un error en el acceso del contenido del puntero, falta el *.

Un error mínimo que no va a dar ninguna clase de problemas en la compilación pero que haría que el programa fuera inútil, sabiendo esto ¿que podríamos hacer?.

Pues una opción seria aplicarle un parche que corrija el error.

¿Como hacerlo?

En GNU/Linux disponemos de dos herramientas que hacen el trabajo extremadamente fácil.

  • diff
  • patch

Lo primero seria guardar el código fuente, como es un ejemplo, que tenga de nombre programa1.c , ahí tendríamos el programa tal cual esta con el error incluido, ahora creo otro archivo con el mismo código pero cambiado la linea del error por esta:

printf(“Puntero = %d\n”, *pnt);

De hecho ese seria el único cambio (en este caso agregar el *), el código reparado lo guardamos como programa2.c

Ahora viene la magia, diff es un programa que compara 2 archivos y muestra las diferencias de este, en este caso eso es justo lo que necesitamos.

La sintaxis:

diff programa1.c programa2.c > parche.patch

Analizando la linea notamos que compara los dos programas y las diferencias las escribe en un nuevo archivo (parche).

Ya tenemos el parche, ahora solo falta aplicarlo, esto lo vamos a hacer con otra aplicación de los sistema unix que se llama patch.

Lo que hace este es que toma las diferencias de 2 programas (el parche) y esta diferencia la aplica al archivo original.

La sintaxis:

patch -p1 -i parche.patch programa1.c

Analizando, el -p1 se puede omitir en este caso, se ocupa más que todo cuando hay parches en directorios diferentes y sirve para omitir los slash y la ruta superior, el -i viene de input y lee el archivo parche.patch

Si todo salio bien el sistema arroja este mensaje:

patching file programa1.c

Y si no hay errores el programa ya debería estar parchado :)

Ahora podemos enviarle el parche a los lideres del proyecto para que lo reparen :) .

/*Parchando un archivo binario*/

Ahora vamos al segundo caso, que pasa si el código fuente del proyecto ya fue compilado (aun con el error) y también ya fue distribuido.

Primero seria sustituir el archivo de la descarga de la web por el correcto, pero.. ¿y los usuarios? , cuando son programas muy grandes no se les puede decir que desinstalen todo y vuelvan a bajar el programa y después volver a instalarlo, en este caso es mejor aplicarle un parche que solucione el error.

Tomando como ejemplo el mismo programa, el mal acceso al contenido del puntero hace que muestre datos completamente diferentes a lo que debería:


:|

¿Como generar el parche?, pues relativamente es bastante fácil, y vamos a usar las mismas herramientas que cuando parchamos el código fuente.

Como anteriormente teníamos el código fuente original (con el error) programa1.c y el código reparado programa2.c, vamos a compilar los 2 código para generar 2 binarios.

gcc programa1.c -o programa1

gcc programa2.c -o programa2

Ahora vamos a compararlos de esta manera y a generar el nuevo parche:

diff -a –binary programa1 programa2 > patch

Revisando el comando, diff es la aplicación, el -a indica que va a tratar los archivos como texto y va a comparar linea por linea, el –binary que va a ser una comparación binaria y el parche va a ser de la misma forma, programa1 y programa2 son los archivos ya compilados y el > parche indica que la comparación va a generar un parche de nombre parche (xD) .

Con eso ya tenemos todo listo, ¿como lo aplicamos?.

Pues bastante parecido al ejemplo anterior y siempre usando patch.

La sintaxis del comando en este caso resulta bastante simple:

patch –binary programa1 parche

patch es la aplicación encargada de parchar, –binary que va a ser un trabajo binario, programa1 es el fichero al cual le vamos a aplicar el parche y parche es el nombre con el que guardamos el patch (todo debe estar en el mismo directorio).

Si tenemos éxito en estos 2 pasos tendríamos que tener algo parecido a esto y con buenos resultados :D :

Ya sirve!!

En caso de que quisiéramos facilitarle aun más el trabajo al usuario y evitar que se ponga a ejecutar comandos podríamos hacer todo automáticamente con un pequeño script en bash:

#!/bin/bash

cd /ruta donde se encuentra el binario/

wget www.webdelproyecto/parche

patch –binary programa1 parche

y con eso solo tendría que ejecutar el scrpt.

P.e: ./parcheprograma.sh

Como se dieron cuenta es un tutorial sencillo, sin muchas complicaciones pero que se puede ampliar mucho más dependiendo la cantidad de ficheros que queramos parchar el modo de hacerlo entre otras cosas, pero esto sirve como algo introductorio, hay muchos más parámetros de estas 2 herramientas que pueden conocer leyendo los manuales de estos :

man diff

man patch

:D

Y con esto termina todo, un saludo a los que leen.

Referencias:

Parche (computación)

/* By Lyoko

www.lyoko.sv.tc xD */





Esquema de colores en Vim

1 10 2008

En la entrada anterior puse una captura de mi vim, pero que no coloreaba las funciones (en ese momento no sabia por qué había dejado de hacerlo xD).

Resulta que anteriormente ya había reinstalado vim pero no fue solo una reinstalación sino que también le pase el parámetro –purge (borre toda la configuración y la deje como estaba por default), y para que vim coloree como debe de ser hay que descomentar un par de lineas de este archivo:

/etc/vim/vimrc

Descomentar la linea:

syntax on

Y también:

set background=dark

Guardar y con eso ya debería mostrarse como debe:


:)





Esa maldita librería conio.h

25 09 2008

El titulo esta algo dramático pero sirve para llamar la atención :) ..

Como un pequeño offtopic:

No se como paso pero se habían borrado los comentarios de aproximadamente los últimos 15 días , sepa si moví algo sin querer pero de que paso, paso, pero por suerte el lunes pasado me decidi a sacar el primer backup del blog xD, (si, el primero) , gracias a eso puede restaurar esos comentarios desde el phpmyadmin :) .

Ahora al tema principal:

Una de las virtudes del humano es el poder evolucionar y progresar a cosas mejores, es nuestra naturaleza y se aplica incluso a la informática. Los tiempos cambian y la era en la que MSDOS era el único rey ya termino, sin embargo y por desgracia todavía quedan secuelas de ese “reinado” y un claro ejemplo es el uso que todavía se le sigue dando al mítico TURBO C , y que muchos todavía nos vemos obligados a escribir programas exclusivos para windows en las universidades y/o trabajos.

Para los que estan relacionados con el medio les va a sonar familiar la librería conio.h, si, esa misma cabecera de borland que usamos a cada momento para escribir los programas en modo texto y para ocupar las famosas funciones, getch(), clrscr(), gotoxy(x,y), y que es el impedimento #1 de porque no es común tener programas portables de windos a linux..

(conio.h no es una librería de GNU/Linux).

¿Entonces ante esta problemática que se puede hacer?.

Para nuestra fortuna y como era de esperarse ya pensaron en eso y tenemos una gran alternativa al conio.h, borland y al turbo c que se llama Ncurses, me voy a ahorrar el trabajo de dar el concepto porque ya esta explicado en la wikipedia, asi que solo estan a un click de conocerlo :) .

La instalación es fácil en debian y derivados, basta con hacer:

apt-get update

apt-get install ncurses*

Ahora, un programa sencillo que use ncurses seria uno que te pida el nombre y después lo imprima en pantalla xD (uy) .

En ncurses la sintaxis es similar a si estuviéramos usando el stdio.h y conio.h, sin embargo hay algunas cosas nuevas que le dan más potencia a curses y que hacen que varien algunas cosas un poco con respecto a lo que estamos acostumbrados.

A lo bueno (escribir un programa usando ncurses) :

Lo primero y obvio incluir la cabecera en el programa:

#include <ncurses.h>

después viene la declaración de la función principal, la variable del tipo char y ahora algo importante que es iniciar la pantalla que se hace con la función initscr() , podemos borrar los datos que ya pudieran estar en la pantalla con erase() (vendría siendo el equivalente al clrscr() del conio.h)

La impresión se hace con printw(), y la sintaxis es la misma que el printf(), la lectura de datos se hace con scanw() y la sintaxis es la misma que el scanf(), por ultimo si queremos esperar un caracter del teclado se hace lo mismo que en turbo c, getch(), ahora algo importante también, cerrar la ventana con endwin() y sin olvidar el común return 0 .

queda de esta forma:

Nótese que estoy usando nada más el gedit que viene incluido en gnome, no necesito más.. después solo es cuestión de guardar el programa con una extensión .c

Si quisiéramos sentirnos más leets a la hora de programar podemos usar el vim para codear en la misma consola:

/* No se porque no me coloreo las funciones ni resalto nada :| , pero en un vim sin problemas se ve bastante bien xD */

¿Y como se viera el programa compilado y ejecutado?

/* Para compilar (via terminal):

gcc ncurses.c -o ncurses -lncurses

gcc es el compilador de linux, ncurses.c es el código fuente del programa ncurses es el nombre con el que se va a guardar el programa y el -lncurses es para obligar al compilador a usar la librería. */

Bonito verdad? :) , ese mismo programa se podría hacer en turbo c usando las librerías nativas de el:

Y ejecutándolo:

Pero esta no es toda la grandeza de usar ncurses, sino que es mucho más potente y amplio que usar conio.. con ncurses se pueden hacer las mismas cosas que con conio y mejor, p.e:

El uso de colores en la consola, permite hacer programas que funcionen con pestañas :D , entre otras cosas. Espero poder enseñarles otro programa en alguna otra entrada cuando ya haya ampliado más el tema :) .

Para ver la documentación se puede con:

man ncurses

Y para ver la documentación de las funciones que este trae con:

man función

Hablando un poco del entorno de programación si a alguien no le gusta usar gedit o vim siempre pueden hacerlo por medio de anjuta para más comodidad :)

El tema de ncurses es largo, hay documentación en Internet pero a mi parecer todavía esta deficiente, asi que yo también ando en la búsqueda de encontrar información mas completa, pero por el momento y si les interesa siempre se le puede preguntar al gran google.

¿Pero los programas escritos usando ncurses como los podemos usar en Windows?

Pues se puede con PDCurses pero el tema lo dejo para otra entrada del blog, porque creo que ya se agrando mucho esta xD

—–

Una de las frases que más he escuchado durante toda mi vida por parte de mi familia, es que en un medio laboral competitivo los que logran algo son los mismos que han logrado diferenciarse del resto, entonces lo mejor es siempre aprender cosas nuevas y por qué no transmitirlas a gente que les interese tanto como a mi? :)

Saludos a los que leen !





Google Chrome en Linux

14 09 2008

Pasando por alto los misterios y los parecidos curiosos del logo (nótese que la comparación va más allá haciéndola con una webcam y el zorro (o panda) de firefox xD :D ), posteo la forma para ejecutar el navegador estrella de google en los sistemas GNU/Linux ;) .

Hace unos días lanzo en primicia un beta de su navegador propio llamado Google Chrome, por desgracia solo disponible por el momento para windows.

Bastante simple pero funcional como es la costumbre de Google, asi que para gente como yo que no necesitamos mucho para ser feliz es un buen producto xD

Ahora a lo bueno, ¿Como ejecutarlo en Linux? .

Hay 2 formas hasta el momento, desde la web oficial se pueden descargar las fuentes y compilarlo uno mismo, sin embargo eso no significa que va a funcionar a la perfección, ya que esa opción esta orientada más a los desarrolladores de la compañía que a otra cosa.

Entonces por el momento lo mejor y la opción más conocida… wine!

Lo primero es descargar la versión más nueva y necesaria de wine para poder correrlo sin problemas (1.1.4)..

Esta versión por no ser la estable todavía no esta en los repositorios, asi que el método para la instalación va a ser diferente al típico apt-get install (bueno, no inmediatamente xD).

Entonces tenemos que agregar unos nuevos repositorios para poder usar esta versión, la forma de hacerlo para diferentes distribuciones esta aquí:

http://www.winehq.org/site/download

Una vez seguidos los pasos ya podemos instalar wine normalmente:

apt-get install wine

o

aptitude install wine

Ahora antes de comenzar con la instalación del GC hay que hacer estas cosas antes:

cd $HOME
rm winetricks
wget http://www.kegel.com/wine/winetricks
mv .wine .wine.old
sh winetricks msxml3 corefonts firefox flash winxp

Explicando, se mueve al directorio home del usuario, en caso que haya antes un script llamado winetricks lo borra.

Después descarga el nuevo script, y renombra el fichero .wine a .wine.old, por ultimo se ejecuta el script (winetricks) que se encarga de descargar e instalar esos programas en wine que son necesarios para el funcionamiento del GC.

Una vez hecho esto ya podemos instalar el navegador :D

Descarga

Una vez descargado solo se ejecuta por medio del wine, bien con click derecho y “ejecutar con wine” o por la terminal con un:

wine nombre.exe

Ahora esperar que se descargue e instale.. :D

Pero.. todavía no esta listo para usarse del todo, para eso hay que pasarle 2 parámetros al ejecutable.

wine chrome.exe –no-sandbox –new-http

Y ahora si, ya podemos usar el GC en Linux :D

Free Image Hosting at www.ImageShack.us

Pero mi opinión es que esto no es algo muy practico, usarlo con el wine le mata todas las virtudes que posee, deja de ser ligero y sencillo y se vuelve bastante pesado, aparte de algunos problemas que note como que los vídeos de youtube aparecen cabeza abajo (wtf?! o_O).

Asi que es mejor esperar un rato a que este la versión oficial para los linuxeros :D , entonces este método queda como una forma friki/geek que tienen más utilidad para ser presumida de que podes usar GC en Linux que para usarlo realmente.

Referencias





Para …

9 08 2008

Primero que todo quiero dedicar esta entrada a alguien que conozco por uno de los foros en los que participo.. A.K.A Thais una gran persona bastante culta, inteligente y educada a la que le había prometido desde hace un tiempo dedicarle un pequeño espacio en este blog :)

Difícil conocer personas hoy en día bastante integrales hablando de físico e intelecto, sin embargo ella es una de ellas.

Con un toque particular en la forma de ver la vida y una gran facilidad para expresarse algo que la vuelve una gran persona aparte de buena onda e inteligente, con la que a la mayoría les gustaría tratar :)

//..

Y por ultimo una imagen que me gusto bastante xD (aunque me hubiera gustado más que tuviera la espiral de debian en lugar del logo de ubuntu)

Vía Think Ubuntu

(Saludos a los lectores)





TMSNC -> Textbased MSN Client

4 08 2008

Demasiado calor esta haciendo hoy.. ¿Que no se suponía que solo se ponía asi en la Semana Santa? :| , donde esta la lluvia cuando se necesita?..

Ya ontopic hoy estaba buscando un modulo para perl con el aptitude con la intención de facilitarme la tarea de programar un bot para el protocolo MSN :) , (desde hace casi un año que tengo la idea pero siempre se queda en palabras, asi que hoy me dije a mi mismo que si lo iba a terminar).

Bueno el resultado de la búsqueda no me dio la librería que quería, pero me arrojo otro resultado bastante interesante. Una aplicación que se llama tmsnc y que en la descripción decía que era un cliente del MSN a modo texto :o .

Me dispuse a instalarlo y si era lo que decía, de hecho me gusto bastante por la sencillez con la que trabaja y la portabilidad que puede llegar a tener :)

Como se deduce el programa esta en los repositorios asi que se puede instalar con el atp-get install:

$ apt-get install tmsnc

al ejecutarlo:

$ tmsnc

Se puede ver que no hay ninguna clase de pierde xD, como repito la interfaz es bien sencilla e intuitiva:

Ya logueados nos aparece toda la información de la cuenta, nickname, contactos, status, etc.

En la parte superior estan las opciones básicas de todo cliente:

Agregar contactos, cambiar nick, cambiar el status, etc.

A mi me gusto bastante por lo simple que es.. aunque aparentemente el proyecto ya fue descontinuado por otro proyecto este sigue siendo totalmente funcional y bastante util más si les gustan las cosas limpias y sencillas como a mi :D





La biblia del Software Libre

1 08 2008

Y ya estoy de vacaciones :) , acabo de comenzar y ya tengo otra vez xD .. por un lado esta bien voy a tener más tiempo para dedicarle a este blog y tal vez me animo a lanzar de una vez por todas el otro proyecto del planeta de blogs :D (Hoy si).

Y también siguiendo con la linea de lecturas educativas :D .. ahora viene en descarga directa la Biblia del SL.

Verdaderamente es un gran material si se esta llevando o se piensa llevar una carrera relacionada con la informática o incluso aunque no sea asi, el conocimiento nunca es malo :D

Contenido de la Biblia del Software Libre:

001 Introduccion al software libre.
002 Sistema operativo gnu linux basico.
003 Administración avanzada del sistema operativo linux.
004 Desarrollo de aplicaciones web.
005 Utilidades y herramientas.
006 Aspectos legales Parte 1.
006 Aspectos legales Parte 2.
007 Bases de datos.
008 Implatación de sistemas.
009 Ingeniería del software.
010 Introducción al desarrollo de software.
011 Redes computacionales.
012.1 Aspectos avanzados en seguridad en redes módulos.
012.2 Aspectos avanzados en seguridad en redes apendice GFDL.
012.3 Aspectos avanzados en seguridad en redes apendice.

Idioma: Español.
Tamaño del Archivo: 39MB.
Formato del archivo: PDF
Mirror: BIBLIA SOFTWARE LIBRE

Fuentes: http://www.softwarelibre.net/la_biblia_de_software_libre y PortalLinux

Visto en: http://ubunturoot.wordpress.com/

//–

También voy a aprovechar la entrada para pedirles que le den un voto a este blog en este sitio:

http://elsalvadorblogs.blogspot.com/

Justamente esta en la categoría de Geek y Tecnología, el concurso es simple, reune a algunos bloggers de calidad nacional y después  lanza una encuesta publica por unos días, al final el ganador de cada categoría pasa a una ronda final donde se saca al mejor de todos :) .

Entonces ya estan informados xD

Y por último:

[youtube]http://www.youtube.com/watch?v=3aAza2nwa8Y[/youtube]

Saludos lectores, mirandas y bots!





La ética hacker y el espíritu de la era de la información

21 07 2008

Este es un E-Book que lei hace más de un año, habla sobre las conductas y la ética seguida por los hackers reales.

El libro es interesante, menciona varias puntos llamativos, como la relación de la utilización del tiempo con el dinero y el uso del dinero como motivación.

Habla como Linus Torvalds no escribió el kernel de linux en un horario de oficina, si no que trabajaba pausadamente porque ocupaba el día para cosas más importantes (como jugar con la pc :) )

En resumen es una lectura interesante (o eso me pareció a mi xD) , y por si alguien penso que es un libro para hackers, pues la verdad no, simplemente es una forma de entender el funcionamiento de estas mentes y de la cual se pueden aprender bastantes cosas que incluso pueden servir como guías para algunos aspectos de la vida.

/* Como el de trabajar a su propio ritmo, jaja eso es lo que hago yo y la verdad que los resultados no son tan malos. (si se puede equilibrar el ocio con el trabajo) :D */

El contenido:

Prefacio
Prólogo; ¿Por qué el hacker es como es? La ley de Linus, por Linus Torvalds

PRIMERA PARTE: LA ÉTICA DEL TRABAJO

Capítulo 1. La ética hacker del trabajo
Capítulo 2. ¿El tiempo es dinero?

SEGUNDA PARTE : LA ÉTICA DEL DINERO

Capítulo 3. El dinero como motivación
Capítulo 4. La academia y el monasterio

TERCERA PARTE : LA NÉTICA O LA ÉTICA DE LA RED

Capítulo 5. De la netiqueta a la nética
Capítulo 6. El espíritu del informacionalismo

CONCLUSIÓN

Capítulo 7. Descanso

Epílogo: Informacionalismo y la sociedad red, por Manuel Castells
Apéndice: Breve historia del hackerismo en informática

Notas
Bibliografía
Agradecimientos

Pekka Himanen
Linus Torvalds
Manuel Castells

Pekka Himanen | Prólogo de Linus Torvalds | Epílogo de Manuel Castells

También viene la letra de la canción del software libre xD :D

Únete a nosotros, comparte el software;
libérate, hacker, libérate.
Únete a nosotros, comparte el software;
libérate, hacker, libérate.
Los avaros amasan mucho dinero;
pues qué bien, hacker, pues qué bien.
Pero no ayudan a su prójimo;
y no puede ser, hacker, no puede ser.
Cuando tengamos bastante software libre
en nuestro poder, hacker, en nuestro pod

esas necias licencias las tiraremos,
lo vas a ver, hacker, lo vas a ver.
Únete a nosotros, comparte el software;
libérate, hacker, libérate.
Únete a nosotros, comparte el software;
libérate, hacker, libérate.

El vídeo:

[youtube]http://www.youtube.com/watch?v=xSkCny-HtTw[/youtube]

/* Como que ya me estoy saliendo del tema pero no importa :) */

Bastante entretenida..

Esa me acordo a esta otra:

[youtube]http://www.youtube.com/watch?v=YvmDwE4YXIU[/youtube]

jaja, voy a comenzar a visitar otra vez los canales IRC, ultimamente deje de entrar a los que frecuentaba.

Ese ha hecho varios vídeos, casi todos relacionados con la informática, pueden ver lo vídeos en youtube

y esa canción me acordo de esta otra xD :

[youtube]http://www.youtube.com/watch?v=9Iozx-6XymE[/youtube]

Más!, dame C++!, quiero programar con vosss!

La canción es pegajosa pero…

/* yo os maldigo pilas, colas y listas dinámicas */

Y bueno ya estoy llegando al fin del post, no saben lo difícil que ha sido escribir la entrada por culpa de mi mouse xD, cuando vayan a comprar uno asegúrense que no sea marca AOpen, hace como una semana que lo consegui y hoy de la nada se puso hipersencible :?

El culpable:

Desgracia de mouse..

Con todo esto y ni estava poniendo el link para descargar el E-Book, aquí esta el link:

[Descargar de MU]

Y solamente, hasta otra entrada :D





Empaquetando y creando nuestros .deb

17 07 2008

Ya tenia un tiempo sin actualizar esto, pero en recompensa ahora traigo un tuto sobre la empaquetacion y creación de los .deb :D

Disfrutenlo, luego voy a poner otra entrada tocando otros temas xD

***********

Ya desde hace días quería preparar este tutorial, pero tenia un problema con unas dependencias en mi debian y no me dejaba instalar algunas de las herramientas necesarias para trabajar, hasta el día de hoy fue que arregle todo.

Comencemos:

¿Que es un paquete .deb?

Cita Wikipedia:

deb es la extensión del formato de paquetes de software de Debian, y el nombre más usado para dichos paquetes. Como Debian, su nombre proviene de Deborah Murdock, esposa del fundador Ian Murdock.

El programa predeterminado para manejar estos paquetes es dpkg, generalmente via el sistema APT.

Los paquetes deb también pueden ser convertidos a otros formatos de paquetes y viceversa usando la aplicación Alien.

¿Como se empaqueta y para qué?

La utilidad de empaquetar es ahorrarle al usuario final el trabajo de compilación e instalación, haciendo todo eso de una manera mucho más eficaz con la única condición de tener instaladas en el sistema las dependencias del binario.

P.e es mucho más practico para un usuario novato correr la siguiente linea:

dpkg -i nombre.deb

Que bajar los archivos fuentes, instalar las herramientas de compilación, depurar errores, cumplir las exigencias del código y mover todo a sus respectivos directorios.

¿Como hacerlo?

Lo primero y obvio es tener las fuentes del programa que deseamos empaquetar.

En mi caso yo he elegido los drivers para mi cámara (gspca) que actualmente solo estan disponibles las fuentes en un .tar.gz

¿Que se necesita?

/* Las siguientes herramientas instalarlas usando aptitude o apt-get */

build-essential
dh-make
devscripts
fakeroot

En caso de que vayamos a crear paquetes oficiales:

patch
diff
patchutils

Una vez que ya tengamos las herramientas instaladas podemos ir a lo bueno.

Como dije antes yo voy a empaquetar el driver de mi cámara, primero descargar las fuentes de nuestra distribución para evitar problemas a la hora de instalar el driver ya empaquetado.

Descarga:

http://mxhaard.free.fr/download.html

Como el tutorial es de debian, obviamente baje las fuentes para mi distribución:

http://ftp.de.debian.org/debian/pool/main/g/gspca/gspca_01.00.20-1.tar.gz

Una vez descargado el fichero, lo descomprimo y se me crea un directorio con este nombre:

gspca-01.00.20

/* Para descomprimir el comando es: tar -xzvf nombre.tar.gz */

Una vez creado el directorio me muevo a el, y ahi dentro corro la siguiente linea:

dh_make -e fclyoko@gmail.com -s

/* la -s viene de single, y el -e es para agregar el mail de manteiner a la documentación */

Una vez corrido el comando tenemos una lista con las especificaciones del paquete, simplemente doy enter para aceptarlas.

Con esto ya tenemos ganado bastante terreno en el proceso de empaquetado, ahora tenemos un nuevo directorio de nombre debian dentro de el hay una serie de ficheros que se encargan de dar las ordenes a la hora de instalarse, también su respectiva documentación (p.e el changelog y copyright), antes de dar el paso final y empaquetar tenemos que comprobar que tenemos las dependencias que requiere el programa ya instaladas en nuestro sistema.

Simplemente abrir el archivo control y comprobar cuales son y si ya estan instaladas.

En este caso son estas:

Depends: debhelper (>= 5.0.37), module-assistant, bzip2

Si ya estan instaladas podemos dar el paso final:

debuild -us -uc

Esto se va a encargar de compilar y construir todas las reglas de instalación del paquete. Si no hay errores en el directorio padre tendríamos que tener un nuevo fichero de nombre:

gspca-source_01.00.20-1_all.deb

Si!, ya esta empaquetado! ahora se puede instalar sin mayores problemas con el comando dpkg -i

/* dpkg -i gspca-source_01.00.20-1_all.deb */

Ahora tenemos un bonito fichero .deb en lugar de las fuentes en tar.gz, podemos distribuirlo como queramos.

// SEGUNDA PARTE

Con lo anterior ya podemos empaquetar, ahora viene algo mejor todavía, crear nuestro propio programa y empaquetarlo también en un .deb

Lo que voy a hacer va a ser algo fácil y con un método que se conoce como Sucio  por ser bastante rustico xD.

Lo primero es crear un directorio con este formato

programa-versión

/* Asi lo pide el canon de debian, p.e: lko-1.0 */

una vez creado el directorio lko-1.0 nos movemos ahi y ahi dentro creamos otro directorio de nombre usr nos movemos a el y creamos otro ahi dentro con el nombre bin ahi dentro es donde vamos a colocar el programa :) .

lo primero es crearlo en la terminal:

cat > lko.c

Editamos el archivo con cualquier editor y le ponemos las lineas de código del programa.

Como solo es un ejemplo, voy a hacer un script que muestre la url de mi blog al correr el comando lko en la terminal:

el código debe ser asi:

#include <stdio.h>

main() {

printf(“\n\n\t http://www.lyoko.sv.tc \n\n”);
return 0;

}

Lo compilamos asi en caso de que se llame lko.c

gcc lko.c -o lko

Con eso ya se genero un binario de nombre lko y podemos borrar el otro fichero de nombre lko.c

Una vez terminado esto salimos de esos dos directorios

/* cd ../../ */

Y deberíamos estar dentro del primer directorio que creamos (lko-1.0) ahi creamos uno nuevo y de nombre le ponemos DEBIAN nos movemos a el y creamos un archivo de nombre control , este lo llenamos con los siguientes datos:

Package: nombredel paquete
Version: numero de la version
Architecture: tipodearquitectura
Maintainer: el encargado de mantenerlo
Description: una corta descripcion

/* en caso de querer el paquete para todas las arquitecturas poner la palabra all, p.e:

Architecture: all

*/

Una vez creado el archivo control salimos al directorio padre (justo afuera de lko-1.0)

Y solo corremos este comando:

dpkg-deb -b lko-1.0

Si todo sale bien se debe crear un nuevo archivo de nombre lko-1.0.deb :)

El script esta listo para instalarse:

dpkg -i lko-1.0.deb

Ya instalado lo podemos probar escribiendo en la terminal el comando lko debería salir la url de la pagina con alguna tabulación :D

Y eso fue todo.. Comentarios, dudas, correcciones son bien recibidas

/* Esto fue para empaquetar, hay otro método que lo que hace es debianizar las fuentes de los programas, osea modificarlas para que sean instalables con el dpkg, si quieren saber sobre este lean la entrada en la wikipedia:

http://es.wikipedia.org/wiki/Deb

Sin embargo esto necesita un poco más de conocimiento ya que seria necesario editar algunos ficheros para su correcta adaptación a debian o similares */

Referencias:

http://www.debian.org/doc/manuals/reference/ch-program.en.html
http://www.elrincondetolito.com/content/view/59/31/
http://www.wikipedia.org

Autor:
Lyoko (fclyoko@gmail.com)
www.lyoko.sv.tc

Notas finales:

La mayoría de tutoriales y tips que escribo siempre van a ser publicadas en mi blog :)