Saludos, Estimados cyber-lectores,
Esta será la primera publicación de una serie de 10 relacionada con el Estudio de los Paquetes, los cuales son de suma importancia para cualquier usuario de Sistemas Operativos GNU/Linux en general, pero enfocados en la Distro DEBIAN.
En esta primera parte nos enfocaremos a lo conceptual: Paquetes, Repositorios y Gestores de Paquetes.
-
Paquetes
Un paquete de software en un Sistema Operativo GNU/Linux es generalmente un archivo comprimido que posee una estructura interna predefinida que facilita y permite que el mismo sea manipulado por Herramientas de Gestión de Software (Gestores de Paquetes) para lograr su compilación y / o instalación, actualización y / o eliminación sobre el Sistema Operativo, de forma cómoda, segura, estable y centralizada. Un paquete es compilable si su instalación se basa en su código fuente directamente (Ejm. *.tar.gz) o instalable si lo hace en binarios compilados ya para una determinada arquitectura o plataforma (Ejm. *.deb).
La mayoría de los paquetes vienen con su documentación incluida, sus scripts de pre y post instalación, sus archivos de configuración inicial, sus archivos de recursos, y sus binarios o el código fuente con todo lo necesario si está destinado a ser compilado.
La mayoría de los formatos de paquete vienen con sus correspondientes Herramientas de Gestión de Software, los más conocidos son los .deb creado para la Distro DEBIAN y todas sus derivadas, y los .rpm creados por Red Hat para su propia Distro y derivadas como Fedora y Open SUSE. También existen los paquetes compilables .ebuilds de Gentoo.
El que un paquete haya sido creado para una Distro en particular no implica que sólo se pueda usar en esa Distro o derivadas, ya que basta con tener herramientas especializadas en cualquier otra Distro para la Gestión de estos formatos para poder usarlos. Entre esas Herramientas tenemos: Dpkg, Apt-get, Aptitude, RPM, Emerge, Alíen, entre otros).
Cada Distro mantiene almacenada su paquetería en Repositorios, tanto en medios como CDs / DVDs como en Servidores remotos, lo que permite actualizar e instalar por red (Internet) todo o parte del Sistema Operativo desde una localización segura y confiable (Repositorios oficiales) para no tener que andar buscando Servidores desconocidos (e inseguros) a menos que fuese estrictamente necesarios.
Cada Distro suele aportar sus propios paquetes (parches) de seguridad y de mejoras (actualizaciones), para así lograr poner a disposición de sus Comunidades de Usuarios gran cantidad de software perfectamente funcional e integrado en el Sistema Operativo. Y en cuanto a las dependencias entre cada paquete, las mismas suelen gestionarse de forma automática para evitar posibles problemas a los Usuarios menos expertos.
Compilar o Instalar? Lo bueno de compilar frente al instalar se puede decir que lo principal es la posibilidad de especificar opciones de compilación para tu sistema y software usado que permiten aprovechar mejor los recursos y ajustarse a las preferencias del usuario/administrador, y lo malo lo lento y complicado que puede tornarse este proceso. Ya que por lo general, el instalar un paquete (Ejm. *.deb) es muy rápido y sencillo, pero suele no conseguirse bien actualizado o ajustado a la Distro de nuestro uso o Recursos de nuestro Equipo de Computo.
Si usted desea conocer más sobre los Paquetes de DEBIAN le dejo los siguientes enlaces a continuación para su detallada lectura:
- DEBIAN — Paquetes
- Rincón de los desarrolladores de Debian
- Guía del nuevo desarrollador de Debian
- Guía de creación de paquetes Debian
-
Repositorios
Los Repositorios son grandes Servidores (Externos / Internos) que actúan como Bancos de Datos que alojan las aplicaciones (paquetes) que necesitan nuestros Sistemas Operativos basados en Linux, ya sean viejos, actuales, nuevos, o en desarrollo, que se instalan mediante un Gestor de paquetes. Todo esto con la finalidad de mantener al Sistema Operativo al día sobre todo en materia de parches de seguridad. Los Repositorios pueden ser de dos (2) tipos: Oficiales y No oficiales.
Los Sistemas Operativos (Distros) basados en Linux tienen por lo general un archivo en el que se guarda la lista de los Repositorios (Oficiales o no) a los que podemos acceder mediante el Gestor de paquetes para su Descarga, Instalación, Actualización o Eliminación. Este fichero se sitúa generalmente en la ubicación /etc/nombre_gestor_paquete/ donde «nombre_gestor_paquete» normalmente suele ser el nombre del gestor de paquetes de la Distro. Por ejemplo en DEBIAN estaría en /etc/apt/sources.list.
Los Repositorios Oficiales almacenan los paquetes de las aplicaciones que nuestra Distro soporta. Siempre vienen divididos en una estructura (de ramas y versiones) que dependiendo de las políticas de sus creadores, garantizan (aseguran) bajo un protocolo de revisión muy riguroso que todos los paquetes que contienen se encuentran en estado óptimo y no representan riesgos de seguridad o estabilidad para el sistema, y los nuevos o en desarrollo en ramas separadas para aquellos usuarios más avanzados o experimentados.
En el caso de DEBIAN los Repositorios cuentan con 3 ramas:
- Main (Principal): Rama que almacena todos los paquetes incluidos en la distribución oficial de Debian que son libres de acuerdo a las Directrices de Software libre de Debian. La distribución oficial de Debian se constituye totalmente de esta Rama.
- Contrib (Contribución): Rama que almacena los paquetes cuyos creadores les han dado licencia libre, pero los mismos poseen dependencias de otros programas que no son libres.
- Non-Free (No Libres): Rama que almacena los paquetes que tienen alguna condición de licencia onerosa que restringe su uso o redistribución.
Los Repositorios DEBIAN se dividen en Versiones:
- OldStable (Vieja Estable): Versión que almacena los paquetes pertenecientes a la antigua Versión Estable de DEBIAN. Actualmente esta pertenece a la Versión Wheezy.
- Stable (Estable): Versión que almacena los paquetes pertenecientes a la actual Versión Estable de DEBIAN. Actualmente esta pertenece a la Versión Jessie.
- Testing (Prueba): Versión que almacena los paquetes pertenecientes a la futura Versión Estable de DEBIAN. Actualmente esta pertenece a la Versión Stretch.
- Unstable (Inestable): Versión que almacena los paquetes pertenecientes a los futuros paquetes que continuamente están en desarrollo y pruebas, que con el tiempo podrían pertenecer a la Versión Testing (Prueba) de DEBIAN. Esta siempre pertenece a la Versión SID.
Nota: Muchas veces el nombre de la versión suele ir acompañado del prefijo «-updates» o «-proposed-updates» para resaltar que dichos paquetes ahí almacenados aunque pertenecen a dicha versión suelen ser mas actualizados, ya que provienen más recientemente de la versión inmediatamente superior. En otras oportunidades cuando se trata del Repositorio de Seguridad el prefijo suele ser «/updates».
Los Repositorios DEBIAN pueden ser filtrados por su contenido:
- deb: Repositorios que solo contendrán paquetes compilados.
- deb-src: Repositorios que solo contendrán los códigos fuentes de los paquetes compilados disponibles.
Ejemplos de Repositorios para DEBIAN:
#######################################################
# REPOSITORIOS OFICIALES DE LINUX DEBIAN 8 (JESSIE)
deb http://ftp.us.debian.org/debian/ jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb http://ftp.us.debian.org/debian/ jessie-updates main contrib non-free
# deb http://ftp.us.debian.org/debian/ jessie-proposed-updates main contrib non-free
# deb http://ftp.us.debian.org/debian/ jessie-backports main contrib non-free
# deb http://www.deb-multimedia.org jessie main non-free
# aptitude install deb-multimedia-keyring
# ####################################################
Nota: Aquellas lineas que se inician con el carácter » # « se encuentran deshabilitados del Gestor de Paquetes. Dicho carácter también se utiliza para insertar comentarios tales como Descripciones de las Lineas de Repositorios o la Linea de comando que debe ser utilizada para agregar las Llaves (Key) del Repositorio descrito.
-
Gestores de Paquetes
Antiguamente, muchos paquetes (programas) Linux se distribuían como código fuente necesitaban ser transformados (compilados) en el programa o en el conjunto de programas requeridos, más su respectiva documentación (páginas man), los archivos de configuración y todo lo demás que resultase necesario. Sin embargo, actualmente, la mayoría de las Distros Linux usan paquetes (programas o conjuntos de programas prefabricados), que ya están listos para ser instalados en dicha distribución.
Con estas Herramientas de Gestión de Paquetes fácilmente se puede conocer, descargar, instalar, actualizar y eliminar cualquier paquete. En nuestro caso para DEBIAN nos concentraremos en los Gestores de Paquetes Apt-get, Aptitude, Apt y DPKG. que usa tanto DEBIAN como las Distros que derivan de DEBIAN (como, por ejemplo, Ubuntu).
Aunque la función básica de gestión de paquetes es mucho más poderosa por medio de comandos desde la Terminal (Consola), los desarrolladores de Linux que siempre están tratando de hacer todo lo posible para que Linux sea cada vez más fácil de usar, han complementado estas herramientas básicas con otras Herramientas con Interfaces Gráficas de Usuarios (Herramientas GUI), que tratan de disminuir las posibles complejidades de las herramientas básicas para no complicar a los consumidores finales.
Pero básicamente en todas ellas pueden realizar las mismas operaciones básicas ya mencionadas sobre los paquetes. Mientras las básicas tienen una funcionalidad de línea de comandos, las herramientas adicionales pueden ofrecerles interfaces más amigables a los usuarios. Y todas pueden recuperar paquetes desde Internet, ya que la información correspondiente a los paquetes instalados se conserva en una base de datos única por lo general.
A continuación las ordenes de comandos mas útiles y comunes en cada uno de los Gestores de Paquetes:
Apt-get:
Actualizar Listas: apt-get update
Chequear actualización de Listas: apt-get check
Instalar paquete: apt-get install nombre_paquete
Reinstalar paquete: apt-get install --reinstall nombre_paquete
Actualizar Distro: apt-get upgrade / apt-get dist-upgrade / apt-get full-upgrade
Actualizar paquete: apt-get upgrade nombre_paquete
Actualizar paquetes usando dselect: apt-get dselect-upgrade
Eliminar paquetes: apt-get remove / apt-get autoremove
Purgar paquetes: apt-get purge
Conocer paquete: apt-cache show nombre_paquete / apt-cache showpkg nombre_paquete
Listar paquetes: apt-cache search nombre_paquete
Listar dependencias de un paquete: apt-cache depends nombre_paquete
Listar paquetes instalados: apt-cache pkgnames --generate / apt-show-versions
Validar dependencias incumplidas de un paquete: apt-cache unmet nombre_paquete
Configurar dependencias de un paquete: apt-get build-dep nombre_paquete
Descargar paquetes: apt-get source nombre_paquete
Corregir problemas post-instalación de paquetes: apt-get install -f
Forzar ejecución de orden de comando: apt-get comando -y
Eliminar descargas de paquetes: apt-get clean
Eliminar paquetes obsoletos y sin usos: apt-get autoclean
Otros importantes: apt-file update / apt-file search nombre_paquete / apt-file list nombre_paquete
Nota: Para mayor información sobre este comando ejecute la orden de comando: man apt-get
Aptitude:
Actualizar Listas: aptitude update
Instalar paquete: aptitude install nombre_paquete
Reinstalar paquete: aptitude reinstall nombre_paquete
Actualizar Distro: aptitude upgrade / aptitude safe-upgrade / aptitude full-upgrade
Actualizar paquete: aptitude upgrade nombre_paquete
Eliminar paquetes: aptitude remove
Purgar paquetes: aptitude purge
Listar paquetes: aptitude search nombre_paquete
Listar paquetes instalados / rotos: apt search [*] | grep "^i" / apt search [*] | grep "^B"
Configurar dependencias de un paquete: aptitude build-dep nombre_paquete
Descargar paquetes: aptitude download nombre_paquete
Corregir problemas post-instalación de paquetes: aptitude install -f
Forzar ejecución de orden de comando: aptitude comando -y
Eliminar descargas de paquetes: aptitude clean
Eliminar paquetes obsoletos y sin usos: aptitude autoclean
Otros importantes: aptitude (un)hold, aptitude (un)markauto, why, why-not
Conocer paquete:
aptitude show nombre_paquete
aptitude show "?installed ?section(fonts)" | egrep '(Paquete|Estado|Versión)'
aptitude show "?not(?installed) ?section(fonts)" | egrep '(Paquete|Estado|Versión)'
aptitude show "?section(fonts)" | egrep '(Paquete|Estado|Versión)'
Nota: Para mayor información sobre este comando ejecute la orden de comando: man aptitude
Apt:
Actualizar Listas: apt update
Instalar paquete: apt install nombre_paquete
Reinstalar paquete: apt install --reinstall nombre_paquete
Actualizar Distro: apt upgrade / apt full-upgrade
Actualizar paquete: apt upgrade nombre_paquete
Eliminar paquetes: apt remove / apt autoremove
Purgar paquetes: apt purge
Conocer paquete: apt show nombre_paquete
Listar paquetes: apt search nombre_paquete
Listar paquetes instalados / actualizables: apt list --installed / apt list --upgradeable
Corregir problemas post-instalación de paquetes: apt install -f
Forzar ejecución de orden de comando: apt comando -y
Eliminar descargas de paquetes: apt clean
Eliminar paquetes obsoletos y sin usos: apt autoclean
Otros importantes: apt edit-sources
Nota: Para mayor información sobre este comando ejecute la orden de comando: man apt
DPKG:
Instalar paquete: dpkg -i nombre_paquete
Eliminar paquete: dpkg -r nombre_paquete / dpkg --force -r nombre_paquete / dpkg --purge -r nombre_paquete
Purgar paquete: dpkg -P nombre_paquete
Descomprimir paquete: dpkg --unpack nombre_paquete
Conocer paquete: dpkg -c nombre_paquete / dpkg --info nombre_paquete / dpkg -L nombre_paquete
Buscar archivos de paquetes instalados: dpkg -S nombre_archivo
Configurar paquetes: dpkg --configure nombre_paquete / dpkg --configure --pending / dpkg --configure -a
Listar paquetes: dpkg -l patrón_búsqueda / dpkg --get-selections nombre_paquete / dpkg --get-selections | grep -v deinstall > lista-paquetes-actuales.txt
Bueno, hasta aquí en esta publicación espero que el contenido les sea útil.
Un apunte…los .ebuild de gentoo no son paquetes como tal, son scripts que indican cómo se instalará el paquete, generalmente desde el código fuente con el empaquetado que haya elegido el desarrollador.
Excelente información. La guardaré junto a otras entregas ya publicadas sobre Debian por que me serán de gran utilidad. Le doy las gracias al autor por su extraordinario trabajo y aportación.
Excelente José Albert de verdad que te destacas felicidades y sigue así orientándonos
Muy Bueno José Albert sigue así orientándonos felicidades
Muy buen articulo
Gracias por tu aportación, aunque tiene algunos errores. Una pregunta por curiosidad, ¿eres desarrollador en Debian o colaborador de alguna forma? Gracias por difundir la información sobre cómo colaborar con Debian, para mi gusto faltó mencionar la posibilidad de ayudar colaborando en las siempre necesarias traducciones o revisiones de traducciones de paquetes, instaladores, página web, etc… Lo mismo lo reservas para entregas futuras.
Un saludo y ánimo con la publicación.
No! No soy Desarrollador Oficial ni Colaborador directo de DEBIAN, aunque he creado unos 2 paquetes individuales y muchos script para dicha Distribución. Y espero incluir lo que me dijiste en otra publicación. Y gracias por tu apoyo!
DEBIAN es mi Distro predilecta!
Como debe ser! 🙂
Excelente articulo… Felicitaciones, soy amante del software libre y estudio informática y esto es de muchísima utilidad
Saludos desde Bogotá
Muchas gracias por tu tiempo y paciencia… y por compartir!!!
un saludo!
Gracias!!!!
Muchas gracias a ustedes por todos sus comentarios de apoyo, felicitaciones, y motivación!
Gracias, muy completo, al menos para los que aun nos sabemos mucho del tema.
Excelente, para archivar y consulta, gracias por el aporte.
Que buen Material amigo Antonio, entendible y de buen uso…