Debian package internals

René Mayorga

                     rmayorga@debian.org.sv

Comunidad de usuarios Debian de El Salvador

20 de septiembre de 2008

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  1 / 40

Esquema

1 Introducción
2 Tipos de paquetes .deb

3 Versiones de los .deb
4 Contenido de un paquete .deb

5 Proceso de instalación
6 Maintainer Scrips

Introducción

¿Qué es un paquete .deb?

¿Ideas? ¿Aparte de ser un el tipo de paquetes usado en Debian?

contenedores ar Los archivos .deb son básicamente contenedores ar, (mas información sobre ar en la entrada de wikipedia) Estos contienen dentro varios archivos como debian-binary, control.tar.gz, y data.tar.gz.

Estos contenedores de archivo básicamente tienen archivos pre-compilados(binarios) para la arquitectura huésped, también contienen archivos de control y configuración utilizados por el sistema de paquetería

¿Qué es un paquete .deb?

¿Ideas? ¿Aparte de ser un el tipo de paquetes usado en Debian?

contenedores ar Los archivos .deb son básicamente contenedores ar, (mas información sobre ar en la entrada de wikipedia) Estos contienen dentro varios archivos como debian-binary, control.tar.gz, y data.tar.gz.

Estos contenedores de archivo básicamente tienen archivos pre-compilados(binarios) para la arquitectura huésped, también contienen archivos de control y configuración utilizados por el sistema de paquetería

¿Qué es un paquete .deb?

¿Ideas? ¿Aparte de ser un el tipo de paquetes usado en Debian?

contenedores ar Los archivos .deb son básicamente contenedores ar, (mas información sobre ar en la entrada de wikipedia) Estos contienen dentro varios archivos como debian-binary, control.tar.gz, y data.tar.gz.

Estos contenedores de archivo básicamente tienen archivos pre-compilados(binarios) para la arquitectura huésped, también contienen archivos de control y configuración utilizados por el sistema de paquetería

¿Qué es un paquete .deb?

¿Ideas? ¿Aparte de ser un el tipo de paquetes usado en Debian?

contenedores ar Los archivos .deb son básicamente contenedores ar, (mas información sobre ar en la entrada de wikipedia) Estos contienen dentro varios archivos como debian-binary, control.tar.gz, y data.tar.gz.

Estos contenedores de archivo básicamente tienen archivos pre-compilados(binarios) para la arquitectura huésped, también contienen archivos de control y configuración utilizados por el sistema de paquetería

Tipos de paquetes .deb

tipos de paquetes .deb

Single-binaries, Contienen un solo binario con su documentación y archivos Multiple-binaries, El Source Package genera varios paquetes individuales partiendo de un mismo tarball Meta Packages, Instalan varios paquetes, el paquete original solamente contiene dependencias a los paquetes que instalara. Source packages El Paquete fuente, compuesto de orig.tar.gz, .diff.gz, y .dsc

tipos de paquetes .deb

Single-binaries, Contienen un solo binario con su documentación y archivos Multiple-binaries, El Source Package genera varios paquetes individuales partiendo de un mismo tarball Meta Packages, Instalan varios paquetes, el paquete original solamente contiene dependencias a los paquetes que instalara. Source packages El Paquete fuente, compuesto de orig.tar.gz, .diff.gz, y .dsc

tipos de paquetes .deb

Single-binaries, Contienen un solo binario con su documentación y archivos Multiple-binaries, El Source Package genera varios paquetes individuales partiendo de un mismo tarball Meta Packages, Instalan varios paquetes, el paquete original solamente contiene dependencias a los paquetes que instalara. Source packages El Paquete fuente, compuesto de orig.tar.gz, .diff.gz, y .dsc

tipos de paquetes .deb

Single-binaries, Contienen un solo binario con su documentación y archivos Multiple-binaries, El Source Package genera varios paquetes individuales partiendo de un mismo tarball Meta Packages, Instalan varios paquetes, el paquete original solamente contiene dependencias a los paquetes que instalara. Source packages El Paquete fuente, compuesto de orig.tar.gz, .diff.gz, y .dsc

tipos de paquetes .deb

Versiones de los .deb

Versiones de los .deb

Single-binaries, Contienen un solo binario con su documentación y archivos Multiple-binaries, El Source Package genera varios paquetes individuales partiendo de un mismo tarball Meta Packages, Instalan varios paquetes, el paquete original solamente contiene dependencias a los paquetes que instalara. Source packages El Paquete fuente, compuesto de orig.tar.gz, .diff.gz, y .dsc Entendiendo las versiones

Figura: Versiones de un .deb

¿Alguna idea sobre que significan todos esos números y letras?

Entendiendo las versiones

Figura: Versiones de un .deb

¿Alguna idea sobre que significan todos esos números y letras?

Entendiendo las versiones

Figura: Versiones de un .deb

¿Alguna idea sobre que significan todos esos números y letras?

Versiones de los .deb

Versiones de los .deb

Veamos esto a detalle

Figura: Versiones de un .deb

Versiones de los .deb

Versiones de los .deb

Veamos esto a detalle

Figura: Versiones de un .deb

Versiones de los .deb

Versiones de los .deb

Entandamos un poco mejor los términos usados

Figura: Versiones de un .deb

Debian policy 5.6.12

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  7 / 40

Versiones de los .deb

Versiones de los .deb

Entandamos un poco mejor los términos usados

Figura: Versiones de un .deb

Debian policy 5.6.12

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  7 / 40

Versiones de los .deb

Tips para descifrar las versiones

Las versiones de los paquetes son usadas por dpkg para resolver sus dependencias muchos paquetes pueden declarar relaciones de versiones para evitar conflictos o depender directamente de versiones especificas.

Con dpkg –compare-versions podemos ver como dpkg entiende las versiones:

alias co='dpkg --compare-versions'
$ co 5.2.0 gt 5.2.1 && echo true || echo false
false
$ co 5.2+dfsg-1.1+b1 gt 5.2+dfsg-2 && echo true || echo false
false

Tips para descifrar las versiones

Las versiones de los paquetes son usadas por dpkg para resolver sus dependencias muchos paquetes pueden declarar relaciones de versiones para evitar conflictos o depender directamente de versiones especificas.

Con dpkg –compare-versions podemos ver como dpkg entiende las versiones:

alias co='dpkg --compare-versions'
$ co 5.2.0 gt 5.2.1 && echo true || echo false
false
$ co 5.2+dfsg-1.1+b1 gt 5.2+dfsg-2 && echo true || echo false
false

Contenido de un paquete .deb

Contenido de un paquete .deb

Ok, pasemos entonces a los contenidos del .deb

¿Alguna pregunta respecto a las versiones?

Ok, pasemos entonces a los contenidos del .deb

¿Alguna pregunta respecto a las versiones?

Contenido de un paquete .deb

Contenido de un paquete .deb?

Figura: Contenido de un fichero .deb

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  10 / 40

Contenido de un paquete .deb

Contenido de un paquete .deb?

Figura: Un poco ms digerible

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  11 / 40

Figura: control.tar.gz

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  12 / 40

Contenido de un paquete .deb

Contenido de un paquete .deb

Sin dibujitos control.tar.gz se ve así:

@sui:/tmp/deb$ tar -tvzf control.tar.gz
drwxr-xr-x root/root         0 2008-06-20 21:23 ./
-rwxr-xr-x root/root       272 2008-06-20 21:23 ./prerm
-rw-r--r-- root/root        44 2008-06-20 21:23 ./conffiles
-rwxr-xr-x root/root       363 2008-06-20 21:23 ./postrm
-rwxr-xr-x root/root      1527 2008-06-20 21:23 ./postinst
-rwxr-xr-x root/root       839 2008-06-20 21:23 ./config
-rw-r--r-- root/root      8200 2008-06-20 21:23 ./templates
-rw-r--r-- root/root       676 2008-06-20 21:23 ./control
-rw-r--r-- root/root       592 2008-06-20 21:23 ./md5sums
@sui:/tmp/deb$

Contenidos de control.tar.gz

Los que fueron observadores en el slide anterior notaron que algunos archivos tienen permisos de ejecución y también que todos los archivos

tienen como propietario a root

¿Por que? Los archivos con permisos de ejecución son los Maintainer scripts

Debian Policy 6

Contenidos de control.tar.gz

Los que fueron observadores en el slide anterior notaron que algunos archivos tienen permisos de ejecución y también que todos los archivos

tienen como propietario a root

¿Por que? Los archivos con permisos de ejecución son los Maintainer scripts

Debian Policy 6

Detallando el contenido de control.tar.gz

conffiles, Esta es una lista de los archivos de configuración estos archivos los designa el maintainer para que dpkg los mantenga y pregunte si deben ser sobreescritos en las actualizaciones (Debian policy 10.7.3) control file, Este archivo muestra las dependencias y mucha más información del paquete debconf, conserva partes como templates y el archivo config, los templates mantienen las traducciones para las preguntas de debconf y el config es el script que genera las acciones y preguntas. Maintainer Scripts, son los encargados de configurar el paquete en actualizaciones instalaciones y desinstalaciones del mismo. Estos son:

prerm postrm preinst postinst

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  15 / 40

Detallando el contenido de control.tar.gz

conffiles, Esta es una lista de los archivos de configuración estos archivos los designa el maintainer para que dpkg los mantenga y pregunte si deben ser sobreescritos en las actualizaciones (Debian policy 10.7.3) control file, Este archivo muestra las dependencias y mucha más información del paquete debconf, conserva partes como templates y el archivo config, los templates mantienen las traducciones para las preguntas de debconf y el config es el script que genera las acciones y preguntas. Maintainer Scripts, son los encargados de configurar el paquete en actualizaciones instalaciones y desinstalaciones del mismo. Estos son:

prerm postrm preinst postinst

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  15 / 40

Detallando el contenido de control.tar.gz

conffiles, Esta es una lista de los archivos de configuración estos archivos los designa el maintainer para que dpkg los mantenga y pregunte si deben ser sobreescritos en las actualizaciones (Debian policy 10.7.3) control file, Este archivo muestra las dependencias y mucha más información del paquete debconf, conserva partes como templates y el archivo config, los templates mantienen las traducciones para las preguntas de debconf y el config es el script que genera las acciones y preguntas. Maintainer Scripts, son los encargados de configurar el paquete en actualizaciones instalaciones y desinstalaciones del mismo. Estos son:

prerm postrm preinst postinst

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  15 / 40

Detallando el contenido de control.tar.gz

conffiles, Esta es una lista de los archivos de configuración estos archivos los designa el maintainer para que dpkg los mantenga y pregunte si deben ser sobreescritos en las actualizaciones (Debian policy 10.7.3) control file, Este archivo muestra las dependencias y mucha más información del paquete debconf, conserva partes como templates y el archivo config, los templates mantienen las traducciones para las preguntas de debconf y el config es el script que genera las acciones y preguntas. Maintainer Scripts, son los encargados de configurar el paquete en actualizaciones instalaciones y desinstalaciones del mismo. Estos son:

prerm postrm preinst postinst

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  15 / 40

Detallando el contenido de control.tar.gz

conffiles, Esta es una lista de los archivos de configuración estos archivos los designa el maintainer para que dpkg los mantenga y pregunte si deben ser sobreescritos en las actualizaciones (Debian policy 10.7.3) control file, Este archivo muestra las dependencias y mucha más información del paquete debconf, conserva partes como templates y el archivo config, los templates mantienen las traducciones para las preguntas de debconf y el config es el script que genera las acciones y preguntas. Maintainer Scripts, son los encargados de configurar el paquete en actualizaciones instalaciones y desinstalaciones del mismo. Estos son:

prerm postrm preinst postinst

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  15 / 40

Detallando el contenido de control.tar.gz

conffiles, Esta es una lista de los archivos de configuración estos archivos los designa el maintainer para que dpkg los mantenga y pregunte si deben ser sobreescritos en las actualizaciones (Debian policy 10.7.3) control file, Este archivo muestra las dependencias y mucha más información del paquete debconf, conserva partes como templates y el archivo config, los templates mantienen las traducciones para las preguntas de debconf y el config es el script que genera las acciones y preguntas. Maintainer Scripts, son los encargados de configurar el paquete en actualizaciones instalaciones y desinstalaciones del mismo. Estos son:

prerm postrm preinst postinst

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  15 / 40

Detallando el contenido de control.tar.gz

conffiles, Esta es una lista de los archivos de configuración estos archivos los designa el maintainer para que dpkg los mantenga y pregunte si deben ser sobreescritos en las actualizaciones (Debian policy 10.7.3) control file, Este archivo muestra las dependencias y mucha más información del paquete debconf, conserva partes como templates y el archivo config, los templates mantienen las traducciones para las preguntas de debconf y el config es el script que genera las acciones y preguntas. Maintainer Scripts, son los encargados de configurar el paquete en actualizaciones instalaciones y desinstalaciones del mismo. Estos son:

prerm postrm preinst postinst

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  15 / 40

Detallando el contenido de control.tar.gz

conffiles, Esta es una lista de los archivos de configuración estos archivos los designa el maintainer para que dpkg los mantenga y pregunte si deben ser sobreescritos en las actualizaciones (Debian policy 10.7.3) control file, Este archivo muestra las dependencias y mucha más información del paquete debconf, conserva partes como templates y el archivo config, los templates mantienen las traducciones para las preguntas de debconf y el config es el script que genera las acciones y preguntas. Maintainer Scripts, son los encargados de configurar el paquete en actualizaciones instalaciones y desinstalaciones del mismo. Estos son:

prerm postrm preinst postinst

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  15 / 40

Detallando el contenido de control.tar.gz

conffiles, Esta es una lista de los archivos de configuración estos archivos los designa el maintainer para que dpkg los mantenga y pregunte si deben ser sobreescritos en las actualizaciones (Debian policy 10.7.3) control file, Este archivo muestra las dependencias y mucha más información del paquete debconf, conserva partes como templates y el archivo config, los templates mantienen las traducciones para las preguntas de debconf y el config es el script que genera las acciones y preguntas. Maintainer Scripts, son los encargados de configurar el paquete en actualizaciones instalaciones y desinstalaciones del mismo. Estos son:

prerm postrm preinst postinst

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  15 / 40

Contenido de un paquete .deb

Contenido de contro.tar.gz

¿Preguntas sobre control.tar.gz?

Los Maintainer scripts se explican a fondo luego :)

Contenido de un paquete .deb

Contenido de contro.tar.gz

¿Preguntas sobre control.tar.gz?

Los Maintainer scripts se explican a fondo luego :)

Contenido de data.tar.gz

data.tar.gz contiene todos los archivos que se instalan con el paquete

@sui:/tmp/deb$ tar -tvzf data.tar.gz
drwxr-xr-x root/root         0 2008-06-20 21:23 ./
drwxr-xr-x root/root         0 2008-06-20 21:23 ./etc/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./etc/init.d/
-rwxr-xr-x root/root      2826 2008-06-20 21:23 ./etc/init.d/darkstat
drwxr-xr-x root/root         0 2008-06-20 21:23 ./etc/darkstat/
-rw-r--r-- root/root       346 2008-06-20 21:23 ./etc/darkstat/init.cfg
drwxr-xr-x root/root         0 2008-06-20 21:23 ./var/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./var/lib/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./var/lib/darkstat/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/sbin/
-rwxr-xr-x root/root    103848 2008-06-20 21:23 ./usr/sbin/darkstat
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/doc/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/doc/darkstat/
-rw-r--r-- root/root       598 2007-02-09 07:55 ./usr/share/doc/darkstat/README
-rw-r--r-- root/root      3617 2008-06-20 21:23 ./usr/share/doc/darkstat/copyright
-rw-r--r-- root/root       418 2007-09-26 02:22 ./usr/share/doc/darkstat/NEWS.gz
-rw-r--r-- root/root       837 2008-06-20 21:23 ./usr/share/doc/darkstat/README.Debian
-rw-r--r-- root/root       732 2008-05-27 04:24 ./usr/share/doc/darkstat/AUTHORS
-rw-r--r-- root/root      2819 2008-06-20 21:23 ./usr/share/doc/darkstat/changelog.Debian.gz
-rw-r--r-- root/root       759 2007-09-15 22:48 ./usr/share/doc/darkstat/THANKS
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/man/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/man/man8/
-rw-r--r-- root/root      3452 2008-06-20 21:23 ./usr/share/man/man8/darkstat.8.gz

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  17 / 40

Contenido de data.tar.gz

data.tar.gz contiene todos los archivos que se instalan con el paquete

@sui:/tmp/deb$ tar -tvzf data.tar.gz
drwxr-xr-x root/root         0 2008-06-20 21:23 ./
drwxr-xr-x root/root         0 2008-06-20 21:23 ./etc/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./etc/init.d/
-rwxr-xr-x root/root      2826 2008-06-20 21:23 ./etc/init.d/darkstat
drwxr-xr-x root/root         0 2008-06-20 21:23 ./etc/darkstat/
-rw-r--r-- root/root       346 2008-06-20 21:23 ./etc/darkstat/init.cfg
drwxr-xr-x root/root         0 2008-06-20 21:23 ./var/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./var/lib/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./var/lib/darkstat/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/sbin/
-rwxr-xr-x root/root    103848 2008-06-20 21:23 ./usr/sbin/darkstat
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/doc/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/doc/darkstat/
-rw-r--r-- root/root       598 2007-02-09 07:55 ./usr/share/doc/darkstat/README
-rw-r--r-- root/root      3617 2008-06-20 21:23 ./usr/share/doc/darkstat/copyright
-rw-r--r-- root/root       418 2007-09-26 02:22 ./usr/share/doc/darkstat/NEWS.gz
-rw-r--r-- root/root       837 2008-06-20 21:23 ./usr/share/doc/darkstat/README.Debian
-rw-r--r-- root/root       732 2008-05-27 04:24 ./usr/share/doc/darkstat/AUTHORS
-rw-r--r-- root/root      2819 2008-06-20 21:23 ./usr/share/doc/darkstat/changelog.Debian.gz
-rw-r--r-- root/root       759 2007-09-15 22:48 ./usr/share/doc/darkstat/THANKS
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/man/
drwxr-xr-x root/root         0 2008-06-20 21:23 ./usr/share/man/man8/
-rw-r--r-- root/root      3452 2008-06-20 21:23 ./usr/share/man/man8/darkstat.8.gz

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  17 / 40

Contenido de un paquete .deb

contenido de data.tar.gz

en base a estos archivos se genera el archivo

/var/lib/dpkg/info/paquete.list

El cual contiene la lista de todos los archivos instalados por dicho paquete.

Proceso de instalación

Intalación de un paquete

Figura: proceso realizado por APT

Proceso de instalación

Instalación de un paquete

El Archivo usado por apt para encontrar los paquetes se encuentra en /var/lib/apt/lists los listados de paquetes son almacenados con la

siguiente convención de nombres:

ftp.debian.org_debian_dists_unstable_main_binary-amd64_Packages
~~~~~~~~~~~~~~~ ====== ~~~~~~~~~~~~~~ ==== ~~~~~~ =====
     Mirror     direc.    rama        Secc. Tipo   Arquitectura

Instalación de un paquete

Comó busco un paquete disponible? Todos sabemos :), apt-cache

Pero también existe grep-dctrl(1) El antes mencionado mantiene la información que luego mostrara apt-cache o grep-dctrl

$ grep-aptavail darkstat
Package: darkstat
Priority: optional
Section: net
Installed-Size: 240
Maintainer: Rene Mayorga <rmayorga@debian.org.sv>
Architecture: amd64
Version: 3.0.708-1
Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1), zlib1g
 (>= 1:1.1.4), debconf (>= 0.5) | debconf-2.0
Filename: pool/main/d/darkstat/darkstat_3.0.708-1_amd64.deb

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  21 / 40

Instalación de un paquete

Comó busco un paquete disponible? Todos sabemos :), apt-cache

Pero también existe grep-dctrl(1) El antes mencionado mantiene la información que luego mostrara apt-cache o grep-dctrl

$ grep-aptavail darkstat
Package: darkstat
Priority: optional
Section: net
Installed-Size: 240
Maintainer: Rene Mayorga <rmayorga@debian.org.sv>
Architecture: amd64
Version: 3.0.708-1
Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1), zlib1g
 (>= 1:1.1.4), debconf (>= 0.5) | debconf-2.0
Filename: pool/main/d/darkstat/darkstat_3.0.708-1_amd64.deb

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  21 / 40

Instalación de un paquete

Comó busco un paquete disponible? Todos sabemos :), apt-cache

Pero también existe grep-dctrl(1) El antes mencionado mantiene la información que luego mostrara apt-cache o grep-dctrl

$ grep-aptavail darkstat
Package: darkstat
Priority: optional
Section: net
Installed-Size: 240
Maintainer: Rene Mayorga <rmayorga@debian.org.sv>
Architecture: amd64
Version: 3.0.708-1
Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1), zlib1g
 (>= 1:1.1.4), debconf (>= 0.5) | debconf-2.0
Filename: pool/main/d/darkstat/darkstat_3.0.708-1_amd64.deb

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  21 / 40

Entendiendo un poco más

Package: darkstat - Nombre del paquete binario

Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1)

Dependencias del paquete con versiones especificas Suggests: - Sugerencias de paquetes extra (no instalado por defecto) Recommends: - Paquetes recomendados (instalado por defecto en lenny/sid) Conflicts: - Declara conflictos con alguna versión de un paquete Provides: - Provee un paquete virtual Replaces: - Remplaza un paquete especifico

Debian Policy 7.2

Entendiendo un poco más

Package: darkstat - Nombre del paquete binario

Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1)

Dependencias del paquete con versiones especificas Suggests: - Sugerencias de paquetes extra (no instalado por defecto) Recommends: - Paquetes recomendados (instalado por defecto en lenny/sid) Conflicts: - Declara conflictos con alguna versión de un paquete Provides: - Provee un paquete virtual Replaces: - Remplaza un paquete especifico

Debian Policy 7.2

Entendiendo un poco más

Package: darkstat - Nombre del paquete binario

Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1)

Dependencias del paquete con versiones especificas Suggests: - Sugerencias de paquetes extra (no instalado por defecto) Recommends: - Paquetes recomendados (instalado por defecto en lenny/sid) Conflicts: - Declara conflictos con alguna versión de un paquete Provides: - Provee un paquete virtual Replaces: - Remplaza un paquete especifico

Debian Policy 7.2

Entendiendo un poco más

Package: darkstat - Nombre del paquete binario

Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1)

Dependencias del paquete con versiones especificas Suggests: - Sugerencias de paquetes extra (no instalado por defecto) Recommends: - Paquetes recomendados (instalado por defecto en lenny/sid) Conflicts: - Declara conflictos con alguna versión de un paquete Provides: - Provee un paquete virtual Replaces: - Remplaza un paquete especifico

Debian Policy 7.2

Entendiendo un poco más

Package: darkstat - Nombre del paquete binario

Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1)

Dependencias del paquete con versiones especificas Suggests: - Sugerencias de paquetes extra (no instalado por defecto) Recommends: - Paquetes recomendados (instalado por defecto en lenny/sid) Conflicts: - Declara conflictos con alguna versión de un paquete Provides: - Provee un paquete virtual Replaces: - Remplaza un paquete especifico

Debian Policy 7.2

Entendiendo un poco más

Package: darkstat - Nombre del paquete binario

Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1)

Dependencias del paquete con versiones especificas Suggests: - Sugerencias de paquetes extra (no instalado por defecto) Recommends: - Paquetes recomendados (instalado por defecto en lenny/sid) Conflicts: - Declara conflictos con alguna versión de un paquete Provides: - Provee un paquete virtual Replaces: - Remplaza un paquete especifico

Debian Policy 7.2

Entendiendo un poco más

Package: darkstat - Nombre del paquete binario

Depends: libc6 (>= 2.7-1), libpcap0.8 (>= 0.9.3-1)

Dependencias del paquete con versiones especificas Suggests: - Sugerencias de paquetes extra (no instalado por defecto) Recommends: - Paquetes recomendados (instalado por defecto en lenny/sid) Conflicts: - Declara conflictos con alguna versión de un paquete Provides: - Provee un paquete virtual Replaces: - Remplaza un paquete especifico

Debian Policy 7.2

Proceso de instalación

De nuevo la imagen

Figura: proceso realizado por APT

Proceso de instalación

Entendiendo apt

¿Preguntas sobre APT ? ¿No?! Seguimos con dpkg......

Proceso de instalación

Entendiendo apt

¿Preguntas sobre APT ? ¿No?! Seguimos con dpkg......

Proceso de instalación

Termino APT ahora es el turno de DPKG

Figura: proceso realizado por DPKG

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  25 / 40

Proceso de instalación

¿Estados? eh!

Los estados de los paquetes son almacenados en /var/lib/dpkg/status estos son:

not-installed - Paquete no instalado config-files - en el sistema solo existen los archivos de configuración half-installed - La instalación del paquete no se completo unpacked - Los archivos fueron desempacados, pero no se encuentra configurado half-configured - La configuración fallo installed - el paquete esta instalado correctamente Los estados de los paquetes son almacenados en /var/lib/dpkg/status

estos son:

not-installed - Paquete no instalado config-files - en el sistema solo existen los archivos de configuración half-installed - La instalación del paquete no se completo unpacked - Los archivos fueron desempacados, pero no se encuentra configurado half-configured - La configuración fallo installed - el paquete esta instalado correctamente Los estados de los paquetes son almacenados en /var/lib/dpkg/status

estos son:

not-installed - Paquete no instalado config-files - en el sistema solo existen los archivos de configuración half-installed - La instalación del paquete no se completo unpacked - Los archivos fueron desempacados, pero no se encuentra configurado half-configured - La configuración fallo installed - el paquete esta instalado correctamente Los estados de los paquetes son almacenados en /var/lib/dpkg/status

estos son:

not-installed - Paquete no instalado config-files - en el sistema solo existen los archivos de configuración half-installed - La instalación del paquete no se completo unpacked - Los archivos fueron desempacados, pero no se encuentra configurado half-configured - La configuración fallo installed - el paquete esta instalado correctamente Los estados de los paquetes son almacenados en /var/lib/dpkg/status

estos son:

not-installed - Paquete no instalado config-files - en el sistema solo existen los archivos de configuración half-installed - La instalación del paquete no se completo unpacked - Los archivos fueron desempacados, pero no se encuentra configurado half-configured - La configuración fallo installed - el paquete esta instalado correctamente Los estados de los paquetes son almacenados en /var/lib/dpkg/status

estos son:

not-installed - Paquete no instalado config-files - en el sistema solo existen los archivos de configuración half-installed - La instalación del paquete no se completo unpacked - Los archivos fueron desempacados, pero no se encuentra configurado half-configured - La configuración fallo installed - el paquete esta instalado correctamente Los estados de los paquetes son almacenados en /var/lib/dpkg/status

estos son:

not-installed - Paquete no instalado config-files - en el sistema solo existen los archivos de configuración half-installed - La instalación del paquete no se completo unpacked - Los archivos fueron desempacados, pero no se encuentra configurado half-configured - La configuración fallo installed - el paquete esta instalado correctamente

Estados

Puedo verificar los estados de un paquete con el comando dpkg

$ dpkg --status darkstat
Package: darkstat
Status: install ok installed
Priority: optional
Section: net
Installed-Size: 240
Maintainer: Rene Mayorga <rmayorga@debian.org.sv>
Architecture: amd64

¿Como llegan los paquetes a tener esos estados?

Los estados son asignados dentro del proceso interno de instalación es posible para un usuario instalar un paquete con dpkg -i que ejecuta todo el proceso automático; o usar dpkg con diferentes opciones para instalar el

paquete por partes, es decir, unpacked, configure, etc.

Los estados de configuración son especificados en base a la salida de los Maintainer scripts.

Maintainer Scrips

Ahora sí!!, como es eso de los maintscripts

Los Maintainer scripts son POSIX scripts, los cuales se ejecutan en diferentes fáses del proceso de instalación.

Estos scripts reciben varios argumentos: como

install configure remove upgrade purge

Los argumentos dependen de la etapa en la cual el script es llamado Los Maintainer scripts son POSIX scripts, los cuales se ejecutan en

diferentes fáses del proceso de instalación.

Estos scripts reciben varios argumentos: como

install configure remove upgrade purge

Los argumentos dependen de la etapa en la cual el script es llamado Los Maintainer scripts son POSIX scripts, los cuales se ejecutan en

diferentes fáses del proceso de instalación.

Estos scripts reciben varios argumentos: como

install configure remove upgrade purge

Los argumentos dependen de la etapa en la cual el script es llamado Los Maintainer scripts son POSIX scripts, los cuales se ejecutan en

diferentes fáses del proceso de instalación.

Estos scripts reciben varios argumentos: como

install configure remove upgrade purge

Los argumentos dependen de la etapa en la cual el script es llamado Los Maintainer scripts son POSIX scripts, los cuales se ejecutan en

diferentes fáses del proceso de instalación.

Estos scripts reciben varios argumentos: como

install configure remove upgrade purge

Los argumentos dependen de la etapa en la cual el script es llamado Los Maintainer scripts son POSIX scripts, los cuales se ejecutan en

diferentes fáses del proceso de instalación.

Estos scripts reciben varios argumentos: como

install configure remove upgrade purge

Los argumentos dependen de la etapa en la cual el script es llamado Los Maintainer scripts son POSIX scripts, los cuales se ejecutan en

diferentes fáses del proceso de instalación.

Estos scripts reciben varios argumentos: como

install configure remove upgrade purge

Los argumentos dependen de la etapa en la cual el script es llamado

Maintainer Scrips

Analicemos enotonces

Entonces veamos las etapas sencillas y las más complejas.-

En una instalación de un paquete nuevo:

APT encuentra y descarga DPKG descomprime y ejecuta el primer maintscript

veamos un diagrama :)

Maintainer Scrips

Analicemos enotonces

Entonces veamos las etapas sencillas y las más complejas.-

En una instalación de un paquete nuevo:

APT encuentra y descarga DPKG descomprime y ejecuta el primer maintscript

veamos un diagrama :)

Maintainer Scrips

Una insatalación exitosa

Maintainer Scrips

Pero no todo es perfecto

Si algo falla, dpkg puede tomar acciones en base a los maint-scritps

Figura: Paquete nuevo instalado sin ningún problema Figura: Paquete nuevo instalado sin ningún problema

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  32 / 40

Figura: Paquete nuevo instalado sin ningún problema

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  32 / 40

Figura: Paquete nuevo instalado sin ningún problema

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  32 / 40

Maintainer Scrips

Maintainer scripts

¿Pero que hace un maintainer script? Por lo general estos scripts hacen tareas requeridas para el funcionamiento del paquete por ejemplo:

Crear/eliminar usuarios Detener/Ejecutar servicios Fijar Permisos de archivos Crear bases de datos etc

Cada acción se evalúa y retorna 0 o 1 para evaluar si el proceso termino adecuadamente ¿Pero que hace un maintainer script? Por lo general estos scripts hacen

tareas requeridas para el funcionamiento del paquete por ejemplo:

Crear/eliminar usuarios Detener/Ejecutar servicios Fijar Permisos de archivos Crear bases de datos etc

Cada acción se evalúa y retorna 0 o 1 para evaluar si el proceso termino adecuadamente ¿Pero que hace un maintainer script? Por lo general estos scripts hacen

tareas requeridas para el funcionamiento del paquete por ejemplo:

Crear/eliminar usuarios Detener/Ejecutar servicios Fijar Permisos de archivos Crear bases de datos etc

Cada acción se evalúa y retorna 0 o 1 para evaluar si el proceso termino adecuadamente ¿Pero que hace un maintainer script? Por lo general estos scripts hacen

tareas requeridas para el funcionamiento del paquete por ejemplo:

Crear/eliminar usuarios Detener/Ejecutar servicios Fijar Permisos de archivos Crear bases de datos etc

Cada acción se evalúa y retorna 0 o 1 para evaluar si el proceso termino adecuadamente ¿Pero que hace un maintainer script? Por lo general estos scripts hacen

tareas requeridas para el funcionamiento del paquete por ejemplo:

Crear/eliminar usuarios Detener/Ejecutar servicios Fijar Permisos de archivos Crear bases de datos etc

Cada acción se evalúa y retorna 0 o 1 para evaluar si el proceso termino adecuadamente ¿Pero que hace un maintainer script? Por lo general estos scripts hacen

tareas requeridas para el funcionamiento del paquete por ejemplo:

Crear/eliminar usuarios Detener/Ejecutar servicios Fijar Permisos de archivos Crear bases de datos etc

Cada acción se evalúa y retorna 0 o 1 para evaluar si el proceso termino adecuadamente ¿Pero que hace un maintainer script? Por lo general estos scripts hacen

tareas requeridas para el funcionamiento del paquete por ejemplo:

Crear/eliminar usuarios Detener/Ejecutar servicios Fijar Permisos de archivos Crear bases de datos etc

Cada acción se evalúa y retorna 0 o 1 para evaluar si el proceso termino adecuadamente

Maintainer Scrips

Maintainer scripts

Analicemos el proceso de desinstalación de un paquete

Figura: desinstalando foo

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  34 / 40

¿Por que el estado final no es not-installed ?

En Debian cuando un paquete se desinstala con la opción ’remove’ en apt, dpkg u otros el paquete simplemente elimina sus binarios. Pero los archivos

marcados como ’conffiles’ se mantienen; este es el Estado çonfig-files” Para eliminar estos archivos es necesario especificar la opción –purge

¿Por que el estado final no es not-installed ?

En Debian cuando un paquete se desinstala con la opción ’remove’ en apt, dpkg u otros el paquete simplemente elimina sus binarios. Pero los archivos

marcados como ’conffiles’ se mantienen; este es el Estado çonfig-files” Para eliminar estos archivos es necesario especificar la opción –purge

¿Por que el estado final no es not-installed ?

En Debian cuando un paquete se desinstala con la opción ’remove’ en apt, dpkg u otros el paquete simplemente elimina sus binarios. Pero los archivos

marcados como ’conffiles’ se mantienen; este es el Estado çonfig-files” Para eliminar estos archivos es necesario especificar la opción –purge

Maintainer Scrips

Maintainer scrips

Ahora veamos el proceso con todo y –purge

Figura: desinstalando y purgando foo

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  36 / 40

Maintainer Scrips

Maintainer scripts

Ahora veamos el proceso más complejo, el upgrade

Figura: Actualizando y todo OK

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  37 / 40

Maintainer Scrips

Maintainer scripts

DPKG permite entonces ser una opción inteligente para lograr que su instalación o acualización aunque falle no deje el sistema operativo

inoperable.

Cuando usted ve errores como: dpkg devolvio el stado blah en postproceso de bleh el maint-script de ese paquete fallo.

Esto es un bug de paquetería y debería de ser reportado a Debian

Maintainer scripts

DPKG permite entonces ser una opción inteligente para lograr que su instalación o acualización aunque falle no deje el sistema operativo

inoperable.

Cuando usted ve errores como: dpkg devolvio el stado blah en postproceso de bleh el maint-script de ese paquete fallo.

Esto es un bug de paquetería y debería de ser reportado a Debian

Maintainer scripts

DPKG permite entonces ser una opción inteligente para lograr que su instalación o acualización aunque falle no deje el sistema operativo

inoperable.

Cuando usted ve errores como: dpkg devolvio el stado blah en postproceso de bleh el maint-script de ese paquete fallo.

Esto es un bug de paquetería y debería de ser reportado a Debian

Maintainer Scrips

Maintainer scripts

Ahora veamos el proceso completo de upgrade, incluyendo fallos

Figura: Actualizando

rmayorga (Comunidad de usuarios Debian de El Salvador) Debian package internals  20 de septiembre de 2008  39 / 40

Maintainer Scrips

Gracias

Gracias a todos por su atención :)

           mi correo de nuevo rmayorga@debian.org.sv

Este documento es libre; lo pueden encontrar en:

                 http://rmayorga.org/talks/

Para información de licencia por favor revisar los comentarios en el source son bienvenidos parches, comentarios, etc. los diagramas de los maintainer scripts fueron gracias a Margarita Manterola marga@debian.org.

Maintainer Scrips

Gracias

Gracias a todos por su atención :)

           mi correo de nuevo rmayorga@debian.org.sv

Este documento es libre; lo pueden encontrar en:

                 http://rmayorga.org/talks/

Para información de licencia por favor revisar los comentarios en el source son bienvenidos parches, comentarios, etc. los diagramas de los maintainer scripts fueron gracias a Margarita Manterola marga@debian.org.