119 votes

Comment décompresser et emballer le fichier pkg?

J'ai un fichier pkg créé par Installer Maker pour Mac. Je veux remplacer un fichier pkg. Mais je dois le faire sous Linux, parce que c'est une partie du processus de téléchargement. Lorsque l'utilisateur commence à télécharger le fichier server doit remplacer un fichier pkg. J'ai une solution comment décompresser pkg et remplacer un fichier mais je ne sais pas comment pack de pkg. http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.html

216voto

abarnert Points 94246

Les paquets sont juste .xar archives avec une extension différente et un fichier spécifié hiérarchie. Malheureusement, une partie de la hiérarchie de fichiers est un cpio.gz archives de la réelle installables, et généralement c'est ce que vous voulez éditer. Et il y a aussi une Nomenclature fichier qui contient des informations sur les fichiers à l'intérieur de cette archive cpio, et un PackageInfo fichier qui contient des informations de synthèse.

Si vous n'avez vraiment seulement besoin de modifier un des fichiers info, c'est simple:

mkdir Foo
cd Foo
xar -xf ../Foo.pkg
# edit stuff
xar -cf ../Foo-new.pkg *

Mais si vous avez besoin de modifier les fichiers installables:

mkdir Foo
cd Foo
xar -xf ../Foo.pkg
cd foo.pkg
cat Payload | gunzip -dc |cpio -i
# edit Foo.app/*
rm Payload
find ./Foo.app | cpio -o | gzip -c > Payload
mkbom Foo.app Bom # or edit Bom
# edit PackageInfo
rm -rf Foo.app
cd ..
xar -cf ../Foo-new.pkg

Je crois que vous pouvez obtenir mkbom (et lsbom) pour la plupart des distributions linux. (Si vous pouvez obtenir la même chose, qui rend les choses encore plus facile, mais je ne sais pas si c'est presque universellement disponibles.)

28voto

ccpizza Points 2653

Inspiré par la réponse d’ abarnert , j’ai créé un script bash qui décompresse un paquetage nommé MyPackage.pkg dans un sous-dossier nommé MyPackage_pkg , puis ouvre le dossier dans le Finder. Supprimez la dernière ligne si vous ne voulez pas l’étape du Finder.

     #!/usr/bin/env bash
    filename="$*"
    dirname="${filename/\./_}"
    pkgutil --expand "$filename" "$dirname"
    cd "$dirname"
    tar xvf Payload
    open .
 

Usage:

     pkg-upack.sh MyPackage.pkg
 

4voto

Malte Rohde Points 75

En plus de ce que @abarnert a dit, je devais aujourd’hui découvrir que l’utilitaire par défaut cpio de Mountain Lion utilise un format d’archive différent par défaut (indéterminé), même avec la page de manuel qu’il utiliserait. l'ancien format cpio / odc. Ainsi, si quelqu'un tombe sur le message cpio read error: bad file format en essayant d'installer ses packages manipulés, veillez à inclure le format dans l'étape de reconditionnement:

 find ./Foo.app | cpio -o --format odc | gzip -c > Payload
 

0voto

CoolAJ86 Points 19341

J'ai compilé un article en utilisant les informations ici, mes propres expériences et quelques autres sources:

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X