【问题标题】:rpmbuild change compression formatrpmbuild 更改压缩格式
【发布时间】:2012-03-06 17:27:27
【问题描述】:

我尝试在内部 rpm 包中为我们的地理服务器打包一些地图文件。对于构建部分,这只是复制文件。我认为这按预期工作。但是打包这 20GB 的图像需要很长时间。

我读到 rpm 会在内部压缩数据,这可以通过几种不同的压缩算法来完成。但是,我不知道我的 rpm 选择哪种压缩方式以及如何影响它。我找不到 rpmbuild 命令的任何选项,也找不到 specfile 的选项,也找不到我可以用rpmbuild --showrc 列出的常规 rpm 选项。

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

我使用的规范文件如下所示:

%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

有什么建议吗?

【问题讨论】:

  • 我知道的唯一压缩是/usr/lib/rpm/brp-compress 将压缩手册页。
  • 由于 RPM 比提供的输入数据小得多,我很确定那里的所有数据都被压缩了。我什至发现 RPM 中包含的 zip 档案(在我的情况下为 jar 文件)将被再次压缩,因此从 RPM 安装的 jar 与输入相比是不同的(即使它的内容相同)..
  • 好的,我应该以“唯一的用户可控压缩”作为开头... ;)

标签: compression rpm rpmbuild rpm-spec


【解决方案1】:

我今天正在处理一些 RPM 的东西,无意中为你找到了答案!

将这些放入您的spec 文件中:

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

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

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

【讨论】:

  • 希望有人在 Fedora 20 或 RHEL7 上对此进行验证。
  • 那些应该支持xz - 请参阅here
【解决方案2】:

请检查您的构建机器中的文件 /usr/lib/rpm/macros,(该文件可能在路径中存在差异),它有一个完整的压缩方法支持列表:例如:

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 所说,您可以在此处将其设置为通用,或专门为您的项目设置。规格。

【讨论】:

    【解决方案3】:

    我在 RHEL 6.6 上使用了“%define _binary_payload w9.xzdio”。据我了解,RHEL 6 中使用的默认压缩工具是 xz,但默认压缩级别似乎是 2,即使 7 应该是 xz 的默认值。我将它提高到 9,一些巨大的 RPM 从 653MB 变为 439MB。与默认压缩相比,我总共节省了 1 GB。

    【讨论】:

    • 我在 2014 年 9 月的评论中已注意到这一点。
    【解决方案4】:

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

    原因:java.lang.IllegalStateException:无法打开嵌套条目“BOOT-INF/lib/accessors-smart-1.2.jar”。它已经被压缩并且嵌套的jar文件必须在没有压缩的情况下存储。请检查用于创建可执行 jar 文件的机制

    我的 ant build 任务是这样的:

    <exec executable="rpmbuild"  failonerror="true"> 
      <env key="version" value="${fullversion}" /> 
      <arg value="-ba" /> 
      <arg value="--clean" />
      <arg value="${specfile}" />
    </exec>
    

    我用可运行的 JAR 构建 RPM 的解决方案是禁用重新打包,在规范文件上设置宏定义对我来说并没有这样做。

    将此添加到规范文件对我有用:

    #Disable jar unpacking
    %define __jar_repack 0
    

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

    感谢之前的发帖人也帮助关注这个问题。

    埃里昂

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2019-10-31
      相关资源
      最近更新 更多