なぜ
%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