Формат сжатия rpmbuild
Я пытаюсь собрать некоторые файлы карт для нашего геосервера во внутреннем пакете rpm. Для части сборки это просто для копирования файлов. Я думаю, что это работает так, как ожидалось. Но требуется очень много времени, чтобы упаковать эти 20 ГБ изображений.
Я читал, что 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
Любые предложения?
Ответы
Ответ 1
Сегодня я работал с некоторыми материалами RPM и случайно наткнулся на ответ за ya!
Поместите их в свой spec
файл:
%define _source_payload w0.gzdio
%define _binary_payload w0.gzdio
Это все равно будет использовать gzip
, но передайте его -0
для уровня, который следует просто сохранить. В моем RPM он увеличился с 21 до 76 МБ, поэтому я уверен, что это ваш ответ!
Кстати, я обнаружил, что в одном из файлов macro
вы также можете сделать bzdio
и любое число от 0
до 9
, чтобы использовать bzip2
. Это было на RHEL4; более поздние версии RPM, похоже, поддерживают больше возможностей сжатия; но опять же, за то, что вы хотите, выше должно быть то, что вам нужно.
Ответ 2
Пожалуйста, проверьте файл /usr/lib/rpm/macro на вашей машине сборки (файл может быть diff в пути), у него есть полный список поддерживаемых здесь методов сжатия: например:
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 default.
333 # "w7.lzdio" lzma-alone level 7, lzma default
334 #
335 #%_source_payload w9.gzdio
336 #%_binary_payload w9.gzdio
так вот, как сказал Аарон, вы можете установить его здесь для всеобщего или установить специально для своего проекта. спецификации.
Ответ 3
Я столкнулся с той же проблемой, когда Ant создавал работающий Jar RPM с Spring Boot Loader, жалуясь на это:
Причина: 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>
Мое решение для создания RPM с работающим JAR файлом состояло в том, чтобы отключить перепаковку, установив определения макросов в файле спецификации, но это не помогло мне.
Добавление этого в spec файл было тем, что сработало для меня:
#Disable jar unpacking
%define __jar_repack 0
Ссылка: https://bugzilla.redhat.com/show_bug.cgi?id=219731
Спасибо предыдущим постерам за помощь, чтобы сосредоточиться на проблеме тоже.
Erion
Ответ 4
Я использовал "% define _binary_payload w9.xzdio" на RHEL 6.6. Насколько я понимаю, инструмент сжатия по умолчанию, используемый в RHEL 6, - xz, но уровень сжатия по умолчанию, как представляется, равен 2, хотя 7 предполагается, что значение xz по умолчанию. Я поднял его до 9, а некоторые гигантские RPM пошли с 653 МБ до 439 МБ. Я смог сохранить в общей сложности 1 гигабайт по умолчанию.