[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Como crear paquetes deb en menos de una hora



[Mandé este mensaje a es.comp.os.linux, pero supongo que aquí interesará
más]

Hola.
Lo siguiente no es un how-to sino más bien un "así lo hice yo". Espero
que siguiendo estos pasos podais empezar a hacer paquetes deb. Debo
decir que mis conocimientos del tema son muy elementales, de hecho todo
lo que sé lo cuento aquí.

Para ello he creado un paquete .deb de un programa muy pequeño (no me
apetecía tirarme más de una hora compilando un programa para que luego
fallase pon algún error tonto).

Mi intención era coger las fuentes originales de un pequeño programa de
los que van en la debian y crear un paquete .deb de él. Pero me he
encontrado en el disco duro el programa Infocoste de Santiago Romero que
puede valer perfectamente para este cometido ya que es un programa muy
pequeño con licencia GPL y que desde luego no existe en formato .deb.

Son las 23:54 (acaba de terminar Expediente X).

- En primer lugar copio en ~/fuentes/deb/ el fichero infocoste-1.0.tgz.
Como parece que las fuentes en debian usan la extensión .tar.gz pues lo
renombro a infocoste-1.0.tar.gz.

- Creo el directorio infocoste-1.0 y extraigo en él el contenido del
archivo.

- Me sitúo en dicho directorio.

- Exporto en la variable EMAIL mi dirección de correo electrónico.

- Ejecuto deb-make. Si el paquete hubiese sido nativo habría tenido que
añadir el parámetro "native".

- El programa me pregunta el tipo de paquete. Entre las opciones que me
muestra eligo "Single Binary".

- El programa me dice que modifique los ficheros del directorio debian
recien creado y que me asegure de que el programa se instala en $DESTDIR
y no en /. (Veo además que en el directorio padre se ha creado otro
directorio llamado infocoste-1.0.orig donde se han extraido las fuentes
originales).

- El programa infocoste no lleva Makefile así que lo tendré que crear yo.

(Ya son las 00:17)
- Vale, los dos scripts (conecta y desconecta) y el programa en sí
(infocoste) se instalarán en /usr/bin. El README y el connect.log (un
fichero con conexiones de ejemplo) se instalarán en /usr/doc/infocoste.
Aquí hay que asegurarse de que se instalará en $DESTDIR. Pongo la
sección "install" del Makefile que acabo de crear para que se vea claro:
install:
    cp conecta $(DESTDIR)/usr/bin/
    cp desconecta $(DESTDIR)/usr/bin/
    cp infocoste $(DESTDIR)/usr/bin/
    -mkdir $(DESTDIR)/usr/doc/infocoste/
    cp README $(DESTDIR)/usr/doc/infocoste/
    cp connect.log $(DESTDIR)/usr/doc/infocoste/

- Tecleo 'make' para ver si el programa se compila correctamente. Oops
da unos cuantos warnings, espero que sea normal.

- Bueno, ahora me meto en el directorio debian, edito el fichero
copyright rellenando lo que falta (sitio donde lo bajé y tipo de
copyright).

- Edito el fichero README.debian y pongo los cambios que he hecho
(simplemente "Adaptación del paquete al formato .deb.")

- En el directorio debian hay unos cuantos ficheros *.ex que pueden
servir de ejemplo para por ejemplo crear manuales, páginas info, añadir
algo al crontab, etc. Como no es el caso no toco nada.

- En caso de que el programa tuviese algún fichero de configuración
habría que crear un fichero llamado conffiles con la lista de ficheros
de configuración. En este programa no hay, pero para que veais como es
os pongo un ejemplo de como sería:
/etc/timofometrorc
/etc/ppp/ip-up.d/0timofometro
/etc/ppp/ip-down.d/0timofometro
/var/log/timofometro.log
/usr/bin/timoinforme.sh
es decir, son paths absolutos.

- Ahora edito el fichero control. En el apartado "Section" pongo la
sección donde debe ir el paquete, pongo "net".
Modifico también el apartado "Description". En la primera línea pongo
una breve descripción, y en las líneas siguientes una descripción más
larga pero cada línea debe empezar por un espacio o tab.
En los demás apartados no tengo que cambiar nada.

- En el fichero dirs hay que poner los directorios en los que se
instalarán los distintos ficheros:
usr/bin
usr/doc/infocoste

- Ahora toca editar el fichero "rules". Aquí están las reglas para crear
el paquete deb. La verdad es que el programa deb-make ha hecho un gran
trabajo y no tengo que modificar nada.
Se compone de unas cuantas secciones:
    - build: aquí es donde se ejecuta el make y si hiciera falta el
./configure.
    - clean: pues eso, aquí hay que ejecutar el make clean.
    - binary-arch: aquí es donde se ejecuta el make install. Los ficheros se
instalarán en el directorio debian/tmp/.
Como he dicho antes no he tenido que modificar ninguna sección.

- Me salgo del directorio debian y regreso a ~/fuentes/debs/infocoste-1.0.

- Ahora ya por fin voy a crear el paquete .deb. Para ello ejecuto la
orden "dpkg-buildpackage -rfakeroot". El parámetro -rfakeroot es para
poder hacerlo sin tener que ser root (para ello hay que instalar el
paquete fakeroot). Si no quieres firmar el paquete por no tener el pgp
hay que poner además estos dos parámetros: -us -uc.

- Durante la creación del paquete se ha quejado de que los ejecutables no
tienen páginas de manual.

- Pues ya está. En el directorio padre se han creado estos ficheros:
infocoste_1.0-1_i386.changes, creo que contiene el fichero
debian/changelog
infocoste_1.0-1_i386.deb, el paquete deb listo para instalar
infocoste_1.0.orig.tar.gz, las fuentes originales tal como estaban antes
de modificarlas
infocoste_1.0-1.diff.gz, los parches con las modificaciones que he hecho
en las fuentes
infocoste_1.0-1.dsc, no sé que lleva, pero sirve para que al ejecutar
dpkg-source -x infocoste_1.0-1.dsc se extraigan las fuentes originales y
se apliquen los parches.

Son las 00:53. ¡Vaya qué casualidad he tardado casi justo una hora!
Tened en cuenta que he estado escribiendo esto a la vez que creaba el
paquete.

Aquí teneis la salida del comando dpkg --info infocoste_1.0-1_i386.deb:
new debian package, version 2.0.
size 10764 bytes: control archive= 765 bytes.
     569 bytes,    13 lines      control
     484 bytes,     8 lines      md5sums
Package: infocoste
Version: 1.0-1
Architecture: i386
Depends: libc6
Installed-Size: 25
Maintainer: Ricardo Villalba <ricardovm arroba arrakis.es>
Description: Programa facturador de llamadas telefonicas.
        Infocoste es un sencillo programa (y 2 scripts) que es capaz de:
        - Almacenar la fecha de inicio de conexion en un fichero especial
          de logs llamada connect.log en el directorio actual.
        - Almacenar la fecha de fin de conexion en el mismo fichero.
        - Posteriormente, procesar dicho fichero dandonos la informacion
          de gasto de bonos de Internet entre 2 fechas dadas.


Si más tarde se quiere incrementar el número de la versión hay que ejecutar
dch -n. Para más info "man dch".

Si alguien quiere estos ficheros para ver cómo lo he hecho me lo puede
pedir al email. De todos modos el programa seguramente no funcionará
correctamente porque el fichero connect.log por lo visto se crea en el
directorio actual y si lo ejecutas cada vez en un directorio distinto
pues... lío a la vista. Así que habría que modificar el código fuente (o
mejor los scripts) para asegurarnos que se utiliza siempre el mismo
directorio.

Ah, si os interesa un programa para controlar el gasto telefónico, bonos
incluidos, ¡¡¡echadle un vistazo al mío también!!!
http://members.xoom.com/rvmsoft/timofometro/index.html


Bueno esto es todo, si os ha parecido interesante puedo intentar
generalizarlo
un poco para un mini-howto.

Ricardo Villalba
ricardovm@arrakis.es
http://members.xoom.com/rvmsoft
http://rvmsoft.findhere.com






Reply to: