Comment déballer et emballer le fichier pkg?

J'ai un fichier pkg créé par Install Maker Pour Mac. Je veux remplacer un fichier pkg. Mais je dois le faire sous le système Linux, car cela fait partie du processus de téléchargement. Lorsque l'utilisateur commence à télécharger le serveur de fichiers doit remplacer un fichier dans 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

78
demandé sur Violet Giraffe 2012-07-02 22:06:21

5 réponses

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

Si vous avez vraiment juste besoin d'éditer l'un des fichiers d'informations, c'est simple:

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

Mais si vous 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 idem, cela rend les choses encore plus faciles, mais je ne suis pas sûr si c'est presque aussi omniprésent.)

151
répondu abarnert 2012-07-03 16:58:31

Inspiré par la réponse de abarnert, j'ai créé un script bash qui décompresse un paquet 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 .

Utilisation:

    pkg-upack.sh MyPackage.pkg

Attention: cela ne fonctionnera pas dans tous les cas, et échouera avec certains fichiers, par exemple les Pkg dans le programme D'installation du système OSX. Si vous voulez juste coup d'oeil dans le fichier pkg et de voir à l'intérieur, vous pouvez essayer SuspiciousPackage (application gratuite), et si vous voulez faire un déballage sérieux, y compris l'extraction de fichiers spécifiques, alors jetez un oeil à Pacifist (nagware).

17
répondu ccpizza 2017-05-23 11:55:03

En plus de ce que @ abarnert a dit, j'ai dû découvrir aujourd'hui que l'utilitaire cpio par défaut sur Mountain Lion utilise un format d'archive différent par défaut (pas sûr), même avec la page de manuel indiquant qu'il utiliserait l'ancien format cpio/odc. Donc, si quelqu'un tombe sur le message cpio read error: bad file format en essayant d'installer ses paquets manipulés, assurez - vous d'inclure le format dans l'étape re-pack:

find ./Foo.app | cpio -o --format odc | gzip -c > Payload
3
répondu Malte Rohde 2013-02-27 10:02:28

@shrx j'ai réussi à déballer le BSD.pkg (partie du programme D'installation de Yosemite) en utilisant la commande" pbzx".

pbzx <pkg> | cpio -idmu

La commande" pbzx " peut être téléchargée à partir du lien suivant:

3
répondu h6ah4i 2015-01-26 09:40:05

Vous voudrez peut-être regarder dans ma fourchette de pbzx ici: https://github.com/NiklasRosenstein/pbzx

Il vous permet de diffuser des fichiers pbzx qui ne sont pas enveloppés dans une archive XAR. J'ai vécu cela avec des images de disque d'outils de ligne de commande Xcode récentes (par exemple. 10.12 XCode 8).

pbzx -n Payload | cpio -i
2
répondu Niklas R 2017-01-11 18:01:29