Pregunta ¿Cómo desempaquetar y empacar el archivo pkg?


Tengo un archivo pkg creado por Install Maker para Mac. Quiero reemplazar un archivo en pkg. Pero debo hacer esto en el sistema Linux, porque esto es parte del proceso de descarga. Cuando el usuario comienza a descargar el servidor de archivos debe reemplazar un archivo en pkg. Tengo una solución para descomprimir un paquete y reemplazar un archivo, pero no sé cómo empacar de nuevo el paquete. http://emresaglam.com/blog/1035 http://ilostmynotes.blogspot.com/2012/06/mac-os-x-pkg-bom-files-package.html


76
2017-07-02 18:06


origen


Respuestas:


Los paquetes son solo archivos .xar con una extensión diferente y una jerarquía de archivos especificada. Desafortunadamente, parte de esa jerarquía de archivos es un archivo cpio.gz de las instancias reales, y generalmente eso es lo que desea editar. Y también hay un archivo Bom que incluye información sobre los archivos dentro de ese archivo cpio y un archivo PackageInfo que incluye información de resumen.

Si realmente solo necesitas editar uno de los archivos de información, es simple:

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

Pero si necesita editar los archivos instalables:

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

Creo que puedes obtener mkbom (y lsbom) para la mayoría de las distribuciones de Linux. (Si puede obtener lo mismo, eso hace que las cosas sean aún más fáciles, pero no estoy seguro de si eso está disponible de forma casi omnipresente).


147
2017-07-02 19:23



Inspirado por la respuesta de abarnert, Hice un script bash que descomprimirá un paquete llamado MyPackage.pkg en una subcarpeta llamada MyPackage_pkg y luego abra la carpeta en Finder. Elimine la última línea si no desea el paso Finder.

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

Uso:

    pkg-upack.sh MyPackage.pkg

Advertencia: esto no funcionará en todos los casos y fallará con ciertos archivos, p. los PKG dentro del instalador del sistema OSX. Si solo quieres echar un vistazo dentro del archivo pkg y ver qué hay adentro, puedes probar Paquetes sospechosos (aplicación gratuita), y si desea realizar un desempaquetado serio, incluida la extracción de archivos específicos, eche un vistazo a Pacifista (nagware).


17
2018-05-30 09:00



Además de lo que dijo @abarnert, hoy tuve que descubrir que el valor predeterminado cpio la utilidad en Mountain Lion usa un formato de archivo diferente por defecto (no estoy seguro de cuál), incluso con la página man indicando que usaría el formato cpio / odc anterior. Entonces, si alguien tropieza con el cpio read error: bad file format mensaje al intentar instalar sus paquetes manipulados, asegúrese de incluir el formato en el paso de volver a empacar:

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

3
2018-02-27 10:02



@shrx Logré descomprimir BSD.pkg (parte del instalador de Yosemite) usando el comando "pbzx".

pbzx <pkg> | cpio -idmu

El comando "pbzx" se puede descargar desde el siguiente enlace:


2
2018-01-09 15:39



Es posible que desee mirar en mi tenedor de pbzx aquí: https://github.com/NiklasRosenstein/pbzx

Le permite transmitir archivos pbzx que no están envueltos en un archivo XAR. Lo he experimentado con las recientes imágenes de disco de las herramientas de línea de comandos de XCode (por ejemplo, 10.12 XCode 8).

pbzx -n Payload | cpio -i

2
2018-01-11 18:01