Frage Wie entpacke ich pkg-Dateien?


Ich habe eine Pkg-Datei, die von Install Maker für Mac erstellt wurde. Ich möchte eine Datei in Pkg ersetzen. Aber ich muss dies unter Linux System tun, weil dies ein Teil des Download-Prozesses ist. Wenn der Benutzer beginnt, den Dateiserver herunterzuladen, muss eine Datei in pkg ersetzt werden. Ich habe eine Lösung, wie pkg entpacken und eine Datei ersetzen, aber ich weiß nicht, wie packen Sie wieder zu pkg. http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-file-package.html


76
2017-07-02 18:06


Ursprung


Antworten:


Pakete sind nur .xar-Archive mit einer anderen Erweiterung und einer bestimmten Dateihierarchie. Leider ist ein Teil dieser Dateihierarchie ein cpio.gz-Archiv der tatsächlichen Installationsdateien, und das ist normalerweise das, was Sie bearbeiten wollen. Außerdem gibt es eine Bom-Datei mit Informationen zu den Dateien in diesem cpio-Archiv und eine PackageInfo-Datei mit Zusammenfassungsinformationen.

Wenn Sie wirklich nur eine der Info-Dateien bearbeiten müssen, ist das ganz einfach:

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

Aber wenn Sie die installierbaren Dateien bearbeiten müssen:

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

Ich glaube, dass Sie mkbom (und lsbom) für die meisten Linux-Distributionen bekommen können. (Wenn du dito bekommst, macht das alles noch einfacher, aber ich bin mir nicht sicher, ob das fast so ubiquitär verfügbar ist.)


147
2017-07-02 19:23



Inspiriert von der Antwort von abarnertIch habe ein Bash-Skript erstellt, das ein Paket namens "entpacken" soll MyPackage.pkg in einen Unterordner namens MyPackage_pkg und öffne dann den Ordner im Finder. Entfernen Sie die letzte Zeile, wenn Sie den Finder-Schritt nicht möchten.

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

Verwendung:

    pkg-upack.sh MyPackage.pkg

Warnung: Dies funktioniert nicht in allen Fällen und schlägt bei bestimmten Dateien fehl, z. die PKGs innerhalb des OSX-System-Installers. Wenn Sie nur in die pkg-Datei schauen und sehen möchten, was drin ist, können Sie es versuchen SuspiciousPackage (kostenlose App), und wenn Sie einige ernsthafte Entpacken, einschließlich Extrahieren bestimmter Dateien, dann schauen Sie sich an Pazifist (Nagware).


17
2018-05-30 09:00



Zusätzlich zu dem, was @abarnert sagte, musste ich heute den Default herausfinden cpio Das Dienstprogramm von Mountain Lion verwendet standardmäßig ein anderes Archivformat (nicht sicher, welches), selbst wenn die man-Seite angibt, dass es das alte cpio / odc-Format verwenden würde. Also, wenn jemand auf die stolpert cpio read error: bad file format Wenn Sie versuchen, seine manipulierten Pakete zu installieren, stellen Sie sicher, dass Sie das Format in den Schritt zum erneuten Komprimieren einfügen:

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

3
2018-02-27 10:02



@shrx Es ist mir gelungen, die BSD.pkg (Teil des Yosemite Installers) mit dem Befehl "pbzx" zu entpacken.

pbzx <pkg> | cpio -idmu

Der Befehl "pbzx" kann unter folgendem Link heruntergeladen werden:


2
2018-01-09 15:39



Vielleicht möchten Sie in meine Abzweigung von suchen pbzx Hier: https://github.com/NiklasRosenstein/pbzx

Sie können damit pbzx-Dateien streamen, die nicht in ein XAR-Archiv eingebunden sind. Ich habe das mit den letzten XCode Command-Line Tools Disk Images (zB 10.12 XCode 8) erlebt.

pbzx -n Payload | cpio -i

2
2018-01-11 18:01