Pkg dosyası nasıl açılır ve paketlenir?


99

Mac için Install Maker tarafından oluşturulmuş bir pkg dosyam var. Bir dosyayı pkg olarak değiştirmek istiyorum. Ama bunu Linux sistemi altında yapmalıyım çünkü bu indirme işleminin bir parçası. Kullanıcı dosya indirmeye başladığında, sunucu pkg cinsinden bir dosyayı değiştirmelidir. Pkg paketini nasıl açıp bir dosyayı nasıl değiştireceğime dair bir çözümüm var ama pkg'ye nasıl paketleneceğini bilmiyorum. http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.html


(Gelecek ziyaretçiler için) gabrielrinaldi.me/how-to-install-jdk-7-on-yosemite-10-10 size fikir verebilir
james_womack

MacOS, xar komutuyla geliyor gibi görünüyor.
MikeP

Yanıtlar:


187

Paketler, yalnızca farklı bir uzantıya ve belirli bir dosya hiyerarşisine sahip .xar arşivleridir. Ne yazık ki, bu dosya hiyerarşisinin bir kısmı, gerçek kurulabilirlerin cpio.gz arşividir ve genellikle düzenlemek istediğiniz şey budur. Ayrıca bu cpio arşivindeki dosyalar hakkında bilgi içeren bir Bom dosyası ve özet bilgileri içeren bir PackageInfo dosyası da vardır.

Bilgi dosyalarından birini gerçekten düzenlemeniz gerekiyorsa, bu basit:

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

Ancak yüklenebilir dosyaları düzenlemeniz gerekirse:

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

Linux dağıtımlarının çoğu için mkbom (ve lsbom) alabileceğinize inanıyorum. (Ditto alabilirseniz, bu işleri daha da kolaylaştırır, ancak bunun neredeyse her yerde mevcut olup olmadığından emin değilim.)


Evet. Bu yöntemi daha önce denedim (yalnızca herhangi bir dosyayı değiştirmeden paketi açın / paketleyin), ancak bu paketi yükledikten sonra hiçbir şey olmadı. Konsolda şu mesajı aldım: posix_spawn ("/ Library / Application Support / Project1 / Project1.app / Contents / MacOS / Project1", ...): Böyle bir dosya veya dizin yok. Eski Yük dosyasında /./ Project1.app / ... ve yeni yükün içinde /Project1.app / ... olduğunu araştırdım.
dream2work

Bu son kısım çok kolay. Bir fark yaratıp yaratmadığını bilmiyorum, ama olabilir (belki Bom ve Payload eşleşmediği için mi?). Find | cpio | gzip komutunda Foo.app yerine ./Foo.app kullanın. Cevabı düzenleyeceğim.
abarnert

4
@abarnert: Bunun yerine cat Payload | gunzip -dc |cpio -ibasitçe kullanabilirsiniztar xzvf Payload
ccpizza

Bir hata yayınlanmasını sağlamak cat Payload | gunzip -dc |cpio -i: gunzip: unknown compression format; 0 blocks. BSD.pkgOS X Yosemite kurulum paketinden açmaya çalışıyorum .
shrx

1
Xar'ım yoktu, bu yüzden denedim: 7z x <file>.pkgve işe yaradı.

21

Burada, abarnert'in cevabından esinlenilen bir bash betiği , adlandırılmış MyPackage.pkgbir alt klasöre adlandırılmış bir paketi açacak MyPackage_pkgve ardından klasörü Finder'da açacak.

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

Kullanım:

    pkg-upack.sh MyPackage.pkg

Uyarı: Bu her durumda çalışmaz ve belirli dosyalarda, örneğin OSX sistem yükleyicisinin içindeki PKG'ler ile başarısız olur. Pkg dosyasının içine göz atmak ve içinde ne olduğunu görmek istiyorsanız, SuspiciousPackage'ı (ücretsiz uygulama) deneyebilir ve belirli dosyaları seçerek paketten çıkarma gibi daha fazla seçeneğe ihtiyacınız varsa, Pacifist'e (nagware) bir göz atabilirsiniz.


2
Pbzx -n macOSUpd10.12.1.pkg / Payload | Daha yeni arşivler için cpio -i (buradan alınmıştır: stackoverflow.com/a/41598227/5688277 )
Adrian O'Connor

3

@Abarnert'in söylediğine ek olarak, bugün cpioMountain Lion'daki varsayılan yardımcı programın, eski cpio / odc formatını kullanacağını belirten man sayfası olsa bile, varsayılan başına farklı bir arşiv formatı kullandığını (hangisi olduğundan emin değilim) öğrenmek zorunda kaldım . Bu nedenle, cpio read error: bad file formatmanipüle edilmiş paketlerini yüklemeye çalışırken mesajla karşılaşan olursa , formatı yeniden paketleme adımına eklediğinizden emin olun:

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

3

@shrx "pbzx" komutunu kullanarak BSD.pkg (Yosemite yükleyicisinin bir parçası) paketini açmayı başardım.

pbzx <pkg> | cpio -idmu

"Pbzx" komutu aşağıdaki bağlantıdan indirilebilir:


2

pbzxBuradaki çatalıma bakmak isteyebilirsiniz : https://github.com/NiklasRosenstein/pbzx

Bir XAR arşivine sarılmamış pbzx dosyalarını yayınlamanıza olanak tanır. Bunu en son XCode Komut Satırı Araçları Disk Görüntüleri (ör. 10.12 XCode 8) ile deneyimledim.

pbzx -n Payload | cpio -i
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.