rpmと脱脂

rpmと脱脂

なぜ

%files ram
%defattr(-,root,root,644)
%dir %attr(755, root, root) /usr/lib/ram/postd
/usr/lib/ram/postd/about
/usr/lib/ram/postd/local.conf
/usr/lib/ram/postd/local.init.conf
/usr/lib/ram/postd/param
%attr(755, root, root) /usr/lib/ram/postd/apply
%attr(755, root, root) /usr/lib/ram/postd/input
%attr(755, root, root) /usr/lib/ram/postd/query

作るみんな755ファイルですか?

-rwxr-xr-x. 1 kostyrev kostyrev   37 Aug 25 19:42 about
-rwxr-xr-x. 1 kostyrev kostyrev  160 Aug 25 19:42 apply
-rwxr-xr-x. 1 kostyrev kostyrev  548 Aug 25 19:42 input
-rwxr-xr-x. 1 kostyrev kostyrev 1178 Aug 25 19:42 local.conf
-rwxr-xr-x. 1 kostyrev kostyrev   61 Aug 25 19:42 local.init.conf
-rwxr-xr-x. 1 kostyrev kostyrev  183 Aug 25 19:42 param
-rwxr-xr-x. 1 kostyrev kostyrev    0 Aug 25 19:42 query

defattr明示的な設定がないファイルでは機能しませんかattr

ベストアンサー1

文法が間違っています。マクロは%defattr次のとおりです。

%defattr(<file mode>, <user>, <group>, <dir mode>)

だから:

%defattr(-,root,root,644)

これは、ファイルがインストールされたときにファイルモードを維持し、所有者をroot、グループをに設定し、root権限を設定することを意味します。目次到着する644。次のことができます。

%defattr(0644,root,root)

修正する

ここに例があります。使用しているよりも短いので、ここで議論するのは簡単ですが、どのように動作するかを示しているようです。アーカイブで次のファイルから始めた場合sotest-1.0.0.tar.gz

drwxrwxr-x lars/lars         0 2015-08-30 15:51 sotest-1.0.0/
-rwxr-xr-x lars/lars        28 2015-08-30 09:36 sotest-1.0.0/script1
-rw-rw-r-- lars/lars        16 2015-08-30 09:36 sotest-1.0.0/file1
-rw-rw-r-- lars/lars        14 2015-08-30 15:51 sotest-1.0.0/file2

そして次の仕様書:

Name:       sotest
Version:    1.0.0
Release:    1%{?dist}
Summary:    A test for StackOverflow
BuildArch:  noarch

License:    GPL
Source0:    %{name}-%{version}.tar.gz

%description
%{summary}

%package subpackage
Summary: A test subpackage

%description subpackage
A test subpackage

%prep
%setup -q

%build

%install

install -Dp -m 755 file1 %{buildroot}%{_libdir}/%{name}/file1
install -Dp -m 755 file2 %{buildroot}%{_sysconfdir}/%{name}
install -Dp -m 755 script1 %{buildroot}%{_bindir}/%{name}


%files
%defattr(0644, root, root)
%{_sysconfdir}/%{name}

%files subpackage
%defattr(0644, root, root)
%{_bindir}/%{name}
%{_libdir}/%{name}/file1

私はこの例があなたが使っているものに比べてとても簡単だと思います。

0644一度インストールすると、ファイルがSchemaを使用してインストールされていても、すべてがSchemaを持ちます0755。これは%defattr、マクロが明示的な権限を付与していないすべてのファイルに対してこれらの権限を使用するようにrpmbuildに指示するためです。

私が追加した場合:

%attr(0755, root, root) %{_bindir}/%{name}

次に、期待どおりにファイルのパターン0755を取得します。しかし、その他 この問題の解決策は、%install次のように正しい権限で何かをインストールするようにセクションを変更することです。

install -Dp -m 644 file1 %{buildroot}%{_libdir}/%{name}/file1
install -Dp -m 644 file2 %{buildroot}%{_sysconfdir}/%{name}
install -Dp -m 755 script1 %{buildroot}%{_bindir}/%{name}

その後、これを使用できます。

%files
%defattr(-, root, root)
%{_sysconfdir}/%{name}

%files subpackage
%defattr(-, root, root)
%{_bindir}/%{name}
%{_libdir}/%{name}/file1

これは、rpmにファイルがインストールされているモードを使用するように指示します(所有者とグループは変更)。これにより、個々のファイルに対して明示的なマクロを使用して複雑にする%files必要がなくなり、その部分が簡単になります。%attr

おすすめ記事