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
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.)
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).
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
@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:
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