ファイルが見つからない、または権限エラーがある場合、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 パスにこのファイルがあることを期待していますが、そこにはありません。そのため、このエラーが発生します。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

エラーを修正します。(そのうちの 1 つだけ!)

関連情報