因為要給特殊的虛擬機關聯文件指定selinux標簽,而默認的Libvirt沒有這個功能,所以需要修改LIbvirt源代碼,重新編譯安裝Libvirt,而手動編譯安裝的LIbvirt,沒有辦法使用systemctl管理libvirtd服務,只能通過libvirtd -d的方式手動啟動。然而,手動啟動的Libvirtd服務並不符合開發規范,所以只能手動把libvirtd.service添加到systemctl管理。
這就要詳解下systemctl管理程序了
一、systemctl介紹
systemctl 是一個systemd工具,主要負責控制systemd系統和服務管理器,而Systemd是一個系統管理守護進程、工具和庫的集合,用於取代System V初始進程,當前redhat系列的Linux發行版都是采用這種方式。Systemd的功能是用於集中管理和配置類UNIX系統。而我們要通過systemctl管理服務原因之一也是想讓系統進程啟動我們的服務,這在標簽機制中涉及到標簽的繼承問題,這里不在深入。
二、通過systemctl管理服務
通過systemctl管理服務簡單高效,本來還是想深入分析寫勒,但是突然發現一個大牛的博客,這里我就不畫蛇添足了,需要的可以參考:
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
重點寫下通過systemctl管理libvirtd的具體步驟:
1、systemctl管理的每個單元都有一個文件與之對應,以sshd服務來講,對應的就是sshd.service,存在於/usr/lib/systemd/system/文件夾下,而在/etc/systemd/system/文件夾下有該文件的軟連接,表明這是自動啟動的。為了簡便,我是從別處通過rpm包安裝的libvirt機器上拷貝其libvirtd.service文件到本機的/etc/systemd/system/文件夾下。
文件內容如圖所示:

其中的大部分內容不需要改動,就是下面的文件的路徑需要改,因為手動編譯安裝的libvirt安裝路徑在/usr/local/sbin/libvirtd
另外需要注意的是上面Unit單元里面after表示該服務以來上面的服務,這里libvirt-guest.service在手動編譯安裝的版本里面沒有,需要我們自行安裝,其具體作用不詳。沒有libvirt-client.service,libvirt仍然可以正常工作可以看出這個並不影響Libvirt基本功能,其所作的應該是管理類的工作。沒有libvirt-client.service通過systemctl 沒辦法正常管理libvirtd.service
2、復制配置文件/etc/sysconfig/libvirtd文件到本機同等目錄
3、安裝libvirt-guests
yum install libvirt-guests
4、執行函數重新載入
systemctl damon-reload
5、測試
systemctl status libvirtd.service

systemctl start libvirtd.service

systemctl restart libvirtd.service

systemctl enable libvirtd.service

查看狀態:

