Pkg फ़ाइल को कैसे अनपैक और पैक करें?


99

मेरे पास मैक के लिए Install Maker द्वारा बनाई गई एक pkg फ़ाइल है। मैं एक फाइल को pkg में बदलना चाहता हूं। लेकिन मुझे लिनक्स सिस्टम के तहत ऐसा करना होगा, क्योंकि यह डाउनलोड प्रक्रिया का एक हिस्सा है। जब उपयोगकर्ता फ़ाइल सर्वर डाउनलोड करना शुरू करता है तो उसे एक फ़ाइल को pkg में बदलना होगा। मेरे पास एक उपाय है कि कैसे pkg को अनपैक करें और एक फ़ाइल को बदलें लेकिन मुझे नहीं पता कि pkg को फिर से कैसे पैक करें। http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.html


(भविष्य के आगंतुकों के लिए) gabrielrinaldi.me/how-to-install-jdk-7-on-yosemite-10-10 आपको जानकारी दे सकता है
james_womack

MacOS xar कमांड के साथ आता है।
मिकप

जवाबों:


186

पैकेज एक अलग विस्तार और एक निर्दिष्ट फ़ाइल पदानुक्रम के साथ सिर्फ .xar अभिलेखागार हैं। दुर्भाग्य से, उस फ़ाइल पदानुक्रम का एक हिस्सा वास्तविक किस्तों का एक cpio.gz संग्रह है, और आमतौर पर वह है जिसे आप संपादित करना चाहते हैं। और एक बॉम फाइल भी है जिसमें उस cpio आर्काइव के अंदर मौजूद फाइलों की जानकारी और एक पैकेजइन्फो फाइल जिसमें सारांश जानकारी शामिल है।

यदि आपको वास्तव में जानकारी फ़ाइलों में से एक को संपादित करने की आवश्यकता है, तो यह आसान है:

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

लेकिन अगर आपको इंस्टॉल करने योग्य फ़ाइलों को संपादित करने की आवश्यकता है:

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

मेरा मानना ​​है कि आप अधिकांश लिनक्स डिस्ट्रोस के लिए mkbom (और lsbom) प्राप्त कर सकते हैं। (यदि आप डिट्टो प्राप्त कर सकते हैं, तो इससे चीजें और भी आसान हो जाती हैं, लेकिन मुझे यकीन नहीं है कि यह सर्वव्यापी रूप से उपलब्ध है।)


हाँ। मैंने पहले भी इस विधि को आजमाया है (बिना किसी फाइल को बदले केवल अनपैक / पैक), लेकिन इस pkg को स्थापित करने के बाद कुछ भी नहीं होता है। कंसोल में मुझे यह संदेश मिला: posix_spawn ("/ Library / Application Support / Project1 / Project1.app / Contents / MacOS / Project1", ...): ऐसी कोई फ़ाइल या निर्देशिका नहीं है। मैंने जांच की है कि पुरानी पेलोड फ़ाइल में / / / Project1.app / ... है और नए पेलोड में /Project1.app / ... अंदर है।
ड्रीम

खैर, वह आखिरी हिस्सा आसान है। मुझे नहीं पता कि इससे कोई फ़र्क पड़ता है, लेकिन हो सकता है कि (हो सकता है कि बम और पेलोड का मिलान न हो?)। बस का उपयोग करें। / खोज में Foo.app के बजाय Foo.app | cpio | gzip कमांड। मैं उत्तर संपादित करूँगा।
16

4
@abarnert: इसके बजाय cat Payload | gunzip -dc |cpio -iआप बस का उपयोग कर सकते हैंtar xzvf Payload
ccpizza

मैं एक त्रुटि का प्रदर्शन शुरू cat Payload | gunzip -dc |cpio -i: gunzip: unknown compression format; 0 blocks। मैं BSD.pkgOS X Yosemite स्थापना पैकेज से खोलने की कोशिश कर रहा हूं ।
shrx

1
मेरे पास ज़ार नहीं था इसलिए मैंने कोशिश की: 7z x <file>.pkgऔर यह काम कर गया।

21

यहाँ एब्सर्ट के उत्तर से प्रेरित एक बैश स्क्रिप्ट है जो नाम के MyPackage.pkgसबफ़ोल्डर में एक पैकेज को अनपैक करेगा MyPackage_pkgऔर फिर फाइंडर में फ़ोल्डर को खोलेगा।

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

उपयोग:

    pkg-upack.sh MyPackage.pkg

चेतावनी: यह सभी मामलों में काम नहीं करेगा, और OSX सिस्टम इंस्टॉलर के अंदर PKGs जैसी कुछ फ़ाइलों के साथ विफल हो जाएगा। यदि आप pkg फ़ाइल के अंदर झांकना चाहते हैं और देखना चाहते हैं कि क्या है, तो आप SuspiciousPackage (फ्री ऐप) की कोशिश कर सकते हैं , और यदि आपको अधिक विकल्पों की आवश्यकता है जैसे कि चयनात्मक रूप से विशिष्ट फ़ाइलों को खोलना, तो Pacifist (nagware) पर एक नज़र डालें ।


2
Pbzx -n macOSUpd10.12.1.pkg / पेलोड का उपयोग करें cpio -i नए अभिलेखागार के लिए (यहां से लिया गया: stackoverflow.com/a/41598227/5688277 )
एड्रियन ओ'कॉनर

3

@Abarnert ने जो कहा, इसके अलावा, मुझे आज यह पता लगाना था कि cpioमाउंटेन लायन पर डिफ़ॉल्ट उपयोगिता प्रति डिफ़ॉल्ट एक अलग आर्काइव प्रारूप का उपयोग करती है (निश्चित नहीं है कि), यहां तक ​​कि यह बताने वाले मैन पेज के साथ भी पुराने cpio / odc प्रारूप का उपयोग होगा। इसलिए, यदि कोई cpio read error: bad file formatअपने हेरफेर किए गए पैकेजों को स्थापित करने का प्रयास करते समय संदेश पर ठोकर खाता है, तो प्रारूप को पुन: पैक चरण में शामिल करना सुनिश्चित करें:

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

3

@shrx मैं "pbzx" कमांड का उपयोग करके BSD.pkg (Yosemite इंस्टॉलर का हिस्सा) को अनपैक करने में सफल रहा।

pbzx <pkg> | cpio -idmu

"Pbzx" कमांड को निम्न लिंक से डाउनलोड किया जा सकता है:


2

आप pbzxयहाँ मेरे कांटे पर गौर करना चाहते हैं: https://github.com/NiklasRosenstein/pbzx

यह आपको उन pbzx फ़ाइलों को स्ट्रीम करने की अनुमति देता है जो XAR संग्रह में लिपटी नहीं हैं। मैंने हाल ही में XCode कमांड-लाइन टूल्स डिस्क इमेजेस (जैसे 10.12 XCode 8) के साथ इसका अनुभव किया है।

pbzx -n Payload | cpio -i
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.