Pertanyaan Bagaimana cara membongkar dan mengemas file pkg?


Saya memiliki file pkg yang dibuat oleh Install Maker untuk Mac. Saya ingin mengganti satu file dalam pkg. Tetapi saya harus melakukan ini di sistem Linux, karena ini adalah bagian dari proses pengunduhan. Ketika pengguna mulai mengunduh file server harus mengganti satu file dalam pkg. Saya punya solusi bagaimana membongkar pkg dan mengganti file tetapi saya tidak tahu bagaimana pak lagi ke pkg. http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.html


76
2017-07-02 18:06


asal


Jawaban:


Paket hanya file .xar dengan ekstensi yang berbeda dan hierarki file tertentu. Sayangnya, bagian dari hirarki file itu adalah arsip cpio.gz dari installable yang sebenarnya, dan biasanya itulah yang ingin Anda edit. Dan ada juga file Bom yang berisi informasi tentang file di dalam arsip cpio, dan file PackageInfo yang berisi informasi ringkasan.

Jika Anda benar-benar hanya perlu mengedit salah satu file info, itu sederhana:

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

Tetapi jika Anda perlu mengedit file yang dapat diinstal:

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

Saya yakin Anda bisa mendapatkan mkbom (dan lsbom) untuk sebagian besar distro linux. (Jika Anda bisa mendapatkan idem, itu membuat segalanya lebih mudah, tapi saya tidak yakin apakah itu hampir tersedia di mana-mana.)


147
2017-07-02 19:23



Terinspirasi oleh jawaban dari abarnert, Saya membuat skrip bash yang akan membongkar paket bernama MyPackage.pkg ke dalam subfolder bernama MyPackage_pkg lalu buka folder di Finder. Hapus baris terakhir jika Anda tidak ingin langkah Finder.

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

Pemakaian:

    pkg-upack.sh MyPackage.pkg

Peringatan: Ini tidak akan berfungsi dalam semua kasus, dan akan gagal dengan file tertentu, mis. PKG di dalam penginstal sistem OSX. Jika Anda hanya ingin mengintip di dalam file pkg dan melihat apa yang ada di dalamnya, Anda dapat mencoba SuspiciousPackage (aplikasi gratis), dan jika Anda ingin melakukan pembongkaran serius, termasuk mengekstraksi file tertentu, lihatlah Pacifist (nagware).


17
2018-05-30 09:00



Selain apa yang dikatakan @abarnert, saya hari ini harus mengetahui bahwa defaultnya cpio utilitas pada Mountain Lion menggunakan format arsip yang berbeda per default (tidak yakin yang mana), bahkan dengan halaman manual yang menyatakan akan menggunakan format cpio / odc lama. Jadi, jika ada yang tersandung pada cpio read error: bad file format pesan ketika mencoba untuk menginstal paket-paket yang dimanipulasi, pastikan untuk menyertakan format dalam langkah re-pack:

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

3
2018-02-27 10:02



@shrx Saya telah berhasil membongkar BSD.pkg (bagian dari penginstal Yosemite) dengan menggunakan perintah "pbzx".

pbzx <pkg> | cpio -idmu

Perintah "pbzx" dapat diunduh dari tautan berikut:


2
2018-01-09 15:39



Anda mungkin ingin melihat garpu saya pbzx sini: https://github.com/NiklasRosenstein/pbzx

Ini memungkinkan Anda untuk melakukan streaming file pbzx yang tidak dibungkus dalam arsip XAR. Saya telah mengalami hal ini dengan XCode Command-Line Tools Disk Images baru-baru ini (mis. 10.12 XCode 8).

pbzx -n Payload | cpio -i

2
2018-01-11 18:01