2012-02-15 15 views
19

Provo a mettere in valigia alcuni file di mappe per il nostro geoserver in un pacchetto rpm interno. Per la parte di costruzione, questo è solo per copiare i file. Penso che funzioni come previsto. Ma ci vuole molto tempo per imballare quei 20 GB di immagini.rpmbuild modifica formato di compressione

Ho letto che rpm comprime internamente i dati e che questo può essere fatto con diversi algoritmi di compressione. Ma non ho idea di quale compressione scelga il mio rpm e di come posso influenzarlo. Non sono riuscito a trovare alcuna opzione per il comando rpmbuild, né per l'specfile né per le opzioni generali rpm posso elencare con rpmbuild --showrc

io non sono molto esperto con rpmbuild e specfiles, ma dopo aver letto un sacco di pagine di manuale e tutorial su rpm.org non ho altre idee.

specfile che uso si presenta come:

%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 

io chiamo rpmbuild come questo:

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

Qualche suggerimento?

+0

L'unica compressione di cui sono a conoscenza è '/ usr/lib/rpm/brp-compress' comprimerà le pagine man. –

+0

poiché gli RPM sono molto più piccoli dei dati di input forniti, sono abbastanza sicuro che tutti i dati in essi contenuti siano compressi. Ho anche capito che gli archivi zip (nel mio caso i file jar) contenuti in un RPM verranno nuovamente compressi, in modo che il jar installato dall'RPM sia diverso rispetto all'ingresso (anche se il suo contenuto è identico) .. – mkraemerx

+0

OK, Avrei dovuto specificare che con "l'unica compressione controllabile dall'utente", quindi ...;) –

risposta

18

Stavo lavorando con alcune cose RPM oggi e mi sono imbattuto casualmente nella risposta per voi!

mettere questi nel file spec:

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

Che sarà comunque possibile utilizzare gzip ma passarlo -0 per un livello, che dovrebbe solo negozio. Sul mio RPM, è cresciuto da 21 MB a 76 MB, quindi sono abbastanza sicuro che questa è la tua risposta!

A proposito, ho scoperto che in uno dei file macro - si può anche fare bzdio e qualsiasi numero 0-9 da usare bzip2. Questo era su RHEL4; le versioni successive di RPM sembrano supportare più opzioni di compressione; ma ancora, per quello che vuoi, quanto sopra dovrebbe essere quello che ti serve.

+0

vorrebbe vedere qualcuno convalidarlo su Fedora 20 o RHEL7. – mxmader

+2

Questi dovrebbero supportare 'xz' - vedere [qui] (http://fedoraproject.org/wiki/Features/XZRpmPayloads). –

3

Controllare il file/usr/lib/rpm/macro nel vostro sistema di compilazione, (il file forse diff nel percorso), ha una lista di supporto totale di metodi di compressione non: ad esempio:

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 

quindi qui, proprio come Aaron ha detto, puoi impostarlo qui come universale o impostato specificatamente per il tuo proj. spec.

-2

Ho usato "% define _binary_payload w9.xzdio" su RHEL 6.6. Come ho capito, lo strumento di compressione predefinito utilizzato in RHEL 6 è xz, ma il livello di compressione predefinito sembra essere 2, anche se 7 dovrebbe essere l'impostazione predefinita di xz. L'ho preso a 9 e alcuni RPM giganti sono passati da 653 MB a 439 MB. Sono stato in grado di salvare un totale di 1 gigabyte rispetto alla compressione predefinita.

+1

Questo è stato notato nel mio commento sopra da settembre 2014. –

Problemi correlati