# Advanced Packaging Tool

Advanced Packaging Tool (Herramienta Avanzada de Empaquetado), abreviado APT, es una interfaz de usuario de software libre, bajo la concepción de la gestión de paquetes de software, creado por el proyecto Debian. APT simplifica el proceso de administración de software en sistemas informáticos similares a Unix (tales como GNU/Linux) al automatizar la recuperación, configuración e instalación de paquetes de software, ya sea desde archivos precompilados o mediante la compilación del código fuente.

## Uso

APT es una colección de herramientas distribuidas en un paquete llamado apt. Una parte importante de APT se define en una biblioteca de funciones C++; APT también incluye programas de línea de comandos para manejar paquetes, que usan la biblioteca. Estos tres programas son apt, apt-get y apt-cache. Se usan comúnmente en ejemplos porque son simples y omnipresentes. El paquete apt tiene una prioridad ''importante" en todas las versiones actuales de Debian y, por lo tanto, se incluye en una instalación predeterminada de Debian. APT puede considerarse un front-end para dpkg, más amigable que el anterior dselect front-end. Mientras que dpkg realiza acciones en paquetes individuales, APT gestiona las relaciones (especialmente las dependencias) entre ellos, así como el abastecimiento y la gestión de decisiones de versiones de nivel superior (seguimiento de versiones y fijación de versiones).
Existen también programas que proporcionan un frontispicio para APT, generalmente basados en apt-get, como aptitude con una interfaz de texto ncurses, Synaptic con una interfaz gráfica GTK+, o Adept con una interfaz gráfica Qt. Existe un repositorio central con más de ~25 000 paquetes apt utilizados por apt-get y programas derivados para descargar e instalar aplicaciones directamente desde Internet, conocida como una de las mejores cualidades de Debian.
APT es a menudo aclamado como una de las mejores características de Debian, que los desarrolladores atribuyen a los estrictos controles de calidad en la política de Debian.
Una característica importante de APT es la forma en que llama a dpkg: realiza un ordenamiento topológico de la lista de paquetes que se instalarán o eliminarán y llama a dpkg de la mejor manera ―secuencia― posible. En algunos casos, utiliza las opciones --force de dpkg. Sin embargo, solo hace esto cuando no puede calcular cómo evitar la razón por la cual dpkg requiere que se fuerce la acción.
APT fue rápidamente utilizado para funcionar con paquetes .deb, en los sistemas Debian y distribuciones derivadas, pero desde entonces ha sido modificado para trabajar con paquetes RPM, con la herramienta apt-rpm, y para funcionar en otros sistemas operativos, como Mac OS X (Fink) y OpenSolaris (distribución Nexenta OS). Cabe mencionar que a partir de la versión 1.0, esta incluye una barra de progreso que muestra el porcentaje de instalación.

### Instalando Software

El usuario indica uno o más paquetes a instalar. Cada nombre de paquete se expresa como solo la parte del nombre del paquete, no como un nombre de archivo completamente calificado (por ejemplo, en un sistema Debian, libc6 sería el argumento provisto, no libc6_1.9.6- 2.deb). En particular, APT obtiene e instala automáticamente los paquetes de los que depende el paquete indicado (si es necesario). Esta fue una característica distintiva original de los sistemas de administración de paquetes basados en APT, ya que evitó fallas en la instalación debido a la falta de dependencias, una especie de infierno de dependencias.
Otra distinción es la recuperación de paquetes desde repositorios remotos. APT usa un archivo de configuración de ubicación (/etc/apt/sources.list) para ubicar los paquetes deseados, que podrían estar disponibles en la red o en un medio de almacenamiento extraíble, por ejemplo, y recuperarlos, y también obtener información sobre los paquetes disponibles, pero no instalados.
APT proporciona otras opciones de comando para anular las decisiones tomadas por el sistema de resolución de conflictos de apt-get. Una opción es forzar una versión particular de un paquete. Esto puede degradar un paquete y hacer que el software dependiente quede inoperable, por lo que el usuario debe tener cuidado.
Finalmente, el mecanismo apt_preferences permite al usuario crear una política de instalación alternativa para paquetes individuales.
El usuario puede especificar paquetes usando una expresión regular POSIX.
APT busca en su lista de paquetes en caché y enumera las dependencias que deben instalarse o actualizarse.
APT recupera, configura e instala las dependencias automáticamente.
Los disparadores son el tratamiento de las acciones diferidas.

### Update, upgrade y dist-upgrade

Los modos de uso de apt y apt-get que facilitan la actualización de paquetes instalados incluyen:
* update se utiliza para volver a sincronizar los archivos del índice de paquetes desde sus fuentes. Las listas de paquetes disponibles se obtienen de las ubicaciones especificadas en /etc/apt/sources.list. Por ejemplo, cuando se usa un archivo Debian, este comando recupera y analiza los archivos Packages.gz, de modo que la información sobre los paquetes nuevos y actualizados esté disponible.
* upgrade se usa para instalar las versiones más recientes de todos los paquetes actualmente instalados en el sistema desde las fuentes enumeradas en /etc/apt/sources.list. Los paquetes actualmente instalados con nuevas versiones disponibles se recuperan y actualizan; bajo ninguna circunstancia se eliminan los paquetes actualmente instalados, o se recuperan e instalan los paquetes que aún no están instalados. Las nuevas versiones de los paquetes actualmente instalados que no se pueden actualizar sin cambiar el estado de instalación de otro paquete se mantendrán en su versión actual.
* full-upgrade (apt) y dist-upgrade (apt-get), además de realizar la función de actualización, también maneja de manera inteligente las dependencias cambiantes con nuevas versiones de paquetes; apt y apt-get tienen un sistema de resolución de conflictos inteligente e intentarán actualizar los paquetes más importantes a expensas de los menos importantes si es necesario. El archivo /etc/apt/sources.list contiene una lista de ubicaciones desde las que recuperar los archivos de paquetes deseados. aptitude tiene una función de actualización de dist-upgrade más inteligente llamada full-upgrade.

## Configuración y archivos

/etc/apt contiene las carpetas y archivos de configuración de APT.
apt-config es el programa de consulta de configuración de APT.
apt-config dump muestra la configuración.

### Archivos

* /etc/apt/sources.list: Ubicaciones desde las que buscar paquetes.
* /etc/apt/sources.list.d/: Fragmentos adicionales de la lista de fuentes.
* /etc/apt/apt.conf: Archivo de configuración de APT.
* /etc/apt/apt.conf.d/: Fragmentos del archivo de configuración de APT.
* /etc/apt/preferences.d/: Directorio con archivos de preferencias de versión. Aquí es donde especificaría "pinning", es decir, una preferencia para obtener ciertos paquetes de una fuente separada o de una versión diferente de una distribución.
* /var/cache/apt/archives/: Área de almacenamiento para archivos de paquetes recuperados.
* /var/cache/apt/archives/partial/: Área de almacenamiento para archivos de paquetes en tránsito.
* /var/lib/apt/lists/: Área de almacenamiento para la información de estado de cada paquete de recursos especificado en sources.list
* /var/lib/apt/lists/partial/: Área de almacenamiento de información de estado en tránsito.

## Sources (Fuentes)

APT se basa en el concepto de repositorios para encontrar software y resolver dependencias. Para APT, un repositorio es un directorio que contiene paquetes junto con un archivo de índice. Esto se puede especificar como una ubicación en red o de CD-ROM. El proyecto Debian mantiene un repositorio central de más de 50.000 paquetes de software listos para descargar e instalar.
Se puede agregar cualquier cantidad de repositorios adicionales al archivo de configuración sources.list de APT (/etc/apt/sources.list) y luego APT puede consultarlos. Las interfaces gráficas a menudo permiten modificar sources.list de forma más sencilla (apt-setup). Una vez que se ha especificado un repositorio de paquetes (como durante la instalación del sistema), los paquetes en ese repositorio se pueden instalar sin especificar una fuente y se mantendrán actualizados automáticamente.
Además de los repositorios de red, también se pueden usar compact discs y otros medios de almacenamiento (memoria USB, discos duros...), usando apt-cdrom o añadiendo file:/ URI al archivo de la lista de fuentes. apt-cdrom puede especificar una carpeta que no sea un CD-ROM, utilizando la opción -d (es decir, un disco duro o una llave USB). Los CD de Debian disponibles para descargar contienen repositorios de Debian. Esto permite actualizar las máquinas que no están en red. También se puede usar apt-zip.
Pueden surgir problemas cuando varias fuentes ofrecen los mismos paquetes. Los sistemas que tienen fuentes posiblemente conflictivas pueden usar la fijación APT para controlar qué fuentes deben preferirse.

### sources.list

Sources.list es el archivo hallado, siguiendo la localización completa /etc/apt/sources.list, en distribuciones GNU/Linux derivadas de Debian GNU/Linux; donde se enlistan las "fuentes" o "repositorios" disponibles de los paquetes de software candidatos a ser: actualizados, instalados, eliminados, buscados, sujetos a comparación de versiones, etc.
La herramienta APT administra el acceso a dichos paquetes, utilizando el fichero sources.list, para realizar las acciones previamente mencionadas.
De esta manera el archivo sources.list es una pieza importante en la administración, por parte del usuario o administrador de sistemas, en Debian GNU/Linux y en las distribuciones derivadas. El archivo puede ser editado mediante un editor de texto (tales como gedit, Kate, Vi, nano o pico), o directamente desde una línea de comandos, para la modificación de la lista de repositorios, ya sea, comentando la línea, (agregado el símbolo # al inicio de una lista de paquetes de software), o eliminando una línea. Es recomendable sólo comentarla para evitar complicaciones futuras.

#### Acciones a realizar

Tras realizar alguna modificación, ya sea para actualizar un repositorio cambiando parámetros; agregar una línea, si se desea poder descargar otro software; eliminar un repositorio (agregando un símbolo #), etc., se debe escribir en consola lo siguiente:
Para actualizar lo realizado o la lista de paquetes: apt-get update o apt update (Últimas versiones).
Para actualizar la versión de uno o más paquetes: apt-get upgrade
Similar al anterior pero de una forma más inteligente en la resolución de conflictos: apt-get dist-upgrade

#### sources.list en Debian GNU/Linux (y derivadas)

El contenido del archivo sources.list en una versión estable de Debian GNU/Linux, normalmente posee el siguiente formato:
Ejemplo en formato http de repositorio para la versión estable:
Ejemplo de repositorio para la versión de pruebas:
Ejemplo de repositorio para la versión inestable:
Ejemplo de repositorio de paquetes Experimentales

#### sources.list en Ubuntu (y derivadas)

El contenido del archivo sources.list en Ubuntu normalmente posee un formato similar a este:

#### Editar un archivo

Para editarlo, se puede utilizar el software gedit, nano o cualquier otro editor de texto instalado:
| Comandos | Imagen |
| # gedit /etc/apt/sources.list # nano /etc/apt/sources.list o, en su defecto, en modo superusuario (es decir, precedido de sudo) $ sudo gedit /etc/apt/sources.list $ sudo nano /etc/apt/sources.list | sudo nano /etc/apt/sources.list |

## APT pinning

La característica APT pinning permite a los usuarios obligar a APT a elegir versiones particulares de paquetes que pueden estar disponibles en diferentes versiones de diferentes repositorios. Esto permite a los administradores asegurarse de que los paquetes no se actualicen a versiones que puedan entrar en conflicto con otros paquetes del sistema o que no se hayan probado lo suficiente para detectar cambios no deseados.
Para hacer esto, se deben modificar los pins en el archivo de preferencias de APT (/etc/apt/preferences), aunque las interfaces gráficas a menudo simplifican la fijación (el pinning).

## Huevo de Pascua

* El huevo de Pascua «apt-get moo».
Apt-get tiene un huevo de Pascua, también conocido como easter egg, muy famoso. Se trata de escribir apt-get moo en una línea de comandos, lo que dará como resultado la aparición de una vaca hecha en arte ASCII, que variará su imagen dependiendo del sistema operativo sobre el cual se ejecuta.