2017-02-28 67 views
0

我想一個init腳本,以便只需鍵入它的名字運行從終端程序添加到我的RPM,還有我感到困惑的一兩件事,那就是: - 這些文件位於哪裏:pre,post,preun,postun,它們是在添加行%pre之後直接寫入spec文件中的。如何添加一個init腳本到我的RPM

但我無法通過以下鏈接找到一個解決方案: -

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

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

更新============================================== ================= 我這樣做在CentOS 6.8,這裏是我創建至今的規範文件: -

# 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 <[email protected]> 1.0-1 
- First Build 
EOF 

,但仍然困惑,怎麼辦我只需輸入其名稱即可從終端啓動該程序。

+0

會感謝所有幫助... – shahenshah

回答

0

你的意思是SysV初始化文件?還是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會有一點不同的路徑,並在後期%*和%preun不同的片段。

+0

好吧,意思是init.d中RHL下debian下和systemD使用? – shahenshah

+0

我有我已經蝕(CentOS的)編譯的二進制,我想創建一個RPM安裝二進制,我要我的RPM做的是,放置到位的二進制文件和配置文件,它在做精絕,但我需要的是,能夠通過輸入名稱來運行該二進制文件的能力,無論我在哪個目錄中。所以如果應用程序名稱是xyz,我想在終端的任何位置寫入xyz並執行xyz程序。提前致謝。對不起,我並不知道我需要什麼,因爲我是linux新手。 – shahenshah

+0

Centos6和「Debian stable」使用SYSV init,Centos 7和「Debian testing」使用SystemD。我不確定你的目標。 – msuchy

相關問題