在RPM安装后设置权限

在RPM安装后设置权限,rpm,rpmbuild,rpm-spec,Rpm,Rpmbuild,Rpm Spec,我使用这个规范文件来使用RPM文件 Name: pack-agent Version: 1.0 Release: 1%{?dist} Summary: Linux Agent installation script Group: Utilities License: license Source0: pack-agent-1.0.tar.gz BuildArch: x86_64

我使用这个规范文件来使用RPM文件

Name:           pack-agent
Version:        1.0
Release:        1%{?dist}
Summary:        Linux Agent installation script
Group:          Utilities
License:        license
Source0:        pack-agent-1.0.tar.gz
BuildArch:      x86_64
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%description

%prep
%setup -q -n opt

%build

%install
#install -m 0755 -d $RPM_BUILD_ROOT/agent
#cp -ap agent/* $RPM_BUILD_ROOT/agent/

install -m 0755 -d %{buildroot}/opt
#cp -a * %{buildroot}/agent
cp -a * %{buildroot}/opt

%clean
rm -rf $RPM_BUILD_ROOT

%files
/opt
%defattr(-,root,root,-)
%attr(777, root, root) /opt/agent/bin/karaf

%doc
%changelog

但安装后,这些文件不可执行。我需要启动文件目录树。是否有必要将chmod command insight添加到规范文件中,并在RPM安装后使用它设置权限?

如果需要,可以将
chmod
添加到
%post
部分,但这是解决问题的错误方法

在安装过程中,您应该确保这些文件在buildroot中是可执行的,并且在RPM中(使用
%defattr
条目)和安装后(尽管
%defattr
条目应该在
/opt
行的上方)它们应该是可执行的

或者,您可以使用
%defattr
宏和
%attr
宏,让RPM手动将特定权限应用于
%files
部分中的特定文件

有关指令的工作方式,请参见和

第二个链接中的示例:

%files
%attr(-, root, root) %doc README
%attr(4755, root, root) /usr/local/bin/cdp
%attr(-, root, root) /usr/local/bin/cdplay
%attr(-, root, rot) /usr/local/man/man1/cdp.1

我也推荐最后一段。将所有内容默认为合理的值,如644,然后将可执行文件设置为755。由于许多原因,
%post
chmod
将是不好的,最大的问题是
rpm-V
会失败,因为权限与rpm DB不匹配。您能告诉我如何编辑上一个解决方案的规范文件吗?请尝试
0755
而不是
777
,看看是否有效。但是就像我说的那样,你也可以只确保buildroot中的权限是正确的,然后在
%文件
部分中不指定任何权限,RPM将不处理它们。
777
by
root
是一个巨大的安全漏洞。。。您的构建日志中甚至可能会有一条警告:“不