2012-02-15 11 views
19

私たちのジオサーバのマップファイルを内部rpmパッケージにパックしようとしました。ビルド部分では、ファイルをコピーするだけです。私はこれが期待どおりに機能すると思います。しかし、20GBの画像をパックするのにはかなり時間がかかります。rpmbuildは圧縮形式を変更します

私はrpmが内部的にデータを圧縮していることを読みました。これは、いくつかの異なる圧縮アルゴリズムで実行できます。しかし、私はrpmが選択した圧縮と、これにどのように影響を与えることができるかという手がかりは持っていません。 rpmbuildコマンド、specfile、一般的なrpmオプションのオプションは見つかりませんでした。rpmbuild --showrc

rpmbuildとspecfilesはあまり経験がありませんが、多くのマニュアルページとチュートリアルを読んだ後ですrpm.orgに私はそれ以上のアイデアはありません。

私が使用するspecファイルは次のようになります。私はこのようなrpmbuildのを呼び出す

%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 

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

任意の提案ですか?

+0

「/ usr/lib/rpm/brp-compress'は、マニュアルページを圧縮することのみを認識しています。 –

+0

RPMは提供された入力データよりはるかに小さいので、そこにあるすべてのデータが圧縮されていることは間違いありません。私はRPMに入っているzipアーカイブ(私の場合はjarファイル)が再び圧縮されてRPMからインストールされたjarファイルが入力ファイルと同じであることを知りました。 – mkraemerx

+0

OK、私は "唯一のユーザー制御可能な圧縮"で始めるべきだったが...;) –

答えて

18

私は今日、いくつかのRPMの作業に取り組んでいて、誤って答えを見つけました。

あなたspecファイルにこれらを入れて:まだgzipを使用しますが、これは単に保存する必要があり、レベルのため-0渡します

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

。私のRPMでは21MBから76MBに成長しましたので、これがあなたの答えだと確信しています!あなたもbzip2を使用する9bzdio0から任意の数を行うことができます -

はところで、私はmacroファイルの一つであることを発見しました。これはRHEL4上にありました。後のバージョンのRPMはより多くの圧縮オプションをサポートしているようです。しかし、もう一度、あなたが望むものは、上記があなたが必要とするものでなければなりません。

+0

は、誰かがFedora 20またはRHEL7でこれを検証するのを見たいと思う。 – mxmader

+2

これらは 'xz'をサポートすべきです - [here](http://fedoraproject.org/wiki/Features/XZRpmPayloads)を参照してください。 –

3

確認してくださいファイルは/ usr/libに/ rpmのビルドマシンで/マクロ、(パス内のファイル多分差分)、それはそこに圧縮方法のトータルサポートリストがあります。例えば:

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 

ここでAaronが言ったように、普遍的にここに設定したり、あなたのprojのために特別に設定することができます。仕様。

-2

私はRHEL 6.6で "%define _binary_payload w9.xzdio"を使用しました。私が理解しているように、RHEL 6で使用されるデフォルトの圧縮ツールはxzですが、デフォルトの圧縮レベルは2であるように見えますが、7がxzのデフォルトになっています。私はそれを9まで蹴って、いくつかの巨大なRPMは653MBから439MBになりました。私はデフォルトの圧縮に比べて合計1ギガバイトを節約できました。

+1

これは上記の2014年9月のコメントに記載されています。 –

関連する問題