compression rpm rpmbuild rpm-spec

compression - formato de compresión de cambio rpmbuild



rpm-spec (4)

Intento empaquetar algunos archivos de mapas para nuestro geoserver en un paquete interno de rpm. Para la parte de compilación, esto es sólo para copiar los archivos. Creo que esto funciona como se esperaba. Pero lleva mucho tiempo empacar esos 20 GB de imágenes.

He leído que rpm comprime internamente los datos y que esto se puede hacer con varios algoritmos de compresión diferentes. Pero, no tengo ni idea de qué compresión elige mi rpm y cómo puedo influir en esto. No pude encontrar ninguna opción para el comando rpmbuild, ni para el archivo spec ni para las opciones generales de rpm que puedo enumerar con rpmbuild --showrc

No tengo mucha experiencia con rpmbuild y specfiles, pero después de leer muchas páginas de manual y tutoriales en rpm.org no tengo más ideas.

El archivo spec que uso se ve como:

%define debug_package %{nil} %global mapsversion 0.9 # If this is a snapshot, put the date here and uncomment #global snapshot_version 20100519 # This is the version in a form acceptable # an an RPM version string (i.e. no ''-'') # Hier werden die Makros definiert. %global rpmversion %(echo %{mapsversion} | tr ''-'' ''_'') %global pkgversion %{mapsversion}%{?snapshot_version:-SNAPSHOT} %global pkgname %{name} Name: geoserver-maps-part2 Version: %{rpmversion} Release: 1%{?dist} Summary: Swiss Maps for GeoServer Group: Application/ourApp License: Copyright (c) 2011 URL: http://doc.polyalert.local #Source0: %{name}-%{version}.tgz BuildArch: noarch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) Requires: geoserver %define mapshome /opt/geoserver/swisstopo %define mapssource /home/user/polyalert_env/geoserver/swisstopo %description Swiss Maps for GeoServer %prep %build /bin/true %install rm -rf $RPM_BUILD_ROOT mkdir -p $RPM_BUILD_ROOT%{mapshome} cp -a %{mapssource}/pk100 $RPM_BUILD_ROOT%{mapshome} %clean rm -rf $RPM_BUILD_ROOT %pre %post %preun %files %{mapshome}/pk100 %changelog * Tue Feb 14 2012 user - 1.0 - First version of specfile

Llamo rpmbuild así:

rpmbuild -bb --define "_topdir $TOP_DIR" --define "_gpg_name ourkey" --define "_signature gpg" --sign $TOP_DIR/SPECS/$SPEC_FILE_NAME $RPM_BUILD_PARAMETER

¿Alguna sugerencia?


¡Estaba trabajando con algunas cosas de RPM hoy y accidentalmente encontré la respuesta para ti!

Ponga estos en su archivo de spec :

%define _source_payload w0.gzdio %define _binary_payload w0.gzdio

Eso todavía usará gzip pero lo pasará -0 para un nivel, que solo debería almacenar. En mi RPM, lo hizo crecer de 21 MB a 76 MB, así que estoy seguro de que esta es tu respuesta.

Por cierto, encontré que en uno de los archivos de macro , también puede hacer bzdio y cualquier número del 0 al 9 para usar bzip2 . Esto fue en RHEL4; Las versiones posteriores de RPM parecen admitir más opciones de compresión; Pero nuevamente, para lo que quieras, lo anterior debería ser lo que necesitas.


He usado "% define _binary_payload w9.xzdio" en RHEL 6.6. Como entiendo, la herramienta de compresión predeterminada utilizada en RHEL 6 es xz, pero el nivel de compresión predeterminado parece ser 2, aunque se supone que 7 es el valor predeterminado de xz. Lo puse a 9 y algunos RPM gigantes pasaron de 653MB a 439MB. Pude guardar un total de 1 gigabyte sobre la compresión predeterminada.


Me encontré con el mismo problema: Ant construyó un RPM de tarro ejecutable con Spring Boot Loader quejándose de esto:

Causado por: java.lang.IllegalStateException: No se puede abrir la entrada anidada ''BOOT-INF / lib / accessors-smart-1.2.jar''. Se ha comprimido y los archivos jar anidados deben almacenarse sin compresión. Por favor, compruebe el mecanismo utilizado para crear su archivo jar ejecutable

Mi tarea de compilación de hormigas era así:

<exec executable="rpmbuild" failonerror="true"> <env key="version" value="${fullversion}" /> <arg value="-ba" /> <arg value="--clean" /> <arg value="${specfile}" /> </exec>

Mi solución para construir un RPM con un JAR ejecutable fue deshabilitar el reenvasado, estableciendo las definiciones de macro en el archivo de especificaciones no lo hice por mí.

Agregar esto al archivo de especificaciones fue lo que funcionó para mí:

#Disable jar unpacking %define __jar_repack 0

Referencia: https://bugzilla.redhat.com/show_bug.cgi?id=219731

Gracias a los carteles anteriores por ayudar a centrarse en el tema también.

Erion


Por favor verifique el archivo / usr / lib / rpm / macros en su máquina de compilación, (el archivo puede diferir en la ruta), tiene una lista de compatibilidad total de métodos de compresión allí: por ejemplo:

329 # Compression type and level for source/binary package payloads. 330 # "w9.gzdio" gzip level 9 (default). 331 # "w9.bzdio" bzip2 level 9. 332 # "w7.xzdio" xz level 7, xz''s default. 333 # "w7.lzdio" lzma-alone level 7, lzma''s default 334 # 335 #%_source_payload w9.gzdio 336 #%_binary_payload w9.gzdio

así que aquí, como dijo Aaron, puede configurarlo aquí para universal, o establecer específicamente para su proyecto. especulación.