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.