我正在尝试为 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
将修复您的错误。 (只是其中之一!)