我想在我的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
但仍然混淆了如何通过输入名称从终端启动程序。
答案 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中会有一些不同的路径和不同的片段。