Mam plik pkg stworzony przez Install Maker for Mac. Chcę zamienić jeden plik w pkg. Ale muszę to zrobić w systemie Linux, ponieważ jest to część procesu pobierania. Gdy użytkownik zaczyna pobierać serwer plików, musi zastąpić jeden plik w pkg. Mam rozwiązanie, jak rozpakować pkg i zastąpić plik, ale nie wiem, jak pakiet ponownie do pkg. http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.htmlJak rozpakować i spakować plik pkg?
Odpowiedz
Pakiety są tylko xar archiwów z innym rozszerzeniem i określonej hierarchii plików. Niestety, częścią tej hierarchii plików jest archiwum cpio.gz rzeczywistych instalacji i zwykle to właśnie chcemy edytować. Istnieje również plik Bom zawierający informacje o plikach znajdujących się w archiwum cpio oraz plik PackageInfo zawierający informacje podsumowujące.
Jeśli naprawdę nie wystarczy zmienić jeden z plików info, że jest prosta:
mkdir Foo
cd Foo
xar -xf ../Foo.pkg
# edit stuff
xar -cf ../Foo-new.pkg *
Ale jeśli trzeba edytować instalowalnych pliki:
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
Wierzę, że można dostać mkbom (i lsbom) dla większości dystrybucji Linuksa. (Jeśli możesz zrobić to samo, to jest jeszcze łatwiejsze, ale nie jestem pewien, czy jest to prawie tak wszechobecne).
Tak. Próbowałem tej metody wcześniej (tylko rozpakować/pack bez zmiany jakichkolwiek plików), ale po zainstalowaniu tego pkg nic się nie stało. W konsoli dostałem tę wiadomość: posix_spawn ("/ Library/Application Support/Project1/Project1.app/Contents/MacOS/Project1", ...): Brak takiego pliku lub katalogu. Sprawdziłem, że stary plik ładunku ma /./ Project1.app/... i nowy ładunek ma /Project1.app/... wewnątrz. – dream2work
Cóż, ta ostatnia część jest łatwa. Nie wiem, czy to robi różnicę, ale może (może dlatego, że Bom i ładunek się nie zgadzają?). Po prostu użyj ./Foo.app zamiast Foo.app w poleceniu find | cpio | gzip. Będę edytować odpowiedź. – abarnert
@abarnert: zamiast 'cat Ładunek | gunzip -dc | cpio -i' możesz po prostu użyć 'tar xzvf Payload' – ccpizza
Oprócz tego, co powiedział @abarnert, musiałem dzisiaj dowiedzieć się, że domyślne narzędzie cpio
on Mountain Lion używa domyślnie innego formatu archiwum (nie wiem, który), nawet jeśli strona podręcznika mówi, że używa starego formatu cpio/odc. Tak więc, jeśli ktoś potyka się na komunikacie cpio read error: bad file format
podczas próby zainstalowania jego/jej manipulować pakietów, należy pamiętać o jego format w kroku re-pack:
find ./Foo.app | cpio -o --format odc | gzip -c > Payload
Zainspirowany odpowiedzi z abarnert, zrobiłem bash skrypt, który rozpakuje pakiet o nazwie MyPackage.pkg
do podfolderu o nazwie MyPackage_pkg
, a następnie otwórz folder w Finderze. Usuń ostatni wiersz, jeśli nie chcesz kroku Findera.
#!/usr/bin/env bash
filename="$*"
dirname="${filename/\./_}"
pkgutil --expand "$filename" "$dirname"
cd "$dirname"
tar xvf Payload
open .
Zastosowanie:
pkg-upack.sh MyPackage.pkg
Ostrzeżenie: To nie będzie działać we wszystkich przypadkach, a nie z niektórych plików, np PKG wewnątrz instalatora systemu OSX. Jeśli chcesz tylko zajrzeć do pliku pkg i zobaczyć, co jest w środku, możesz wypróbować SuspiciousPackage (darmowa aplikacja), a jeśli chcesz zrobić poważne rozpakowanie, w tym wyodrębnianie określonych plików, to spójrz na Pacifist (nagware).
@shrx Udało mi się rozpakować plik BSD.pkg (część instalatora Yosemite) za pomocą komendy "pbzx".
Komenda "pbzx" można pobrać z poniższego linku:
Możecie zajrzeć do mojego rozwidleniu pbzx
tutaj: https://github.com/NiklasRosenstein/pbzx
Pozwala na strumieniowe przesyłanie plików pbzx, które nie są wra pped w archiwum XAR. Doświadczyłem tego z najnowszymi obrazami dyskowymi narzędzi wiersza poleceń XCode (np. 10.12 XCode 8).
pbzx -n Payload | cpio -i
- 1. Jak rozpakować plik io.ReadCloser?
- 2. Jak rozpakować plik zip C#
- 3. Jak spakować strukturę w NSData?
- 4. Jak rozpakować artefakty i filtrować zasoby?
- 5. Jak rozpakować plik .gz w PHP?
- 6. Jak rozpakować plik w obiektywnym c?
- 7. Android: Jak rozpakować zaszyfrowany plik zip
- 8. Jak rozpakować plik .zip na iOS?
- 9. JAXB - jak rozpakować ten plik XML?
- 10. Jak rozpakować/rozpakować w Emacs
- 11. Jak spakować i wdrożyć aplikację Java Eclipse
- 12. Jak spakować aplikację Ruby?
- 13. rozpakować plik .gz przy użyciu GZipStream
- 14. Jak wyodrębnienie rozpakować plik .ab (Android pliku kopii zapasowej)
- 15. Jak rozpakować pojedynczy plik z tar do innego katalogu?
- 16. Jak rozpakować plik TAR za pomocą Apache Commons
- 17. Jak mogę rozpakować wieloczęściowy plik rar w Linuksie?
- 18. Jak rozpakować plik tar.Z przez książki kucharskie CHEF
- 19. Jak rozpakować plik za pomocą Pythona w wersji 2.4?
- 20. Jak mogę rozpakować plik tar.bz w systemie UNIX?
- 21. jak rozpakować z pigz
- 22. Jak rozpakować Color.PackedValue
- 23. Jak spakować bibliotekę .NET Framework?
- 24. Jak rozpakować Iterator?
- 25. Jak rozpakować tablicę?
- 26. Info.plist oznacza aplikację na iOS, ale przesyłając plik .pkg
- 27. Jak spakować program Twisted za pomocą py2exe?
- 28. pliki Run .pkg w Linuksie
- 29. Jak spakować bibliotekę źródłową do ponownego wykorzystania?
- 30. Homestead: ERR! tar rozpakować błąd rozpakować
(Dla przyszłych użytkowników) http://gabrielrinaldi.me/how-to-install-jdk-7-on-yosemite-10-10/ może dać wgląd –
MacOS wydaje się pochodzić z poleceniem XAR . – MikeP