web-dev-qa-db-fra.com

Comment décompresser et emballer le fichier pkg?

J'ai un fichier pkg créé par Install Maker for Mac. Je veux remplacer un fichier dans pkg. Mais je dois le faire sous 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 emballer à nouveau pour pkg. http://emresaglam.com/blog/1035http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package. html

85
dream2work

Les packages ne sont que des 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 une archive cpio.gz des installables réels, et c'est généralement ce que vous souhaitez modifier. Il existe également un fichier Bom contenant des informations sur les fichiers de l’archive cpio et un fichier PackageInfo contenant des informations récapitulatives.

Si vous avez vraiment besoin de modifier l'un des fichiers d'informations, rien de plus simple:

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

Mais si vous devez éditer 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 faire la même chose, cela rend les choses encore plus faciles, mais je ne suis pas sûr que ce soit presque aussi disponible.)

167
abarnert

Inspiré par la réponse de abarnert , j'ai créé un script bash qui décompressera un paquet nommé MyPackage.pkg dans un sous-dossier nommé MyPackage_pkg puis ouvrez 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

Avertissement: cela ne fonctionnera pas dans tous les cas et échouera avec certains fichiers, par exemple. les PKG à l’intérieur du programme d’installation du système OSX. Si vous voulez juste jeter un coup d'œil à l'intérieur du fichier pkg et voir ce qu'il y a dedans, vous pouvez essayer SuspiciousPackage (application gratuite), et si vous voulez procéder à une décompression sérieuse, y compris à l'extraction de fichiers spécifiques, alors jetez un œil at Pacifist (nagware).

17
ccpizza

@shrx J'ai réussi à décompresser le fichier BSD.pkg (composant du programme d'installation de Yosemite) à l'aide de la commande "pbzx".

pbzx <pkg> | cpio -idmu

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

3
h6ah4i

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

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

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

Il vous permet de diffuser des fichiers pbzx qui ne sont pas encapsulés dans une archive XAR. J'ai expérimenté cela avec les images de disque des outils de ligne de commande XCode (par exemple, 10.12 XCode 8).

pbzx -n Payload | cpio -i
2
Niklas R