Capítulo 2. Gestión de paquetes Debian

# Capítulo 2. Gestión de paquetes Debian

| Nota
Este capítulo se ha escrito según la última distribución estable, cuyo nombre de publicación es: `trixie`. La fuente de datos del sistema APT se denomina colectivamente lista de fuentes en este documento . Puede definirse en cualquier parte de los archivos "`/etc/apt/sources.list`", "`/etc/apt/sources.list.d/*.list`" o "`/etc/apt/sources.list.d/*.sources`".

## 2.1. Prerequisitos de la gestión de paquetes Debian

### 2.1.1. Sistema de gestión de paquetes Debian

Debian es una organización constituida por voluntarios que construyen versiones de paquetes binarios precompilados compatibles basados en software libre y lo distribuyen en su archivo.

El archivo de Debian lo constituyen múltiples nodos espejo a los que se accede por medio de los protocolos HTTP y FTP. También esta disponible en CD-ROM/DVD.

El actual sistema de gestión de paquetes de Debian que puede utilizar todos estos recursos es Herramienta de empaquetado avanzada (APT).

El sistema de gestión de paquetes Debian, cuando se usa de forma adecuada desde el archivo, ofrece al usuario la instalación en el sistema de un conjunto de paquetes binarios consistentes. Actualmente existen 78093 paquetes disponibles para la arquitectura amd64.

El sistema de administración de paquetes de Debian tiene una rica historia y muchas opciones para el programa de usuario de front-end y el método de acceso al archivo de back-end que se utilizará. Actualmente, recomendamos lo siguiente.

- apt(8) para todas las operaciones de la línea de órdenes, incluida la instalación, eliminación y actualización de paquetes.

- apt-get(8) para llamar desde los archivos de órdenes al sistema de gestión de paquetes de Debian. Es una opción de reserva en antiguos sistemas Debian en los que `apt` no esta disponible.

- aptitude(8) para la gestión interactiva mediante interfaz de texto para la gestión de los paquetes instalados y búsquedas sobre los paquetes disponibles.

Tabla 2.1. Relación de herramientas para la gestión de paquetes de Debian

paquete | popularidad | tamaño | descripción
--- | --- | --- | ---
`dpkg` | V:904, I:1000 | 6399 | sistema de gestión de paquetes de bajo nivel para Debian (basado en archivos)
`apt` | V:892, I:1000 | 4956 | Front-end de APT para administrar paquetes con CLI: `apt`/`apt-get`/`apt-cache`
`aptitude` | V:32, I:168 | 4621 | Front-end de APT para gestionar paquetes de forma interactiva con consola de pantalla completa: aptitude(8)
`tasksel` | V:37, I:984 | 351 | Front-end de APT para instalar las tareas seleccionadas: tasksel(8)
`unattended-upgrades` | V:127, I:181 | 320 | paquete mejorado de APT, para permitir la instalación automática de actualizaciones de seguridad
`gnome-software` | V:155, I:259 | 4707 | Centro de software para GNOME (front-end GUI APT)
`synaptic` | V:31, I:276 | 7788 | gestor de paquetes gráfico (interfaz de GTK APT)
`apt-utils` | V:414, I:998 | 1181 | utilidades de APT: apt-extracttemplates(1), apt-ftparchive(1) y apt-sortpkgs(1)
`apt-listchanges` | V:396, I:891 | 562 | herramienta de notificación de cambios en el histórico de paquetes
`apt-listbugs` | V:5.2, I:7.1 | 512 | relación de bugs críticos después de cada instalación APT
`apt-file` | V:15, I:56 | 89 | utilidad APT para la búsqueda de paquetes — interfaz de línea de órdenes
`apt-rdepends` | V:0.4, I:4.7 | 39 | relación de dependencias recursivas de los paquetes

### 2.1.2. Configuración de paquetes

Estos son algunos puntos clave para la configuración de los paquetes en el sistema Debian.

- Para el entorno de escritorio moderno, es buena idea reiniciar el sistema después del cambio de configuración y la actualización del paquete para garantizar que el sistema funcione correctamente.

- Se respeta la configuración manual del administrador del sistema. Dicho de otra forma, por convenio el sistema de configuración de paquetes no realiza configuraciones de manera intrusíva.

- Cada paquete viene con su propio archivo de órdenes para su configuración con un interfaz de usuario estándar llamado debconf(7) que facilita el proceso de la instalación inicial del paquete.

- Los desarrolladores de Debian lo hacen lo mejor posible para que tenga una experiencia de actualización perfecta a través de los archivos de órdenes para la configuración del paquete.

- Las funcionalidades completas del software empaquetado están disponibles para el administrador del sistema. Sin embargo, aquellas que representan riesgos para la seguridad están deshabilitadas en la instalación por defecto.

- Si manualmente activa un servicio peligroso para la seguridad, será el responsable de los riesgos que contenga.

- El administrador del sistema puede realizar manualmente configuraciones esotéricas. Esto puede interferir con los programas de ayuda estándar que se utilizan para la configuración del sistema.

### 2.1.3. Precauciones principales

| Aviso
No mezcle paquetes de diferentes fuentes. Probablemente romperá la consistencia entre paquetes del sistema lo que requiere un conocimiento de su gestión interna, como son el compilador ABI, versiones de bibliotecas, funcionalidades de intérpretes, etc.

El administrador del sistema Debian newbie deberías quedarte con la versión `stable` (estable) de Debian y aplicar sólo las actualizaciones de seguridad. Hasta que entiendas muy bien el sistema Debian, deberías seguir las siguientes precauciones.

- No incluyas `testing` (pruebas) o `unstable` (inestable) en la lista de fuentes.

- No mezcles Debian estándar con otros archivos no Debian como Ubuntu en la lista de fuentes .

- No crees "`/etc/apt/preferences`".

- No modifiques el comportamiento predeterminado de las herramientas de gestión de los paquetes a través de los archivos de la configuración sin conocer todas sus repercusiones.

- No instales paquetes aleatorios mediante "`dpkg -i random_package`".

- No instales nunca paquetes aleatorios mediante "`dpkg --force-all -i random_package`".

- No borres ni modifiques los archivos de "`/var/lib/dpkg/`".

- no sobreescribas el sistema de archivos al instalar software compilado directamente de su código fuente.

  - Si lo necesitas instálalos en «`/usr/local`» o «`/opt`».

Los efectos no compatibles causados por violar las precauciones anteriores al sistema de gestión de paquetes de Debian pueden dejar tu sistema inutilizable.

Los administradores serios del sistema Debian responsables de los servidores de una misión crítica deben tomar precauciones adicionales.

- No instalar ningún paquete de Debian, incluyendo las actualizaciones de seguridad, sin probarlo con su configuración especifica en un entorno seguro.

  - Al final, tu como administrador del sistema, eres el responsable de tu sistema.

  - el largo historial de estabilidad del sistema Debian no es una garantía por sí misma.

### 2.1.4. Conviviendo con actualizaciones continuas

| Atención
Para sus servidores de producción es recomendable la distribución `stable` (estable) con sus actualizaciones de seguridad. También es recomendable para los equipos de escritorio a los que quiera dedicar poco tiempo en su administración.

A pesar de mis advertencias anteriores, muchos lectores de este documento pueden desear ejecutar las suites `testing` (pruebas) o `unstable` (inestable) más nuevas.

La iluminación de las siguientes secciones salva a las personas de la eterna lucha kármica de actualizar el infierno y las dejan llegar al nirvana de Debian.

Esta lista está destinada al entorno de escritorio self-administered.

- Utilice la suite `testing` ya que es prácticamente la versión rolling -continua- gestionada automáticamente por la infraestructura de control de calidad del archivo de Debian, como la integración continua de Debian, la prácticas de carga solo de fuente, y el seguimiento de transición de biblioteca. Los paquetes de la suite `testing` se actualizan con la suficiente frecuencia para ofrecer las funciones más recientes.

- Establece el nombre de código correspondiente al conjunto `testing` ("`forky`" durante el ciclo de publicación `trixie`-as-`stable`) en la lista de las fuentes.

- Actualiza manualmente este nombre en clave en la lista de fuentes al nuevo solo después de evaluar la situación durante aproximadamente un mes después del lanzamiento de la suite principal. La lista de los correos de los usuarios y los desarrolladores de Debian también es una buena fuente de información para esto.

No se recomienda el uso de la suite `inestable`. La `suite inestable` es buena para depurar paquetes como desarrollador pero tiende a exponerle a riesgos innecesarios para el uso normal del escritorio. Aunque la suite `inestable` del sistema Debian parece muy estable la mayoría de las veces, ha habido algunos problemas con paquetes y algunos de ellos no eran tan triviales de resolver.

Aquí algunas ideas de las medidas de precaución básicas para asegurar una recuperación rápida y fácil de los fallos en los paquetes Debian.

- Hace disponible el sistema de rescate siguiendo Sección 3.2, “Rescue system”.

- Hacer el sistema de arranque dual instalando la suite `stable` del sistema Debian en otra partición

- Considera instalar `apt-listbugs` para comprobar la información del Sistema de seguimiento de errores de Debian (BTS) antes de la actualización

- Aprender la infraestructura del sistema de los paquetes lo suficiente como para solucionar un problema

| Atención
Si no puede tomar ninguna de estas precauciones, probablemente no estés listo para las versiones `de prueba` e `inestables`.

### 2.1.5. Fundamentos del archivo de Debian

| Sugerencia
Las directrices oficiales del archivo de Debian están definidas en el Manual de Directrices Debian, Capítulo 2 - El archivo de Debian.

Examinemos el archivo de Debian desde el punto de vista de un usuario del sistema.

Para un usuario del sistema, se accede al archivo de Debian usando el sistema APT.

El sistema APT especifica tu fuente de datos como la lista de fuentes y se describe en sources.list(5).

For the `trixie` system with the typical HTTP access, the source list is provided in the modern deb822-style in "`/etc/apt/sources.list.d/debian.sources`" as the following:

    Types: deb deb-src
    URIs: http://deb.debian.org/debian/
    Suites: trixie
    Components: main non-free-firmware contrib non-free

    Types: deb deb-src
    URIs: http://security.debian.org/debian-security/
    Suites: trixie-security
    Components: main non-free-firmware contrib non-free

| Sugerencia

If the source list is provided in the older deprecated one-line-style in "`/etc/apt/sources.list`" or "`/etc/apt/sources.list.d/*.list`" files, update them with:

     $ sudo apt modernize-sources

Los puntos clave de las listas de fuentes en estilo deb822 son los siguientes.

- Sus definiciones se encuentran en los archivos "`/etc/apt/sources.list.d/*.sources`".

- Cada bloque de líneas separado por una línea en blanco define la fuente de los datos para el sistema APT.

- "`Types:`" define la lista de tipos como "`deb`" y "`deb-src`".

- "`URIs:`" define la lista de URIs raíz del archivo de Debian.

- "`Suites:`" define la lista de los nombres de la distribución utilizando el nombre de la suite o el nombre en clave.

- "`Components:`" define la lista de los nombres del área de los archivos válidos de Debian.

La definición para "`deb-src`" puede omitirse con seguridad si es sólo para `aptitude` que no accede a los metadatos relacionados con la fuente. Acelera las actualizaciones de los metadatos del archivo.

La dirección URL puede ser "`https://`", "`http://`", "`ftp://`", "`file://`", ....

Las líneas que empiezan por "`#`" son comentarios y se ignoran.

Aquí, tiendo a usar el nombre de código "`trixie`" o "`forky`" en lugar del nombre de la suite "`stable`" (estable) o "`testing`" (pruebas) para evitar sorpresas cuando se publique la siguiente `stable` (estable).

| Sugerencia
Si se utiliza "`sid`" en el ejemplo anterior en lugar de "`trixie`", la línea "`deb: http://security.debian.org/ …`" o su contenido equivalente en deb822 para las actualizaciones de seguridad en la lista de fuentes no es necesaria. Esto se debe a que no existe un archivo de actualizaciones de seguridad para "`sid`" (`inestable`).

Aquí está la lista de direcciones URL de las páginas del archivo de Debian y el nombre de la suite o nombre del código usado en el fichero de configuración después de la publicación de `trixie`.

Tabla 2.2. Relación de sitios de archivo de Debian

URL del archivo | nombre del paquete | nombre de publicación | finalidad del repositorio
--- | --- | --- | ---
https://deb.debian.org/debian/ | `stable` | `trixie` | Liberación `stable` cuasiestática tras exhaustivas comprobaciones
https://deb.debian.org/debian/ | `testing` | `forky` | Liberación dinámica de `testing` tras comprobaciones decentes y cortas esperas
https://deb.debian.org/debian/ | `unstable` | `sid` | Liberación dinámica `unstable` tras comprobaciones mínimas y sin esperas
https://deb.debian.org/debian/ | `experimental` | N/A | Experimentos previos al lanzamiento por parte de los desarrolladores (opcional, sólo para desarrolladores)
https://deb.debian.org/debian/ | `stable-proposed-updates` | `trixie-proposed-updates` | Actualizaciones para la próxima versión `stable` (opcional)
https://deb.debian.org/debian/ | `stable-updates` | `trixie-updates` | Subconjunto del conjunto `stable-proposed-updates` que necesita actualizaciones urgentes, como los datos de la zona horaria (opcional)
https://deb.debian.org/debian/ | `stable-backports` | `trixie-backports` | Colección aleatoria de paquetes recompilados, principalmente de la versión `testing` (opcional)
http://security.debian.org/debian-security/ | `stable-security` | `trixie-security` | Actualizaciones de seguridad para la versión `stable` (importante)
http://security.debian.org/debian-security/ | `testing-security` | `forky-security` | El equipo de seguridad no lo utiliza ni lo apoya activamente

| Atención

Sólo la versión `stable` (estable) pura con actualizaciones de seguridad proporciona la mejor estabilidad. Ejecutar principalmente la versión `stable` (estable) mezclada con algunos paquetes de `testing` (pruebas) o `unstable` (inestable) es más arriesgado que ejecutar la versión `unstable` (inestable) pura por desajuste de versiones de librerías, etc. Si realmente necesita la última versión de algunos programas de la versión `stable` (estable), utilice los paquetes de los servicios stable-updates y backports (consulte Sección 2.7.4, “Actualizaciones y Backports”). Estos servicios deben utilizarse con especial cuidado.

| Atención

Por defecto debería tener únicamente una de las distribuciones `stable` (estable), `testing` (pruebas) o `unstable` (inestable) en la línea «`deb`». Si se tiene en línea «`deb`» una combinación de las distribuciones `stable` (estable), `testing` (pruebas) e `unstable` (inestable) los programas APT son más lentos y sólo la última distribución es útil. El uso de múltiples distribuciones requiere utilizar el archivo «`/etc/apt/preferences`» con un fin específico (consulte Sección 2.7.7, “Ajustar la versión candidata con apt-pinning”).

| Sugerencia
Para el sistema Debian con la suite `stable` (estable), es una buena idea incluir el contenido con "`http://security.debian.org/`" en la lista de las fuentes para habilitar las actualizaciones de seguridad como en el ejemplo anterior.

| Nota

El equipo de seguridad de Debian ha corregido los errores de seguridad del archivo `estable` . Esta actividad ha sido bastante rigurosa y confiable. Los errores del archivo de pruebas `` pueden ser corregidos por el equipo de seguridad de pruebas de Debian. Por varias razones , esta actividad no es tan rigurosa como aquella para `estable` y es posible que deba esperar la migración de los paquetes `inestables` corregidos al archivo `de prueba` . Los errores del archivo `inestable` son corregidos por el mantenedor individual. Los paquetes `inestables` mantenidos activamente suelen estar en bastante buen estado gracias a las últimas correcciones de seguridad ascendentes. Consulte las Preguntas frecuentes sobre seguridad de Debian para saber cómo Debian maneja los errores de seguridad.

Tabla 2.3. Relación de áreas de archivo Debian

área | número de paquetes | criterio de componente del paquete
--- | --- | ---
`main` | 76611 | Compatible con DFSG y sin dependencia de `non-free`
`non-free-firmware` | 75 | no compatible con DFSG, firmware necesario para una experiencia razonable de la instalación del sistema
`contrib` | 362 | cumplen con DFSG pero con dependencias con `non-free`
`non-free` | 1045 | No cumple con las Directrices de software libre de Debian (DFSG) y no está en `non-free-firmware`

El número de paquetes que se indica es para la arquitectura amd64. El área `main` proporciona el sistema Debian (ver Sección 2.1.6, “Debian es 100% software libre”).

Al navegar por cada URL junto a `dists` o `pool` conocerá mejor la organización del archivo de Debian.

Se puede nombrar una distribución de dos formas, por la distribución o nombre de publicación. La palabra distribución se usa alternativamente como sinónimo de la suite en muchas documentaciones. La relación entre la suite y el nombre en clave se puede resumir de la siguiente manera.

Tabla 2.4. Relación entre los nombres de publicación y distribución

Temporización | distribución = `stable` (estable) | distribución = `testing` (prueba) | distribución = `unstable` (inestable)
--- | --- | --- | ---
después de la publicación de `trixie` | nombre de publicación = `trixie` | nombre de publicación = `forky` | nombre de publicación = `sid`
después de la publicación de `forky` | nombre de publicación = `forky` | nombre de publicación = `duke` | nombre de publicación = `sid`

La historia de los nombres de publicación se cuenta en ¿Debian FAQ: 6.2.1 Qué otros nombres clave se han usado en el pasado?

En la terminología de archivo de Debian de forma estricta, se usa la palabra «sección» en concreto para la categorización de paquetes por el tipo de aplicación. (Sin embargo las palabras «sección principal» algunas veces se usa para describir el área del archivo Debian llamado «main».)

Cada vez que un desarrollador Debian (DD) realiza una nueva entrega a la distribución `«inestable»` (a través del procesamiento de entrada), se le pide que se asegure que la entrega de paquetes sea compatible con el último conjunto de paquetes de la distribución `«inestable»`.

Si un desarrollador de Debian con su actualización rompe la compatibilidad de alguna biblioteca importante de forma intencionada etc, normalmente se anuncia en la lista de correo de desarrollo (debian-devel mailing list) etc.

Después de que un conjunto de paquetes se han movido de forma automática desde la distribución `«inestable»` a la distribución `«en pruebas»` el archivo de órdenes de mantenimiento que lo movió comprueba su madurez (más de 2-10 días de antigüedad), el estado RC de los informes de errores de los paquetes y comprueba su compatibilidad con el último conjunto de paquetes de la distribución `«en pruebas»`. Este proceso hace que la distribución `«en pruebas»` este actualizada y se pueda utilizar.

A través del proceso gradual de congelación de archivos dirigido por el equipo de lanzamiento, el archivo `prueba` se madura hasta hacerlo completamente consistente y libre de errores con algunas intervenciones manuales. A continuación, se crea la nueva versión `estable` asignando el nombre en clave del antiguo archivo `prueba` al nuevo archivo `estable` y creando el nuevo nombre en clave para el nuevo archivo `prueba`. El contenido inicial del nuevo archivo `prueba` es exactamente el mismo que el del nuevo archivo `estable`.

Tanto los repositorios `unstable` (inestable) como los `testing` (prueba) pueden sufrir fallos temporales causados por varios factores.

- Los paquetes rotos se suben al repositorio (ver `unstable` (inestable) )

- Retrasos en la recepción de nuevos paquetes para archivar (principalmente para `unstable` (inestable))

- Problemas con el tiempo de sincronización de los archivos (tanto para `testing` (pruebas) como los `unstable` (inestable))

- Acciones manuales sobre el archivo como la eliminación de paquetes (generalmente para `testing` (pruebas)) etc.

Así que si decide usar esos archivos, debe ser capaz de arreglar o indagar sobre este tipo de problemas.

| Atención

Durante unos pocos meses después de una nueva versión `stable`, la mayoría de los usuarios de escritorio deberían usar el archivo `stable` con sus actualizaciones de seguridad incluso si normalmente usan los archivos `unstable` o `testing`. Para este periodo de transición, tanto los archivos `unstable` como los archivos `testing` no son buenos para la mayoría de la gente. Es difícil mantener su sistema en buenas condiciones de funcionamiento con el archivo `unstable` ya que sufre oleadas de actualizaciones importantes para los paquetes principales. El archivo `testing` tampoco es útil ya que contiene casi el mismo contenido que el archivo `stable` sin su soporte de seguridad (Debian testing-security-announce 2008-12). Después de un mes más o menos, los archivos `unstable` o `testing` pueden llegar a ser útiles si se tiene cuidado.

| Sugerencia
Al utilizar la distribución `testing «en pruebas»` el problema causado por la eliminación de un paquete normalmente se soluciona temporalmente instalando el paquete correspondiente de la distribución `unstable «inestable»` que se carga para corregir el error.

Ver el Manual de Directrices Debian para obtener más información sobre las definiciones del archivo.

- «Secciones»

- «Prioridades»

- «Sistema base»

- «Paquetes esenciales»

### 2.1.6. Debian es 100% software libre

Debian es 100% software libre ya que:

- Debian instala por defecto únicamente software libre para respetar las libertades del usuario.

- Debian proporciona únicamente software libre en el área `main`.

- Debian recomienda ejecutar únicamente el software libre del área `main`.

- Ningún paquete en `main` depende ni recomienda paquetes en `non-free` ni `non-free-firmware` ni `contrib`.

Alguien se pregunta si los dos hechos siguientes se contradicen entre sí.

- «Debian se mantendrá 100% libre». (Primera clausula del Contrato Social de Debian)

- Los servidores Debian alojan algunos paquetes `non-free-firmware`, `non-free` y `contrib`.

Esto no resulta contradictorio, por lo siguiente.

- El sistema Debian es 100% libre y sus paquetes están albergados en los servidores Debian en `main`.

- Los paquetes fuera del sistema Debian están alojados en los servidores de Debian en las áreas `non-free`, `non-free-firmware` y `contrib`.

Se explica de forma precisa en las clausulas cuarta y quinta del Contrato Social de Debian:

- Nuestra prioridad son nuestros usuarios y el software libre

  - Nos guiaremos por las necesidades de nuestros usuarios y de la comunidad del software libre. Sus intereses serán una prioridad para nosotros. Daremos soporte a las necesidades de nuestros usuarios para que puedan trabajar en muchos tipos distintos de entornos de trabajo. No pondremos objeciones al software no libre que vaya a ejecutarse sobre Debian ni cobraremos a las personas que quieran desarrollar o usar ese tipo de software (no libre). Permitiremos a otros crear distribuciones de valor añadido basadas en Debian sin cobrarles nada por ello. Es más, entregaremos un sistema integrado de alta calidad sin restricciones legales que pudieran prevenir este tipo de uso.

- Trabajos que no siguen nuestros estándares de software libre

  - Reconocemos que algunos de nuestros usuarios requieren el uso de trabajos que no se ajustan a las Directrices de Software Libre de Debian. Hemos creado las áreas "`non-free`", "`non-free-firmware`" y "`contrib`" en nuestro archivo para estos trabajos. Los paquetes de estas áreas no forman parte del sistema Debian, aunque han sido configurados para su uso con Debian. Animamos a los fabricantes de CDs a que lean las licencias de los paquetes en estas áreas y determinen si pueden distribuir los paquetes en sus CDs. Así, aunque los trabajos que no son libres no forman parte de Debian, apoyamos su uso y proporcionamos infraestructura para los paquetes que no son libres (como nuestro sistema de seguimiento de fallos y listas de correo). Los medios oficiales de Debian pueden incluir firmware que no forma parte del sistema Debian para permitir el uso de Debian con hardware que requiera dicho firmware.

| Nota
El texto actual del 5º término en el actual Contrato Social Debian 1.2 es ligeramente diferente del texto anterior. Esta desviación editorial es intencionada para hacer consistente este documento de usuario sin cambiar el contenido real del Contrato Social.

Los usuarios deben ser conscientes de los riesgos de utilizar paquetes de las zonas `non-free`, `non-free-firmware` y `contrib`:

- restricciones a la libertad con dichos paquetes

- falta de soporte de Debian para dichos paquetes (Debian no puede ayudar al software propietario por no tener acceso a su código fuente)

- contagio al 100% del sistema libre Debian

Las Directrices de Software Libre Debian son los estándares del software libre de Debian. Debian entiende «software» en un ámbito amplio, incluidos los documentos, firmware, logotipos y materia gráfico de los paquetes. Esto hace que el estándar de software libre de Debian sea uno de los más estrictos.

Los paquetes típicos `non-free`, `non-free-firmware` y `contrib` incluyen paquetes de libre distribución de los siguientes tipos:

- Paquetes de documentación que cumplen la Licencia de Documentación Libre GNU con secciones fijas como las de GCC y Make (la mayor parte se encuentran en la sección`non-free/doc`.)

- Paquetes de firmware que contienen datos binarios sin fuente como los listados en Sección 9.10.5, “Controladores y firware del hardware” como `non-free-firmware`. (La mayoría se encuentran en la sección `non-free-firmware/kernel`).

- Paquetes de juegos y tipos de letra con restricciones para su uso comercial y/o modificación de su contenido.

Por favor, ten en cuenta que el número de paquetes `non-free`, `non-free-firmware` y `contrib` es inferior al 2% de los paquetes `main`. Permitir el acceso a las áreas `non-free`, `non-free-firmware` y `contrib` no oculta el origen de los paquetes. El uso interactivo a pantalla completa de aptitude(8) le proporciona visibilidad completa y control sobre qué paquetes se instalan y desde qué área lo hacen. Para mantener tu sistema tan libre como desees.

### 2.1.7. Dependencias de paquetes

El sistema Debian proporciona un conjunto consistente de paquetes binarios a través de un mecanismo de declaración de dependencia binaria versionada en sus campos de archivo de control. Aquí hay algunas definiciones simples de ellos.

- "Depende"

  - Declara una dependencia obligatoria y es obligatorio que todos los paquetes enumerados sean instalados al mismo tiempo o que estén instalados previamente.

- «Predepende» (Pre-depends)

  - Son como las dependencias, con la excepción de que es obligatorio que estén instalados completamente con anterioridad.

- «Recomendado» (Recommends)

  - Determina una dependencia fuerte, pero no obligatoria. La mayoría de los usuarios no querrán instalar el paquete al menos que todos los paquetes enumerados en este campo estén instalados.

- «Sugiere»

  - Esto declara una dependencia débil. Muchos usuarios de este paquete pueden beneficiarse de la instalación de paquetes listados en este campo, aunque pueden funcionar bien sin ellos.

- «Mejora» (Enhances)

  - Declara una dependencia débil como Sugerida pero va en la dirección contraria.

- «Rompe» (Breaks)

  - Declara una incompatibilidad, generalmente con una versión concreta. La solución más común es actualizar todos los paquetes que se encuentran enumerados en este campo.

- «Incompatibles» (Conflicts)

  - Declara su total incompatibilidad. Todos los paquetes enumerados en este campo deben ser eliminados para conseguir instalar el paquete.

- «Sustituye» (Replaces)

  - Se declara cuando los archivos instalados por el paquete sustituyen a los archivos de los paquetes que se enumeran.

- «Proporciona» (Provides)

  - Se declara cuando el paquete proporciona todos los archivos y funcionalidades de los paquetes enumerados.

| Nota
Tener en cuenta, que lo correcto es definir «Proporciona», «Incompatible» y «Sustituye» a la vez en el caso de un paquete virtual. Esto asegura que solo un paquete real que proporciona el virtual puede ser instalado a la vez.

La definición «oficial», incluyendo la dependencia del código fuente, está en Manual de directrices de Debian: Capítulo 7 - Declaración de relaciones entre paquetes.

### 2.1.8. El flujo de eventos de la gestión de paquetes

A continuación se muestra un resumen del flujo de eventos simplificado de la gestión de paquetes por parte de APT.

- «Update» («`apt update`», «`aptitude update`» o «`apt-get update`»):

  1. Recupera los metadatos del archivo remoto

  2. Reconstruye y actualiza la copia local de los metadatos del archivo que utiliza APT

- «Upgrade» («`apt upgrade`» y «`apt full-upgrade`» o «`aptitude safe-upgrade`» y «`aptitude full-upgrade`» o «`apt-get upgrade`» y «`apt-get dist-upgrade`»):

  1. Seleccione una versión candidata, que instala paquetes que suelen ser las últimas versiones disponibles (consulte Sección 2.7.7, “Ajustar la versión candidata con apt-pinning” para conocer las excepciones)

  2. Realiza la resolución de dependencias del paquete

  3. Recupera del archivo remoto los paquetes binarios que se han seleccionado si la versión candidata es diferente de la versión instalada

  4. Desempaqueta los paquetes binarios recuperados

  5. Ejecuta el archivo de órdenes preinst

  6. Instala los archivos binarios

  7. Ejecute el script postinst

- «Install» («`apt install …`», «`aptitude install …`» o «`apt-get install …`»):

  1. Selecciona los paquetes enumerados en la línea de comando

  2. Realiza la resolución de dependencias del paquete

  3. Recupera del repositorio remoto los archivos binarios que se han seleccionado

  4. Desempaqueta los paquetes binarios recuperados

  5. Ejecuta el archivo de órdenes preinst

  6. Instala los archivos binarios

  7. Ejecute el script postinst

- «Remove» («`apt remove …`», «`aptitude remove …`» o «`apt-get remove …`»):

  1. Selecciona los paquetes enumerados en la línea de comando

  2. Realiza la resolución de dependencias del paquete

  3. Ejecuta el archivo de órdenes prerm

  4. Elimina los archivos instalados excepto los archivos de configuración

  5. Ejecuta el archivo de órdenes postrm

- «Purge» («`apt purge …`», «`aptitude purge …`» o «`apt-get purge …`»):

  1. Selecciona los paquetes enumerados en la línea de comando

  2. Realiza la resolución de dependencias del paquete

  3. Ejecuta el archivo de órdenes prerm

  4. Elimina los archivos instalados incluidos los archivos de configuración

  5. Ejecuta el archivo de órdenes postrm

Aquí, se han omitido de forma intencionada los detalles técnicos por el bien del panorama general.

### 2.1.9. Soluciones a problemas básicos en la gestión de paquetes

Se debe leer la excelente documentación oficial. El primer documento a leer es el específico de Debian "`/usr/share/doc/package_name/README.Debian`". También otra documentación en "`/usr/share/doc/package_name/`". Si se configura el shell en Sección 1.4.2, “Personalización de bash”, ingresar los siguientes comandos.

    $ cd package_name
    $ pager README.Debian
    $ mc

Para obtener información especifica puede que necesite instalar el paquete de documentación correspondiente con el sufijo «`-doc`».

Si tiene problemas con un paquete concreto, asegúrese de comprobar primero el sistema de seguimiento de errores Debian (BTS).

Tabla 2.5. Relación de los principales sitios web para resolver problemas de un paquete concreto

sitio web | orden
--- | ---
Página principal de el sistema de seguimiento de errores Debian (BTS) | `sensible-browser "https://bugs.debian.org/"`
El informe de errores con el nombre de un paquete | `sensible-browser "https://bugs.debian.org/package_name"`
El informe del error, si se conoce su número de error | `sensible-browser "https://bugs.debian.org/bug_number"`

Búsqueda en Google incluyendo alguno de los siguientes criterios de búsqueda «`site:debian.org`», «`site:wiki.debian.org`», «`site:lists.debian.org`», etc.

Cuando presente un informe de error, por favor utilice la orden reportbug(1).

### 2.1.10. Como seleccionar paquetes Debian

Cuando encuentre más de 2 paquetes similares y se pregunte cuál instalar sin el esfuerzo de "prueba y error", hay que aplicar el sentido común. Creo que los siguientes puntos son las características que debe tener el paquete preferido.

- Esencial: si > no

- Área: main > contrib > non-free

- Prioridad: required > important > standard > optional > extra

- Tareas: paquetes enumerados como tareas como «Entorno de escritorio«

- Los paquetes se eligen por paquetes que dependen de ellos (por ejemplo, `gcc-16` depende de `gcc`)

- Estadísticas: a mayor número de votos e instalaciones

- Registro de cambios: actualizaciones regulares del desarrollador

- BTS: sin errores RC (ni críticos, ni graves, ni errores leves)

- BTS: atención ofrecida por el desarrollador a los informes de errores

- BTS: mayor número de errores solucionados recientemente

- BTS: menor número de errores que no sean nuevas funcionalidades

Debian comenzó como un proyecto voluntario con un modelo de desarrollo distribuido, sus repositorios contienen muchos paquetes con diferentes objetivos y calidad. Se deben tomar las propias decisiones de qué hacer con ellos.

### 2.1.11. Cómo hacer frente a requisitos contradictorios

Cualquiera que sea la suite del sistema Debian que decidas usar, puede que aún desees ejecutar las versiones de los programas que no están disponibles en esa suite. Incluso si encuentras paquetes de dichos programas en otras suites de Debian o en otros recursos no Debian, sus requisitos pueden entrar en conflicto con tu sistema Debian actual.

Aunque puedes modificar el sistema de gestión de los paquetes con la técnica apt-pinning, etc., tal y como se describe en Sección 2.7.7, “Ajustar la versión candidata con apt-pinning” para instalar estos paquetes binarios no sincronizados, estos métodos de modificación sólo tienen un uso limitado, ya que pueden romper estos programas y tu sistema.

Antes de instalar a la fuerza estos paquetes no sincronizados, deberías buscar todas las soluciones alternativas más seguras disponibles que sean compatibles con tu sistema Debian actual.

- Instala estos programas utilizando los correspondientes paquetes binarios "sandboxed" (ver Sección 7.7, “Sandbox”).

  - Muchos programas, en su mayoría GUI, como LibreOffice y las aplicaciones GNOME, están disponibles como paquetes Flatpak, Snap, o AppImage.

- Crea un entorno chroot o similar y ejecuta dichos programas en él (consulta Sección 9.11, “Sistemas virtualizados”).

  - Los comandos CLI se pueden ejecutar fácilmente bajo chroot compatible (ver Sección 9.11.4, “Sistemas chroot”).

  - Se pueden probar fácilmente múltiples entornos de escritorio y completos sin reiniciar (ver Sección 9.11.5, “Varios sistemas de escritorio”).

- Construye tu mismo las versiones que deseas de los paquetes binarios que sean compatibles con tu sistema Debian actual.

  - Se trata de una tarea no trivial (ver Sección 2.7.13, “Portar un paquete a un sistema estable”).

## 2.2. Operaciones básicas de la gestión de paquetes

Las operaciones de gestión de paquetes basadas en repositorios en el sistema Debian pueden realizarse mediante muchas herramientas de gestión de paquetes basadas en APT disponibles en el sistema Debian. Aquí, explicamos tres herramientas básicas para la gestión de paquetes: `apt`, `apt-get` / `apt-cache` y `aptitude`.

Para realizar las operaciones de gestión de paquetes que incluyen su instalación o la actualización de su metainformación necesitará privilegios de superusuario.

### 2.2.1. `apt` vs. `apt-get` / `apt-cache` vs. `aptitude`

A pesar de que `aptitude` es una herramienta interactiva muy amigable que utilizo personalmente por defecto, debe tener en cuenta algunas advertencias:

- la orden `aptitude` no es recomendable para actualizaciones del sistema entre distribuciones del sistema Debian `stable` (estable) tras la publicación de una distribución nueva .

  - Está recomendado la utilización de «`apt full-upgrade`» o «`apt-get dist-upgrade`». Ver el Error #411280.

- La orden `aptitude` algunas veces recomienda la eliminación masiva de paquetes para la actualización del sistema Debian `testing` (pruebas) o `unstable` (inestable).

  - Esta situación ha aterrado a muchos administradores de sistema. No se asuste.

  - Parece causado principalmente por la distorsión de dependencias o recomendaciones de paquetes por metapaquetes como `gnome-core`.

  - Se resuelve eligiendo «Cancel pending actions» en el menú de órdenes de `aptitude`, saliendo de `aptitude` y utilizando «`apt full-upgrade`».

Las órdenes `apt-get` y `apt-cache` son las herramientas más básicas basadas en APT para la gestión de paquetes .

- `apt-get` y `apt-cache` ofrecen únicamente interfaz de usuario por línea de órdenes.

- `apt-get` es más adecuado para la actualización principal del sistema entre distribuciones, etc.

- `apt-get` tiene un motor robusto para la resolución de dependencias entre los paquetes.

- `apt-get` necesita menos recursos hardware. Utiliza menos memoria y se ejecuta más rápido.

- `apt-cache` tiene un sistema estándar de búsqueda que utiliza expresiones regulares sobre el nombre y la descripción del paquete.

- `apt-get` y `apt-cache` permiten gestionar varias versiones de mismo paquete utilizando `/etc/apt/preferences` aunque es bastante difícil de manejar.

La orden `apt` es un interfaz de alto nivel para la gestión de paquetes desde la línea de órdenes. Es un recubrimiento de `apt-get`, `apt-cache` y órdenes parecidas ideado para que las utilice el usuario final y mejorar por defecto algunas opciones de uso interactivo.

- `apt` tiene una barra de progreso cuando se instalan paquetes mediante `apt install`.

- por defecto `apt` borra los paquetes `.deb` descargados en la caché después de instalarlos con éxito.

| Sugerencia
Se recomienda la utilización de la nueva orden apt(8) para el uso interactivo y utilizar apt-get(8) y apt-cache(8) para los archivos de órdenes.

La orden `aptitude` es la herramienta de gestión de paquetes basada en APT más flexible.

- `aptitude` tiene un interfaz de usuario interactivo a pantalla completa.

- `aptitude` también posee un interfaz de usuario por línea de órdenes.

- `aptitude` esta más pensado para operaciones de la gestión diaria interactiva de paquetes como examinar los paquetes instalados y buscar entre los paquetes disponibles.

- `aptitude` necesita más recursos hardware. Utiliza más memoria y es más lenta en ejecución.

- `aptitude` tiene un sistema de búsqueda mejorado basado en expresiones regulares sobre metainformación de paquetes.

- `aptitude` permite gestionar múltiples versiones de paquetes sin utilizar `/etc/apt/preferences` y es muy intuitivo.

### 2.2.2. Operaciones básicas de gestión de paquetes utilizando la línea de órdenes

Aquí están algunas operaciones básicas para la gestión de paquetes por medio de la línea de órdenes utilizando apt(8), aptitude(8) y apt-get(8) /apt-cache(8).

Tabla 2.6. Operaciones básicas de gestión de paquetes utilizando la línea de órdenes apt(8), aptitude(8) y apt-get(8)/apt-cache(8)

Sintaxis de `apt` | Sintaxis de `aptitude` | Sintaxis de `apt-get`/`apt-cache` | descripción
--- | --- | --- | ---
`apt update` | `aptitude update` | `apt-get update` | actualiza la metainformación de los paquetes
`apt install foo` | `aptitude install foo` | `apt-get install foo` | instala la versión candidata del paquete «`foo`» y sus dependencias
`apt upgrade` | `aptitude safe-upgrade` | `apt-get upgrade` | actualiza los paquetes ya instalados a las nuevas versiones candidatas sin eliminar ningún paquete
`apt full-upgrade` | `aptitude full-upgrade` | `apt-get dist-upgrade` | instala nuevas versiones candidatas de paquetes instalados mientras elimina los paquetes si es necesario
`apt remove foo` | `aptitude remove foo` | `apt-get remove foo` | elimina el paquete «`foo`» sin eliminar sus archivos de configuración
`apt autoremove` | N/A | `apt-get autoremove` | elimina los paquetes autoinstalados que ya no son necesarios
`apt purge foo` | `aptitude purge foo` | `apt-get purge foo` | elimina el paquete «`foo`» y sus archivos de configuración
`apt clean` | `aptitude clean` | `apt-get clean` | limpia por completo el repositorio local de los archivos de paquetes descargados
`apt autoclean` | `aptitude autoclean` | `apt-get autoclean` | limpia el repositorio local de los archivos de paquetes descargados que son obsoletos
`apt show foo` | `aptitude show foo` | `apt-cache show foo` | muestra información detallada sobre el paquete «`foo`»
`apt search regex` | `aptitude search regex` | `apt-cache search regex` | busca paquetes que concuerden con expresión_regular
N/A | `aptitude why regex` | N/A | argumenta la razón por la que el paquete que concuerda con la expresión_regular debe instalarse
N/A | `aptitude why-not regex` | N/A | argumenta la razón por la que el paquete que concuerda con la expresión_regular no debe instalarse
`apt list --manual-installed` | `aptitude search '~i!~M'` | `apt-mark showmanual` | lista los paquetes instalados manualmente

`apt` / `apt-get` y `aptitude` se pueden mezclar sin más problemas.

La orden «`aptitude why expresión_regular`» puede mostrar mas información si se utiliza «`aptitude -v why expresión_regular`». Utilizando «`apt rdepends paquete`» o «`apt-cache rdepends paquete`» se puede obtener información parecida.

Cuando se ejecuta la orden `aptitude` en modo de línea de órdenes y aparece algún problema como un conflicto entre paquetes, si pulsa la tecla «`e`» como respuesta al cursor puede cambiar al modo interactivo a pantalla completa.

| Nota
Aunque la orden `aptitude` proporciona funcionalidades sofisticadas como un mejor motor de resolución de dependencias de paquetes, su complejidad ha causado (y todavía puede causar) algunos problemas como el Error #411123, el Error #514930 y el Error #570377. En caso de duda, por favor, utilice las órdenes `apt`, `apt-get` y `apt-cache` en vez de la orden `aptitude`.

Puede añadir opciones después de la orden «`aptitude`».

Tabla 2.7. Opciones más importantes de la orden aptitude(8)

opción de la orden | descripción
--- | ---
`-s` | simula el resultado de la orden
`-d` | descarga únicamente pero no instala o actualiza
`-D` | muestra aclaraciones breves antes de la instalación o eliminación automáticos

Para más información consulte aptitude(8) y «aptitude user's manual» en «`/usr/share/doc/aptitude/README`».

### 2.2.3. Uso interactivo de aptitude

Para la administración de paquetes interactivos, inicia `aptitude` en modo interactivo desde el indicador de shell de la consola de la siguiente manera.

    $ sudo aptitude -u
    Password:

Con esto actualiza la copia local del archivo y muestra la relación de paquetes en un menú a pantalla completa. La configuración de aptitude está en «`~/.aptitude/config`».

| Sugerencia
Si deseas utilizar la configuración de root en lugar de la de usuario, utiliza "`sudo -H aptitude ...`" en lugar de "`sudo aptitude ...`" en la expresión anterior.

| Sugerencia
`Aptitude` automáticamente ejecuta las acciones pendientes como si hubiera empezado en modo interactivo. Si esto no le gusta, puede inicializarlo desde el menú: «Acción» → «Cancelar las acciones pendientes».

### 2.2.4. Combinaciones de teclado en aptitude

Las pulsaciones de teclas notables para examinar el estado de los paquetes y establecer la "acción planificada" en ellos en este modo de pantalla completa son las siguientes.

Tabla 2.8. Relación de combinaciones de teclado de aptitude

tecla | función
--- | ---
`F10` o `Ctrl-t` | menú
`?` | muestra la ayuda de las combinaciones de teclas (una relación más completa)
`F10` → Ayuda → Manual de usuario | muestra el Manual de Usuario
`u` | actualiza la información de archivo del paquete
`+` | marca el paquete para que se actualice o instale
`-` | marca el paquete para que se elimine (mantiene los archivos de configuración)
`_` | marca el paquete para purgarlo (borra los archivos de configuración)
`=` | coloque el paquete en hold
`U` | marca todos los paquetes actualizables (funciona como full-upgrade)
`g` | comienza la descarga y la instalación de los paquetes seleccionados
`q` | sale de la pantalla actual y guarda los cambios
`x` | sale de la pantalla actual sin guardar los cambios
`Enter` | muestra la información de un paquete
`C` | muestra el registro de cambios del paquete
`l` | cambia el número de paquetes que se muestran
`/` | busca el primer encaje
`\` | repite la última búsqueda

La especificación del nombre de archivo de la línea de comandos y el mensaje del menú después de presionar "`l` " y "`//` " toman la expresión regular de aptitude como se describe a continuación. Aptitude regex puede hacer coincidir explícitamente un nombre de paquete utilizando una cadena iniciada por " `~n`" y seguida del nombre del paquete.

| Sugerencia
Necesita pulsar «`U`» para hacer que todos los paquetes se actualicen a la versión candidata en el interfaz visual. De otra manera solo los paquetes seleccionados y otros que son dependencias de versiones de estos son actualizados a la versión candidata.

### 2.2.5. Visualización de paquetes en aptitude

En el modo interactivo de pantalla completa de aptitude(8), se muestran los paquetes en la lista de paquetes como en el siguiente ejemplo.

    idA   libsmbclient                             -2220kB 3.0.25a-1  3.0.25a-2

El significado de izquierda a derecha de la fila es el siguiente.

- La bandera del «estado actual« (primera letra)

- La bandera de la «acción planeada« (segunda letra)

- La bandera «automática« (tercera letra)

- El nombre del paquete

- La variación del espacio de disco usado según la «acción planeada«

- La versión actual del paquete

- La versión candidata del paquete

| Sugerencia
La lista completa de indicadores aparece en la parte inferior de la pantalla Ayuda que se muestra pulsando "`?`".

La versión candidata se elige de acuerdo a la configuración local del equipo (ver apt_preferences(5) y Sección 2.7.7, “Ajustar la versión candidata con apt-pinning”).

Existen diferentes formas de mostrar los paquetes en la opción de menú «`Vistas`».

Tabla 2.9. Relación de vistas en aptitude

vista | descripción de la vista
--- | ---
`Package View` | ver Tabla 2.10, “La clasificación de la vista de paquetes estándar” (por defecto)
`Audit Recommendations` | relación de paquete que se recomiendan por algún paquete marcado para instalación pero sin instalar por el momento
`Flat Package List` | relación de paquetes sin clasificar (para usar con expresiones regulares)
`Debtags Browser` | relación de paquetes clasificados de acuerdo a sus etiquetas Debian (debtags)
`Source Package View` | lista de paquetes agrupados por paquetes fuente

| Nota
Por favor, ¡ayúdenos mejorando el marcado de paquetes con debtags!

La vista estándar «`Vista de paquetes`» los clasifica en cierto modo como `dselect` con algunas funcionalidades extra.

Tabla 2.10. La clasificación de la vista de paquetes estándar

categoría | descripción de la vista
--- | ---
`Upgradable Packages` | la relación organizada de paquetes según `sección` → `área` → `paquete`
`New Packages` | , ,
`Installed Packages` | , ,
`Not Installed Packages` | , ,
`Obsolete and Locally Created Packages` | , ,
`Virtual Packages` | relación de paquetes con la misma función
`Tasks` | relación de paquetes con diferentes funciones que normalmente son necesarios para una tarea

| Sugerencia
La vista de `tareas` puede usarse para realizar una selección de paquetes para sus tareas.

### 2.2.6. Opciones del método de búsqueda con aptitude

Aptitude ofrece varias opciones para la búsqueda de paquetes usando su fórmula de expresiones regulares.

- Línea de órdenes del intérprete de órdenes:

  - «`aptitude search 'expresión_regular_de_aptitude'`» enumera el estado de instalación, nombre del paquete y descripción corta de los paquetes que encajan

  - «`aptitude show 'nombre_del_paquete'`» muestra la descripción detallada del paquete

- Modo interactivo de pantalla completa:

  - "`l`" para limitar la vista de los paquetes a los paquetes coincidentes

  - «`/`» para buscar los paquetes que encajan

  - «`\`» busca hacia atrás el paquete que encaja

  - «`n`» para encontrar el siguiente

  - «`N`» para buscar el siguiente (hacia atrás)

| Sugerencia
La cadena nombre_del_paquete se trata como el encaje exacto del nombre del paquete al menos que empiece explícitamente con «`~`» que la convierte en una fórmula de expresión regular.

### 2.2.7. La fórmula de la expresión regular de aptitude

La fórmula de expresiones regulares de aptitud es ERE extendida similar a mutt (ver Sección 1.6.2, “Expresiones regulares”) y los significados de la coincidencia especial específica `aptitude` Las extensiones de regla son las siguientes.

Tabla 2.11. Relación de fórmulas de expresiones regulares de aptitute

descripción de las reglas extendidas de encaje | fórmula de la expresión regular
--- | ---
nombre del paquete que encaja | `~nregex_name`
encaja en la descripción | `~dregex_description`
nombre de la tarea que encaja | `~tregex_task`
encaja con las debtag | `~Gregex_debtag`
encaja con el desarrollador | `~mregex_maintainer`
encaja con la sección del paquete | `~sregex_section`
encaja con la versión del paquete | `~Vregex_version`
encaja con la distribución | `~A{trixie,forky,sid`}
encaja con el origen | `~O{debian,…`}
encaja con la prioridad | `~p{extra,important,optional,required,standard`}
encaja con los paquetes esenciales | `~E`
encaja con paquetes virtuales | `~v`
encaja con nuevos paquetes | `~N`
encaja con acciones pendientes | `~a{install,upgrade,downgrade,remove,purge,hold,keep`}
encaja con paquetes instalados | `~i`
encaja con paquetes marcados con A-mark (paquetes auto-instalados) | `~M`
encaja con paquetes instalados sin la marca A (paquetes seleccionados por el administrador) | `~i!~M`
encaja con paquetes instalados y que se pueden actualizar | `~U`
encaja con paquetes eliminados pero no purgados | `~c`
encaja con paquete eliminados y purgados o que se pueden eliminar | `~g`
encaja con paquetes que declaran una dependencia rota | `~b`
encaja con paquetes que declaran una dependencia rota de un tipo | `~Btype`
encaja el patrón sobre paquetes que tienen una dependencia tipo | `~D[type:]pattern`
encaja el patrón con paquetes que tienen una dependencia rota de tipo | `~DB[type:]pattern`
encaja con paquetes en los cuales el patrón encaja con paquetes que declaran una dependencia tipo | `~R[type:]pattern`
coinciden con paquetes a los que el paquete coincidente patrón declara dependencia rota tipo | `~RB[type:]pattern`
encaja con los paquetes con los que los paquetes instalados tienen dependencias | `~R~i`
encaja con los paquetes que no dependen de ningún paquete instalado | `!~R~i`
encaja con los paquete que dependen o son recomendados por otros paquetes instalados | `~R~i|~Rrecommends:~i`
encaja con los paquetes según el patrón filtrados por la versión | `~S filter pattern`
encaja con todos los paquetes (verdad) | `~T`
no encaja con ningún paquete (falso) | `~F`

- La parte regex es la misma ERE que la utilizada en las típicas herramientas de texto tipo Unix utilizando "`^`", "`. *`", "`$`" etc. como en egrep(1), awk(1) y perl(1).

- La dependencia tipo es una de (depende, predepende, recomienda, sugiere, entra en conflicto, reemplaza, proporciona) especificando la interrelación del paquete.

- El tipo de dependencia por defecto es «depends«.

| Sugerencia
Cuando el patrón_de_la_expresión_regular es la cadena «null«, coloca inmediatamente después de la orden «`~T`».

Aquí hay algunos atajos.

- «`~Pterm`» == «`~Dprovides:term`»

- «`~Ctérmino`» == «`~Dconflicts:término`»

- «`…~W término`» == «`(…|término)`»

Los usuarios familiarizados con `mutt` se adaptan rápidamente, ya que mutt fue la inspiración para la sintaxis de las expresiones. Consulte "BÚSQUEDA, LIMITACIÓN Y EXPRESIONES" en el "Manual del usuario" "`/usr/share/doc/aptitude/README`.".

| Nota

Con la versión de `lenny` de aptitude(8), la nueva sintaxis en formato largo como «`?broken`» se puede usar de forma equivalente para el uso de expresiones regulares en lugar de la anterior formato corto «`~b`». Ahora se considera el carácter de espacio «`` » como uno de los caracteres de finalización de la expresión regular al igual que la tilde «`~`». Ver el «Manual de Usuario« para la nueva sintaxis de formato largo.

### 2.2.8. Resolución de dependencias en aptitude

La selección de un paquete con `aptitude` no marca únicamente los paquetes definidos en su relación de «`dependencias:`» sino también aquellos en la relación de «`Recomendados:`» si la opción «`F10` → Options → Preferences → Dependency handling« esta configurada de esa manera. Estos paquetes instalados de forma automática se eliminan de forma automatizada por `aptitude` si no se van a necesitar en el futuro.

La bandera que controla la "autoinstalación" del comando `aptitude` también puede manipularse utilizando el comando apt-mark(8) del paquete `apt`.

### 2.2.9. Registro de la actividad de los paquetes

Puede comprobar el historial de actividad del paquete en los archivos de registro.

Tabla 2.12. Los archivos de registro de acciones sobre paquetes

archivo | contenido
--- | ---
`/var/log/dpkg.log` | Registra la actividad a nivel de `dpkg` para todas las acciones sobre paquetes
`/var/log/apt/term.log` | Registro de acciones genéricas APT
`/var/log/aptitude` | Registro de acciones de la orden `aptitude`

En realidad, no es fácil conseguir una comprensión rápida de estos registros. La manera más fácil se explica en Sección 9.3.9, “Guardando cambios en los archivos de configuración”.

## 2.3. Ejemplos de operaciones con aptitude

A continuación se muestran algunos ejemplos de aptitude(8) en acción.

### 2.3.1. Buscando paquetes interesantes

Se pueden buscar los paquetes que cumplan sus requisitos con `aptitude` bien en base a la descripción del paquete o con la relación de «Tareas«.

### 2.3.2. Enumera los paquetes cuyos nombres encajan con la expresión regular

Las órdenes siguientes enumeran los paquetes cuyos nombres encajan con la expresión regular.

    $ aptitude search '~n(pam|nss).*ldap'
    p libnss-ldap - NSS module for using LDAP as a naming service
    p libpam-ldap - Pluggable Authentication Module allowing LDAP interfaces

Es bastante útil para encontrar el nombre exacto de un paquete.

### 2.3.3. Navega por la relación de paquetes que encajan con la expresión regular

La expresión regular "`~dipv6`" en la vista "Nueva lista plana de paquetes" con la indicación "`l`", limita la vista a los paquetes con la descripción coincidente y permite examinar su información de forma interactiva.

### 2.3.4. Purga los paquetes eliminados definitivamente

Se pueden borrar todos los archivos de configuración de los paquetes eliminados.

Compruebe los resultados del siguiente comando.

    # aptitude search '~c'

Si estás seguro de que los paquetes enumerados deben eliminarse por completo, ejecuta el siguiente comando.

    # aptitude purge '~c'

Puede hacer lo mismo en modo interactivo para tener un control más detallado.

En la «Nueva Vista de Paquetes«, puede añadir una expresión regular a «`~c`» con el cursor «`|`». Esto limita los paquetes que se visualizan a únicamente los que encajan con la expresión regular, esto es, «eliminado pero no purgado«. Todos estos paquetes que encajan con la expresión regular se mostrarán al presionar «`[`» en la cabecera de más alto nivel.

Entonces, pulse «`_`» en la cabecera de mayor nivel como «Paquetes no instalados«. Solo los paquetes que encajan con el patrón de la expresión regular bajo dicho encabezado se marcarán para ser purgados. Usted puede no incluir algunos paquetes de la purga presionando «`=`» de forma manual sobre cada uno de ellos.

Esta técnica es bastante útil y funciona para muchas teclas de órdenes.

### 2.3.5. Estado de instalación ordenado de forma automática/manual

A continuación mostraremos como mantenemos en orden el estado de instalación de los paquetes (después de realizar instalaciones sin usar aptitude etc.).

1. Lance `aptitude` en modo interactivo como «root«.

2. Pulse «`u`», «`U`», «`f`» y «`g`» para actualizar la relación de paquetes y los paquetes.

3. Pulse «`l`» para acceder a la pantalla de los paquetes limitandolos a «`~i(~R~i|~Rrecommends:~i)`» y pulse «`M`» sobre «`Paquetes I`» como auto instalados.

4. Pulse «`l`» para acceder a la pantalla de paquetes limitados como «`~prequired|~pimportant|~pstandard|~E`» y pulse «`m`» sobre «`Paquetes Instalados`» como instalados de forma manual.

5. Escribe "`l`" para entrar en el límite de la visualización de los paquetes como "`~i!~M`" y elimina los paquetes no utilizados escribiendo "`-`" sobre cada uno de ellos después de exponerlos escribiendo "`[`" sobre los "`Paquetes instalados`".

6. Pulse «`|`», para entrar en la pantalla de paquetes limitada por «`~i`»; entonces pulse «`m`» sobre `Tareas`», para marcar aquellos paquetes instalados manualmente.

7. Salir de `aptitude`.

8. Ejecute «`apt-get -s autoremove|less`» como superusuario para comprobar lo que no usa.

9. Reinicie `aptitude` en modo interactivo y marque los paquetes que necesite con «`m`».

10. Volver a ejecutar «`apt-get -s autoremove|less`» como superusuario para volver a comprobar que solo ha ELIMINADO los paquetes que deseaba.

11. Ejecute «`apt-get autoremove|less`» como superusuario para eliminar los paquetes sin uso.

La acción «`m`» sobre «`Tasks`» es opcional y se usa para evitar la situación de eliminar paquetes de forma masiva en el futuro.

### 2.3.6. Actualización mayor del sistema

| Nota

Cuando se cambia a una nueva distribución etc, se debe considerar implantar una instalación limpia del nuevo sistema incluso cuando Debian es actualizable como se describe a continuación. Proporciona la oportunidad de eliminar la basura almacenada y acceder a las mejores combinaciones de las últimas versiones de los paquetes. Sin dudarlo, debería realizar una copia de respaldo completa del sistema a un lugar seguro (ver Sección 10.2, “Respaldo y recuperación”) antes de hacerlo. Nosotros recomendamos crear un arranque dual en una partición diferente para realizar una transición suave.

Puedes realizar una actualización de todo el sistema a una versión más reciente cambiando el contenido de la lista de fuentes apuntando a una nueva versión y ejecutando el comando "`apt update; apt dist-upgrade`".

Para actualizar de `stable` (estable) a `testing` (pruebas) o `unstable` (inestable) durante el ciclo de publicación de `trixie`-como-`estable`, debes sustituir "`trixie` " en la lista de fuentes por ejemplo de Sección 2.1.5, “Fundamentos del archivo de Debian” con "`forky`" o "`sid`".

De hecho, se puede encontrar con algunas complicaciones debido a alguna transición entre paquetes, la mayor parte debido a dependencias. Cuanto mayores es la actualización, más problemas importantes se puede encontrar. Para la transición desde una distribución antigua de `stable` (estable) a la nueva `stable` (estable) después de su publicación, puede leer las nuevas «Release Notes« y seguir el procedimiento concreto que se describe para minimizar los problemas.

Cuando decide migrar de `stable` (estable) a `testing` (pruebas) después de una publicación formal, no existen «Release Notes« de ayuda. La diferencia entre `stable` (estable) y `testing` (pruebas) puede ser bastante mayor después de la liberación de una nueva distribución `stable` (estable) y la actualización se puede convertir en una situación complicada.

Debería ser precavido cuando realiza un actualización completa y consultar la información actualizada sobre ello y usar el sentido común.

1. Lea las anterior «Release Notes«.

2. Realice una copia de respaldo (o de seguridad) completa (especialmente los datos y las configuraciones).

3. Disponga de un medio alternativo de arranque por si falla el cargador de arranque.

4. Informe con anterioridad y de forma correcta a los usuarios.

5. Registre las operaciones de la actualización con script(1).

6. Para evitar su eliminación marque los paquetes que lo requieran como «sin marcado automático» (unmarkauto), p. ej., «`aptitude unmarkauto vim`».

7. Minimize los paquetes instalados con el de minimizar la posibilidad de conflictos, p. ej., elimine los paquetes de la tarea «Escritorio«.

8. Elimina el archivo "`/etc/apt/preferences`" (desactiva apt-pinning).

9. Realice actualizaciones siguiendo los pasos de forma sensata: `oldstable` (vieja_estable) → `stable` (estable) → `testing` (pruebas) → `unstable` (inestable).

10. Actualiza la lista de fuentes para que apunte sólo al nuevo archivo y ejecuta "`aptitude update`".

11. Instale, opcionalmente, primero los nuevos paquetes fundamentales , p. ej., «`aptitude install perl`».

12. Ejecute la orden «`apt-get -s dist-upgrade`» para comprobar su efecto.

13. Finalmente , ejecute la orden «`apt-get dist-upgrade`».

| Atención
No es aconsejable omitir la distribución principal de Debian, la `stable` (estable), cuando se actualiza entre distribuciones.

| Atención
En «Release Notes« anteriores, GCC, el núcleo de Linux , initrd-tools, Glibc, Perl, las herramientas APT, etc. han necesitado una atención especial para la actualización mayor del sistema.

| Atención
Las «Notas de la versión» pueden no cubrir todos los casos posibles. Si cambia configuraciones de bajo nivel, su próxima actualización puede fallar gravemente con ".... error de segmentación después de la mejora ...".

Para actualizar de forma diaria la versión `unstable`, ver Sección 2.4.3, “Protección frente a problemas con paquetes”.

## 2.4. Operaciones avanzadas de gestión de paquetes

### 2.4.1. Operaciones avanzadas de gestión de paquetes desde la línea de órdenes

A continuación puede encontrar otras operaciones de gestión de paquetes para las cuales `aptitude` es demasiada abstracta o no posee la funcionalidad que se necesita.

Tabla 2.13. Relación de operaciones avanzadas con paquetes

orden | acción
--- | ---
`COLUMNS=120 dpkg -l package_name_pattern` | enumera el estado de los paquetes instalados para el informe de errores
`dpkg -L package_name` | enumera el contenido de un paquete instalado
`dpkg -L package_name | egrep '/usr/share/man/man.*/.+'` | relación las páginas del manual para un paquete instalado
`dpkg -S file_name_pattern` | enumera los paquetes instalados que tienen un archivo que encaja con el patrón
`apt-file search file_name_pattern` | enumera los paquetes en el repositorio que encajan con el nombre de archivo
`apt-file list package_name_pattern` | enumera el contenido de los paquetes del repositorio que encajan
`dpkg-reconfigure package_name` | reconfigura el paquete dado
`dpkg-reconfigure -plow package_name` | reconfigura el paquete dado realizando el mayor número de preguntas
`configure-debian` | reconfigura los paquetes desde el menú de pantalla completa
`dpkg --audit` | auditoría del sistema referente a paquete instalados parcialmente
`dpkg --configure -a` | configura todos los paquetes instalados parcialmente
`apt-cache policy binary_package_name` | muestra la versión, la prioridad y la información del repositorio de un paquete binario
`apt-cache madison package_name` | muestra la versión disponible y la información del repositorio de un paquete
`apt-cache showsrc binary_package_name` | muestra la información del paquete fuente que corresponde con el paquete binario
`apt-get build-dep package_name` | instala los paquetes requeridos para construir el paquete
`aptitude build-dep package_name` | instala los paquetes requeridos para construir el paquete
`apt-get source package_name` | descarga la fuente (desde el repositorio estándar)
`dget URL for dsc file` | descarga el código del paquete (desde otro repositorio)
`dpkg-source -x package_name_version-debian.revision.dsc` | construye el árbol de las fuentes para un conjunto de paquetes fuente («`orig.tar.gz`» y «`debian.tar.gz`»/«`*.diff.gz`»)
`debuild binary` | construye el/los paquete(s) desde un árbol de fuentes locales
`make-kpkg kernel_image` | construye el paquete del núcleo desde el árbol fuente del kernel
`make-kpkg --initrd kernel_image` | construye el paquete del núcleo desde el árbol fuente de este con initramfs activado
`dpkg -i package_name_version-debian.revision_arch.deb` | instala un paquete local en el sistema
`apt install /path/to/package_filename.deb` | instala un paquete local en el sistema y trata de resolver de forma automática sus dependencias
`debi package_name_version-debian.revision_arch.dsc` | instala el(los) paquete(s) locales en el sistema
`dpkg --get-selections '*' >selection.txt` | guardar información de estado de selección de nivel de paquete `dpkg`
`dpkg --set-selections <selection.txt` | asigna la información de estado de selección de nivel del paquete `dpkg`
`echo package_name hold | dpkg --set-selections` | establecer el estado de selección del paquete a nivel `dpkg` para un paquete hold (equivalente a "`aptitude hold package_name`")

| Nota
Para paquetes que sean multi-arch, puede necesitar especificar el nombre de la arquitectura para algunas órdenes. Por ejemplo, use «`dpkg -L libglib2.0-0:amd64`» para enumerar el contenido del paquete `libglib2.0-0` para la arquitectura `amd64`.

| Atención

Las herramientas de bajo nivel como «`dpkg -i …`» y «`debi …`» deben usarse con cuidado por el administrador del sistema. No tienen en cuenta de forma automática las dependencias entre paquetes. La opción de la línea de órdenes «`--force-all`» y parecidas (ver dpkg(1)) están hechas para que las usen únicamente usuarios expertos. Usarlas sin entender plenamente sus consecuencias puede corromper el sistema entero.

Ten en cuenta lo siguiente.

- Todas las órdenes de configuración e instalación necesitan ser ejecutadas por el superusuario.

- A diferencia de `aptitude` que usa expresiones regulares (ver Sección 1.6.2, “Expresiones regulares”), otras órdenes para la gestión de paquetes usan patrones como el intérprete de órdenes glob (ver Sección 1.5.6, “Expansión de un patrón en el intérprete de órdenes”).

- apt-file(1) que está en el paquete `apt-file` necesita ejecutar previamente «`apt-file update`».

- configure-debian(8) que está en el paquete `configure-debian` usa como su motor dpkg-reconfigure(8).

- dpkg-reconfigure(8) ejecuta los archivos de órdenes de los paquetes usando como su motordebconf(1).

- Los comandos "`apt-get build-dep`", "`apt-get source`" y "`apt-cache showsrc`" requieren la entrada "`deb-src`" en la lista de fuentes.

- dget(1), debuild(1) y debi(1) necesitan el paquete `devscripts`.

- Consulte el procedimiento de (re)empaquetado mediante «`apt-get source`» en Sección 2.7.13, “Portar un paquete a un sistema estable”.

- La orden `make-kpkg` necesita el paquete `kernel-package` (ver Sección 9.10, “El núcleo”).

- Para el empaquetado general ver Sección 12.9, “Haciendo un paquete Debian”.

### 2.4.2. Verificación de los archivos de un paquete instalado

La instalación de `debsums` permite de la verificación de los archivos de los paquetes instalados comparando los valores MD5sum en el archivo «`/var/lib/dpkg/info/*.md5sums`» con debsums(1). Para saber como funciona MD5sum verSección 10.3.5, “El resumen MD5”.

| Nota
Ya que la base de datos de MD5sum la puede alterar un intruso, debsums(1) su uso como herramienta de seguridad es limitada. Solo es aceptable para que el administrador compruebe modificaciones locales o daños producidos por errores del medio de almacenamiento.

### 2.4.3. Protección frente a problemas con paquetes

Muchos usuarios prefieren seguir las versiones testing (pruebas) (o unstable (inestable)) del sistema Debian por sus nuevas características y paquetes. Esto hace que el sistema sea más propenso a sufrir fallos críticos en los paquetes.

La instalación del paquete `apt-listbugs` protege el sistema contra errores críticos comprobando estos de forma automática BTS de Debian cuando se actualiza mediante el sistema APT.

La instalación del paquete `apt-listchanger` aporta noticias importantes en «`NEWS.Debian`» cuando se actualiza mediante el sistema APT.

### 2.4.4. Buscando metadatos en los paquetes

Aunque al visitar la página de Debian https://packages.debian.org/ facilita formas fáciles de buscar en los metadatos del paquete en estos días, veamos otras formas más tradicionales.

Las órdenes grep-dctrl(1), grep-status(1) y grep-available(1) se pueden usar para buscar cualquier archivo que tenga el formato general de un archivo de control de paquetes de Debian.

«`dpkg -S patrón_de_archivo_de_nombres`» se puede usar para buscar nombres de paquetes que contengan archivos que coincidan con el nombre instalado por `dpkg`. Pero pasa por alto los archivos creados por los scripts de mantenimiento.

Si necesita realizar búsquedas más elaboradas de metadatos de dpkg , necesita ejecutar la orden «`grep -e regex_pattern *`» en el directorio «`/var/lib/dpkg/info/`». Esto realiza búsquedas de las palabras mencionadas en los archivos de órdenes de los paquetes y textos de preguntas de la instalación.

Si desea realizar búsquedas recursivas en dependencias de paquetes , debería usar apt-rdepends(8).

## 2.5. Gestión interna de los paquetes Debian

Aprendamos como funciona internamente el sistema de paquetes Debian. Esto puede ayudar a encontrar su propia solución en algunos problemas con paquetes.

### 2.5.1. Metadatos de archivos

Los metadatos de archivos para cada distribución se almacenan en «`dist/codename`» en cada sitio espejo de Debian , p. ej., «`http://deb.debian.org/debian/`». La estructura del repositorio se puede navegar con un navegador web. Existen seis tipos de metadatos clave.

Tabla 2.14. El contenido de metadatos del repositorio Debian

archivo | ubicación | contenido
--- | --- | ---
`Release` | Alto de la distribución | descripción del archivo e información de integridad
`Release.gpg` | Alto de la distribución | archivo de firma para el archivo firmado «`Release`» con el archivo llave
`Contents-architecture` | Alto de la distribución | relación de todos los archivos para todos los paquetes en el repositorio pertinente
`Release` | raíz de cada combinación de distribución/área/arquitectura | descripción de archivo usado para la regla de apt_preferences(5)
`Packages` | raíz de cada combinación distribución/área/arquitectura-binaria | concatenado de `debian/control` para paquetes binarios
`Sources` | raíz de cada combinación distribución/área/fuente | concatenado de `debian/control` para paquetes fuente

En el archivo reciente, estos metadatos se almacenan como los archivos comprimidos y diferencial para reducir tráfico de red.

### 2.5.2. Archivo «Release» del nivel superior y autenticación

| Sugerencia
El archivo de la raíz «`Release`» se usa para firmar el repositorio del sistema seguro APT.

Cada versión del archivo de Debian tiene un fichero de nivel superior "`Release`", por ejemplo, "`http://deb.debian.org/debian/dists/unstable/Release`", como sigue.

    Origin: Debian
    Label: Debian
    Suite: unstable
    Codename: sid
    Date: Sat, 14 May 2011 08:20:50 UTC
    Valid-Until: Sat, 21 May 2011 08:20:50 UTC
    Architectures: alpha amd64 armel hppa hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
    Components: main contrib non-free
    Description: Debian x.y Unstable - Not Released
    MD5Sum:
     bdc8fa4b3f5e4a715dd0d56d176fc789 18876880 Contents-alpha.gz
     9469a03c94b85e010d116aeeab9614c0 19441880 Contents-amd64.gz
     3d68e206d7faa3aded660dc0996054fe 19203165 Contents-armel.gz
    ...

| Nota
Aquí, puede encontrar la razón de ser entre la «versión« y el «nombre en clave« en Sección 2.1.5, “Fundamentos del archivo de Debian”. «Distribución« se utiliza cuando se refiere a la «versión« y «nombre en clave«. Todos los nombres de "áreas" de archivo que ofrece el archivo se enumeran en "Componentes".

La integridad del archivo de nivel superior "`Release`" se verifica mediante una infraestructura criptográfica denominada secure apt, tal y como se describe en apt-secure(8).

- El archivo de firma criptográfica «`Release.gpg`» se crea desde el auténtico archivo «`Release`» de la raíz y el archivo de la clave secreta Debian.

- Las claves del archivo público de Debian se instalan localmente mediante el último paquete `debian-archive-keyring`.

- El sistema secure APT verifica automáticamente la integridad del fichero descargado de nivel superior "`Release`" criptográficamente mediante este fichero "`Release.gpg`" y las claves públicas del archivo de Debian instaladas localmente.

- La integridad de todos los archivos «`Packages`» y «`Sources`» se verifican usando valores MD5sum del archivo raíz «`Release`». La integridad de todos los archivos de paquetes se comprueban usando los valores de MD5sum en los archivos«`Packages`» and «`Sources`». Ver debsums(1) y Sección 2.4.2, “Verificación de los archivos de un paquete instalado”.

- Ya que la verificación de la firma criptográfica es un proceso intensivo en uso de la CPU, el uso del valor MD5sum para cada paquete mientras se usa el archivo de firma criptográfica de la raíz «`Release`» proporciona buena seguridad y eficiencia (ver Sección 10.3, “Infraestructura de seguridad de la información”).

Si la entrada lista de fuentes especifica la opción "`firmado por`", la integridad del archivo de nivel superior "`Release`" descargado se verifica utilizando la clave pública especificada. Esto es útil cuando la lista de fuentes contiene archivos que no son Debian.

| Sugerencia
El uso del comando apt-key(8) para la gestión de claves APT está obsoleto.

También puedes verificar manualmente la integridad del fichero "`Release`" con el fichero "`Release.gpg`" y la clave pública del archivo Debian publicada en ftp-master.debian.org usando `gpg`.

### 2.5.3. Archivos «Release» a nivel de archivo

| Sugerencia
Los archivos “`Release`” a nivel de fichero se usan para la regla apt_preferences(5).

Existen ficheros a nivel del archivo "`Release`" para todas las ubicaciones del archivo especificadas por la lista de fuentes, como "`http://deb.debian.org/debian/dists/unstable/main/binary-amd64/Release`" o "`http://deb.debian.org/debian/dists/sid/main/binary-amd64/Release`", como se indica a continuación.

    Archive: unstable
    Origin: Debian
    Label: Debian
    Component: main
    Architecture: amd64

| Atención
Para la etiqueta «`Archive:`» , los nombres de distribución (`stable` (estable), `testing` (pruebas), `unstable` (inestable), …) se utilizan en el repositorio Debian mientras que los nombres de publicación («`trusty`», «`xenial`», «`artful`», …) se utilizan en el repositorio Ubuntu.

Para algunos archivos, como `experimental`, y `trixie-backports`, que contienen paquetes que no deben instalarse automáticamente, hay una línea extra, por ejemplo, "`http://deb.debian.org/debian/dists/experimental/main/binary-amd64/Release`" como sigue.

    Archive: experimental
    Origin: Debian
    Label: Debian
    NotAutomatic: yes
    Component: main
    Architecture: amd64

Tenga en cuenta que los repositorios normales sin «`NotAutomatic: yes`», el valor por defecto de la prioridad de instalación (Pin-Priority) es 500, mientras que en los repositorios especiales con «`NotAutomatic: yes`», el valor por defecto de la prioridad de instalación (Pin-Priority) es 1 (ver apt_preferences(5) y Sección 2.7.7, “Ajustar la versión candidata con apt-pinning”).

### 2.5.4. Actualizando la meta información de los paquetes

Cuando se usan herramientas APT, como `aptitude`, `apt-get`, `synaptic`, `apt-file`, `auto-apt`, ..., necesitamos actualizar las copias locales de los metadatos que contienen la información del archivo Debian. Estas copias locales tienen los siguientes nombres que corresponden a los nombres especificados para: `distribución`, `área` y `arquitectura` en la lista de fuentes (ver Sección 2.1.5, “Fundamentos del archivo de Debian”).

- «`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release`»

- «`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_Release.gpg`»

- «`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area_binary-architecture_Packages`»

- «`/var/lib/apt/lists/deb.debian.org_debian_dists_distribution_area_source_Sources`»

- «`/var/cache/apt/apt-file/deb.debian.org_debian_dists_distribution_Contents-architecture.gz`» (para `apt-file`)

Los 4 primeros tipos de archivos son compartidos por todos los comandos APT pertinentes y actualizados desde la línea de comandos mediante "`apt-get update`" o "`aptitude update`". Los metadatos "`Paquetes`" se actualizan si se especifica "`deb`" en la lista de fuentes. Los metadatos "`Fuentes`" se actualizan si se especifica "`deb-src`" en la lista de fuentes.

La metainformación de los «`paquetes`» y de las «`fuentes`» contienen el campo «`Filename:`» que apunta a la ubicación del archivo de los paquetes fuente y binarios. En este momento, estos paquetes se ubican en el subárbol del directorio «`pool/`» para mejorar la transición entre distribuciones.

Se pueden realizar búsquedas interactivas en las copias locales de la metainformación de los «`paquetes`» mediante la orden `aptitude`. La orden de búsqueda especializada grep-dctrl(1) puede buscar metainformación en las copias locales de los «`paquetes`» y las «`fuentes`».

La copia local de los metadatos "`Contents-architecture`" se puede actualizar con "`apt-file update`" y su ubicación es diferente de las otras 4 . Ver apt-file(1). (El `auto-apt` usa una ubicación diferente para la copia local de "`Contents-architecture.gz`" por defecto)

### 2.5.5. Estado del paquete para APT

Además de acceder de forma remota a la metainformación, desde `lenny`, la herramienta APT almacena la información local referente al estado de la instalación en «`/var/lib/apt/extended_states`» el cual usan el resto de herramientas APT para realizar el seguimiento de todos los paquetes autoinstalados.

### 2.5.6. El estado del paquete en aptitude

Además de acceder de forma remota a la metainformación, la orden `aptitude` almacena el estado de la instalación de forma local en «`/var/lib/aptitude/pkgstates`» y este es usado únicamente por aptitude.

### 2.5.7. Copias locales de los paquetes descargados

Todos los paquetes descargados de forma remota mediante APT se almacenan en «`/var/cache/apt/archives`» hasta que se limpia.

Esta política de limpieza de los archivos de la caché para `aptitude` se puede configurar en "`Opciones`" → "`Preferencias`" y se puede forzar por su menú "`Limpiar caché de los paquetes`" o "`Limpiar los archivos obsoletos`" en "`Acciones`".

### 2.5.8. Nombres de archivos de paquetes Debian

Los archivos que son paquetes Debian tienen una estructura para nombrarlos determinada.

Tabla 2.15. La estructura del nombre de los paquetes Debian

tipo de paquete | estructura del nombre
--- | ---
El paquete binario (apodado `deb`) | `package-name_upstream-version-debian.revision_architecture.deb`
El paquete binario para el instalador de debian (apodado `udeb`) | `package-name_upstream-version-debian.revision_architecture.udeb`
Paquete de código fuente (código fuente ascendente) | `package-name_upstream-version-debian.revision.orig.tar.gz`
El paquete fuente `1.0` (cambios Debian) | `package-name_upstream-version-debian.revision.diff.gz`
El paquete fuente `3.0 (quilt)` (cambios de Debian) | `package-name_upstream-version-debian.revision.debian.tar.gz`
El paquete fuente (descripción) | `package-name_upstream-version-debian.revision.dsc`

| Sugerencia
Únicamente describiremos aquí el formato del paquete fuente. Para obtener mayor información consulte dpkg-source(1).

Tabla 2.16. Los caracteres permitidos en cada campo del nombre del paquete en Debian

nombre del campo | Caracteres disponibles (expresión regular) | existencia
--- | --- | ---
`package-name` | `[a-z0-9][-a-z0-9.+]+` | obligatorio
`epoch:` | `[0-9]+:` | opcional
`upstream-version` | `[-a-zA-Z0-9.+:]+` | obligatorio
`debian.revision` | `[a-zA-Z0-9.+~]+` | opcional

| Nota
Se puede comprobar el orden de las versiones de los paquetes con la ordendpkg(1), p. ej., «`dpkg --compare-versions 7.0 gt 7.~pre1 ; echo $?`» .

| Nota

El instalador debian (d-i) usa la extensión de archivo `udeb` para sus paquetes binarios en vez de la normal `deb`. Un paquete `udeb` es una versión reducida de un paquete `deb` a la cual se le han eliminado los contenidos no esenciales como la documentación con el fin de ahorrar espacio mientras se relajan los requisitos de la directriz de los paquetes. Ambos paquetes, `deb` y `udeb`, comparten la misma estructura de paquetes. La «`u`» tiene el significado de micro.

### 2.5.9. La orden dpkg

dpkg(1) es la herramienta de más bajo nivel para la gestión de paquetes Debian. Es una herramienta muy poderosa y por tanto es necesario usarla con cuidado.

Al instalar el paquete llamado "`package_name`", `dpkg` lo procesa en el siguiente orden.

1. Desempaqueta el archivo deb (equivale a «`ar -x`»)

2. Ejecuta «`nombre_del_paquete.preinst`» usando debconf(1)

3. Instala el paquete en el sistema (equivalente a "`tar -x`")

4. Ejecuta «`nombre_del_paquete.postinst`» usando debconf(1)

El sistema `debconf` proporciona una interacción de usuario estandarizada con compatibilidad con I18N y L10N (Capítulo 8, I18N y L10N).

Tabla 2.17. Los archivos destacados creados por `dpkg`

archivo | descripción del contenido
--- | ---
`/var/lib/dpkg/info/package_name.conffiles` | relación de archivos de configuración (modificables por el usuario)
`/var/lib/dpkg/info/package_name.list` | relación de archivos y directorios instalados por el paquete
`/var/lib/dpkg/info/package_name.md5sums` | relación de resumen criptográfico MD5 de los archivos instalados por el paquete
`/var/lib/dpkg/info/package_name.preinst` | archivos de órdenes del paquete que se ejecutan antes de su instalación
`/var/lib/dpkg/info/package_name.postinst` | archivo de órdenes que se ejecutan después de la instalación del paquete
`/var/lib/dpkg/info/package_name.prerm` | archivo de órdenes del paquete que se ejecuta antes de la eliminación del paquete
`/var/lib/dpkg/info/package_name.postrm` | archivo de órdenes del paquete para ser ejecutada después de la eliminación del paquete
`/var/lib/dpkg/info/package_name.config` | archivo de órdenes para el sistema `debconf`
`/var/lib/dpkg/alternatives/package_name` | la información alternativa usada por la orden `update-alternatives`
`/var/lib/dpkg/available` | la información disponible para todo el paquete
`/var/lib/dpkg/diversions` | la información de la ubicación alternativa usada por dpkg(1) y asignada por dpkg-divert(8)
`/var/lib/dpkg/statoverride` | la información estadística manual utilizada por dpkg(1) y asignada por dpkg-statoverride(8)
`/var/lib/dpkg/status` | la información del estado de todos los paquetes
`/var/lib/dpkg/status-old` | la copia de seguridad de la primera generación del archivo "`var/lib/dpkg/status`"
`/var/backups/dpkg.status*` | el segundo juego de copias de respaldo y anteriores del archivo «`var/lib/dpkg/status`»

El archivo «`status`» además lo utilizan herramientas como dpkg(1), «`dselect update`» y «`apt-get -u dselect-upgrade`».

El comando de la búsqueda especializada grep-dctrl(1) puede buscar las copias locales de los metadatos "`status`" y "`disponible`".

| Sugerencia
En el entorno del instalador de debian, la orden `udpkg` se usa para abrir los paquetes `udeb`. La orden `udpkg` es una versión reducida de la orden `dpkg`.

### 2.5.10. La orden update-alternatives

En sistema Debian existe un mecanismo para tener instalados a la vez varios programas que realizan la misma función sin problemas usando update-alternatives(1). Por ejemplo, se pueden hacer que la orden `vi` seleccione `vim` cuando se tienen instalados los paquetes tanto `vim` y `nvi`.

    $ ls -l $(type -p vi)
    lrwxrwxrwx 1 root root 20 2007-03-24 19:05 /usr/bin/vi -> /etc/alternatives/vi
    $ sudo update-alternatives --display vi
    ...
    $ sudo update-alternatives --config vi
      Selection    Command
     ----------------------------------------------
          1        /usr/bin/vim
    *+    2        /usr/bin/nvi

    Enter to keep the default[*], or type selection number: 1

El sistema «alternatives« de Debian mantiene un conjunto de enlaces simbólicos en «`/etc/alternatives/`». El uso del proceso de selección se encuentran en los archivos de «`/var/lib/dpkg/alternatives/`».

### 2.5.11. La orden dpkg-statoverride

El cambio de permisos (Stat overrides) que se realiza mediante la orden dpkg-statoverride(8) es una manera de conseguir quedpkg(1) use un propietario o unos permisos de uso diferentes para un archivo cuando se instala un paquete. Si se especifica «`--update`» y el archivo existe , los nuevos permisos y propietario se cambian al instante.

| Atención
El cambio directo del propietario o modo de un archivo propiedad del paquete mediante los comandos `chmod` o `chown` por parte del administrador del sistema se restablece en la siguiente actualización del paquete.

| Nota
Hemos usado la palabra archivo en los párrafos anteriores, pero realmente estos cambios se pueden ser realizar sobre cualquier objeto del sistema de archivos que gestione `dpkg`, incluidos directorios, dispositivos, etc.

### 2.5.12. La orden dpkg-divert

Las ubicaciones alternativas de un archivo que se realizan mediante la orden dpkg-divert(8) son una forma de obligar a dpkg(1) de instalar un archivo en una ubicación alternativa y no en su ubicación por defecto. Los archivos de órdenes de mantenimiento del paquete son los encargados del uso de `dpkg-divert`. Es una práctica en desuso su utilización por el administrador del sistema.

## 2.6. Recuperación de un sistema

Cuando se ejecuta el sistema `testing` (pruebas) o `unstable` (inestable), se espera que el administrador recupere la situación de administración de paquetes rotos.

| Atención
Algunos métodos descritos conllevan acciones muy peligrosas. ¡Está avisado!

### 2.6.1. Incompatibilidad con la configuración antigua del usuario

Si un programa de GUI de escritorio experimentó inestabilidad después de una actualización significativa de la versión anterior, debe sospechar una interferencia con los archivos de configuración locales antiguos creados por él. Si es estable bajo una cuenta de usuario recién creada, se confirma esta hipótesis. (Este es un error de empaque y generalmente lo evita el empaquetador)

Para recuperar la estabilidad, se deben mover los archivos de la configuración local correspondientes y reiniciar el interfaz gráfico. Puede que necesite leer los archivos de configuración antiguos para recuperar información de configuración posteriormente. (No los borre antes de tiempo).

### 2.6.2. Errores de almacenamiento en la caché de los datos del paquete

Los errores de la caché de datos del paquete de software pueden causar errores extraños, como "Error de GPG: ... no válido: BADSIG ..." de APT.

Debes eliminar todos los datos almacenados en caché mediante "`sudo rm -rf /var/lib/apt/*` " y volver a intentarlo. (Si se utiliza `apt-cacher-ng`, también debes ejecutar "`sudo rm -rf /var/cache/apt-cacher-ng/*` ")

### 2.6.3. Recuperación con la orden dpkg

Al ser una herramienta de muy bajo nivel, `dpkg` funciona sin conexión a la red.

Imaginemos que el paquete `foo` se rompió y debe ser arreglado.

Se pueden encontrar versiones antiguas del paquete `foo` libres de errores en las copias locales (cachés) en el directorio de caché de paquetes: «`/var/cache/apt/archives/`». (Si no, se pueden descargar del repositorio de https://snapshot.debian.org/ or copiar desde la caché de paquetes de un equipo en funcionamiento).

Si puedes iniciar el sistema, puedes instalarlo con el siguiente comando.

    # dpkg -i /path/to/foo_old_version_arch.deb

Si trata de instalar de esta manera un paquete y dicha instalación falla debido a la violación de alguna dependencia y es la única manera de solucionarlo, se puede ignorar la dependencia utilizando `dpkg`'s «`--ignore-depends`», «`--force-depends`» y otras opciones. Si lo hace así, será necesario un gran esfuerzo para más tarde restaurar la propia dependencia. Consulte para más detalles dpkg(8).

| Nota
Si su sistema esta inoperativo por errores graves, debería realizar una copia de respaldo del sistema a un lugar seguro (ver Sección 10.2, “Respaldo y recuperación”) y realizar una instalación limpia. Esto le llevará menos tiempo y al final tendrá un mejor resultado.

| Sugerencia
Si el sistema tiene un error menor, otra alternativa es realizar un actualización del sistema completo a una versión anterior (downgrade) como en Sección 2.7.11, “Volver al estado anterior por emergencia” por medio de las herramientas de alto nivel del sistema APT.

### 2.6.4. Instalación fallida debido a dependencias incumplidas

Si fuerza la instalación de un paquete mediante "`sudo dpkg -i ...`" en un sistema sin todas las dependencias instaladas, la instalación del paquete fallará porque está incompleta.

Debería instalar todos los paquetes de dependencia utilizando "`sudo dpkg -i ...`" o:

    # apt --fix-broken install

Luego, use los siguientes comandos para configurar todos los paquetes parcialmente instalados.

    # dpkg --configure -a

### 2.6.5. Superposición de archivos por diferentes paquetes

Los sistemas de gestión de paquetes, al nivel de archivo, como aptitude(8) o apt-get(1), ni siquiera tratan de instalar paquetes con archivos superpuestos usando las dependencias de los paquetes (ver Sección 2.1.7, “Dependencias de paquetes”).

Los errores de los mantenedores de paquetes o la inconsistencia en el despliegue de archivos de fuentes mezclados (ver Sección 2.7.6, “Paquetes de origen mixto de archivos sin apt-pinning”) por parte del administrador del sistema puede crear situaciones con una definición incorrecta de las dependencias del paquete. Cuando se instala un paquete que superpone archivos usando aptitude(8) o apt-get(1), dpkg(1) se encarga de devolver un error al programa que lo llamó sin sobreescribir los archivos existentes.

| Atención
El uso de paquetes de terceras partes añade riesgos significativos para el sistema a través de los archivos de órdenes de mantenimiento, ya que son ejecutados con los privilegios de superusuario y pueden realizar cualquier cosa en su sistema. La orden dpkg(1) solo ofrece protección contra la sobreescritura en el desempaquetado.

Se puede arreglar una instalación deficiente eliminando en primer lugar el paquete incompatible anterior `old-package`.

    $ sudo dpkg -P old-package

### 2.6.6. Arreglando un archivo de órdenes de un paquete roto

Cuando una orden en un archivo de órdenes de un paquete devuelve un error y el archivo de órdenes finaliza con el error, el sistema de gestión de paquetes cancela sus acciones y finaliza con paquetes instalados parcialmente. Cuando un paquete contiene un error en los archivos de órdenes de eliminación, el paquete puede volverse imposible de eliminar y bastante molesto.

Para el problema del script del paquete de "`package_name`", debe buscar los siguientes scripts del paquete.

- «`/var/lib/dpkg/info/nombre_del_paquete.preinst`»

- «`/var/lib/dpkg/info/nombre_del_paquete.postinst`»

- «`/var/lib/dpkg/info/nombre_del_paquete.prerm`»

- «`/var/lib/dpkg/info/nombre_del_paquete.postrm`»

Editar el script del paquete problemático con la cuenta de administrador utilizando las siguientes técnicas.

- deshabilitar la línea incorrecta anteponiéndole el carácter «`#`»

- forzar a devolver el éxito agregando la línea incorrecta «`|| true`»

Luego, use los siguientes comandos para configurar todos los paquetes parcialmente instalados.

    # dpkg --configure -a

### 2.6.7. Recuperando datos de la selección de paquetes

Si por alguna razón estuviera dañado el archivo «`/var/lib/dpkg/status`», el sistema Debian perdería la información de la selección de los paquetes y quedaría seriamente dañado. Busque un archivo antiguo «`/var/lib/dpkg/status`» en «`/var/lib/dpkg/status-old`» o «`/var/backups/dpkg.status.*`».

Mantener «`/var/backups/`» en una partición separada puede ser una buena idea ya que dicho directorio contiene gran cantidad de información importante del sistema.

Cuando los daños son serios, recomiendo realizar una reinstalación limpia del sistema haciendo una copia de respaldo del sistema anterior. Incluso si ha desaparecido todo lo que había en «`/var/`», todavía puede recuperar alguna información de los directorios en «`/usr/share/doc/`» que le ayudarán en su nueva instalación.

Reinstalando un sistema mínimo (de escritorio).

    # mkdir -p /path/to/old/system

Monte el sistema antiguo en "`/path/to/old/system/`".

    # cd /path/to/old/system/usr/share/doc
    # ls -1 >~/ls1.txt
    # cd /usr/share/doc
    # ls -1 >>~/ls1.txt
    # cd
    # sort ls1.txt | uniq | less

A continuación se enumerarían los nombres de los paquetes a instalar. (Puede haber algunos nombres que no correspondan a paquetes como «`texmf`».)

## 2.7. Consejos para la gestión de paquetes

Para simplificar, los ejemplos de lista de fuentes de esta sección se presentan como "`/etc/apt/sources.list`" en estilo de una línea después de la versión `trixie`.

### 2.7.1. ¿Quién sube los paquetes?

Aunque el nombre del desarrollador que aparece en «`/var/lib/dpkg/available`» y «`/usr/share/doc/package_name/changelog`» aporta alguna información sobre «quién esta detrás del desarrollo del paquete«, la persona real que actualmente lo actualiza es algo oscuro. who-uploads(1) en el paquete `devscripts` identifica quién es el actualizador real en este momento del paquete fuente Debian.

### 2.7.2. Limitar el ancho de banda de descarga para APT

Si deseas limitar el ancho de banda de descarga del APT a 800 Kib/s (= 100 KiB/s), debes establecer los parámetros de configuración del APT como se indica a continuación.

    APT::Acquire::http::Dl-Limit "800";

### 2.7.3. Descarga y actualización automática de paquetes

El paquete `apt` incluye su propio archivo de órdenes cron «`/etc/cron.daily/apt`» que se encarga de la descarga automática de paquetes. Este archivo de órdenes se puede mejorar para la actualización automática de paquetes mediante la instalación del paquete `unattended-upgrades`. Se puede personalizar mediante los parámetros de los archivos «`/etc/apt/apt.conf.d/02backup`» y «`/etc/apt/apt.conf.d/50unattended-upgrades`» según se describe en «`/usr/share/doc/unattended-upgrades/README`».

El paquete `unattended-upgrades` se usa principalmente para actualizaciones de seguridad en sistemas `stables` (estable). Si el riesgo de que las actualizaciones automáticas dañen un sistema `stable` (estable) es menor que el riesgo de que un intruso explote un agujero de seguridad que se solucionó con una actualización de seguridad, debería considerar usar la actualización automática con la siguiente configuración parámetros.

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "1";

Si estás ejecutando un sistema `testing` (pruebas) o `unstable` (inestable), no querrás usar la actualización automática ya que seguramente romperá el sistema algún día. Incluso en estos casos de `testing` (pruebas) o `unstable` (inestable), puede que quieras descargar los paquetes por adelantado para ahorrar tiempo en la actualización interactiva con los parámetros de la configuración como los siguientes.

    APT::Periodic::Update-Package-Lists "1";
    APT::Periodic::Download-Upgradeable-Packages "1";
    APT::Periodic::Unattended-Upgrade "0";

### 2.7.4. Actualizaciones y Backports

Existen stable-updates ("`trixie`-updates" durante el ciclo de publicación de `trixie`-as-`stable`) y backports. debian.org que proporcionan los paquetes de actualización para `stable` (estable).

Para utilizar estos archivos, enumera todos los archivos necesarios en el archivo "`/etc/apt/sources.list`" de la siguiente manera.

    deb http://deb.debian.org/debian/ trixie main non-free-firmware contrib non-free
    deb http://security.debian.org/debian-security trixie-security main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-updates main non-free-firmware contrib non-free
    deb http://deb.debian.org/debian/ trixie-backports main non-free-firmware contrib non-free

No es necesario asignar un valor explícito Pin-Priority en el archivo «`/etc/apt/preferences`». Cuando hay nuevos paquetes disponibles, la configuración por defecto proporciona las actualizaciones más sensatas (ver Sección 2.5.3, “Archivos «Release» a nivel de archivo”).

- Todos los paquetes viejos se actualizan a los nuevos con origen en `trixie-updates`.

- Solo los paquetes antiguos instalados de forma manual desde `trixie-backports` se actualizan a los nuevos de `trixie-backports`.

En el caso de que se desee instalar manualmente un paquete llamado «`nombre_del_paquete`» con su dependencia del repositorio `trixie-backports`, se usa la siguiente orden mientras se cambia la distribución objetivo con la opción «`-t`».

    $ sudo apt-get install -t trixie-backports package-name

| Aviso
No instales demasiados paquetes de los archivos backports.debian.org. Puede causar complicaciones en la dependencia de los paquetes. Ver Sección 2.1.11, “Cómo hacer frente a requisitos contradictorios” para las soluciones alternativas.

### 2.7.5. Archivos externos de los paquetes

| Aviso
Debes tener en cuenta que el paquete externo obtiene el privilegio root en tu sistema. Sólo debes utilizar el archivo de los paquetes externos en sitios de confianza. Mira Sección 2.1.11, “Cómo hacer frente a requisitos contradictorios” para soluciones alternativas.

Puedes usar un APT seguro con un archivo de paquetes externo compatible con Debian añadiéndolo a la lista de fuentes y tu fichero de claves del archivo en el directorio "`/etc/apt/trusted.gpg.d/`". Ver sources.list(5), apt-secure(8) y apt-key(8).

### 2.7.6. Paquetes de origen mixto de archivos sin apt-pinning

| Atención
La distribución oficial de Debian no soporta la instalación de paquetes desde las fuentes mixtas de los archivos excepto para las combinaciones particulares de los archivos soportados oficialmente como `stable` (estable) con actualizaciones de seguridad y actualizaciones-estables.

Aquí hay un ejemplo, en el escenario original donde solo se realiza un seguimiento de `testing` (pruebas), la operación incluye la nueva versión del paquete ascendente que se encuentra en `unstable` (inestable).

1. Cambie el archivo «`/etc/apt/sources.list`» de forma temporal a una entrada única «`unstable`» (inestable).

2. Ejecute «`aptitude update`».

3. Ejecute «`aptitude install nombre_del_paquete`».

4. Recupere la versión original de«`/etc/apt/sources.list`» para `testing` (pruebas).

5. Ejecute «`aptitude update`».

No crees el archivo "`/etc/apt/preferences`" ni necesitas preocuparte por apt-pinning con este enfoque manual. Pero esto es muy engorroso.

| Atención

Cuando se usan archivos de múltiples fuentes, debe de asegurarse la compatibilidad de los paquetes por su cuenta, ya que Debian no lo garantiza. Si existe incompatibilidad entre paquetes, se puede romper el sistema. Ha de ser capaz de decidir dichos requisitos técnicos. El uso de archivos de múltiples fuentes desconocidas es una operación completamente opcional y su uso es algo que se desaconseja encarecidamente.

Las reglas generales para instalar paquetes de diferentes archivos son las siguientes.

- Los paquetes no binarios («`Arquitectura: todas`») son seguros de instalar.

  - paquetes de documentación: no tienen requisitos especiales

  - paquetes de intérpretes: los intérpretes compatibles deben estar disponibles

- Los paquetes binarios (no «`arquitecturas: todas`») generalmente se encuentran con bloqueos y son inseguros de instalar.

  - compatibilidad de las versiones de biblioteca (incluida «`libc`»)

  - relacionados con la compatibilidad de versiones de los programas de utilidad

  - Núcleo ABI de compatibilidad

  - C++ ABI de compatibilidad

  - …

| Nota
Para asegurar la instalación segura de un paquete, algunos paquetes binarios comerciales «non-free« pueden incluir bibliotecas enlazadas estáticamente. Se debe comprobar su compatibilidad ABI.

| Nota
Excepto para evitar los paquetes rotos a corto plazo, instalar paquetes binarios desde archivos no Debian es generalmente una mala idea. Deberías buscar todas las soluciones técnicas alternativas más seguras que sean compatibles con tu sistema Debian actual (consulta Sección 2.1.11, “Cómo hacer frente a requisitos contradictorios”).

### 2.7.7. Ajustar la versión candidata con apt-pinning

| Aviso
El uso de la técnica apt-pinning por usuarios principiantes seguramente causará problemas. Evite usar esta técnica a menos que sea absolutamente necesario. Lea Sección 2.1.11, “Cómo hacer frente a requisitos contradictorios” para conocer otras soluciones.

Sin el archivo «`/etc/apt/preferences`», el sistema APT elige la versión candidata como la última versión disponible utilizando la versión de la cadena de caracteres. Este es el proceso normal y recomendado para el uso del sistema APT. Todas las combinaciones de repositorios con soporte oficial no necesitan el archivo «`/etc/apt/preferences`» ya que algunos repositorios no deberían usarse para realizar actualizaciones y para que el funcionamiento sea el correcto se marcan como NotAutomatic.

| Sugerencia
La comparación de cadenas de caracteres de las versiones se puede verificar mediante, p. ej., «`dpkg --compare-versions ver1.1 gt ver1.1~1; echo $?`» (consulte dpkg(1)).

Cuando instala paquetes de fuentes mixtas de archivos (consulte Sección 2.7.6, “Paquetes de origen mixto de archivos sin apt-pinning” ) regularmente, puede automatizar estas operaciones complicadas creando el archivo " `/etc/apt/preferences` " con las entradas adecuadas y ajustando la regla de selección de paquetes para la versión candidata como se describe en `apt_preferences` (5). Esto se llama apt-pinning .

Cuando uses apt-pinning, debes asegurarte de la compatibilidad de los paquetes ya que Debian no los garantiza. apt-pinning es una operación completamente opcional y su uso no te lo recomendamos.

Los ficheros de la distribución a nivel del archivo (ver Sección 2.5.3, “Archivos «Release» a nivel de archivo”) se usan para la regla de apt_preferences(5). Así apt-pinning funciona sólo con el nombre "suite" para archivos Debian normales y archivos Debian de seguridad. (Esto es diferente de los archivos Ubuntu.) Por ejemplo, puede hacer "`Pin: release a=unstable`" pero no puede hacer "`Pin: release a=sid`" en el archivo "`/etc/apt/preferences`".

Cuando uses archivos que no sean de Debian como parte de apt-pinning, deberías comprobar para qué están pensados y también comprobar su credibilidad. Por ejemplo, Ubuntu y Debian no están pensados para mezclarse.

| Nota
Incluso si no creas el archivo "`/etc/apt/preferences`", puedes realizar operaciones de sistema bastante complejas (ver Sección 2.6.3, “Recuperación con la orden dpkg” y Sección 2.7.6, “Paquetes de origen mixto de archivos sin apt-pinning”) sin apt-pinning.

He aquí una explicación simplificada de la técnica apt-pinning.

El sistema APT elige el valor de la prioridad de pin (Pin-Priority) mayor actualizando el paquete desde la fuente disponible indicado en el archivo «`/etc/apt/sources.list`» como el paquete de la versión candidata. Si la «pin-priority« del paquete es mayor que 1000, esta restricción de la versión para la actualización se descarta para permitir realizar un «downgrading« (consulte Sección 2.7.11, “Volver al estado anterior por emergencia”).

El valor Pin-Priority de cada paquete se define por las entradas de «Pin-Priority« en el archivo «`/etc/apt/preferences`» o usa su valor por defecto.

Tabla 2.18. Relación de valores Pin-Priority importantes para la técnica apt-pinning.

Pin-Priority | efectos de apt-pinning al paquete
--- | ---
1001 | instala el paquete incluso si esto significa una desactualización del paquete
990 | se usa como valor por defecto para la distribución objetivo del repositorio
500 | se usa como valor por defecto para el repositorio normal
100 | utilizado por defecto para el archivo NotAutomatic y ButAutomaticUpgrades
100 | usada para el paquete instalado
1 | usado como el valor por defecto para repositorios «NotAutomatic«
-1 | no instalar nunca el paquete aunque se recomiende

El archivo target release se puede establecer mediante la opción de la línea de comandos, por ejemplo, "`apt-get install -t testing some-package`"

Los repositorios «NotAutomatic« y «ButAutomaticUpgrades« lo asigna el servidor teniendo su archivo de nivel «Release« (ver Sección 2.5.3, “Archivos «Release» a nivel de archivo”) contiene tanto «`NotAutomatic: yes`» como «`ButAutomaticUpgrades: yes`». El repositorio «NotAutomatic« lo asigna el servidor teniendo su archivo de nivel «Release« «`NotAutomatic: yes`».

La apt-pinning situation del paquete de múltiples fuentes de archivo se muestra por "`apt-cache policy package`".

- Una línea que empieza por «`Package pin:`» muestra la versión del paquete de pin si la asociación se define solo con package p. ej., «`Package pin:0.190`».

- No existirá la línea «!`Package pin:`» si no se ha definido ninguna asociación con el paquete.

- El valor de «Pin-Priority« asociado con el paquete se muestra en el lado derecho de todas las cadenas de caracteres de las versiones, p. ej. `0.181 700`».

- «`0`» se muestra a la derecha de todas las cadenas de caracteres de las versiones si esta definida la asociación con el paquete p. ej., «`0.181 0`».

- Los valores de la Pin-Priority de los repositorios (definido como «`Package: *`» en el archivo «`/etc/apt/preferences`» ) se muestra a la izquierda de todas las rutas de archivo, p.ej., «`100 http://deb.debian.org/debian/ trixie-backports/main Packages`».

### 2.7.8. Bloqueo de la instalación de paquetes recomendados («Recommends«)

| Aviso
El uso de la técnica apt-pinning por usuarios principiantes seguramente causará problemas. Evite usar esta técnica a menos que sea absolutamente necesario. Lea Sección 2.1.11, “Cómo hacer frente a requisitos contradictorios” para conocer otras soluciones.

Si no deseas importar los paquetes específicos que se recomiendan, debes crear el archivo "`/etc/apt/preferences`" y enumerar esos paquetes explícitamente en la parte superior del archivo como se muestra a continuación.

    Package: package-1
    Pin: version *
    Pin-Priority: -1

    Package: package-2
    Pin: version *
    Pin-Priority: -1

### 2.7.9. Seguimiento `«en pruebas»` con algunos paquetes de `«inestable»`

| Aviso
El uso de la técnica apt-pinning por usuarios principiantes seguramente causará problemas. Evite usar esta técnica a menos que sea absolutamente necesario. Lea Sección 2.1.11, “Cómo hacer frente a requisitos contradictorios” para conocer otras soluciones.

Este es un ejemplo de la técnica de apt-pinning para incluir paquetes específicos de versiones anteriores más recientes que se encuentran en `unstable` que se actualizan periódicamente durante el seguimiento de `testing` . Enumera todos los archivos necesarios en el archivo "`/etc/apt/sources.list`" de la siguiente manera.

    deb http://deb.debian.org/debian/ testing main contrib non-free
    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://security.debian.org/debian-security testing-security main contrib

Establezca el archivo "`/etc/apt/preferences`" de la siguiente manera.

    Package: *
    Pin: release a=unstable
    Pin-Priority: 100

Cuando desee instalar un paquete llamado «`nombre_del_paquete`» con sus dependencias desde el respositorio `«inestable»` con esta configuración, debe ejecutar la orden siguiente que cambia la distribución del repositorio con la opción «`-t`» (Pin-Priority of `«inestable»` con el valor 990).

    $ sudo apt-get install -t unstable package-name

Con esta configuración la actualización de paquetes «`apt-get upgrade`» y «`apt-get dist-upgrade`» (o «`aptitude safe-upgrade`» y «`aptitude full-upgrade`») se realiza de la siguiente manera: los paquetes que han sido instalados desde el repositorio `«en pruebas»` usan su correspondiente repositorio `«en pruebas»` y los paquetes instalados desde la distribución `«inestable»` usan su correspondiente repositorio `«inestable»`.

| Atención
Tenga cuidado con eliminar la entrada «`testing`» del archivo «`/etc/apt/sources.list`». Sin dicha entrada «`testing`» en él, el sistema APT actualizará los paquetes usando la nueva distribución `«inestable»`.

| Sugerencia
Yo suelo editar el fichero "`/etc/apt/sources.list`" para comentar la entrada del archivo "`unstable`" justo después de la operación anterior. Esto evita el lento proceso de actualización de tener demasiadas entradas en el archivo "`/etc/apt/sources.list`" aunque esto impide actualizar paquetes que fueron instalados desde el archivo `unstable` usando el archivo `unstable` actual.

| Sugerencia
Si se utiliza «`Pin-Priority: 1` « en vez de «`Pin-Priority: 100`» en el archivo« `/ etc/apt/preferences` «, los paquetes instalados con anterioridad que tienen un valor de Pin-Priority de 100 no se actualizarán del repositorio `«inestable»` incluso si se elimina la entrada «`«en pruebas»`» del archivo «`/etc/apt/sources.list`».

Si deseas realizar un seguimiento de determinados paquetes en `inestables` de forma automática sin la instalación inicial de "`-t inestables`", debes crear el archivo "`/etc/apt/preferences`" y enumerar explícitamente todos esos paquetes en la parte superior del mismo como se indica a continuación.

    Package: package-1
    Pin: release a=unstable
    Pin-Priority: 700

    Package: package-2
    Pin: release a=unstable
    Pin-Priority: 700

Esto realiza un ajuste del valor de «Pin-Priority« para cada paquete. Por ejemplo, con el fin de mantener la última versión de `«inestable»` de esta «Referencia de Debian« en inglés, usted debe tener la siguiente entrada en el archivo «`/ etc/apt/preferences`».

    Package: debian-reference-en
    Pin: release a=unstable
    Pin-Priority: 700

    Package: debian-reference-common
    Pin: release a=unstable
    Pin-Priority: 700

| Sugerencia
Esta técnica de apt-pinning es válida incluso cuando se está rastreando el archivo `stable` (estable). Los paquetes de documentación han sido siempre seguros de instalar desde `unstable` (inestable) archivo en mi experiencia, hasta ahora.

### 2.7.10. Mantener `unstable` (inestable) con algunos paquetes de `experimental`

| Aviso
El uso de la técnica apt-pinning por usuarios principiantes seguramente causará problemas. Evite usar esta técnica a menos que sea absolutamente necesario. Lea Sección 2.1.11, “Cómo hacer frente a requisitos contradictorios” para conocer otras soluciones.

He aquí otro ejemplo de la técnica apt-pinning para incluir paquetes específicos de versiones upstream más recientes encontrados en `experimental` mientras se rastrea `unstable` (inestable). Tu enumeras todos los archivos requeridos en el "`/etc/apt/sources.list`" como el siguiente.

    deb http://deb.debian.org/debian/ unstable main contrib non-free
    deb http://deb.debian.org/debian/ experimental main contrib non-free
    deb http://security.debian.org/ testing-security main contrib

El valor por defecto de «Pin-Priority« para el repositorio `experimental` es siempre 1(<<100) ya que es un repositorio «NotAutomatic« (ver Sección 2.5.3, “Archivos «Release» a nivel de archivo”). No es necesario asignar de forma explícita un valor «Pin-Priority« en el archivo «`/etc/apt/preferences`» para usar el repositorio `experimental` a menos que quieras mantener determinados paquetes de forma automática en la siguiente actualización.

### 2.7.11. Volver al estado anterior por emergencia

| Aviso
El uso de la técnica apt-pinning por usuarios principiantes seguramente causará problemas. Evite usar esta técnica a menos que sea absolutamente necesario. Lea Sección 2.1.11, “Cómo hacer frente a requisitos contradictorios” para conocer otras soluciones.

| Atención

El hecho de volver a un estado anterior no esta soportado oficialmente por el diseño de Debian. Debe ser hecho únicamente como parte de un proceso de recuperación de emergencia. Aparte de esta situación, es una técnica que funciona muy bien para muchos problemas. En sistemas críticos debe realizar una copia de respaldo de todos los datos del sistema antes de realizar una operación de recuperación y reinstalar el sistema desde el principio.

Puede tener suerte en volver de una versión nueva de un repositorio a una vieja al recuperarse de una actualización que rompa el sistema manipulando la versión_candidata (see Sección 2.7.7, “Ajustar la versión candidata con apt-pinning”). Esta es una posibilidad lenta a realizar la tediosa acción de ejecutar muchas órdenes «`dpkg -i paquete_roto_versión_antigua.deb`» (consulte Sección 2.6.3, “Recuperación con la orden dpkg”).

Busca en el archivo "`/etc/apt/sources.list`" las líneas que usan `inestable` como se muestra a continuación.

    deb http://deb.debian.org/debian/ sid main contrib non-free

Sustitúyalo por lo siguiente para mantener `«en pruebas»`.

    deb http://deb.debian.org/debian/ forky main contrib non-free

Establezca el archivo "`/etc/apt/preferences`" de la siguiente manera.

    Package: *
    Pin: release a=testing
    Pin-Priority: 1010

Ejecute «`apt-get update; apt-get dist-upgrade`» para forzar la vuelta al estado anterior del sistema completo.

Elimine es fichero particular «`/etc/apt/preferences`» después de la vuelta atrás de emergencia.

| Sugerencia
Es una buena idea eliminar (¡que no purgar!) tantos paquetes como sea posible para minimizar los problemas de dependencias. Puede necesitar eliminar de forma manual e instalar algunos paquetes para tener un sistema restaurado. El núcleo de Linux, bootloader, udev, PAM, APT y los paquetes de red y sus archivos de configuración pueden necesitar atención especial.

### 2.7.12. El paquete «equivs«

Si ha compilado un programa fuente para sustituir a un paquete Debian, la mejor forma de hacerlo es crear un paquete local «debianizado« (`*.deb`) y usar un repositorio privado.

Si en lugar de ello elige compilar un programa desde su código fuente e instalarlo en «`/usr/local`» , puede que necesite `equivs` para al menos satisfacer las dependencias ausentes del paquete.

    Package: equivs
    Priority: optional
    Section: admin
    Description: Circumventing Debian package dependencies
     This package provides a tool to create trivial Debian packages.
     Typically these packages contain only dependency information, but they
     can also include normal installed files like other packages do.
     .
     One use for this is to create a metapackage: a package whose sole
     purpose is to declare dependencies and conflicts on other packages so
     that these will be automatically installed, upgraded, or removed.
     .
     Another use is to circumvent dependency checking: by letting dpkg
     think a particular package name and version is installed when it
     isn't, you can work around bugs in other packages' dependencies.
     (Please do still file such bugs, though.)

### 2.7.13. Portar un paquete a un sistema estable

| Atención
No hay garantía de que el procedimiento descrito aquí funcione sin esfuerzos manuales adicionales para las diferencias del sistema.

Para actualizaciones parciales de un sistema `stable` (estable), es deseable reconstruir un paquete con su entorno usando el paquete fuente. Esto evita las actualizaciones masivas de paquetes necesarias por sus dependencias.

Añada las siguientes entradas al archivo «`/etc/apt/sources.list`» de un sistema `stable` (estable).

    deb-src http://deb.debian.org/debian unstable  main contrib non-free

Instala los paquetes necesarios para la compilación y descarga los paquetes de las fuente de la siguiente manera.

    # apt-get update
    # apt-get dist-upgrade
    # apt-get install fakeroot devscripts build-essential
    # apt-get build-dep foo
    $ apt-get source foo
    $ cd foo*

Actualice los paquetes de herramientas como `dpkg` y `debhelper` de los paquetes «backport« si son necesarios para portarlo hacia atrás.

Ejecuta lo siguiente.

    $ dch -i

Cambie la versión del paquete, p. ej. concatenado con «`+bp1`» en «`debian/changelog`»

Crea los paquetes e instálalos en el sistema de la siguiente manera.

    $ debuild
    $ cd ..
    # debi foo*.changes

### 2.7.14. Servidor proxy para APT

Debido a que duplicar toda la subsección del archivo Debian desperdicia ancho de banda del disco duro y de la red, es una buena idea implementar un servidor proxy local para APT cuando administra muchos sistemas en una LAN . APT se puede configurar para usar servidores proxy web genéricos (http) como `squid` (ver Sección 6.5, “Servidores de aplicaciones en otras redes”), ver `apt.conf`(5 ) y "`/usr/share/doc/apt/examples/configure-index.gz`". La variable de entorno "`$http_proxy` anula el servidor proxy establecido en el archivo "`/etc/apt/apt.conf`".

Existen herramientas especiales proxy para repositorios Debian. Compruebe BTS antes de usarlos.

Tabla 2.19. Relación de herramientas de proxy especificas para el repositorio Debian

paquete | popularidad | tamaño | descripción
--- | --- | --- | ---
`apt-cacher` | V:0.31, I:0.35 | 265 | Proxy caché para archivos de código fuente y paquetes Debian (programa Perl)
`apt-cacher-ng` | V:4.2, I:4.3 | 2063 | Proxy caché para la distribución de paquetes de software (programa compilado en C++)

| Atención
Cuando Debian reorganiza la estructura del repositorio, estas herramientas proxy especializadas necesitan la reescritura de su código por parte del desarrollador Debian y pueden no ser operativas durante cierto tiempo. Por otro lado, los servidores proxy genéricos web (http) son más robustos y es más fácil hacer frente a esos cambios.

### 2.7.15. Más información acerca de la gestión de paquetes

Puedes obtener más información sobre la gestión de los paquetes en los siguientes documentos.

- Documentación principal de la gestión de paquetes:

  - aptitude(8), dpkg(1), tasksel(8), apt(8), apt-get(8), apt-config(8), apt-key(8), sources.list(5), apt.conf(5), and apt_preferences(5);

  - «`/usr/share/doc/apt-doc/guide.html/index.html`» y «`/usr/share/doc/apt-doc/offline.html/index.html`» del paquete `apt-doc`; y

  - «`/usr/share/doc/aptitude/html/en/index.html`» para el paquete `aptitude-doc-en`.

- Documentación oficial y detallada del repositorio Debian:

  - «Capítulo 2 del Manual de Directrices Debian - El repositorio Debian«,

  - «Capítulo 4 de la Referencia del Desarrollador Debian - Recursos para desarrolladores Debian 4.6 El repositorio Debian« y

  - «Capítulo 6 de las Preguntas frecuentes de Debian GNU/Linux - El repositorio FTP Debian«.

- Tutorial para la construcción de paquetes Debian por usuarios de Debian:

  - «Guía para desarrolladores Debian».

Capítulo 1. Tutoriales de GNU/Linux |  | Capítulo 3. La inicialización del sistema