Los paquetes de Mac OS X

Introducción

Los paquetes Mac OS X son ficheros con la extensión .pkg que básicamente contienen ficheros a instalar junto con una descripción de la ruta de los ficheros a instalar y sus permisos. Mac OS X utiliza los paquetes Mac OS X para instalar aplicaciones. Este truco clarifica cómo son y cómo usar estos paquetes.

Instalar y desinstalar paquetes

Para instalar un paquete basta con hacer doble click sobre él, pero también podemos usar el comando installer para instalarlo. Por ejemplo el siguiente comando instalaría el paquete iTunes.pkg en la raíz de nuestro sistema de ficheros:

$ installer -pkg iTunes.pkg -target /

Una ventaja de los paquetes es que Mac OS X lleva la cuenta de los paquetes instalados. Podemos consultar los paquetes instalados con el comando:

$ pkgutil --packages
apache.tomcat.6.0.26
com.adobe.pkg.FlashPlayer
com.apple.darwinstreamingserver
com.apple.MacOSX.lang.es
com.apple.pkg.AdditionalEssentials
com.apple.pkg.AdditionalFonts
com.apple.pkg.iTunesX
················

El comando devuelve el ID de cada paquete instalado. A partir de este ID podemos saber los ficheros que componen el paquete con el comando. Por ejemplo:

$ pkgutil --files org.virtualbox.pkg.vboxstartupitems
Library
Library/StartupItems
Library/StartupItems/VirtualBox
Library/StartupItems/VirtualBox/Resources
Library/StartupItems/VirtualBox/Resources/English.lproj
Library/StartupItems/VirtualBox/Resources/English.lproj/Localizable.strings
Library/StartupItems/VirtualBox/StartupParameters.plist
Library/StartupItems/VirtualBox/VirtualBox

Y también podemos desinstalar el paquete con el comando:

$ pkgutil --unlink org.virtualbox.pkg.vboxstartupitems

Formato de los paquetes

Hasta Mac OS X 10.4 los paquetes eran bundles estándar de Mac OS X, que son directorios especiales con los ficheros del paquete. La Figura 1 muestra el contenido de un paquete antiguo.

paquetes1.png
Figura 1: Paquete antiguo de Mac OS X

A partir de Mac OS X 10.5 su formato cambio a formato nuevo plano que es un formato de fichero comprimido con el comando xar. Podemos usar el comando xar para ver o extraer el contenido del paquete. Por ejemplo, para ver el contenido de un paquete nuevo hacemos:

$ xar -t -f iTunes.pkg

También tenemos la herramienta gráfica SuspiciousPackage para poder inspeccionar el contenido de un paquete (antiguo o nuevo) desde Finder. La Figura 2 muestra el contenido de un fichero de paquete plano.

paquetes2.png
Figura 2: Paquete nuevo de Mac OS X

El bill of materials

Mac OS X utiliza el término bill of materials (bom) para determinar los ficheros de paquete a instalar, actualizar o eliminar. Básicamente se trata de un log de ficheros instalados que después permite a Mac OS X desinstalarlos.

En el formato de paquetes antiguos este log se almacenaba en el directorio /Library/Receipts/boms. Con el formato de paquetes nuevos este log se ha pasado a almacenar en el directorio /var/db/receipts. Podemos usar el comando lsbom para ver el contenido de uno de estos ficheros.

$ lsbom /var/db/receipts/com.apple.pkg.CoreFP.bom
. 41775 0/80
./System 40755 0/0
./System/Library 40755 0/0
./System/Library/PrivateFrameworks 40755 0/0
./System/Library/PrivateFrameworks/CoreFP.framework 40755 0/0
./System/Library/PrivateFrameworks/CoreFP.framework/CodeResources

Tenga en cuenta que los paquetes (tanto en formato antiguo como nuevo) también contienen un fichero .bom, porque está es la forma de almacenar información sobre los permisos de los ficheros a instalar. Si por alguna razón se modifican los permisos de los ficheros del paquete podemos restaurarlos con el comando:

$ /usr/libexec/repair_packages --pkg com.birdstep.ZTEDataCardDriver --repair

Una vez que el paquete se instala, el fichero .bom se copia a Mac OS X para llevar un registro de los ficheros instalados y poder así desinstalarlos. Antes vimos que podemos desinstalar un paquete proporcionando su ID. Por ejemplo:

$ pkgutil --unlink com.birdstep.ZTEDataCardDriver

Este comando borra los ficheros pero no elimina el registro en el fichero bom. Podemos eliminar su registro en el fichero bom de Mac OS X usando el comando:

$ pkgutil --forget com.birdstep.ZTEDataCardDriver

Software Update

Software Update se basa en los ficheros bom y en los paquetes Mac OS X para llevar la cuenta del software que tenemos instalado. Este software compara los ficheros bom de nuestra máquina con los ficheros bom de un servidor de Apple para determinar si tiene que instalar nuevos paquetes en nuestro sistema.

Para determinar si hay actualizaciones disponibles podemos usar el comando:

$ softwareupdate -l

El comando softwareupdate también permite instalar un paquete con la opción -i, o bajarlo pero no instalarlo con la opción -d.