rpmbuild设置错误的文件所有权说:root:root(错误的所有者/组构建:用户)

问题描述:

我正在使用RPM创建一组文件和目录,每个RPM都有不同的文件/目录权限集。我创建了一个spec文件,它构建了这个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身份:而不是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 

请注意:的insite1:insite1用户和组将出现在目标机器事先的RPM安装,这是不存在的RPM构建机器的东西,因为没有理由让我创建它们。

增加:我观察到的,它会开始安装所有文件和目录精细具有适当权限,在具有用户和本组的目标机(insite1:insite1),然而目录DIR1,DIR2,和dir3仍然设置为根:根但0755,我期待它是insite1:insite1基于%defattr设置。 是不是没有办法设置默认的目录权限?

当你把%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” 的存在。你可以使用这个%前段代码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