2012-02-15 137 views
19

我嘗試在內部rpm包中爲我們的geoserver打包一些映射文件。對於構建部分,這只是爲了複製文件。我認爲這可以按預期工作。但是要打包這些20GB的圖像需要很長的時間。rpmbuild更改壓縮格式

我讀過rpm在內部壓縮數據,這可以用幾種不同的壓縮算法來完成。但是,我不知道我的rpm可以選擇哪種壓縮方式,以及如何影響這一點。我找不到rpmbuild命令的任何選項,也不能找到spec文件,也不能找到我可以列出的一般rpm選項。在rpm.org上,我沒有進一步的想法。

我使用的spec文件看起來像:

%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這樣的:

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'會壓縮手冊頁。 – 2012-04-11 00:27:39

+0

由於RPM比提供的輸入數據小得多,所以我很確定那裏的所有數據都是壓縮的。我甚至想到了包含在RPM中的zip壓縮文件(在我的情況下是jar文件)將被再次壓縮,所以從RPM安裝的jar與輸入相比是不同的(即使它的內容是相同的).. – mkraemerx 2012-04-13 06:41:31

+0

好的,我應該以「唯一的用戶可控壓縮」開頭,然後......;) – 2012-04-18 01:01:19

回答

18

我今天正在使用一些RPM的東西,並無意中偶然發現了你的答案!

spec文件把這些:

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

這仍將使用gzip但它傳遞-0的水平,這應該只是商店。在我的RPM上,它從21MB增長到76MB,所以我很確定這是你的答案!

BTW,我發現,在macro文件中的一個 - 你也可以做bzdio和使用bzip2任何數量從09。這是在RHEL4上;更高版本的RPM似乎支持更多的壓縮選項;但是,再次,爲了你想要的,以上應該是你需要的。

+0

希望有人在Fedora 20或RHEL7上驗證此功能。 – mxmader 2014-09-16 13:27:41

+2

那些應該支持'xz' - 參見[here](http://fedoraproject.org/wiki/Features/XZRpmPayloads)。 – 2014-09-16 23:38:24

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月以前的評論中注意到的。 – 2015-11-06 01:39:35