왜
%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