2012-07-02 19 views
71

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

+0

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

+0

MacOS xar कमांड के साथ आने के लिए प्रकट होता है । – MikeP

उत्तर

137

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

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

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 

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

+0

हां। मैंने पहले इस विधि को आजमाया है (किसी भी फाइल को बदलने के बिना केवल अनपैक/पैक करें), लेकिन स्थापित करने के बाद यह पीकेजी कुछ भी खुश नहीं है। कंसोल में मुझे यह संदेश मिला: posix_spawn ("/ लाइब्रेरी/एप्लिकेशन सपोर्ट/प्रोजेक्ट 1/प्रोजेक्ट 1.एप/सामग्री/मैकोज़/प्रोजेक्ट 1", ...): ऐसी कोई फ़ाइल या निर्देशिका नहीं है। मैंने जांच की है कि पुरानी पेलोड फ़ाइल/./ Project1.app/... है और नए पेलोड में /Project1.app/... है। – dream2work

+0

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

+3

@ बार्नर्ट: 'बिल्ली पेलोड के बजाय | gunzip -dc | cpio -i' आप बस 'tar xzvf पेलोड' – ccpizza

3

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

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

abarnert से जवाब से प्रेरित होकर, मैं एक पार्टी बना स्क्रिप्ट जो 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 

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

+0

'टैर xvf पेलोड' ने योसाइट – cde

+1

टैर पर बहुत अच्छा काम किया: अपरिचित संग्रह प्रारूप – malhal

+1

pbzx -n macOSUpd10.12.1.pkg/Payload का उपयोग करें। नए अभिलेखागार के लिए cpio -i (यहां से लिया गया: https://stackoverflow.com/a/41598227/5688277) –

2

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

2

आप यहाँ pbzx की मेरी कांटा में देखना चाहते हो सकता है: https://github.com/NiklasRosenstein/pbzx

"pbzx" कमांड नीचे दिए गए लिंक से डाउनलोड किया जा सकता

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

pbzx -n Payload | cpio -i 
संबंधित मुद्दे