當出現檔案未找到或權限錯誤時,如何使用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

將修復您的錯誤。 (只是其中之一!)

相關內容