如何向RPM添加init脚本

时间:2017-02-28 07:42:05

标签: linux centos rpm specfiles

我想在我的RPM中添加一个init脚本,以便通过输入其名称从终端运行程序,还有一件我感到困惑的事情是: - 这些文件位于何处:pre,post,preun,postun,在添加行%pre等后直接写入spec文件。

我已通过以下链接,但我无法找到解决方案: -

https://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Systemd

https://fedoraproject.org/wiki/Packaging:Systemd?#Filesystem_locations

更新============================================== ================= 我是在CentOS 6.8上做的,这是我到目前为止创建的spec文件: -

# RPM package for xyz.
%define   __spec_install_post %{nil}
%define   debug_package %{nil}
%define   __os_install_post %{_dbpath}/brp-compress

Summary: XYZ program.
Name: xyz
Version: 1.0
Release: 1
License: GPL+
Group: Development/Tools

SOURCE0 : %{name}-%{version}.tar.gz
URL: https://wwwDOTxyzDOTcom/

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%description
%{summary}
%prep
%setup -q
%build
# Empty section.

%install
rm -rf %{buildroot}
mkdir -p  %{buildroot}
# in builddir
cp -a * %{buildroot}
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_bindir}/*

%changelog
* Mon Mar 6 2017  xyz <noemail@noemail.com> 1.0-1
- First Build
EOF

但仍然混淆了如何通过输入名称从终端启动程序。

1 个答案:

答案 0 :(得分:1)

你的意思是SYSV init文件?还是systemD单元文件?不同的逻辑,但没关系 - 最后它们都是文件。在不同的位置,但只是文件。

你必须这样做:

%{?systemd_requires}
BuildRequires: systemd

%install
cp -a path/in/your/targz/SOMESERVICE.service %{buildroot}%{_unitdir}/

%post
%systemd_post SOMESERVICE.service

%preun
%systemd_preun SOMESERVICE.service

%postun
%systemd_postun_with_restart SOMESERVICE.service

%files
%{_unitdir}/SOMESERVICE.service

对于SYSV,在%post *和%preun中会有一些不同的路径和不同的片段。