Pequeño Tutorial de dpkg
bueno gente aca les dejo un tutorial con las acciones que uno puede hacer utilizando dpkg.
Introduccion
Acerca de dpkg
El programa dpkg es la base del sistema de gestión de paquetes de Debian GNU/Linux. Fue creado por Ian Jackson en 1993. Se utiliza para instalar, quitar, y proporcionar información sobre los paquetes .deb. Dpkg es una abreviatura de Debian package. Se trata de un equipamiento lógico utilizado para la gestión de paquetería en Debian Linux y distribuciones de GNU/Linux basadas sobre Debian Linux.
Introduccion
Acerca de dpkg
El programa dpkg es la base del sistema de gestión de paquetes de Debian GNU/Linux. Fue creado por Ian Jackson en 1993. Se utiliza para instalar, quitar, y proporcionar información sobre los paquetes .deb. Dpkg es una abreviatura de Debian package. Se trata de un equipamiento lógico utilizado para la gestión de paquetería en Debian Linux y distribuciones de GNU/Linux basadas sobre Debian Linux.
Acciones
Consultas
Si se quiere obtener una lista completa de los paquetes instalados en el sistema, junto con versión una descripción breve de los mismo, se puede utilizar:
dpkg -l
Si se quiere una descripción más detallada de los mismos, se puede utilizar:
dpkg -s
Si queremos consultar la versión e información breve de un solo paquete instalado en el sistema, se puede utilizar:
dpkg -l paquete
Si se desea consultar solo las dependencias de un paquete instalado en el sistema, se puede utilizar:
dpkg -s paquete | grep ^Depends:
Si se desea consultar la información de un paquete .deb sin instalar, se puede utilizar:
dpkg -l paquete-no-instalado.deb
Si se desea consultar la información completa de un paquete, que incluye versión, descripción, arquitectura, grupo, autor que mantiene el paquete y dependencias, se puede utilizar:
dpkg -p paquete
Consultas
Si se quiere obtener una lista completa de los paquetes instalados en el sistema, junto con versión una descripción breve de los mismo, se puede utilizar:
dpkg -l
Si se quiere una descripción más detallada de los mismos, se puede utilizar:
dpkg -s
Si queremos consultar la versión e información breve de un solo paquete instalado en el sistema, se puede utilizar:
dpkg -l paquete
Si se desea consultar solo las dependencias de un paquete instalado en el sistema, se puede utilizar:
dpkg -s paquete | grep ^Depends:
Si se desea consultar la información de un paquete .deb sin instalar, se puede utilizar:
dpkg -l paquete-no-instalado.deb
Si se desea consultar la información completa de un paquete, que incluye versión, descripción, arquitectura, grupo, autor que mantiene el paquete y dependencias, se puede utilizar:
dpkg -p paquete
Instalar un paquete
Si se quiere instalar un paquete .deb, se puede utilizar:
dpkg -i paquete-no-instalado.deb
Si se quiere instalar o actualizar un paquete .deb, se puede utilizar:
dpkg -Gi paquete-no-instalado.deb
Si solo se quiere desempaquetar el contenido sin instalar, se puede utilizar:
dpkg -x paquete-no-instalado.deb
Si se tiene un directorio lleno de paquetes .deb y se desea instalar todos estos, se puede utilizar lo siguiente, considerando para el ejemplo que el directorio ~/Downloads/ contiene varios paquetes .deb:
dpkg -R ~/Downloads/
Si se desea presentar cualesquiera que sean las opciones de configuración de un paquete, se puede utilizar:
dpkg --configure paquete-no-instalado.deb
Desinstalar un paquete
Si se quiere desinstalar un paquete, pero dejando presentes ficheros de configuración, se puede utilizar:
dpkg -r paquete
Si se quiere desinstalar un paquete, incluyendo los ficheros de configuración, se puede utilizar:
dpkg -P paquete
Si se quiere instalar un paquete .deb, se puede utilizar:
dpkg -i paquete-no-instalado.deb
Si se quiere instalar o actualizar un paquete .deb, se puede utilizar:
dpkg -Gi paquete-no-instalado.deb
Si solo se quiere desempaquetar el contenido sin instalar, se puede utilizar:
dpkg -x paquete-no-instalado.deb
Si se tiene un directorio lleno de paquetes .deb y se desea instalar todos estos, se puede utilizar lo siguiente, considerando para el ejemplo que el directorio ~/Downloads/ contiene varios paquetes .deb:
dpkg -R ~/Downloads/
Si se desea presentar cualesquiera que sean las opciones de configuración de un paquete, se puede utilizar:
dpkg --configure paquete-no-instalado.deb
Desinstalar un paquete
Si se quiere desinstalar un paquete, pero dejando presentes ficheros de configuración, se puede utilizar:
dpkg -r paquete
Si se quiere desinstalar un paquete, incluyendo los ficheros de configuración, se puede utilizar:
dpkg -P paquete
Manipulación de paquetes con dpkg
dpkg
es el programa base para manejar paquetes Debian en el sistema. Si tiene paquetes .deb
, dpkg
es lo que permite instalar o analizar sus contenidos. Pero este programa sólo tiene una visión parcial del universo Debian: sabe lo que está instalado en el sistema y lo que sea que se le provee en la línea de órdenes, pero no sabe nada más de otros paquetes disponibles. Como tal, fallará si no se satisface una dependencia. Por el contrario, herramientas como apt
crearán una lista de dependencias para instalar todo tan automáticamente como sea posible.
NOTA ¿
dpkg
o apt
?
Se debe ver a
dpkg
como una herramienta de sistema (tras bambalinas) y apt
como una herramienta más cerca del usuario que evita las limitaciones del primero. Estas herramientas trabajan juntas, cada una con sus particularidades, adecuadas para tareas específicas.
Manipulación de paquetes con dpkg
dpkg
es el programa base para manejar paquetes Debian en el sistema. Si tiene paquetes .deb
, dpkg
es lo que permite instalar o analizar sus contenidos. Pero este programa sólo tiene una visión parcial del universo Debian: sabe lo que está instalado en el sistema y lo que sea que se le provee en la línea de órdenes, pero no sabe nada más de otros paquetes disponibles. Como tal, fallará si no se satisface una dependencia. Por el contrario, herramientas como apt
crearán una lista de dependencias para instalar todo tan automáticamente como sea posible.
NOTA ¿
dpkg
o apt
?
Se debe ver a
dpkg
como una herramienta de sistema (tras bambalinas) y apt
como una herramienta más cerca del usuario que evita las limitaciones del primero. Estas herramientas trabajan juntas, cada una con sus particularidades, adecuadas para tareas específicas.dpkg
es, sobre todo, la herramienta para instalar un paquete Debian ya disponible (porque no descarga nada). Para hacer esto utilizamos su opción -i
o --install
.
Ejemplo 5.2. Instalación de un paquete con
dpkg
#
dpkg -i man-db_2.7.0.2-5_amd64.deb(Reading database ... 86425 files and directories currently installed.) Preparing to unpack man-db_2.7.0.2-5_amd64.deb ... Unpacking man-db (2.7.0.2-5) over (2.7.0.2-4) ... Setting up man-db (2.7.0.2-5) ... Updating database of manual pages ... Processing triggers for mime-support (3.58) ...
Podemos ver los diferentes pasos que realiza
dpkg
; sabemos, por lo tanto, en qué punto podría haber ocurrido un error. La instalación también puede realizarse en dos etapas: primero desempaquetado, luego configuración. apt-get
lo aprovecha limitando la cantidad de invocaciones de dpkg
(ya que cada llamada es costosa debido a la carga de la base de datos en memoria, especialmente la lista de archivos ya instalados).
Ejemplo 5.3. Desempaquetado y configuración separados
#
dpkg --unpack man-db_2.7.0.2-5_amd64.deb(Reading database ... 86425 files and directories currently installed.) Preparing to unpack man-db_2.7.0.2-5_amd64.deb ... Unpacking man-db (2.7.0.2-5) over (2.7.0.2-5) ... Processing triggers for mime-support (3.58) ... #
dpkg --configure man-dbSetting up man-db (2.7.0.2-5) ... Updating database of manual pages ...
A veces
dpkg
fallará intentando instalar un paquete y devolverá un error; si el usuario le ordena ignorarlo sólo generará una advertencia; es por esta razón que tenemos las diferentes opciones --force-*
. La orden dpkg --force-help
, o su documentación, proveerá una lista completa de estas opciones. El error más frecuente, con el que seguramente se encontrará tarde o temprano, es una colisión de archivos. Cuando un paquete contiene un archivo que ya está instalado por otro paquete, dpkg
se negará a instalarlo. Aparecerá el siguiente mensaje:Unpacking libgdm (from .../libgdm_3.8.3-2_amd64.deb) ...
dpkg: error processing /var/cache/apt/archives/libgdm_3.8.3-2_amd64.deb (--unpack):
trying to overwrite '/usr/bin/gdmflexiserver', which is also in package gdm3 3.4.1-9
En este caso, si piensa que reemplazar este archivo no es un riesgo significativo para la estabilidad de su sistema (que es el caso frecuentemente), puede utilizar la opción
--force-overwrite
que le indica a dpkg
que ignore dicho error y sobreescriba el archivo.
Si bien hay muchas opciones
--force-*
disponibles, probablemente sólo utilice regularmente --force-overwrite
. Estas opciones sólo existen para situaciones excepcionales y es mejor evitarlas siempre que sea posible para respetar las reglas impuestas por el mecanismo de empaquetado. No olvide que estas reglas aseguran la consistencia y estabilidad de su sistema.
PRECAUCIÓN Uso efectivo de
--force-*
Si no es cuidadoso, utilizar una opción
--force-*
puede llevar a un sistema en el que la familia de programas APT se negarán a funcionar. De hecho, algunas de estas opciones permitirán instalar un paquete cuando no se cumple una de sus dependencias o cuando existe un conflicto. El resultado será un sistema inconsistente desde el punto de vista de dependencias y los programas APT se negarán a efectuar cualquier acción excepto aquellas que le permitan devolver el sistema a un estado consistente (que generalmente consiste en instalar la dependencia faltante o eliminar un paquete problemático). Esto resulta en mensajes como el siguiente, obtenido luego de instalar una nueva versión de rdesktop ignorando su dependencia en una nueva versión de libc6:#
apt full-upgrade[...] You might want to run 'apt-get -f install' to correct these. The following packages have unmet dependencies: rdesktop: Depends: libc6 (>= 2.5) but 2.3.6.ds1-13etch7 is installed E: Unmet dependencies. Try using -f.
Un administrador valiente que está seguro de la correctitud de su análisis podría elegir ignorar una dependencia o conflicto y utilizar la opción
--force-*
correspondiente. En este caso, si desea poder continuar utilizando apt
o aptitude
, deberá editar /var/lib/dpkg/status
para borrar o modificar la dependencia o conflicto que desea invalidar.
Esta manipulación es un atajo desagradable y no debería ser utilizado nunca excepto en los casos de más extrema necesidad. Muy frecuentemente, recompilar el paquete que está causando el problema (revise la Sección 15.1, “Recompilación de un paquete desde sus fuentes”) o utilizar una nueva verión (potencialmente corregida) de un repositorio como
stable-backports
(revise la Sección 6.1.2.4, “Retroadaptaciones para Stable”) son soluciones más adecuadas.
Ejecutar
dpkg
con la opción -r
o --remove
seguida del nombre de un paquete eliminará dicho paquete. Esta eliminación, sin embargo, no es completa: se mantendrán todos los archivos de configuración, scripts del encargado, archivos de registros (registros de sistema) y otros datos de usuarios que gestiona el paquete. De esta forma, puede desactivar el programa fácilmente al desinstalarlo pero es posible reinstalarlo rápidamente con la misma configuración. Para eliminar completamente todo lo asociado con un paquete, utilice la opción -P
o --purge
seguida del nombre del paquete.
Ejemplo 5.4. Eliminación y purgado del paquete debian-cd
#
dpkg -r debian-cd(Reading database ... 97747 files and directories currently installed.) Removing debian-cd (3.1.17) ... #
dpkg -P debian-cd(Reading database ... 97401 files and directories currently installed.) Removing debian-cd (3.1.17) ... Purging configuration files for debian-cd (3.1.17) ...
VOLVER A LOS CIMIENTOS Sintaxis de opciones
La mayoría de las opciones se encuentran disponibles en una versión «larga» (una o más palabras relevantes precedidas por doble guión) y en una versión «corta» (una única letra, normalmente la primera de las letras de la versión larga, y precedida por un único guión). Esta convención es tan común que constituye un estándar POSIX.
Antes de finalizar esta sección, estudiaremos algunas opciones de
dpkg
que consultan la base de datos interna para obtener información. Daremos primero las opciones en su versión larga y luego la versión corta correspondiente (que evidentemente aceptarán los mismos parámetros posibles) de las opciones: --listfiles paquete
(o -L
), que listará los archivos instalados por este paquete; --search archivo
(o -S
), que encontrará el o los paquetes que contienen el archivo; --status paquete
(o -s
), que mostrará las cabeceras de un paquete instalado; --list
(o -l
), que mostrará la lista de paquetes conocidos por el sistema y su estado de instalación; --contents archivo.deb
(o -c
), que listará los archivos en el paquete Debian especificado; --info archivo.deb
(o -I
), que mostrará las cabeceras de este paquete Debian.
Ejemplo 5.5. Varias consultas con
dpkg
$
dpkg -L base-passwd/. /usr /usr/sbin /usr/sbin/update-passwd /usr/share /usr/share/lintian /usr/share/lintian/overrides /usr/share/lintian/overrides/base-passwd /usr/share/doc-base /usr/share/doc-base/users-and-groups /usr/share/base-passwd /usr/share/base-passwd/group.master /usr/share/base-passwd/passwd.master /usr/share/man /usr/share/man/pl /usr/share/man/pl/man8 /usr/share/man/pl/man8/update-passwd.8.gz /usr/share/man/ru /usr/share/man/ru/man8 /usr/share/man/ru/man8/update-passwd.8.gz /usr/share/man/ja /usr/share/man/ja/man8 /usr/share/man/ja/man8/update-passwd.8.gz /usr/share/man/fr /usr/share/man/fr/man8 /usr/share/man/fr/man8/update-passwd.8.gz /usr/share/man/es /usr/share/man/es/man8 /usr/share/man/es/man8/update-passwd.8.gz /usr/share/man/de /usr/share/man/de/man8 /usr/share/man/de/man8/update-passwd.8.gz /usr/share/man/man8 /usr/share/man/man8/update-passwd.8.gz /usr/share/doc /usr/share/doc/base-passwd /usr/share/doc/base-passwd/users-and-groups.txt.gz /usr/share/doc/base-passwd/changelog.gz /usr/share/doc/base-passwd/copyright /usr/share/doc/base-passwd/README /usr/share/doc/base-passwd/users-and-groups.html $
dpkg -S /bin/datecoreutils: /bin/date $
dpkg -s coreutilsPackage: coreutils Essential: yes Status: install ok installed Priority: required Section: utils Installed-Size: 13855 Maintainer: Michael Stone <mstone@debian.org> Architecture: amd64 Multi-Arch: foreign Version: 8.23-3 Replaces: mktemp, realpath, timeout Pre-Depends: libacl1 (>= 2.2.51-8), libattr1 (>= 1:2.4.46-8), libc6 (>= 2.17), libselinux1 (>= 2.1.13) Conflicts: timeout Description: GNU core utilities This package contains the basic file, shell and text manipulation utilities which are expected to exist on every operating system. . Specifically, this package includes: arch base64 basename cat chcon chgrp chmod chown chroot cksum comm cp csplit cut date dd df dir dircolors dirname du echo env expand expr factor false flock fmt fold groups head hostid id install join link ln logname ls md5sum mkdir mkfifo mknod mktemp mv nice nl nohup nproc numfmt od paste pathchk pinky pr printenv printf ptx pwd readlink realpath rm rmdir runcon sha*sum seq shred sleep sort split stat stty sum sync tac tail tee test timeout touch tr true truncate tsort tty uname unexpand uniq unlink users vdir wc who whoami yes Homepage: http://gnu.org/software/coreutils $
dpkg -l 'b*'Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend |/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad) ||/ Name Version Architecture Description +++-=======================-================-================-==================================================== un backupninja <none> <none> (no description available) ii backuppc 3.3.0-2 amd64 high-performance, enterprise-grade system for backin un base <none> <none> (no description available) un base-config <none> <none> (no description available) ii base-files 8 amd64 Debian base system miscellaneous files ii base-passwd 3.5.37 amd64 Debian base system master password and group files [...] $
dpkg -c /var/cache/apt/archives/gnupg_1.4.18-6_amd64.debdrwxr-xr-x root/root 0 2014-12-04 23:03 ./ drwxr-xr-x root/root 0 2014-12-04 23:03 ./lib/ drwxr-xr-x root/root 0 2014-12-04 23:03 ./lib/udev/ drwxr-xr-x root/root 0 2014-12-04 23:03 ./lib/udev/rules.d/ -rw-r--r-- root/root 2711 2014-12-04 23:03 ./lib/udev/rules.d/60-gnupg.rules drwxr-xr-x root/root 0 2014-12-04 23:03 ./usr/ drwxr-xr-x root/root 0 2014-12-04 23:03 ./usr/lib/ drwxr-xr-x root/root 0 2014-12-04 23:03 ./usr/lib/gnupg/ -rwxr-xr-x root/root 39328 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_ldap -rwxr-xr-x root/root 92872 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_hkp -rwxr-xr-x root/root 47576 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_finger -rwxr-xr-x root/root 84648 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_curl -rwxr-xr-x root/root 3499 2014-12-04 23:03 ./usr/lib/gnupg/gpgkeys_mailto drwxr-xr-x root/root 0 2014-12-04 23:03 ./usr/bin/ -rwxr-xr-x root/root 60128 2014-12-04 23:03 ./usr/bin/gpgsplit -rwxr-xr-x root/root 1012688 2014-12-04 23:03 ./usr/bin/gpg [...] $
dpkg -I /var/cache/apt/archives/gnupg_1.4.18-6_amd64.debnew debian package, version 2.0. size 1148362 bytes: control archive=3422 bytes. 1264 bytes, 26 lines control 4521 bytes, 65 lines md5sums 479 bytes, 13 lines * postinst #!/bin/sh 473 bytes, 13 lines * preinst #!/bin/sh Package: gnupg Version: 1.4.18-6 Architecture: amd64 Maintainer: Debian GnuPG-Maintainers <pkg-gnupg-maint@lists.alioth.debian.org> Installed-Size: 4888 Depends: gpgv, libbz2-1.0, libc6 (>= 2.15), libreadline6 (>= 6.0), libusb-0.1-4 (>= 2:0.1.12), zlib1g (>= 1:1.1.4) Recommends: gnupg-curl, libldap-2.4-2 (>= 2.4.7) Suggests: gnupg-doc, libpcsclite1, parcimonie, xloadimage | imagemagick | eog Section: utils Priority: important Multi-Arch: foreign Homepage: http://www.gnupg.org Description: GNU privacy guard - a free PGP replacement GnuPG is GNU's tool for secure communication and data storage. It can be used to encrypt data and to create digital signatures. It includes an advanced key management facility and is compliant with the proposed OpenPGP Internet standard as described in RFC 4880. [...]
YENDO MÁS ALLÁ Comparación de versiones
Dado que
dpkg
es el programa para gestionar paquetes Debian, también provee la implementación de referencia para la lógica de comparación de números de versión. Es por esto que tiene una opción --compare-versions
, que puede ser utilizada por programas externos (especialmente scripts de configuración ejecutados por dpkg
mismo). Esta opción necesita tres parámetros: un número de versión, un operador de comparación y un segundo número de versión. Los diferentes operadores posibles son: lt
(estrictamente menor), le
(menor o igual), eq
(igual), ne
(distinto), ge
(mayor o igual) y gt
(estrictamente mayor). Si la comparación es correcta, dpkg
devuelve 0 (éxito); de lo contrario devolverá un valor distinto de cero (indicado un fallo).$
dpkg --compare-versions 1.2-3 gt 1.1-4$
echo $?0 $
dpkg --compare-versions 1.2-3 lt 1.1-4$
echo $?1 $
dpkg --compare-versions 2.6.0pre3-1 lt 2.6.0-1$
echo $?1
Note el fallo inesperado de la última comparación:
pre
, que generalmente denota una prepublicación, no tiene un significado especial para dpkg
y éste compara los caracteres alfabéticos de la misma forma que los números (a < b < c ...): en orden alfabético. Es por esto que considera «0pre3
» mayor que «0
». Si deseamos que el número de versión de un paquete indique que es una prepublicación, utilizamos el carácter virgulilla: «~
»:$
dpkg --compare-versions 2.6.0~pre3-1 lt 2.6.0-1$
echo $?0
dpkg
mantiene un registro de todas sus acciones en /var/log/dpkg.log
. Este registro es extremadamente detallado ya que incluye cada una de las etapas por las que pasa un paquete gestionado por dpkg
. Además de ofrecer una forma de rastrear el funcionamiento de dpkg, sobre todo ayuda a mantener un historial del desarrollo del sistema: uno puede encontrar el momento exacto en el que se instaló o actualizó un paquete, y esta información puede ser extremadamente útil cuando se intenta entender un cambio de comportamiento reciente. Además, como se registran todas las versiones, es sencillo verificar y referenciar información con el archivo changelog.Debian.gz
del paquete en cuestión o inclusive con reportes de error online.
Todos los paquetes Debian poseen un campo «
Architecture
» (arquitectura) en su información de control. El valor de este campo puede ser «all
» (para los paquetes que son independientes de la arquitectura) o el nombre de la arquitectura al que está destinado (como «amd64», «armhf», …). En el último caso, de forma predeterminada, dpkg
sólo aceptara instalar el paquete si su arquitectura coincide con la arquitectura del equipo según es informada por dpkg --print-architecture
.
Esta restricción asegura que el usuario no termine con binarios compilados para la arquitectura incorrecta. Todo sería perfecto si no fuese que (algunos) equipos puede ejecutar binarios para más de una arquitectura, ya sea de forma nativa (un sistema «amd64» puede ejecutar binarios «i386») o a través de emuladores.
La compatibilidad multiarquitectura de
dpkg
le permite al usuario definir «arquitecturas extranjeras» que pueden ser instaladas en el sistema actual. Puede hacer esto simplemente ejecutando dpkg --add-architecture
como en el ejemplo a continuación. Existe también el correspondiente dpkg --remove-architecture
para eliminar la compatibilidad de una arquitectura extranjera, pero sólo puede utilizarlo cuando ya no existan paquetes instalados de dicha arquitectura.#
dpkg --print-architectureamd64 #
dpkg --print-foreign-architectures#
dpkg -i gcc-4.9-base_4.9.1-19_armhf.debdpkg: error processing archive gcc-4.9-base_4.9.1-19_armhf.deb (--install): package architecture (armhf) does not match system (amd64) Errors were encountered while processing: gcc-4.9-base_4.9.1-19_armhf.deb #
dpkg --add-architecture armhf#
dpkg --add-architecture armel#
dpkg --print-foreign-architecturesarmhf armel #
dpkg -i gcc-4.9-base_4.9.1-19_armhf.debSelecting previously unselected package gcc-4.9-base:armhf. (Reading database ... 86425 files and directories currently installed.) Preparing to unpack gcc-4.9-base_4.9.1-19_armhf.deb ... Unpacking gcc-4.9-base:armhf (4.9.1-19) ... Setting up gcc-4.9-base:armhf (4.9.1-19) ... #
dpkg --remove-architecture armhfdpkg: error: cannot remove architecture 'armhf' currently in use by the database #
dpkg --remove-architecture armel#
dpkg --print-foreign-architecturesarmhf
NOTA Compatibilidad multiarquitectura de APT
APT detectará automáticamente cuando se haya configurado a dpkg para que sea compatible con arquitecturas extranejeras y descargará los archivos
Packages
correspondientes durante su proceso de actualización.
Luego podrá instalar paquetes extranejros con
apt install paquete:arquitectura
.
EN LA PRÁCTICA Utilización de binarios i386 privativos en amd64
Hay muchos casos de uso para multiarquitectura, pero el más popular es la capacidad de instalar binarios de 32 bits (i386) en sistemas de 64 bits (amd64), en particular debido a que varias aplicaciones privativas populares (como Skype) sólo proveen versiones de 32 bits.
Para poder hacer que multiarquitectura fuese útil y usable, se debieron reempaquetar bibliotecas y moverlas a un directorio específico de la arquitectura para que se pudieran instalar simultáneamete varias copias (para diferentes arquitecturas). Estos paquetes actualizados contienen el campo de cabecera «
Multi-Arch: same
» para indicarle al sistema de paquetes que se pueden instalar simultáneamente y sin problemas varias arquitecturas del mismo (y que dichos paquetes sólo satisfacen dependencias de los paquetes de la misma arquitectura). Desde el debut de multiarquitectura en Debian Wheezy, aun no todas las bibliotecas fueron convertidas.$
dpkg -s gcc-4.9-basedpkg-query: error: --status needs a valid package name but 'gcc-4.9-base' is not: ambiguous package name 'gcc-4.9-base' with more than one installed instance Use --help for help about querying packages. $
dpkg -s gcc-4.9-base:amd64 gcc-4.9-base:armhf | grep ^MultiMulti-Arch: same Multi-Arch: same $
dpkg -L libgcc1:amd64 |grep .so/lib/x86_64-linux-gnu/libgcc_s.so.1 $
dpkg -S /usr/share/doc/gcc-4.9-base/copyrightgcc-4.9-base:amd64, gcc-4.9-base:armhf: /usr/share/doc/gcc-4.9-base/copyright
Vale la pena aclarar que los paquetes que contengan
Multi-Arch: same
deben poseer nombres que inlcuyan su arquitectura para poder identificarlos unívocamente. También tienen la posibilidad de compartir archivos con otras instancias del mismo paquete; dpkg
se asegura que todos los paquetes tengan archivos idénticos bit a bit cuando son compartidos. Por último, todas las instancias de un paquete deben tener la misma versión. Por lo tanto, deben actualizarse simultáneamente.
La compatibilidad multiarquitectura también viene aparejada con algunos retos interesantes sobre la forma en la que se gestionan las dependencias. Para satisfacer una dependencia se necesita un paquete marcado con «
Multi-Arch: foreign
» o bien un paquete cuya arquitectura coincida con la del paquete que declara la dependencia (en este proceso de resolución de dependencias, se asume que los paquetes independientes de la arquitectura son de la misma arquitectura que el sistema). También se puede debilitar una dependencia para permitir que cualquier arquitectura la satisfaga con la sintaxis paquete:any
, pero los paquetes extranjeros sólo pueden satisfacer dicha dependencia si están marcados con «Multi-Arch: allowed
».
0 Comentarios