首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rpmbuild更改压缩格式

rpmbuild更改压缩格式
EN

Stack Overflow用户
提问于 2012-02-15 19:12:12
回答 4查看 12.8K关注 0票数 23

我尝试将geoserver的一些地图文件打包到一个内部rpm包中。对于构建部分,这只是复制文件。我认为这和预期的一样。但是打包这20 to的图像需要非常长的时间。

我读到过rpm对数据进行内部压缩,这可以通过几种不同的压缩算法来实现。但是,我不知道我的rpm选择哪种压缩,以及我如何影响这一点。我找不到用于rpmbuild命令的任何选项,也找不到specfile的任何选项,也找不到我可以用rpmbuild --showrc列出的常规rpm选项

我对rpmbuild和specfiles不是很有经验,但在阅读了大量关于rpm.org的手册页和教程后,我没有更多的想法。

我使用的specfile如下所示:

代码语言:javascript
复制
%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:

代码语言:javascript
复制
rpmbuild -bb --define "_topdir $TOP_DIR" --define "_gpg_name ourkey" --define "_signature gpg" --sign $TOP_DIR/SPECS/$SPEC_FILE_NAME $RPM_BUILD_PARAMETER

有什么建议吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-21 09:28:10

我今天正在处理一些RPM的东西,偶然发现了答案!

将以下内容放入spec文件中:

代码语言:javascript
复制
%define _source_payload w0.gzdio
%define _binary_payload w0.gzdio

它将仍然使用gzip,但传递一个级别的-0,它应该只是存储。在我的RPM上,它使它从21MB增长到76MB,所以我很确定这就是你的答案!

顺便说一句,我发现在其中一个macro文件中-你也可以使用bzdio和从09的任何数字来使用bzip2。这是在RHEL4上实现的;更高版本的RPM似乎支持更多的压缩选项;但同样,对于您想要的,以上内容应该是您所需要的。

票数 23
EN

Stack Overflow用户

发布于 2014-09-16 15:45:12

请检查构建机器中的/usr/lib/rpm/macros文件(该文件的路径可能不同),它包含压缩方法的总支持列表:例如:

代码语言:javascript
复制
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所说,您可以在此处将其设置为通用的,或者专门为您的项目设置的。规范。

票数 6
EN

Stack Overflow用户

发布于 2018-12-14 06:27:43

我在Ant构建一个可运行的Jar RPM时遇到了同样的问题,Spring Boot Loader抱怨道:

启动原因:启动:无法打开嵌套项‘-INF/lib/accessors-java.lang.IllegalStateException-1.2.jar’。它已经被压缩,并且嵌套的jar文件必须以不压缩的方式存储。请检查用于创建可执行jar文件的机制

我的ant构建任务是这样的:

代码语言:javascript
复制
<exec executable="rpmbuild"  failonerror="true"> 
  <env key="version" value="${fullversion}" /> 
  <arg value="-ba" /> 
  <arg value="--clean" />
  <arg value="${specfile}" />
</exec>

我使用可运行的JAR构建RPM的解决方案是禁用重新打包,在spec文件上设置宏定义对我没有帮助。

将这段代码添加到spec文件中对我来说很有效:

代码语言:javascript
复制
#Disable jar unpacking
%define __jar_repack 0

参考:https://bugzilla.redhat.com/show_bug.cgi?id=219731

感谢之前的帖子也帮助我们关注这个问题。

埃里昂

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9292243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档