rpmbuild простая копия файлов

Ищу кого-то, чтобы просто уточнить%install макрос, когда дело доходит до размещения файлов. Я создал RPM без ошибок, который должен просто брать файлы из buildroot и копировать их в / usr / lib. То, что у меня есть в файле SPEC для% install, следующее и основано наэта почта, Я думаю, этого будет достаточно, чтобы rpm скопировал файлы из buildroot в каталог / usr / lib.

Это то, что я пытался, и это строит:

%install
mkdir -p %{buildroot}/usr/lib
install -d %{buildroot}/usr/lib/

Переосмысливая, я полагаю, хорошо, давайте скажем rpm, куда я хочу скопировать файлы. ТАК Я попробовал это:

%install
mkdir -p %{buildroot}/usr/lib
cp %{buildroot}/usr/lib/ /usr/lib/

хорошо, что жалуется на то, что / usr / lib / местоположение не доступно для записи пользователю, я создаю rpm как на машине для сборки. Который у меня такое впечатление%install В разделе spec-файла должны быть инструкции о том, куда следует копировать файлы при установке rpm на конечном сервере. Я не хочу, чтобы он смотрел на локальную файловую систему для сервера сборки rpm. Хотя я хочу сказать, что RPM должен собираться, но он не должен завершаться ошибкой, пока не будет установлена ​​rpm, если я попытаюсь установить rpm как непривилегированный пользователь. Это не должно заботиться во время сборки. Я просто пытаюсь скопировать / извлечь некоторые файлы lib в / usr / lib на сервере, на котором я устанавливаю rpm.

Я предполагаю, что rpm создаст папку BUILDROOT на сервере, на котором я устанавливаю rpm, а затем скопирую содержимое из папки buildroot в указанное место назначения.

 Aaron D. Marasco23 июл. 2016 г., 16:50
Замечания:%install это раздел specfileinstall исполняемый файл в вашей системе, который похож наcp, но поддерживает разрешения и т. д.

Ответы на вопрос(1)

Решение Вопроса

%install раздел выполняется на вашем компьютере во время сборки вашего пакета. В этом разделе вы должны создать структуру файла в%{buildroot}, этоне Ваша задача скопировать его в конечный пункт назначения на клиентском компьютере.

Так что вы должны сделать что-то вроде:

%install
mkdir -p %{buildroot}/usr/lib
cp -a some-your-file-from-extracted-targz %{buildroot}/usr/lib/

и затем в разделе% files:

%files
/usr/lib/foobar.bin
/usr/lib/somedir/

Затем Rpm принимает все перечисленные файлы в%files раздел из% buildroot и поместит его в пакет.

 H-man16 сент. 2016 г., 16:05
Спасибо всем за информацию. По какой-то причине, когда я выполняю сборку rpm, он, похоже, ищет зависимости Perl. Опять же, все, что я сделал, это скомпилировал дистрибутив Perl, используя perbrew в произвольном месте, и после установки всех необходимых модулей Perl, используя cpanm. Я скопировал папку (т.е. tar -xzvf) и поместил этот файл в папку SOURCES. Запустите rpmbuild -bb SPEC_FILE, и он соберет rpm. При переходе к установке RPM он жалуется на отсутствие зависимостей Perl. Также я не указал "требовать" в файле спецификаций.
 H-man14 сент. 2016 г., 23:58
Что если это очень длинный список дистрибутивов Perl? Должен ли я перечислить все эти файлы? В основном я использовал PerlBrew для установки версии perl в пользовательском месте из операционной системы по умолчанию. Затем я скопировал файл. то есть perl-5.10.1.tgz и хотите просто распаковать его в / opt / custom / location / thats. Просто распакуйте файл tgz в определенном месте.
 msuchy15 сент. 2016 г., 14:14
Когда вы указываете каталог в% files, тогда rpmbuild включает этот каталог и все в нем. Таким образом, в приведенном выше примере даже файл / usr / lib / somedir / foo / bar будет включен. Или вы можете создать этот список (но, по возможности, избегайте этого). Например, см.github.com/rpm-software-management/mock/blob/devel/... github.com/rpm-software-management/mock/blob/devel/...

Ваш ответ на вопрос