Usando git en el empaquetado de Debian


Como continuación de la entrada Preparar una máquina para el desarrollo de paquetes Debian, voy a explicar a continuación el uso que he hecho hasta ahora del sistema de control de versiones git en el empaquetado de Debian, ya que tiene bastantes peculiaridades y como es un tema bastante amplio es posible que modifique esta entrada añadiéndole las nuevas cosas que vaya usando o encontrando.

La referencia para empaquetar en Debian usando git es obviamente la página Packaging with Git de la wiki de debian, cuya lectura será necesaria en más de una ocasión.

Es posible empaquetar para Debian y no usar git, también es posible hacerlo y no usar ningún otro sistema de control de versiones como svn o mercurial, pero si estás empezando en el empaquetado de Debian vas a hacerlo con git, el esfuerzo vale la pena.

¡Queremos salsa!

salsa.debian.org es el entorno colaborativo que se pone a disposición de la comunidad Debian para que aloje allí sus repositorios para el desarrollo propio de Debian y aunque no es obligatorio su uso sí es muy recomendable. Salsa está basado en Gitlab, pero utiliza recursos propios del proyecto Debian y está gestionado completamente por gente del proyecto, sería posible usar otros repositorios para nuestros desarrollos, como github o bitbucket, pero como nos creemos esto del software libre y demás, pues vamos a usar salsa :).

Por cierto, en el sitio trends.debian.net se pueden ver cómo van evolucionando con los años diferentes versiones y opciones en el empaquetado y entre otras cosas se observa que se ha generalizado el uso de salsa y git en la comunidad. Ahora claramente se considera una buena práctica en el empaquetado de Debian la utilización de git en salsa.

No necesitas ningún permiso para abrir una cuenta en salsa.debian.org (aprovecho para usar por primera vez la abreviatura salsa.d.o), así que si no tienes cuenta, ya estás tardando en abrirte una. Sí necesitarás autorización para algunas cosas, por ejemplo, para que te incluyan como colaborador en el repositorio de un determinado equipo y participar en el desarrollo de los paquetes que mantengan, pero inicialmente puedes usar tu propio espacio para el desarrollo de los paquetes que tú vayas a mantener.

Caso de uso tipo

Para empaquetar un paquete de software en Debian debemos partir del código fuente original (que recibe el nombre de «upstream»), pero este software en general está en desarrollo y se va modificando. Existen diferentes estrategias en el desarrollo de software, siendo una de las más habituales la publicación de determinadas fases del desarrollo en lo que se conoce como una versión o «release», es decir, que los desarrolladores de «upstream» van modificando el código de su software hasta un determinado punto en el que consideran que tiene varias características que lo diferencian de una versión anterior y merece la pena publicarlo de manera expresa. Hay proyectos de software que publican versiones de manera muy frecuente y otros que lo hacen en intervalos muy largos, pero independientemente de la frecuencia de publicación, el punto de partida para nosotros será habitualmente el uso de esa versión publicada o «release».

Otro aspecto a considerar de la publicación de una versión de un proyecto de software es la numeración utilizada. Aunque en algunos casos se puede usar un nombre para denominar una versión (lo que se conoce como «codename»), lo más frecuente es usar una secuencia de números y en bastantes ocasiones separados por puntos para indicar si la modificación de la versión es más o menos significativa. No hay una forma general de hacerlo y diferentes proyectos de software adoptan diferentes estrategias de forma más o menos motivada, pero tradicionalmente la más usada ha sido MAJOR.MINOR.PATCH que indica en el primer dígito los cambios que se consideran muy importantes (MAJOR), en el segundo los cambios asociados a una nueva versión pero que no suponen un cambia radical frente a la anterior (MINOR) y por último cada una de las modificaciones o parches (PATCH). Siguiendo este patrón nos encontraríamos que un determinado proyecto pasa por las versiones 0.0.1, 0.0.2, 0.1.0 (release), etc. considerándose versiones publicables solo las que impliquen cambiar al menos el MINOR (una explicación detallada de la numeración de versiones puede verse en la wikipedia, en el artículo Software versioning).

La numeración de versiones no solo adopta el modelo anteriormente explicado, hay proyectos que usan por ejemplo solo un número secuencial y así pasan de la versión publicable 220 a la 245 o a la 636 y en otros casos se utiliza la fecha de publicación seguida de una serie de números: 2019.1 y 2019.2 por ejemplo. Sea cual sea la situación, partiremos de una versión publicada que se caracteriza por una serie de números separados por puntos, guiones u otros caracteres de separación. La política de Debian no acepta cualquier numeración en la versión de «upstream», como puede verse en la sección 5.6.12. Version, solo se aceptan versiones que incluyan números y los caracteres «.+-~» (punto, más, guión o virgulilla).

Las versiones publicadas del código fuente de un proyecto se distribuyen típicamente en un archivo comprimido (tar.gz, tar.xz, zip, etc.) y se descargan directamente desde el sitio del proyecto por http, ftp, etc. Nota: Si el proyecto original utiliza un sistema de control de versiones no deberíamos usar la última modificación realizada (el último commit) sino que deberíamos descargar la última versión publicada y etiquetada como tal.

En resumen, para hacer un paquete debian, partimos típicamente de un archivo de la forma nombre-MAJOR.MINOR-tar.gz que descargaremos y será el punto de partida para montar el repositorio git de desarrollo propio.

git-buildpackage

Como ya tenemos una máquina preparada para el desarrollo en debian, accedemos a ella e instalamos el paquete git-buildpackage, que nos va a permitir gestionar nuestro repositorio de desarrollo debian y poder modificarlo adecuadamente cuando se publique una nueva versión del código original:

sudo apt install git-buildpackage

Como se puede ver en la página del manual de gbp (git-buildpackage), existen diferentes comandos que podemos utilizar y los detalles de cada uno de ellos los podemos obtener en una página de manual propia, por ejemplo con:

man gbp-import-dsc

Siguiendo con el ejemplo de la entrada anterior del blog, vamos a crear una estructura de repositorio git usando como punto de partida un fichero dsc de un paquete que ya está hecho y que en estos momentos está huérfano (dnsproxy). En primer lugar accedemos al tracker de dicho paquete, donde obtendremos bastante información relativa a su desarrollo: tracker.debian.org/pkg/dnsproxy. En estos momentos este paquete:

  • Está huérfano
  • El repositorio de desarrollo apunta a svn.debian.org que ya no existe
  • La última versión publicada en debian es la 1.16.0-1 desde hace bastante años (es la misma desde al menos o-o-stable)
  • Existe una versión nueva en «upstream»: 1.17

Crear un repositorio en salsa

Accedemos a salsa y creamos un nuevo proyecto en nuestro espacio personal, que denominaremos pkg-dnsproxy. Este repositorio será público y lo clonamos en nuestra máquina mediante git, para ello creamos un directorio para trabajar y accedemos a él:

mkdir -p git/debian/dnsproxy
cd git/debian/dnsproxy/
git clone git@salsa.debian.org:alberto/pkg-dnsproxy.git
cd pkg-dnsproxy/

Utilizamos gbp para crear el repositorio git con las características propias de debian que comentaremos a continuación, partiendo del último fichero dsc disponible:

gbp import-dsc --allow-unauthenticated https://deb.debian.org/debian/pool/main/d/dnsproxy/dnsproxy_1.16-0.1.dsc --pristine-tar .

gbp:info: Downloading 'https://deb.debian.org/debian/pool/main/d/dnsproxy/dnsproxy_1.16-0.1.dsc' using 'dget'...
2020-05-10 14:16:47 URL:https://deb.debian.org/debian/pool/main/d/dnsproxy/dnsproxy_1.16-0.1.dsc [1197/1197] -> "dnsproxy_1.16-0.1.dsc" [1]
2020-05-10 14:16:47 URL:https://deb.debian.org/debian/pool/main/d/dnsproxy/dnsproxy_1.16.orig.tar.gz [47239/47239] -> "dnsproxy_1.16.orig.tar.gz" [1]
2020-05-10 14:16:47 URL:https://deb.debian.org/debian/pool/main/d/dnsproxy/dnsproxy_1.16-0.1.diff.gz [7053/7053] -> "dnsproxy_1.16-0.1.diff.gz" [1]
gbp:info: Version '1.16-0.1' imported under '/home/debian/git/debian/dnsproxy/pkg-dnsproxy'

En este caso tenemos que incluir la opción [-allow-unauthenticated] por lo antiguo del paquete, pero en general no sería necesaria esta opción. Esto modificará el repositorio git de la siguiente forma:

  • Se crean 2 ramas más aparte de master: upstream y pristine-tar
  • Se descomprime el contenido de dnsproxy_1.16-0.1 en la rama master
  • Se descomprime el contenido original de «upstream» en la rama upstream. Queda como la rama master, pero sin el directorio debian/
  • En la rama pristine-tar se ubica el archivo comprimido en formato delta diferencial para poder hacer modificaciones incrementales en futuras actualizaciones
  • Se crean en cada rama los commits necesarios con todos los cambios realizados
  • Se crean las etiquetas (tags) upstream/1.16 y debian/1.16.0-1, es decir las «releases» correspondientes en terminología de git

Vamos a ver todo lo anterior:

Ramas:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git branch 
* master
  pristine-tar
  upstream

Contenido de la rama master:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ ls -l
total 256
-rw-r--r-- 1 debian debian   2512 May 10 14:16 config.h.in
-rwxr-xr-x 1 debian debian 168175 May 10 14:16 configure
-rw-r--r-- 1 debian debian   4481 May 10 14:16 configure.ac
-rw-r--r-- 1 debian debian   2253 May 10 14:16 daemon.c
drwxr-xr-x 3 debian debian   4096 May 10 14:16 debian
-rw-r--r-- 1 debian debian   5209 May 10 14:16 dnsproxy.1
-rw-r--r-- 1 debian debian  10436 May 10 14:16 dnsproxy.c
-rw-r--r-- 1 debian debian    731 May 10 14:16 dnsproxy.conf
-rw-r--r-- 1 debian debian   3386 May 10 14:16 dnsproxy.h
-rw-r--r-- 1 debian debian   1966 May 10 14:16 hash.c
-rwxr-xr-x 1 debian debian   5598 May 10 14:16 install-sh
-rw-r--r-- 1 debian debian   2416 May 10 14:16 internal.c
-rw-r--r-- 1 debian debian   2013 May 10 14:16 log.c
-rw-r--r-- 1 debian debian   1119 May 10 14:16 Makefile.in
-rw-r--r-- 1 debian debian   2921 May 10 14:16 parse.c
-rw-r--r-- 1 debian debian   4677 May 10 14:16 README
-rw-r--r-- 1 debian debian   2144 May 10 14:16 stats.c

Commits realizados por gbp con el contenido desarrollado hasta ahora:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git log
commit 7daae6fd687caf7e3bb5398e965f5eb188d8a408 (HEAD -> master, tag: debian/1.16-0.1)
Author: Jari Aalto <jari.aalto@cante.net>
Date:   Fri Apr 30 01:00:00 2010 +0300

    Import Debian changes 1.16-0.1
    
    dnsproxy (1.16-0.1) unstable; urgency=low
    
      * Non-maintainer upload.
        - New upstream release.
          Fixes "fails to start with libevent newer than 1.4.13"
          (RC bug Grave; Closes: #576587).
      * debian/compat
        - Update to 7.
      * debian/control
        - (Build-Depends): update debhelper to 7.1
        - (Standards-Version): Update to 3.8.4.
      * debian/init.d
        - (INIT INFO::Required-Start): add $remote_fs (E: Lintian).
        - (INIT INFO::Required-Stop): add $remote_fs (E: Lintian).
      * debian/rules
        - (clean): Change dh_clean to dh_prep (Lintian).
    
    dnsproxy (1.15-6) unstable; urgency=low
    
      * Moving to quilt as a patch system:
             + Replace depend on dpatch with a depend on quilt
             + Include quilt.make instead of dpatch.make in debian/rules
             + Renamed file 00list to series
             + Rename patches and remove dpatch cruft from them
      * Added a README.source file to document patch handling for policy
        compliance
      * Updated Standards-Version
      * Updated maintainer email address
    
    dnsproxy (1.15-5) unstable; urgency=low
    
      * Added ${misc:Depends} to the depends of the binary package for the case
        that the debhelpers makes use of it
      * Make sure that config.sub and config.guess are up to date to make porters
        work easier
      * Delete config.sub and config.guess in clean target to avoid that it gets
        into the diff.gz when built two times in a row
      * Install dnsproxy binary with permission mask 755 instead of 555
      * Rewritten the init script:
                    + Now features a status action to show the status of dnsproxy
                    + Uses the standard lsb functions
      * Added a depend on lsb-base because its required for the init script
      * Added a patch for the wrong use of hypens in the manpage
      * Replace (C) and (c) with appropriate (legally entitled) copyright symbol
      * Add missing licensing and copyright information for libevent/compat/tree.h
        to debian/copyright and clarify copyright situation a bit more by
        specifying correct years
      * Replace explicit listing of years with a earliest year - latest year
        variant in copyright information.
      * Fixed use of wrong path in machine-parseable copyright information for
        libevent/compat/sys/tree.h
      * Added missing years to machine-readable part of the copyright file
    
    dnsproxy (1.15-4) unstable; urgency=low
    
      * debian/rules: Made build-stamp target depend on config.status to fix
        problems with parallel builds
      * Updated to Standards-Version 3.7.3
    
    dnsproxy (1.15-3) unstable; urgency=low
    
      * Use the new Homepage field
      * Only use --host argument to configure if cross-building
      * Added marchine-parseable part to debian/copyright
      * Added Vcs-Headers to debian/control
    
    dnsproxy (1.15-2) unstable; urgency=low
    
      * Did some changes to fix build errors:
            - Added a patch to fix missing prototypes
            - Added an option in CFLAGS to include a _USE_GNU define
            - Added groff-base to build dependencies
        (Closes: #404898)
    
    dnsproxy (1.15-1) unstable; urgency=low
    
      * Initial release (Closes: #402597)
      * Added an init script
      * Added debian-specific notes to README.Debian

commit fb5eb7486da30c18a3e2cc6272a4cb52eaa9def7 (tag: upstream/1.16, upstream)
Author: Debian <debian@debian.novalocal>
Date:   Sun May 10 14:16:47 2020 +0000

    Import Upstream version 1.16

Cambiamos a la rama upstream y vemos su contenido:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git checkout upstream
Switched to branch 'upstream'
debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ ls -l
total 252
-rw-r--r-- 1 debian debian   2512 May 10 14:16 config.h.in
-rwxr-xr-x 1 debian debian 168175 May 10 14:16 configure
-rw-r--r-- 1 debian debian   4481 May 10 14:16 configure.ac
-rw-r--r-- 1 debian debian   2253 May 10 14:16 daemon.c
-rw-r--r-- 1 debian debian   5209 May 10 14:16 dnsproxy.1
-rw-r--r-- 1 debian debian  10436 May 10 14:16 dnsproxy.c
-rw-r--r-- 1 debian debian    731 May 10 14:16 dnsproxy.conf
-rw-r--r-- 1 debian debian   3386 May 10 14:16 dnsproxy.h
-rw-r--r-- 1 debian debian   1966 May 10 14:16 hash.c
-rwxr-xr-x 1 debian debian   5598 May 10 14:16 install-sh
-rw-r--r-- 1 debian debian   2416 May 10 14:16 internal.c
-rw-r--r-- 1 debian debian   2013 May 10 14:16 log.c
-rw-r--r-- 1 debian debian   1119 May 10 14:16 Makefile.in
-rw-r--r-- 1 debian debian   2921 May 10 14:16 parse.c
-rw-r--r-- 1 debian debian   4677 May 10 14:16 README
-rw-r--r-- 1 debian debian   2144 May 10 14:16 stats.c

Vemos el commit correspondiente:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git log
commit fb5eb7486da30c18a3e2cc6272a4cb52eaa9def7 (HEAD -> upstream, tag: upstream/1.16)
Author: Debian <debian@debian.novalocal>
Date:   Sun May 10 14:16:47 2020 +0000

    Import Upstream version 1.16

Cambiamos a la rama pristine-tar, vemos su contenido y los commits:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git checkout pristine-tar 
Switched to branch 'pristine-tar'
debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ ls -l
total 8
-rw-r--r-- 1 debian debian 1253 May 10 14:20 dnsproxy_1.16.orig.tar.gz.delta
-rw-r--r-- 1 debian debian   41 May 10 14:20 dnsproxy_1.16.orig.tar.gz.id
debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git log
commit ebaa2031d6599d8db68a2ed8a1085ec154e4fd78 (HEAD -> pristine-tar)
Author: Debian <debian@debian.novalocal>
Date:   Sun May 10 14:16:48 2020 +0000

    pristine-tar data for dnsproxy_1.16.orig.tar.gz

Y por último vemos las etiquetas (tags) creadas:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git tag
debian/1.16-0.1
upstream/1.16

Todos estos cambios los tenemos en nuestra máquina de desarrollo, pero los tenemos que subir a salsa, que hablando en terminología git es el repositorio «origin». Puesto que los commits ya los ha hecho gbp, solo hace falta hacer push en cada rama, creando pristine-tar y upstream en remoto, ya que no existen previamente:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git checkout master
Switched to branch 'master'
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git push 
Enumerating objects: 37, done.
Counting objects: 100% (37/37), done.
Delta compression using up to 2 threads
Compressing objects: 100% (36/36), done.
Writing objects: 100% (37/37), 60.43 KiB | 3.02 MiB/s, done.
Total 37 (delta 6), reused 0 (delta 0), pack-reused 0
To salsa.debian.org:alberto/pkg-dnsproxy.git
 * [new branch]      master -> master

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git checkout pristine-tar 
Switched to branch 'pristine-tar'

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git push --set-upstream origin pristine-tar
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 1.56 KiB | 1.56 MiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: To create a merge request for pristine-tar, visit:
remote:   https://salsa.debian.org/alberto/pkg-dnsproxy/-/merge_requests/new?merge_request%5Bsource_branch%5D=pristine-tar
remote: 
To salsa.debian.org:alberto/pkg-dnsproxy.git
 * [new branch]      pristine-tar -> pristine-tar
Branch 'pristine-tar' set up to track remote branch 'pristine-tar' from 'origin'.

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git checkout upstream
Switched to branch 'upstream'

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git push --set-upstream origin upstream
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: To create a merge request for upstream, visit:
remote:   https://salsa.debian.org/alberto/pkg-dnsproxy/-/merge_requests/new?merge_request%5Bsource_branch%5D=upstream
remote: 
To salsa.debian.org:alberto/pkg-dnsproxy.git
 * [new branch]      upstream -> upstream
Branch 'upstream' set up to track remote branch 'upstream' from 'origin'.

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

Nuestra rama de trabajo será master, por lo que el último paso ha sido volver a ella y desde aquí también subimos a salsa las etiquetas correspondientes a debian y a upstream:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git push origin upstream/1.16 
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 171 bytes | 171.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To salsa.debian.org:alberto/pkg-dnsproxy.git
 * [new tag]         upstream/1.16 -> upstream/1.16
debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git push origin debian/1.16-0.1 
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 168 bytes | 168.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To salsa.debian.org:alberto/pkg-dnsproxy.git
 * [new tag]         debian/1.16-0.1 -> debian/1.16-0.1

Ya tenemos el paquete dnsproxy totalmente preparado para trabajar con él partiendo de la situación que había dejado el anterior desarrollador y usando git, con las ramas master, upstream y pristine-tar y los commits y tags apropiadamente realizados y subidos a salsa.

Construcción del paquete

Podemos a continuación comprobar que la construcción del paquete se realiza correctamente ejecutando sbuild desde la rama master del directorio pkg-dnsproxy (es necesario que antes instalemos el paquete quilt que no habíamos necesitado hasta ahora y que explicaremos en otra entrada para qué se usa):

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ sudo apt install quilt
...
debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ sbuild


...
+------------------------------------------------------------------------------+
| Summary                                                                      |
+------------------------------------------------------------------------------+

Build Architecture: amd64
Build Type: binary
Build-Space: 1640
Build-Time: 10
Distribution: unstable
Host Architecture: amd64
Install-Time: 50
Job: /home/debian/git/debian/dnsproxy/dnsproxy_1.16-0.1.dsc
Lintian: fail
Machine Architecture: amd64
Package: dnsproxy
Package-Time: 71
Source-Version: 1.16-0.1
Space: 1640
Status: successful
Version: 1.16-0.1
--------------------------------------------------------------------------------
Finished at 2020-05-10T14:47:12Z
Build needed 00:01:11, 1640k disk space

El paquete se construye bien, pero falla lógicamente lintian que es una herramienta que se ejecuta automáticamente al usar sbuild y que sirve para comprobar consistencia de los paquetes con la política de debian. En este caso, dnsproxy es un paquete abandonado hace años y por tanto ha dejado de seguir las últimas modificaciones de la política, si lo adoptásemos, eso sería parte de nuestra labor inicial, modificarlo para adaptarlo a la última versión de la política.

Si bajamos al directorio padre, veremos el paquete generado, así como el resto de ficheros esperados:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ cd ..
debian@debian:~/git/debian/dnsproxy$ ls -l
total 284
-rw-rw-r-- 1 debian debian  81406 May 10 14:48 dnsproxy_1.16-0.1_amd64-2020-05-10T14:46:01Z.build
lrwxrwxrwx 1 debian debian     50 May 10 14:46 dnsproxy_1.16-0.1_amd64.build -> dnsproxy_1.16-0.1_amd64-2020-05-10T14:46:01Z.build
-rw-rw-r-- 1 debian debian   4803 May 10 14:47 dnsproxy_1.16-0.1_amd64.buildinfo
-rw-rw-r-- 1 debian debian   1775 May 10 14:47 dnsproxy_1.16-0.1_amd64.changes
-rw-rw-r-- 1 debian debian  14772 May 10 14:47 dnsproxy_1.16-0.1_amd64.deb
-rw-rw-r-- 1 debian debian    763 May 10 14:46 dnsproxy_1.16-0.1.dsc
-rw-rw-r-- 1 debian debian 145332 May 10 14:46 dnsproxy_1.16-0.1.tar.gz
-rw-rw-r-- 1 debian debian  21588 May 10 14:47 dnsproxy-dbgsym_1.16-0.1_amd64.deb
drwxr-xr-x 4 debian debian   4096 May 10 14:31 pkg-dnsproxy

Actualización del repositorio

Vamos a continuar con el ejemplo de dnsproxy, ya que en este caso existe una versión más actual del software (1.17) que vamos a modificar fácilmente en nuestro repositorio gracias a gbp.

En este caso es además más sencillo, ya que debian/watch está bien definido y por tanto se puede comprobar de forma automática si hay una nueva versión disponible original usando uscan:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ uscan 
uscan: Newest version of dnsproxy on remote site is 1.17, local version is 1.16
uscan:    => Newer package available from
      https://wolfermann.org/dnsproxy-1.17.tar.gz
uscan warn: Missing debian/source/format, switch compression to gzip
Leaving ../dnsproxy_1.17.orig.tar.gz where it is.

Y aquí podemos ver la enorme ventaja de la estructura de ramas que estamos manejando, ya que vamos a descargarnos la nueva versión y a modificar nuestro repositorio de forma consistente con la magia de gbp:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ gbp import-orig --pristine-tar --uscan
gbp:info: Launching uscan...
uscan warn: Missing debian/source/format, switch compression to gzip
gbp:info: Using uscan downloaded tarball ../dnsproxy_1.17.orig.tar.gz
What is the upstream version? [1.17] 
gbp:info: Importing '../dnsproxy_1.17.orig.tar.gz' to branch 'upstream'...
gbp:info: Source package is dnsproxy
gbp:info: Upstream version is 1.17
gbp:info: Merging to 'master'
gbp:info: Successfully imported version 1.17 of ../dnsproxy_1.17.orig.tar.gz

Se han realizado nuevos commits para modificar las ramas a la versión 1.17 y se ha creado la etiqueta upstream/1.17. Esos cambios debemos subirlos a salsa para que nuestro repositorio esté en el mismo estado que origin:

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git status
On branch master
Your branch is ahead of 'origin/master' by 2 commits.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git push
Enumerating objects: 51, done.
Counting objects: 100% (36/36), done.
Delta compression using up to 2 threads
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 2.31 KiB | 1.15 MiB/s, done.
Total 19 (delta 16), reused 0 (delta 0), pack-reused 0
To salsa.debian.org:alberto/pkg-dnsproxy.git
   7daae6f..36cef9b  master -> master

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git checkout upstream
Switched to branch 'upstream'
Your branch is ahead of 'origin/upstream' by 1 commit.
  (use "git push" to publish your local commits)

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git push 
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: To create a merge request for upstream, visit:
remote:   https://salsa.debian.org/alberto/pkg-dnsproxy/-/merge_requests/new?merge_request%5Bsource_branch%5D=upstream
remote: 
To salsa.debian.org:alberto/pkg-dnsproxy.git
   fb5eb74..3be6391  upstream -> upstream

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git checkout pristine-tar 
Switched to branch 'pristine-tar'
Your branch is ahead of 'origin/pristine-tar' by 1 commit.
  (use "git push" to publish your local commits)

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 2 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 1.64 KiB | 1.64 MiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
remote: 
remote: To create a merge request for pristine-tar, visit:
remote:   https://salsa.debian.org/alberto/pkg-dnsproxy/-/merge_requests/new?merge_request%5Bsource_branch%5D=pristine-tar
remote: 
To salsa.debian.org:alberto/pkg-dnsproxy.git
   0f6f4d7..57d0436  pristine-tar -> pristine-tar

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

debian@debian:~/git/debian/dnsproxy/pkg-dnsproxy$ git push origin upstream/1.17 
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 170 bytes | 170.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To salsa.debian.org:alberto/pkg-dnsproxy.git
 * [new tag]         upstream/1.17 -> upstream/1.17

A partir de aquí comenzaría propiamente el trabajo de desarrollo debian, realizando las modificaciones necesarias en los ficheros del directorio debian/ hasta conseguir construir correctamente un paquete debian para la versión 1.17 de dnsproxy, pero eso habrá que verlo en otra entrada :).

Usando git en el empaquetado de Debian

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s