Подтвердить что ты не робот

Формат сжатия 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

Любые предложения?

4b9b3361

Ответ 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 гигабайт по умолчанию.