Как использовать rpmbuild для создания пакета rpm, если файл не найден или есть ошибки прав доступа?

Как использовать rpmbuild для создания пакета rpm, если файл не найден или есть ошибки прав доступа?

Я пытаюсь создать файл RPM для утилиты wget. Обе мои попытки (с sudo и без sudo) использовать команду rpmbuild не приводят к созданию файла .rpm.

Я запускаю команду "sudo rpmbuild", чтобы использовать файл спецификации. Но получаю следующие ошибки:

ошибка: Файл не найден: /root/rpmbuild/BUILDROOT/wget-1.19-1.x86_64/usr/local/bin/wget ошибка: Файл не найден: /root/rpmbuild/BUILDROOT/wget-1.19-1.x86_64/usr/local/share/man/man1/wget.1

Если я вручную создаю пути к каталогам и вручную копирую файлы, то в дальнейшем у меня возникают другие проблемы. Я думаю, что что-то не так, если команда rpmbuild ожидает, что ключевые файлы будут в указанных выше местах.

Я читал, что рекомендуется не использовать sudo. Когда я не использую sudo, команда rpmbuild ( rpmbuild -v -bb --clean SPECS/wget.spec) показывает это:

Выполнение(%prep): /bin/sh -e /var/tmp/rpm-tmp.NiuIFV + umask 022 + cd /home/ec2-user/mywget/BUILD + cd /home/ec2-user/mywget/BUILD + rm -rf wget-1.19 rm: невозможно удалить 'wget-1.19/po/[email protected]': Отказано в доступе rm: невозможно удалить 'wget-1.19/po/zh_CN.po': Отказано в доступе rm: невозможно удалить 'wget-1.19/po/id.gmo': Отказано в доступе rm: невозможно удалить 'wget-1.19/po/gl.gmo': Отказано в доступе ...

Я вижу другие строки "rm cannot remove ... Permission denied". Я ожидал, что команда rpmbuild сработает. Я изменил права доступа к папке wget-1.19 на 777 (через sudo chmod), при этом владелец и группа идентичны пользователю, запустившему команду rpmbuild. Проблема все еще осталась.

Что можно сделать, чтобы создать RPM-пакет утилиты wget?

# This is a sample spec file for wget

%define _topdir     /home/ec2-user/mywget
%define name            wget 
%define release     1
%define version     1.19
%define buildroot %{_topdir}/%{name}-%{version}-root

BuildRoot:  %{buildroot}
Summary:        GNU wget
License:        GPL
Name:           %{name}
Version:        %{version}
Release:        %{release}
Source:         %{name}-%{version}.tar.gz
Prefix:         /usr
Group:          Development/Tools

%description
The GNU wget program downloads files from the Internet using the command-line.

%prep
%setup -q

%build
./configure
make

%install
make install prefix=$RPM_BUILD_ROOT/usr

%files
%defattr(-,root,root)
/usr/local/bin/wget

%doc %attr(0444,root,root) /usr/local/share/man/man1/wget.1

Вышеприведенный код был изменен, но в значительной степени основан на примере файла спецификации здесь:https://www.ibm.com/developerworks/library/l-rpm1/index.html

решение1

Эта ошибка:

ошибка: Файл не найден: /root/rpmbuild/BUILDROOT/wget-1.19-1.x86_64/usr/local/bin/wget

означает, что вы указали этот файл в разделе %files:

%files
/usr/local/bin/wget

так что rpmbuild ожидает этот файл в пути $RPM_BUILD_ROOT/usr/local/bin/wget, но его там нет. Отсюда и эта ошибка. Для страницы man все наоборот.

Вы можете запустить rpmbuild -bi, который остановится сразу после %installфазы, и проверить содержимое /root/rpmbuild/BUILDROOT/wget-1.19-1.x86_64/, куда make installна самом деле помещены файлы.

япредполагатьчто либо

%install
make install prefix=$RPM_BUILD_ROOT/usr/local

или

%files
%defattr(-,root,root)
/usr/bin/wget
%doc %attr(0444,root,root) /usr/share/man/man1/wget.1

исправлю вашу ошибку. (только одна из таких!)

Связанный контент