Tôi có tệp pkg được tạo bởi Install Maker cho Mac. Tôi muốn thay thế một tệp bằng pkg. Nhưng tôi phải làm điều này dưới hệ thống Linux, bởi vì đây là một phần của quá trình tải xuống. Khi người dùng bắt đầu tải xuống máy chủ tệp phải thay thế một tệp bằng pkg. tôi có một giải pháp như thế nào giải nén pkg và thay thế một tập tin nhưng tôi không biết làm thế nào đóng gói một lần nữa để pkg. http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.htmlLàm cách nào để giải nén và đóng gói tệp pkg?
Trả lời
Gói chỉ là lưu trữ .xar có phần mở rộng khác và phân cấp tệp được chỉ định. Thật không may, một phần của hệ thống phân cấp tệp đó là bản lưu trữ cpio.gz của các cài đặt thực tế và thường là những gì bạn muốn chỉnh sửa. Và cũng có một tệp Bom bao gồm thông tin về các tệp bên trong kho lưu trữ cpio đó và tệp PackageInfo bao gồm thông tin tóm tắt.
Nếu bạn thực sự chỉ cần chỉnh sửa một trong các tập tin thông tin, đó là đơn giản:
mkdir Foo
cd Foo
xar -xf ../Foo.pkg
# edit stuff
xar -cf ../Foo-new.pkg *
Nhưng nếu bạn cần phải chỉnh sửa các tập tin cài đặt:
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
Tôi tin rằng bạn có thể nhận được mkbom (và lsbom) cho hầu hết các bản phân phối Linux. (Nếu bạn có thể nhận được ditto, điều đó làm cho mọi thứ trở nên dễ dàng hơn, nhưng tôi không chắc liệu nó gần như có sẵn ở mọi nơi không.)
Có. Tôi đã thử phương pháp này trước đây (chỉ giải nén/gói mà không thay đổi bất kỳ tập tin), nhưng sau khi cài đặt này pkg không có gì happend. Trong giao diện điều khiển, tôi nhận được thông báo này: posix_spawn ("/ Library/Application Support/Project1/Project1.app/Contents/MacOS/Project1", ...): Không có tệp hoặc thư mục nào như vậy. Tôi đã điều tra rằng tệp Tải trọng cũ có /./ Project1.app/... và tải trọng mới có /Project1.app/... bên trong. – dream2work
Vâng, phần cuối cùng là dễ dàng. Tôi không biết liệu nó có tạo nên sự khác biệt hay không, nhưng có lẽ (có lẽ vì Bom và Payload không khớp?). Chỉ cần sử dụng ./Foo.app thay vì Foo.app trong lệnh find | cpio | gzip. Tôi sẽ chỉnh sửa câu trả lời. – abarnert
@abarnert: thay vì 'mèo Payload | gunzip -dc | cpio -i' bạn có thể đơn giản sử dụng 'tar xzvf Payload' – ccpizza
Ngoài những gì @abarnert đã nói, hôm nay tôi phải tìm hiểu rằng tiện ích cpio
mặc định trên Mountain Lion sử dụng một định dạng lưu trữ khác nhau cho mỗi mặc định (không chắc chắn), ngay cả với trang người đàn ông nói nó sẽ sử dụng định dạng cpio/odc cũ. Vì vậy, nếu có ai tình cờ gặp được thông báo cpio read error: bad file format
trong khi cố gắng cài đặt/gói thao túng của mình, hãy chắc chắn để bao gồm các định dạng trong bước tái gói:
find ./Foo.app | cpio -o --format odc | gzip -c > Payload
Lấy cảm hứng từ câu trả lời từ abarnert, tôi đã bash kịch bản mà sẽ giải nén một gói có tên MyPackage.pkg
vào một thư mục con tên là MyPackage_pkg
và sau đó mở thư mục trong Finder. Hủy bỏ dòng cuối cùng nếu bạn không muốn bước Finder.
#!/usr/bin/env bash
filename="$*"
dirname="${filename/\./_}"
pkgutil --expand "$filename" "$dirname"
cd "$dirname"
tar xvf Payload
open .
Cách sử dụng:
pkg-upack.sh MyPackage.pkg
Cảnh báo: Điều này sẽ không làm việc trong mọi trường hợp, và sẽ thất bại với các tập tin nhất định, ví dụ PKG bên trong trình cài đặt hệ thống OSX. Nếu bạn chỉ muốn nhìn vào bên trong file pkg và xem những gì bên trong, bạn có thể thử SuspiciousPackage (ứng dụng miễn phí), và nếu bạn muốn làm một số giải nén nghiêm trọng, bao gồm cả giải nén tập tin cụ thể, sau đó có một cái nhìn tại Pacifist (nagware).
@shrx Tôi đã thành công để giải nén BSD.pkg (một phần của trình cài đặt Yosemite) bằng cách sử dụng lệnh "pbzx".
Các "pbzx" lệnh có thể được tải về từ liên kết sau:
Bạn có thể muốn nhìn vào ngã ba của tôi về pbzx
đây: https://github.com/NiklasRosenstein/pbzx
Nó cho phép bạn truyền tệp pbzx không bao bọc trang trong một kho lưu trữ XAR. Tôi đã trải nghiệm điều này với các Hình ảnh Đĩa Công cụ Dòng lệnh XCode gần đây (ví dụ: 10.12 XCode 8).
pbzx -n Payload | cpio -i
- 1. Đóng gói và nén
- 2. Cách nén và giải nén tệp?
- 3. Làm thế nào để giải nén xlsx?
- 4. Làm cách nào để giải nén/giải nén trong Emacs
- 5. đóng gói vs vectơ giải nén trong hệ thống verilog
- 6. Làm cách nào để giải nén tệp .gz bằng PHP?
- 7. Làm cách nào để giải nén tệp bằng dòng lệnh?
- 8. Cách giải nén tệp gzip và ghi tệp đó ra tệp không nén, trên iPhone
- 9. giải nén và tạo các tệp ipk
- 10. Làm cách nào để đóng gói tệp bằng hộp Vagrant?
- 11. Cách giải nén tệp .zip trên iOS?
- 12. Làm cách nào để giải nén nội dung của tệp JavaScript?
- 13. Nén và giải nén các thư mục và tệp bằng cách sử dụng Java
- 14. Giải nén các số thập phân đóng gói EBCDIC (COMP-3) trong Chuyển đổi ASCII
- 15. nén và giải nén suối
- 16. Giải nén và lưu tệp bằng cách sử dụng as3?
- 17. Làm thế nào để giải nén io.ReadCloser?
- 18. Tôi làm cách nào để sử dụng gói "nén/gzip" của golang để gzip một tệp?
- 19. Làm thế nào để đóng gói struct trong NSData?
- 20. Làm thế nào để sử dụng SDK 7z để nén và giải nén một file
- 21. Làm cách nào để tạo tệp và sau đó nén/nén với Heroku?
- 22. GZipStream và giải nén
- 23. Đóng gói nhiều rpms trong một tệp
- 24. Làm thế nào để giải nén hiện vật và lọc tài nguyên?
- 25. Cách giải nén tệp zip C#
- 26. Python - cơ chế để xác định loại tệp nén và giải nén
- 27. Cách đơn giản để giải nén tệp .zip bằng zlib
- 28. Tôi làm cách nào để nén một thư mục và gửi email tệp nén bằng Python?
- 29. Làm cách nào để giải nén tệp dữ liệu lớn trong AsyncTask.doInBackground?
- 30. JavaScript: Giải nén/thổi phồng/giải nén/giải nén chuỗi
(Đối với khách tham quan trong tương lai) http://gabrielrinaldi.me/how-to-install-jdk-7-on-yosemite-10-10/ có thể cung cấp cho bạn cái nhìn sâu sắc –
MacOS dường như đi kèm với lệnh XAR . – MikeP