Como descompactar e empacotar o arquivo pkg?

Eu tenho um arquivo pkg criado pelo Install Maker para Mac. Eu quero replace um arquivo em pkg. Mas devo fazer isso no sistema Linux, porque isso faz parte do processo de download. Quando o usuário começa a baixar o servidor de arquivos deve replace um arquivo em pkg. Eu tenho uma solução como descompactar pkg e replace um arquivo, mas eu não sei como empacotar novamente para pkg. http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.html

Pacotes são apenas arquivos .xar com uma extensão diferente e uma hierarquia de arquivos especificada. Infelizmente, parte dessa hierarquia de arquivos é um arquivo cpio.gz dos instaláveis ​​reais, e geralmente é isso que você deseja editar. E há também um arquivo Bom que inclui informações sobre os arquivos dentro do arquivo cpio e um arquivo PackageInfo que inclui informações resumidas.

Se você realmente precisa apenas editar um dos arquivos de informação, é simples:

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

Mas se você precisar editar os arquivos instaláveis:

 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 

Eu acredito que você pode obter o mkbom (e o lsbom) para a maioria das distribuições linux. (Se você pode obter o mesmo, isso torna as coisas ainda mais fáceis, mas não tenho certeza se isso é quase tão onipresente quanto disponível).

Inspirado pela resposta de uma forma rápida , eu fiz um script bash que irá descompactar um pacote chamado MyPackage.pkg em uma subpasta chamada MyPackage_pkg e depois abrir a pasta no Finder. Remova a última linha se você não quiser a etapa do Finder.

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

Uso:

  pkg-upack.sh MyPackage.pkg 

Aviso: Isso não funcionará em todos os casos e falhará com determinados arquivos, por exemplo, os PKGs dentro do instalador do sistema OSX. Se você quer apenas espiar dentro do arquivo pkg e ver o que há dentro dele, você pode tentar o SuspiciousPackage (aplicativo gratuito), e se você quiser fazer uma descompactação séria, incluindo a extração de arquivos específicos, dê uma olhada no Pacifist (nagware).

Além do que @abarnert disse, hoje eu tive que descobrir que o utilitário cpio padrão no Mountain Lion usa um formato de arquivo diferente por padrão (não tenho certeza qual), mesmo com a página man afirmando que usaria o antigo formato cpio / odc . Portanto, se alguém se deparar com o cpio read error: bad file format do cpio read error: bad file format mensagem com cpio read error: bad file format ao tentar instalar os pacotes manipulados, certifique-se de include o formato na etapa de reempacotamento:

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

@shrx Consegui descompactar o BSD.pkg (parte do instalador do Yosemite) usando o comando “pbzx”.

pbzx | cpio -idmu

O comando “pbzx” pode ser baixado no seguinte link:

  • Analisador de stream pbzx

Você pode querer olhar para o meu fork do pbzx aqui: https://github.com/NiklasRosenstein/pbzx

Ele permite que você transmita arquivos pbzx que não estão envolvidos em um arquivo XAR. Eu experimentei isso com imagens de disco de ferramentas de linha de comando XCode recentes (por exemplo, 10.12 XCode 8).

 pbzx -n Payload | cpio -i