23

ジオサーバー用のいくつかのマップファイルを内部rpmパッケージにパックしようとしています。ビルド部分の場合、これはファイルをコピーするためだけのものです。これは期待どおりに機能すると思います。しかし、これらの20GBの画像をパックするには非常に長い時間がかかります。

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

助言がありますか?

4

4 に答える 4

23

私は今日いくつかのRPMのものを扱っていましたが、偶然にyaの答えに出くわしました!

これらをspecファイルに入れます:

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

それはまだ使用しますgzipが、レベルに渡す-0だけで、保存する必要があります。私のRPMでは、21MBから76MBに増加したので、これがあなたの答えであると確信しています。

ところで、私はmacroファイルの1つで、実行することもできbzdio、から任意の数09使用できることを発見しましたbzip2。これはRHEL4にありました。RPMの新しいバージョンは、より多くの圧縮オプションをサポートしているようです。しかし、繰り返しますが、あなたが望むもののために、上記はあなたが必要とするものでなければなりません。

于 2012-04-21T01:28:10.313 に答える
6

ビルドマシンのファイル/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

したがって、ここでアーロンが言ったように、ここでユニバーサル用に設定することも、プロジェクト専用に設定することもできます。スペック

于 2014-09-16T07:45:11.883 に答える
0

RHEL 6.6で「%define_binary_payloadw9.xzdio」を使用しました。私が理解しているように、RHEL 6で使用されるデフォルトの圧縮ツールはxzですが、7がxzのデフォルトであると想定されているにもかかわらず、デフォルトの圧縮レベルは2のように見えます。私はそれを9までキックし、いくつかの巨大なRPMは653MBから439MBになりました。デフォルトの圧縮よりも合計1ギガバイト節約できました。

于 2015-11-05T17:13:18.540 に答える
0

AntがSpringBootLoaderを使用して実行可能なJarRPMを構築しているときに、同じ問題が発生しました。

原因: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を構築するための私の解決策は、再パックを無効にすることでした。スペックファイルにマクロ定義を設定しても、それはできませんでした。

これをスペックファイルに追加することは私にとってうまくいったことでした:

#Disable jar unpacking
%define __jar_repack 0

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

この問題にも焦点を当てるのを手伝ってくれた以前のポスターに感謝します。

エリオン

于 2018-12-13T22:27:43.340 に答える