convención de versión de paquetes debian

35

Estoy usando debian / Ubuntu, y me confundo acerca de las versiones de los paquetes. Cuando uso el dpkg -lcomando, obtengo:

ii  vim                                 2:7.3.429-2ubuntu2.1                Vi IMproved - enhanced vi editor
ii  vim-common                          2:7.3.429-2ubuntu2.1                Vi IMproved - Common files
ii  vim-runtime                         2:7.3.429-2ubuntu2.1                Vi IMproved - Runtime files
ii  vim-tiny                            2:7.3.429-2ubuntu2.1                Vi IMproved - enhanced vi editor - compact version
ii  virt-what                           1.11-1                              detect if we are running in a virtual machine
ii  w3m                                 0.5.3-5ubuntu1                      WWW browsable pager with excellent tables/frames support
ii  watershed                           6                                   reduce superfluous executions of idempotent command
ii  wget                                1.13.4-2ubuntu1                     retrieves files from the web
ii  whiptail                            0.52.11-2ubuntu10                   Displays user-friendly dialog boxes from shell scripts
ii  whoopsie                            0.1.33                              Ubuntu crash database submission daemon
ii  wimlib9                             1.5.0-1~webupd8~precise             Library to extract, create, modify, and mount WIM files
ii  wimtools                            1.5.0-1~webupd8~precise             Tools to extract, create, modify, and mount WIM files
ii  wireless-tools                      30~pre9-5ubuntu2                    Tools for manipulating Linux Wireless Extensions
ii  wpasupplicant                       0.7.3-6ubuntu2.1                    client support for WPA and WPA2 (IEEE 802.11i)
ii  x11-common                          1:7.6+12ubuntu2                     X Window System (X.Org) infrastructure
ii  x11-utils                           7.6+4ubuntu0.1                      X11 utilities
ii  xauth                               1:1.0.6-1                           X authentication utility
ii  xbitmaps                            1.1.1-1                             Base X bitmaps
ii  xclip                               0.12-1                              command line interface to X selections
ii  xfonts-encodings                    1:1.0.4-1ubuntu1                    Encodings for X.Org fonts
ii  xfonts-utils                        1:7.6+1                             X Window System font utility programs
ii  xkb-data                            2.5-1ubuntu1.3                      X Keyboard Extension (XKB) configuration data
ii  xml-core                            0.13                                XML infrastructure and XML catalog file support
rc  xpdf                                3.02-21build1                       Portable Document Format (PDF) reader
ii  xterm                               271-1ubuntu2.1                      X terminal emulator
ii  xz-lzma                             5.1.1alpha+20110809-3               XZ-format compression utilities - compatibility commands
ii  xz-utils                            5.1.1alpha+20110809-3               XZ-format compression utilities
ii  zabbix-agent                        1:1.8.11-1                          network monitoring solution - agent
ii  zlib1g                              1:1.2.3.4.dfsg-3ubuntu4             compression library - runtime
ii  zlib1g-dev                          1:1.2.3.4.dfsg-3ubuntu4             compression library - development
ii  zsh                                 4.3.17-1ubuntu1                     shell with lots of features

La tercera columna es version, pero está "desordenada" de una manera que no puedo entender. Quiero decir, diferentes paquetes usan especificaciones de nombres totalmente diferentes.

Aquí están las principales preguntas:

  1. ¿Por qué algunos números de versión tienen ubuntuen ellos y otros no?
  2. ¿Qué significa toda la puntuación especial -~+?
  3. ¿Cuáles son alpha, buildy dfsg? ¿Puedo usarlos casualmente?
  4. vimy otros paquetes tienen 2:. Qué significa eso?
  5. ¿Cómo funciona la "comparación de versiones", cuando los formatos de versión pueden ser tan diferentes?

¿Alguien puede explicarme esto? ¿O dónde puedo encontrar un documento oficial?

Gracias por adelantado.

cizixs
fuente
¿Qué quiere decir con: "¿Por qué hay ubuntu en ellos y no los hay?"
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
@ CiroSantilli709 大 抓捕 六四 事件 法轮功 es decir, por qué algunos números de versión tienen un sufijo que contiene la palabra ubuntuy otros no.
rakslice

Respuestas:

50

El Manual de políticas de Debian tiene esto que decir sobre el campo de versión, que responde algunas partes de su pregunta:

Formato

El formato es: [epoch:]upstream_version[-debian_revision]

Los tres componentes aquí son:

época

Este es un entero sin signo (generalmente pequeño). Puede omitirse, en cuyo caso se supone cero. Si se omite, upstream_version puede no contener dos puntos. Se proporciona para permitir errores en los números de versión de versiones anteriores de un paquete, y también los esquemas de numeración de versiones anteriores de un paquete, para dejarse atrás.

upstream_version

Esta es la parte principal del número de versión. Por lo general, es el número de versión del paquete original ("ascendente") desde el que se ha creado el archivo .deb, si corresponde. Por lo general, tendrá el mismo formato que el especificado por los autores anteriores; sin embargo, es posible que deba formatearse de nuevo para que se ajuste al formato y al esquema de comparación del sistema de administración de paquetes.

A continuación se describe el comportamiento de comparación del sistema de gestión de paquetes con respecto a upstream_version . La parte upstream_version del número de versión es obligatoria.

El versión_original puede contener sólo caracteres alfanuméricos [36] y los caracteres "."(Full Stop), "+"(más), "-"(guión), ":"(colon), "~"(tilde) y debe comenzar con un dígito. Si no hay debian_revision, no se permiten guiones; Si no hay época, entonces no se permiten los dos puntos.

debian_revision

Esta parte del número de versión especifica la versión del paquete Debian basada en la versión anterior. Puede contener solo caracteres alfanuméricos y los caracteres "."(punto final), "+"(más), "~"(tilde) y se compara de la misma manera que upstream_version .

Es opcional; si no está presente, entonces la versión upstream no puede contener un guión. Este formato representa el caso en el que una pieza de software fue escrita específicamente para ser un paquete Debian, donde la fuente del paquete Debian siempre debe ser idéntica a la fuente original y, por lo tanto, no se requiere ninguna indicación de revisión.

Es convencional reiniciar debian_revision en 1 cada vez que aumenta la versión upstream_version .

El sistema de administración de paquetes separará el número de versión en el último guión de la cadena (si hay uno) para determinar la versión upstream_version y debian_revision . La ausencia de una debian_revision es equivalente a una debian_revision de 0.

Comparación

Al comparar dos números de versión, primero se compara la época de cada uno, luego upstream_version si epoch es igual, y luego debian_revision si upstream_version también es igual. época se compara numéricamente. El sistema de gestión de paquetes compara las partes upstream_version y debian_revision utilizando el siguiente algoritmo:

Las cadenas se comparan de izquierda a derecha.

Primero se determina la parte inicial de cada cadena que consiste completamente en caracteres que no son dígitos. Estas dos partes (una de las cuales puede estar vacía) se comparan léxicamente. Si se encuentra una diferencia, se devuelve. La comparación léxica es una comparación de valores ASCII modificados para que todas las letras se ordenen antes que todas las no letras y para que una tilde se clasifique antes que nada, incluso el final de una parte. Por ejemplo, las siguientes partes están en orden clasificado desde la primera a la última: ~~, ~~a, ~, la parte vacía, a.

Luego se determina la parte inicial del resto de cada cadena que consiste completamente en caracteres de dígitos. Se comparan los valores numéricos de estas dos partes, y cualquier diferencia encontrada se devuelve como resultado de la comparación. Para estos fines, una cadena vacía (que solo puede ocurrir al final de una o ambas cadenas de versión que se comparan) cuenta como cero.

Estos dos pasos (comparar y eliminar cadenas iniciales que no son dígitos y cadenas iniciales de dígitos) se repiten hasta que se encuentre una diferencia o se agoten ambas cadenas.

Tenga en cuenta que el propósito de las épocas es permitirnos dejar atrás errores en la numeración de versiones y hacer frente a situaciones en las que cambia el esquema de numeración de versiones. No está destinado a hacer frente a los números de versión que contienen cadenas de letras que el sistema de gestión de paquetes no puede interpretar (como ALPHAo pre-), o con pedidos tontos.

ubuntuindicará que el paquete se ha creado específicamente para Ubuntu. Las cadenas alphay buildno parecen tener ningún significado particular, pero se dfsgrefieren a un paquete que se ha modificado para cumplir con las Directrices de software libre de Debian .

Flup
fuente
1
Gracias, esto ayuda demasiado. ¿Pero cómo funciona la comparación de versiones? dígitos, letras y ~ +, ¿cuál viene primero y cuál dura?
cizixs
He ampliado la cita en mi respuesta para incluir la sección del manual que describe el comportamiento de comparación.
Flup
2
¿Existe alguna herramienta en línea en algún lugar donde pueda probar cómo se ordenan estas cadenas de versión?
Nick
¿Podría por favor pegar los mismos ejemplos? Por ejemplo, analizando algunas de las versiones anteriores en partes separadas. Si tanto la versión anterior como la versión de Debian pueden contener - y + ¿cómo sabemos dónde está la separación? Además, el primer enlace parece estar roto.
fersarr
@fersarr Dejaré ejemplos a otros, pero he arreglado el enlace.
Flup
10

XubuntuY parte de la versión, por ejemplo, 1ubuntu1

  • Xes la versión del paquete Debian. La mayoría de los paquetes de Ubuntu se basan en paquetes de Debian, que es una distribución "ascendente".

    Si 0, esto significa que no hay un paquete Debian: solo existe en Ubuntu.

    X se restablece cuando se actualiza la versión ascendente real, por ejemplo, Binutils 2.25 a Binutils 2.26.

    Existen versiones de Debian porque Debian puede hacer parches en los paquetes para que funcione mejor en el sistema Debian o para las versiones de seguridad.

    Por supuesto, los desarrolladores de Debian están interesados ​​en fusionar los parches para evitar la bifurcación.

    Cada vez que se realiza un nuevo conjunto de parches, este número aumenta.

  • ubuntuY es opcional.

    Si no está presente, significa que el paquete Debian se usó directamente.

    De lo contrario, significa que este es el parche Yth Ubuntu aplicado sobre un parche de Debian, al igual que Debian se aplica sobre el flujo ascendente real.

    Yse restablece cuando Xaumenta.

Si obtiene la fuente de un paquete con:

apt-get source gdb

verá los parches aplicados por Ubuntu y Debian en:

debian/patches/

Aún más interesante, puede clonar bzry ver una lista de todas las versiones de Ubuntu con lo que cambió entre ellas:

bzr branch ubuntu:gdb
cd gdb
bzr log | less

Ver también: https://askubuntu.com/questions/620533/what-is-the-meaning-of-the-xubuntuy-string-in-ubuntu-package-names

Lo que representa realmente la época

https://askubuntu.com/questions/441879/why-do-some-packages-have-extra-numbers-on-the-front-of-their-version-string

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente