Repositorio y paquetes debian¶
- Índice de contenidos
- Repositorio y paquetes debian
Repositorio Debian¶
En devel.gong.org.es está instalado un repositorio debian creado y mantenido a través de la herramienta reprepro en el path /srv/webs/gong.org.es/sites/packages/deb
Distribuciones¶
Están instaladas las distribuciones (modificable a través del archivo conf/distributions):
- stable : para los paquetes estables que generemos
- testing: para pruebas, cosas nuevas y dependencias raras
- lenny-backports: backports de paquetes necesarios, externos a gong y no existentes en debian/lenny
Las rutas deb de acceso a las distribuciones son (a incluir en el /etc/apt/sources.list):
- deb http://packages.gong.org.es/deb stable main contrib
- deb http://packages.gong.org.es/deb testing main contrib
- deb http://packages.gong.org.es/deb lenny-backports main contrib
Meter/actualizar paquetes al repo¶
Con todos los ficheros del paquete que hayamos generado en el directorio incomming y desde el path del repositorio, ejecutamos:
reprepro -Vb . include testing incoming/gong-import-export_0.1-1_i386.changes
(depende de en que distribucion queramos meterlo al include le decimos testing, stable o lenny-backports)
Paquetes Debian¶
Los paquetes debian que vayamos generando los mantendremos a través del SVN del proyecto ( https://svn.forge.morfeo-project.org/gong/debian ) con el sistema de versionado típico (trunk, tags y branches) para cada uno de los paquetes.
Generación de un nuevo paquete¶
Esta forma de hacer los paquetes, separa el desarrollo del contenido de los propios paquetes. IMPORTANTE: Nunca se debe tocar el código original durante el mantenimiento del paquete y si es necesario cambiar algo, debe hacerse con parches (dpatch) .
En primer lugar, exportamos algunas variables de entorno para que no tengamos que rellenar estas cosas luego:
export DEBFULLNAME="Santiago Ramos (Semilla SL)" export DEBEMAIL="sramos@semillasl.com"
es conveniente que tengamos una clave GPG generada asociada a esa dirección de correo para que el proceso pueda firmar los paquetes correctamente.
Como tenemos el código del paquete a generar en el SVN, exportamos el upstream desde un tag:
svn export https://SVN/tags/VERSION PAQUETE-VERSION
Hacemos un tar.gz del tag:
tar cvzf PAQUETE-VERSION.tar.gz PAQUETE-VERSION
y desde el directorio PAQUETE-VERSION generamos un paquete mínimo:
dh_make -e sramos@semillasl.com -f ../PAQUETE-VERSION.tar.gz -s -b -c gpl
Con el parámetro -s le decimos es un binario, un paquete simple, o sea, que no ni libreria ni modulo del kernel. Con el parámetro -b le estamos indicando que utilice cdbs.
De momento los ejemplos y el README.Debian nos sobran, por lo que nos los cargamos:
rm debian/*ex debian/*EX rm debian/README.Debian
y con esto ya tenemos lo basico para el paquete. Como aqui no hay que compilar ni nada (estamos empaquetando una aplicación web) solo utilizamos debhelper para que meta las cosas en sus sitio, así que editamos el fichero debian/rules y quitamos la línea del makefile, puesto que con la del debhelper nos vale, ejecutará todos los comandos debhelper y aplicará lo que haya en debian: por ejemplo ejecutará dh_installdocs y aplicará lo del fichero docs, tambien dh_install y aplicará lo que haya en install y asi con examples, manpages, etc...
Ahora construimos el paquete (aunque sea vacio) y lo importamos en el svn de paquetes:
dpkg-buildpackage -rfakeroot svn-inject <archivo.dsc> https://gong.org.es/svn/gong/debian
Con esto nos creará un directorio de trabajo con el nombre del paquete sin número de versión y un tarball con el tar original (orig). El resto podemos cargárnoslo.
Desde este directório de trabajo en el que toquetearemos todo lo necesario de dentro del directorio debian (es muy importante no tocar nada referente al código importado).
Como solo hay copia de ficheros y no compilación, en el fichero debian/dirs definiremos cuales son los directorios a crear (es conveniente dejar una línea final), y en el fichero debian/install los ficheros/directorios que instalaremos (p.ej.):
modules/ usr/share/PAQUETE/
nos copiará el directorio modules dentro del directorio /usr/share/PAQUETE (no es posible renombrar los directorios en la copia, aunque sí lo es copiar fichero a fichero).
Ya podemos ejecutar el svn-buildpackage que nos generará los paquetes finales:
svn-buildpackage -rfakeroot
En el caso de que hagamos modificaciones y queramos comprobar el resultado sin subir los cambios al svn, utilizaremos el flag --svn-ignore para indicarlo:
svn-buildpackage -rfakeroot --svn-ignore
Comprobamos con lesspipe ../build-area/*deb cómo ha ido la generación del paquete, y vemos que se están copiando los directorios indicados.
Si se quiere hacer enlaces, se usa el fichero debian/links y para docu el fichero docs. En estos solo hay que poner el nombre del fichero o dir sin la ruta despues.
Las modificaciones que realicemos, las anotaremos en el debian/changelog usando el comando dch:
dch "Cambio efectuado"
Si en algún punto tenemos dudas de qué es lo que está haciendo realmente, un svn-buildpackage --svn-export deja en build-area la estructura para ejecutar dpkg-buildpackage y ver que hace dentro del dir debian/.
Para hacer la comprobación final de cómo de bien nos está saliendo el paquete:
lintian <archivo.changes>
(si le añadimos el flag -i nos indicará la forma de solucionar los warnings o errores que detecte)
Tras esto, retocamos en el copyright, rellenar lo que pone de autores y demas y en control cambiamos Section a web y Priority a optional y añadimos dependencias al Package si es que las tiene y una descripción corta (a continuación de Description) y larga (desde la línea siguiente a Description y con un espacio al comienzo de cada línea). En el caso (como este) de que sea un paquete que no necesite compilación, ponemos architecture a all para no condicionarla a la de nuestra máquina.
Más info del cdbs en: https://perso.duckcorp.org/duck/cdbs-doc/cdbs-doc.xhtml
Para estabilizar una versión que vayamos a liberar:
svn-buildpackage --svn-tag
y tocamos el change y lo subimos.
Si queremos subir el paquete al repo, podemos utilizar dput.
Actualización del código de un paquete¶
Cuando haya actualizaciones en el código original y tengamos que regenerar el paquete, volvemos a hacer un export del tag a empaquetar:
svn export https://SVN/tags/VERSION PAQUETE-VERSION
hacemos un tarball que tenga la versión incluida:
tar cvzf PAQUETE-VERSION.tar.gz PAQUETE-VERSION
y desde nuestro directorio de trabajo lo actualizamos:
svn-upgrade ../PAQUETE-VERSION.tar.gz
aunque no hace el commit para permitir que comprobemos y hagamos los cambios necesarios.