UNAM FES Iztacala
Departamento de Seguridad en Cómputo
Área de Software Libre
(page 1)
¿Qué es un sistema de paquetes?
Comencemos definiendo qué NO es un sistema de paquetes ;-)
El método tradicional de instalar software en Unix:
~/paquete # ./configure
~/paquete # make
~/paquete # make install
(page 2)
¿Qué es un sistema de paquetes?
¿Por qué el método tradicional no es recomendable?
Actualización o desinstalación
Dependencias (al instalar, desinstalar o actualizar)
Controlar el reguero
(page 3)
¿Por qué es necesario tener un sistema de paquetes robusto para tener un OS estable?
¿Qué tengo instalado?
¿Qué paquetes?
¿Qué versión?
Al hacer un cambio, ¿Qué depende de qué?
¿Voy a romper un paquete al desinstalar otro?
¿Qué efectos tiene actualizar un paquete?
¿Qué conflictos puede crear el instalar un paquete?
(page 4)
Puntos principales de sistemas de paquetes
.tgz clásico
Un .tgz NO es un .tgz
Presente en todos los Unixes clásicos (Solaris, Irix, AIX, etc.)
Presente en varios sistemas libres (*BSD, Slackware, Gentoo (?) )
Mantiene registro de qué archivos forman parte de qué paquete
Permite la remoción limpia de paquetes completos
Separa claramente la jerarquía de archivos:
Pertenecientes al sistema operativo - Inicia en /
Perteneciente a las aplicaciones locales - Típicamente /usr/local u /opt
Esta distinción no se aplica en FreeBSD, NetBSD ni Gentoo Linux
Guarda la información relativa a un paquete (por ejemplo, descripción corta, fecha y estado de instalación, categoría, versión, checksums básicos, etc.)
(page 5)
Puntos principales de sistemas de paquetes
.tgz clásico
Comandos de manejo de paquetes (Solaris):
pkgadd: Instala un nuevo paquete al sistema
pkgask: Permite generar archivos de respuestas automatizadas a scripts de instalación
pkgchk: Revisa la integridad de la instalación de paquetes
pkginfo: Información acerca de paquetes
pkgmk: Produce un paquete instalable por pkgadd
pkgproto: Genera archivo prototipo para pkgmk
pkgrm: Elimina un paquete del sistema
pkgtrans: Traduce entre diferentes sistemas de paquetes
(page 6)
Puntos principales de sistemas de paquetes
RPM
Formato concebido para una distribución de Linux - RPM significa RedHat Package Manager
Probable causa del gran segmento de mercado que tiene RedHat hoy en día
Sucesor de RPP (RedHat), PMS (BOGUS) y PM (RedHat)
Adicionalmente a las características de los .tgz, ofrece:
Scripts que pueden correr antes o después de la instalación
Verificación de firmas MD5 (contra CRC32 de los .tgz)
Base de datos de paquetes mucho más potente, con mucho mayor información
Manejo de "fuentes prístinas"
Manejo expreso de archivos de configuración
Manejo expreso de diferentes arquitecturas
La versión del programa y del paquete forman parte del nombre del paquete
Capacidad de incluir una firma criptográficamente fuerte (PGP)
Paquetes instalables en donde el administrador decida
(page 7)
Puntos principales de sistemas de paquetes
RPM
Un sólo comando para el manejo de paquetes, con las suguientes opciones principales:
-i: Instala un nuevo paquete al sistema
-e: Remueve un paquete del sistema
-U: Actualiza o instala un paquete
-F: Actualiza un paquete sólamente si hay una versión anterior instalada
-q: Obtiene información relativa al paquete
-V: Verifica un paquete instalado
(page 8)
Puntos principales de sistemas de paquetes
Ports *BSD
Orientado a sistemas libres - Presupone acceso al código fuente
Manejo de fuentes prísitinas; dentro de los ports vienen los parches necesarios
Makefiles generales que permiten especificar la compilación de todos los paquetes
Permiten optimizar los binarios resultantes para cada máquina específica
Permiten crear paquetes con opciones específicas de compilación
En OpenBSD, manejo de flavors y multipaquetes
El árbol /usr/ports es actualizable (y se sugiere fuertemente actualizarlo) ya sea por CVS o por cvsup, dependiendo del sistema operativo
Los sistemas *BSD tienen como entidades muy diferentes a los ports y al sistema operativo base. Los ports son accesorios al sistema operativo, y si bien reciben mantenimiento, este no es del mismo nivel que el sistema operativo base.
(page 9)
Puntos principales de sistemas de paquetes
Ports *BSD
Para utilizar Ports hay una jerarquía de encabezados. Para traer, compilar e instalar, por ejemplo, el paquete "unzip" corremos como root:
cd /usr/ports/archivers/unzip
make
make install
Ports es básicamente una infraestructura para conseguir los fuentes y satisfacer dependencias, los paquetes una vez compilados quedan en un .tgz, que se manipula de manera muy parecida a los paquetes .tgz tradicionales
La base de datos está mantenida en formato de texto plano
(page 10)
Puntos principales de sistemas de paquetes
Ports *BSD
Los comandos son muy similares a los del Unix tradicional - pkg_add, pkg_info, pkg_delete, pkg_create
Estos binarios son capaces de manejar colecciones de paquetes en red, por medio de la variable de ambiente PKG_PATH. Utilizando una colección de paquetes, el instalar un paquete instala automáticamente también sus dependencias.
(page 11)
Puntos principales de sistemas de paquetes
dpkg y apt-get
Sistema de paquetes de la distribución Debian
Hereda las principales ideas tanto de RPM como de Ports, implementando
Formato de paquetes .deb (manejados con dpkg)
Infraestructura de paquetes, manejada con apt (A Package Tool) y muchas otras herramientas (dselect, aptitude, deity, ...)
Diferentes niveles de dependencia
Depende
Recomienda
Sugiere
Amplía
Manejo limpio de archivos de configuración
debconf: Base de datos de configuración general
Las políticas de Debian indican claramente que esto NO debe ser un registry
Paquetes virtuales
Firmado (GPG) - Hay una enorme red de confianza de llaves GPG entre los desarrolladores
(page 12)
Puntos principales de sistemas de paquetes
dpkg y apt-get
Opciones principales de manejo de dpkg
-i instala o actualiza un paquete
-r Remueve un paquete del sistema. Con --purge, elimina también sus archivos de configuración.
-l Lista la información básica (nombre, versión, descripción corta y estado) de uno o varios paquetes
-L Muestra la lista de archivos que forman parte de un paquete
--get-selections Muestra el estado de los paquetes en el sistema
(page 13)
Puntos principales de sistemas de paquetes
dpkg y apt-get
Opciones principales de manejo de apt-get
update: Sincroniza las listas de paquetes con las fuentes listadas en /etc/apt/sources.list
upgrade: Actualiza los paquetes con los de las listas. Jamás eliminará un paquete previamente instalado, ni instalará un paquete previamente no seleccionado.
dist-upgrade: Actualiza los paquetes con los de las listas, resolviendo inteligentemente dependencias
install: Baja de las listas e instala un paquete y sus dependencias
remove: Elimina un paquete
source: Trae los paquetes fuentes (las fuentes prístinas, los parches para ellas y los archivos de control de Debian) de un paquete de las listas
(page 14)
Creando paquetes (para Debian)
¿Para qué?
Controlar con un sistema de paquetes mi instalación local
Si hice algún programa, la mejor manera de que la gente lo pruebe y contribuya
Una de las mejores maneras de contribuir con la comunidad es empaquetando (y manteniendo) mis programas favoritos
¿Por qué de Debian?
debian/rules... ;-)
El formato de paquetes más completo
La distribución más libre
Integrar mis paquetes a una infraestructura
(page 15)
Creando paquetes (para Debian)
Pasos para empaquetar
Desempaquetar el .tar.gz, y -de ser necesario- nombrar el directorio como nombre_paquete-version
Desde dentro de este directorio, correr dh_make (del paquete dh_make)
Revisar/editar los archivos en debian/ (espérense un poquito, abundo en la siguiente lámina)
Dentro del directorio base, correr debuild, que:
Construye el programa
Crea el paquete
Firma el paquete con la llave GPG del mantenedor
lintian .dsc
(page 16)
Creando paquetes (para Debian)
Principales archivos a revisar en debian/
changelog: Bitácora de cambios del paquete (en un formato parseable específico)
control: Datos para el manejador de paquetes:
Nombre
sección
prioridad de actualización
Nombre y correo del mantenedor
dependencias
Build-depends
Pre-depends
Depends, reccomends, suggests
Replaces
Provides
Conflicts
descripción
(page 17)
Creando paquetes (para Debian)
Principales archivos a revisar en debian/
copyright: Licencia bajo la cual se distribuye el paquete
dirs: Los directorios donde crea archivos el paquete