我尝试在内部rpm包中为我们的地理服务器打包一些地图文件。对于构建部分,这只是复制文件。我认为这可以按预期工作。但要打包这20GB图像需要花费很长时间。
我已经读过rpm在内部压缩数据,这可以通过几种不同的压缩算法来完成。但是,我没有一个线索,我的转速选择压缩,以及我如何影响这一点。我找不到rpmbuild命令的任何选项,也没有为spec文件找到任何选项,也没有为rpmbuild --showrc
我对rpmbuild和specfiles不是很有经验,但在阅读了很多关于rpm.org的手册和教程后,我没有进一步的想法。
我使用的specfile看起来像:
%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 :(得分:19)
我今天正在使用一些RPM的东西,偶然发现了你的答案!
将这些内容放入spec
文件中:
%define _source_payload w0.gzdio
%define _binary_payload w0.gzdio
仍然会使用gzip
但是将-0
传递给一个应该存储的关卡。在我的RPM上,它使它从21MB增长到76MB,所以我很确定这是你的答案!
顺便说一句,我发现在其中一个macro
文件中,你也可以bzdio
以及从0
到9
的任何数字来使用bzip2
。这是在RHEL4上;更高版本的RPM似乎支持更多压缩选项;但同样,对于你想要的,上面应该是你需要的。
答案 1 :(得分:4)
请检查构建机器中的文件/ usr / lib / rpm / mac,(文件可能是路径中的差异),它有一个压缩方法的总支持列表:例如:
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所说的那样,你可以在这里设置它为通用,或专门为你的项目设置。规格。
答案 2 :(得分:1)
我遇到了同样的问题,Ant用Spring Boot Loader抱怨了这一点,构建了可运行的Jar RPM:
原因:java.lang.IllegalStateException:无法打开嵌套条目“ BOOT-INF / lib / accessors-smart-1.2.jar”。它已被压缩,嵌套的jar文件必须未经压缩地存储。请检查用于创建可执行jar文件的机制
我的蚂蚁构建任务是这样的:
<exec executable="rpmbuild" failonerror="true">
<env key="version" value="${fullversion}" />
<arg value="-ba" />
<arg value="--clean" />
<arg value="${specfile}" />
</exec>
我用可运行的JAR构建RPM的解决方案是禁用重新打包,在spec文件上设置宏定义对我来说不是这样做。
将其添加到规范文件中对我有用:
#Disable jar unpacking
%define __jar_repack 0
参考: https://bugzilla.redhat.com/show_bug.cgi?id=219731
感谢以前的海报,他们也帮助我们专注于这一问题。
Erion
答案 3 :(得分:-2)
我用过&#34;%define _binary_payload w9.xzdio&#34;在RHEL 6.6上。据我所知,RHEL 6中使用的默认压缩工具是xz,但默认压缩级别似乎是2,即使7应该是xz的默认值。我把它踢到了9,一些巨大的RPM从653MB上升到439MB。我能够在默认压缩下节省1千兆字节。