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
Réponses
Trop de publicités?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.)
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
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