RPM安装后设置权限

use*_*928 4 rpm rpmbuild rpm-spec

我使用此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
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
Run Code Online (Sandbox Code Playgroud)

但安装后文件不可执行.我需要启动文件洞察目录树.反正有没有添加chmod命令洞察spec文件并在RPM安装后用它来设置权限?

Eta*_*ner 8

如果您愿意,可以添加chmod到某个%post部分,但这是解决问题的错误方法.

您应该确保在安装期间文件在buildroot中是可执行的,并且它们应该%defattr在RPM中保持这样(带有该条目)并且一旦安装(尽管该%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
Run Code Online (Sandbox Code Playgroud)

  • `%post` `chmod` 会很糟糕,因为由于多种原因,最大的原因是 `rpm -V` 会失败,说权限与 RPM DB 不匹配。 (2认同)
  • `root` 的 `777` 是一个巨大的安全漏洞 顺便说一句......你的构建日志中*可能*甚至会出现一个警告说“不!” (2认同)