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

관련 정보