2016-05-30 7 views
0

Я создаю кучу файлов и каталогов на целевой машине с использованием RPM, каждый из которых имеет другой набор разрешений файла/dir. Я создал файл спецификации, который создает этот RPM. Файл спецификации выглядит следующим образом:rpmbuild установка неправильного права собственности файла root: root (неправильный владелец/группа: пользователи)

Name:   testMultipleFiles 
Version:   1.0 
Release:   2 
Summary:   Demo how to package multiple files 
Group:   DCCA Deployment 
License:   GPLv2 
Source:   testMultipleFiles.tar.gz 
BuildRoot:  %{_tmppath}/%{name}-%{version}-build 
AutoReqProv: on 

%description 

Authors: 
-------- 
    Name Raj Kumar Sanpui 
%prep 
%setup -q 

%build 

%install 
mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir1 
mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir2 
mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir3 
mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir4 

mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir5 
mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir6 
mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir7 

mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir8 
mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir9 
mkdir -p $RPM_BUILD_ROOT/opt/insiteone/dir10 

install file1.sh $RPM_BUILD_ROOT/opt/insiteone/dir1 
install file2.sh $RPM_BUILD_ROOT/opt/insiteone/dir2 
install file3.sh $RPM_BUILD_ROOT/opt/insiteone/dir3 
install file4.sh $RPM_BUILD_ROOT/opt/insiteone/dir4 

install file5.sh $RPM_BUILD_ROOT/opt/insiteone/dir5 
install file6.sh $RPM_BUILD_ROOT/opt/insiteone/dir6 


%clean 
rm -rf $RPM_BUILD_ROOT 

%post 

%postun 


%files 
%defattr(644,insite1,insite1,0755) 
/opt/insiteone/dir1/file1.sh 
/opt/insiteone/dir2/file2.sh 
/opt/insiteone/dir3/file3.sh 

%attr(644,insite1,insite1)/opt/insiteone/dir4/file4.sh 
%attr(644,insite1,insite1)/opt/insiteone/dir5/file5.sh 
%attr(644,insite1,insite1)/opt/insiteone/dir6/file6.sh 

%dir %attr(777,insite1,insite1)/opt/insiteone/dir4 
%dir %attr(700,insite1,insite1)/opt/insiteone/dir5 
%dir %attr(644,insite1,insite1)/opt/insiteone/dir6 
%dir %attr(640,insite1,insite1)/opt/insiteone/dir7 
%dir %attr(600,insite1,insite1)/opt/insiteone/dir8 
%dir %attr(744,insite1,insite1)/opt/insiteone/dir9 
%dir %attr(644,insite1,insite1)/opt/insiteone/dir10 

Однако, когда я построить этот RPM, нет никаких ошибок и сборка прошла успешно, но журнал сборки говорит:

Checking permissions and ownerships - using the permissions files 
     /tmp/Check.perms.gv6tJD 
setting /var/tmp/testMultipleFiles-1.0-build/ to root:root 0755. (wrong owner/group build:users) 
setting /var/tmp/testMultipleFiles-1.0-build/opt to root:root 0755. (wrong owner/group build:users) 

, что означает, что устанавливает root: root вместо insite1: insite1 как пользователь и группа.

Вот полный журнал строительства.

[email protected]:~/rpmbuild/SPECS> rpmbuild -bb testmulti.spec 
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.14760 
+ umask 022 
+ cd /home/build/rpmbuild/BUILD 
+ cd /home/build/rpmbuild/BUILD 
+ rm -rf testMultipleFiles-1.0 
+ /usr/bin/gzip -dc /home/build/rpmbuild/SOURCES/testMultipleFiles.tar.gz 
+ tar -xf - 
+ STATUS=0 
+ '[' 0 -ne 0 ']' 
+ cd testMultipleFiles-1.0 
++ /usr/bin/id -u 
+ '[' 1001 = 0 ']' 
++ /usr/bin/id -u 
+ '[' 1001 = 0 ']' 
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w . 
+ exit 0 
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.14760 
+ umask 022 
+ cd /home/build/rpmbuild/BUILD 
+ /bin/rm -rf /var/tmp/testMultipleFiles-1.0-build 
++ dirname /var/tmp/testMultipleFiles-1.0-build 
+ /bin/mkdir -p /var/tmp 
+ /bin/mkdir /var/tmp/testMultipleFiles-1.0-build 
+ cd testMultipleFiles-1.0 
+ exit 0 
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.14760 
+ umask 022 
+ cd /home/build/rpmbuild/BUILD 
+ cd testMultipleFiles-1.0 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir1 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir2 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir3 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir4 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir5 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir6 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir7 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir8 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir9 
+ mkdir -p /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir10 
+ install file1.sh /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir1 
+ install file2.sh /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir2 
+ install file3.sh /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir3 
+ install file4.sh /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir4 
+ install file5.sh /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir5 
+ install file6.sh /var/tmp/testMultipleFiles-1.0-build/opt/insiteone/dir6 
+ /usr/lib/rpm/brp-lib64-linux 
[email protected]: if you find problems with this script, drop me a note 
+ RPM_BUILD_ROOT=/var/tmp/testMultipleFiles-1.0-build 
+ export RPM_BUILD_ROOT 
+ test -x /usr/sbin/Check -a 1001 = 0 -o -x /usr/sbin/Check -a '!' -z /var/tmp/testMultipleFiles-1.0-build 
+ echo 'I call /usr/sbin/Check...' 
I call /usr/sbin/Check... 
+ /usr/sbin/Check 
Checking permissions and ownerships - using the permissions files 
     /tmp/Check.perms.gv6tJD 
setting /var/tmp/testMultipleFiles-1.0-build/ to root:root 0755. (wrong owner/group build:users) 
setting /var/tmp/testMultipleFiles-1.0-build/opt to root:root 0755. (wrong owner/group build:users) 
+ /usr/lib/rpm/brp-compress 
+ /usr/lib/rpm/brp-symlink 
Processing files: testMultipleFiles-1.0-2 
Finding Provides: /usr/lib/rpm/find-provides testMultipleFiles 
Finding Requires: /usr/lib/rpm/find-requires testMultipleFiles 
Finding Supplements: /usr/lib/rpm/find-supplements testMultipleFiles 
Requires(interp): /bin/sh /bin/sh 
Requires(rpmlib): rpmlib(PayloadFilesHavePrefix) <= 4.0-1 rpmlib(CompressedFileNames) <= 3.0.4-1 
Requires(post): /bin/sh 
Requires(postun): /bin/sh 
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/testMultipleFiles-1.0-build 
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/testMultipleFiles-1.0-build 
Wrote: /home/build/rpmbuild/RPMS/x86_64/testMultipleFiles-1.0-2.x86_64.rpm 
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.14760 
+ umask 022 
+ cd /home/build/rpmbuild/BUILD 
+ cd testMultipleFiles-1.0 
+ rm -rf /var/tmp/testMultipleFiles-1.0-build 
+ exit 0 

Обратите внимание: The insite1: insite1 пользователя и группы будут присутствовать в целевой машине заранее, установлен RPM, и это не то, что присутствует в RPM сборки машины, так как нет никакой причины для меня создайте их.

Дополнение я заметил, он идет вперед и устанавливает все файлы и каталоги, мелкие с соответствующими разрешениями, в целевой машине, которая имеет имя пользователя и группу, присутствующие (insite1: insite1) однако каталоги dir1, dir2 и dir3 все еще заданы как root: root, но 0755, я ожидал, что он будет insite1: insite1 на основе %defattr set. Разве нет способа установить права доступа по умолчанию?

ответ

2

Когда вы кладете в %files:

/opt/insiteone/dir1/file1.sh 

Это означает, что в оборотах в минуту получить только file1.sh. И defattr применяется только к этому файлу. Конечно, файл имеет какой-то путь. Поэтому, если путь не существует, он создается. С текущим пользователем (обычно root).

Так что вы либо должны сказать:

%files 
/opt/insiteone/dir1 

который будет принимать dir1 и все, что в нем (рекурсивно). Или:

%files 
%dir /opt/insiteone/dir1 
/opt/insiteone/dir1/file1.sh 

BTW правильный пакет должен проверить, если пользователь и группа «insite1» существует. Вы можете сделать это, используя этот% pre snippet https://fedoraproject.org/wiki/Packaging:UsersAndGroups?rd=Packaging/UsersAndGroups#Dynamic_allocation

+0

Спасибо, что частично решает проблему: 'dir1',' dir2' и 'dir3' теперь устанавливаются с' insite1: insite1', но при создании такой же ошибки приходит: ' установка /var/tmp/testMultipleFiles-1.0-build/ для root: root 0755. (неправильная сборка/группа: пользователи) ' – kingsmasher1

 Смежные вопросы

  • Нет связанных вопросов^_^