Este artículo repasa algunos conceptos básicos respecto al versionado de paquetes en los sistemas operativos basados en Debian y Devuan.

Respecto a Debian y las versiones de paquetes, ¿por qué aparecen dos números de versión para los paquetes al actualizar? Una entre corchetes y a continuación otra entre paréntesis:

root@devuan:~# apt-get -s upgrade | grep Inst
Inst libc6-dev [2.19-18+deb8u9] (2.19-18+deb8u10 Devuan:1.0/stable-security [amd64]) []
Inst libc-dev-bin [2.19-18+deb8u9] (2.19-18+deb8u10 Devuan:1.0/stable-security [amd64]) []
Inst linux-libc-dev [3.16.43-2] (3.16.43-2+deb8u2 Devuan:1.0/stable-security [amd64]) []
Inst libc-bin [2.19-18+deb8u9] (2.19-18+deb8u10 Devuan:1.0/stable-security [amd64]) []
Inst libc6 [2.19-18+deb8u9] (2.19-18+deb8u10 Devuan:1.0/stable-security [amd64])
Inst libgcrypt20 [1.6.3-2+deb8u3] (1.6.3-2+deb8u4 Devuan:1.0/stable-security [amd64])
Inst libgnutls-openssl27 [3.3.8-6+deb8u5] (3.3.8-6+deb8u6 Devuan:1.0/stable-security [amd64]) []
Inst libgnutls-deb0-28 [3.3.8-6+deb8u5] (3.3.8-6+deb8u6 Devuan:1.0/stable-security [amd64])
Inst libexpat1-dev [2.1.0-6+deb8u3] (2.1.0-6+deb8u4 Devuan:1.0/stable-security [amd64]) []
Inst libexpat1 [2.1.0-6+deb8u3] (2.1.0-6+deb8u4 Devuan:1.0/stable-security [amd64])
Inst libffi-dev [3.1-2+b2] (3.1-2+deb8u1 Devuan:1.0/stable-security [amd64]) []
Inst libffi6 [3.1-2+b2] (3.1-2+deb8u1 Devuan:1.0/stable-security [amd64])
Inst libgraphite2-3 [1.3.6-1~deb8u1] (1.3.10-1~deb8u1 Devuan:1.0/stable-security [amd64])
Inst linux-image-3.16.0-4-amd64 [3.16.43-2] (3.16.43-2+deb8u2 Devuan:1.0/stable-security [amd64])
Inst debian-archive-keyring [2014.3] (2017.5~deb8u1 jessie-updates:1.0.0/jessie-updates [all])
Inst multiarch-support [2.19-18+deb8u9] (2.19-18+deb8u10 Devuan:1.0/stable-security [amd64])
Inst exim4-config [4.84.2-2+deb8u3] (4.84.2-2+deb8u4 Devuan:1.0/stable-security [all])
Inst exim4 [4.84.2-2+deb8u3] (4.84.2-2+deb8u4 Devuan:1.0/stable-security [all]) []
Inst exim4-base [4.84.2-2+deb8u3] (4.84.2-2+deb8u4 Devuan:1.0/stable-security [amd64])
Inst exim4-daemon-light [4.84.2-2+deb8u3] (4.84.2-2+deb8u4 Devuan:1.0/stable-security [amd64])
Inst locales [2.19-18+deb8u9] (2.19-18+deb8u10 Devuan:1.0/stable-security [all])

Estos números de indican la versión actual del paquete instalado y la versión nueva que se está instalando. Por supuesto estos números de versión nunca son iguales, siempre se actualiza a una versión más nueva, sino sería exactamente el mismo paquete. Como mínimo cambia la versión interna de Debian (la parte después del símbolo +), por ejemplo deb8u10 para el paquete libc6-dev.

Esta nomenclatura identifica la versión interna de Debian de cada paquete, la cual se descompone en versión de Debian (deb8 corresponde con Debian 8) y número de revisión para una misma versión upstream del paquete (luego de la letra u, en este caso 9). Lo cual significa que una misma versión upstream puede tener varias revisiones por parte del equipo de desarrollo de Debian.

Esto se explica, a grandes rasgos, de la siguiente forma

  • Un desarrollador upstream (creador o autor de un software) libera una versión de un paquete ("sere", por inventar algo), por ejemplo sere-5.6.
  • Debian toma ese paquete y lo compila con sus propias opciones (que considere necesarias y específicas para la distribución). Esto se llama revisión. Supongamos que es la primera vez que se incluye esta versión upstream en la versión 8 de Debian. De esta forma, la versión del paquete pasa a ser sere-5.6+deb8u1.
  • Alguien descubre un bug o error y el autor lo corrige (o no, si se trata de abandonware).
  • En este punto surgen las diferencias, y empieza a variar mucho dependiendo de cada desarrollador upstream. Hay varias opciones:
    • El desarrollador libera una nueva versión: sere-5.7.
    • El desarrollador además parcha la versión 5.6 porque dicha rama tiene aún soporte. En este caso el desarrollador libera una revisión propia, upstream, digamos 5.6.1. Entonces Debian la adopta y resetea su número de revisión: 5.6.1+deb8u1.
    • El desarrollador no parcha la versión 5.6 porque ya no la mantiene. El cambio de revisión ocurre justamente cuando una versión no tiene soporte upstream y se requiere, por compatibilidad, dependencias o lo que fuese, permanecer en la misma. Es ahí cuando se libera la siguiente revisión de Debian 5.6+deb8u2. En estos casos es Debian quien mantiene (parcha) la versión necesaria (5.6).
  • De esta forma, dependiendo de lo que haga upstream, Debian tiene dos opciones:
    • Adoptar la nueva versión upstream 5.7 (o 5.6.1 si tiene soporte upstream) y resetear el número de revisión: sere-5.7+deb8u1.
    • Si quiere mantenerse en la versión 5.6, sale la revisión 2: sere-5.6+deb8u2.

Sin embargo, a veces sucede que, aunque la versión 5.6 no tenga soporte, si Debian necesita permanecer en la misma por cuestión de dependencias, la parchan ellos mismos (especialmente cuando se trata de bugs de seguridad).

Pero también además a veces pueden surgir bugs propios de la distribución (por ejemplo un error introducido al parchar) y van saliendo nuevas revisiones. Es común que a veces se rompan cosas tratando de parchar bugs de seguridad. Tener en cuenta que, cuando upstream no tiene versiones LTS, parchar bugs de seguridad es un trabajo dificultoso. Es la propia distribución (sus desarrolladores) quien lo hace, y mantener software ajeno no es una tarea sencilla.

En definitiva, el número de revisión indica cuántas veces Debian compiló una versión específica.

En la captura del comienzo del artículo se observan ambos casos, una actualización que corresponde a una nueva revisión de Debian (libc6-dev), y una actualización correspondiente a una nueva versión upstream (libgraphite2-3):

Inst libc6-dev [2.19-18+deb8u9] (2.19-18+deb8u10 Devuan:1.0/stable-security [amd64]) []
Inst libgraphite2-3 [1.3.6-1~deb8u1] (1.3.10-1~deb8u1 Devuan:1.0/stable-security [amd64])

Notar que para el caso del paquete libc6-dev sólo cambia la revisión de Debian (después del símbolo +), mientras que para libgraphite2-3 cambia la versión upstream (antes del símbolo +).

Por otro lado, el kernel Linux es un paquete más (linux-image-*) y se actualiza como cualquier otro cada vez que hay una nueva versión disponible. Aunque lógicamente no será utilizado hasta tanto no se reinicie el sistema.

root@devuan:~# dpkg --list | grep linux-image 
ii  linux-image-3.16.0-4-amd64   3.16.43-2     amd64   Linux 3.16 for 64-bit PCs
ii  linux-image-3.2.0-4-amd64    3.2.88-1      amd64   Linux 3.2 for 64-bit PCs
ii  linux-image-amd64            3.16+63       amd64   Linux for 64-bit PCs (meta-package)

Sin embargo, respecto a la versión del kernel en uso, surge una diferencia entre lo que reporta uname -r y la versión del paquete instalado:

root@devuan:~# uname -r
3.16.0-4-amd64
root@devuan:~# uname -v
#1 SMP Debian 3.16.43-2 (2017-04-30)

uname -r indica es la release de Linux, esto es el string de versión utilizado al momento de compilar el paquete. Mientras que uname -v (en Debian/Devuan) reporta la versión del del kernel, la cual sí coincide con la versión del paquete.

Referencias


Tal vez pueda interesarte


Compartí este artículo