当出现文件未找到或权限错误时,如何使用rpmbuild来制作rpm包?

当出现文件未找到或权限错误时,如何使用rpmbuild来制作rpm包?

我正在尝试为 wget 实用程序创建 RPM 文件。我使用 rpmbuild 命令的两次尝试(使用 sudo 和不使用 sudo)都未能创建 .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/[电子邮件受保护]': 权限被拒绝 rm: 无法删除 'wget-1.19/po/zh_CN.po': 权限被拒绝 rm: 无法删除 'wget-1.19/po/id.gmo': 权限被拒绝 rm: 无法删除 'wget-1.19/po' /gl.gmo':权限被拒绝...

我看到其他“rm 无法删除...权限被拒绝”行。我希望 rpmbuild 命令能够工作。我已将 wget-1.19 文件夹的权限更改为 777(通过 sudo chmod),其所有者和组与运行 rpmbuild 命令的用户相同。我仍然遇到问题。

如何创建 wget 实用程序的 RPM 包?

# 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 路径中,但它不在那里。因此出现这个错误。手册页反之亦然。

您可以运行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

将修复您的错误。 (只是其中之一!)

相关内容