systemd即為system daemon,是Linux下的一種init軟件,由Lennart Poettering帶頭開發,并在LGPL 2.1及其后續版本許可證下開源發布,開發目標是提供更優秀的框架以表示系統服務間的依賴關系,并依此實現系統初始化時服務的并行啟動,同時達到降低Shell的系統開銷的效果,最終代替現在常用的System V與BSD風格init程序。systemd采用了Socket激活式與總線激活式服務,以提高相互依賴的各服務的并行運行性能;用Cgroups代替PID來追蹤進程,以此即使是兩次fork之后生成的守護進程也不會脫離systemd的控制。
軟件簡介
systemd這一名字源于unix中的一個慣例:在Unix中常以“d”作為系統守護進程(英語:daemon,亦稱后臺進程)的后綴標識。除此以外,systemd亦是借代英文術語D體系,而這一術語即是用于描述一個人具有快速地適應環境并解決困難的能力。
與多數發行版使用的System V風格init相比,systemd采用了以下新技術:
從設計構思上說,由于systemd使用了cgroup與fanotify等組件以實現其特性,所以只適用于Linux。有鑒于此,考慮到kFreeBSD分支的軟件源無法納入systemd,為與其他分支保持一致,Debian開發者盡力避免納入systemd。但Lennart Poettering本人對此并不在意,并稱“Debian GNU/kFreeBSD不過是玩具系統”。注意:debian8開始支持systemd作為默認init。
systemd已納入眾多Linux發行版的軟件源中,以下簡表:
除此以外,systemd已由Lennart Poettering提請納入GNOME3.2的外部依賴關系列表,而這意味著所有使用GNOME的發行版都應該使用systemd,最低限度來說也必須將其作為配置選項之一。
自2015年以來,大多數Linux發行版已經采用了systemd,取代了其他init系統,如SysV init。systemd受到采用的發行版的開發人員和用戶的贊揚,因為它為Linux領域多年存在的問題提供了穩定、快速的開箱即用解決方案。systemd的批評者認為它存在使命膨脹和膨脹的問題;后者影響了其他軟件(如GNOME桌面),增加了對systemd的依賴性,降低了它與其他類Unix操作系統的兼容性,并使系統管理員難以集成替代解決方案。人們也對Red Hat及其母公司IBM控制Linux上的init系統一事表示擔憂。批評者還認為systemd的復雜性導致了更大的攻擊面,降低了平臺的整體安全性。
systemd的配置完全是通過純文本文件進行的,其中每個守護進程的初始化指令記錄在一個稱為“單元文件”的配置文件中,使用了一種聲明性語言,取代了傳統的每個守護進程啟動shell腳本。單元文件類型包括.service、.socket、.device、.mount、.automount、.swap、.target、.path、.timer、.snapshot、.slice和.scope等。
systemd不僅是init守護進程的名稱,還指的是圍繞它的整個軟件包,包括了journald、logind和networkd等守護進程,以及許多其他低級組件。systemd并行執行其啟動序列的元素,理論上比傳統的啟動序列方法更快。對于進程間通信(IPC),systemd使Unix域套接字和D-Bus對運行的守護進程可用。systemd的狀態也可以保存在快照中以供將來調用。
systemd的設計引發了自由軟件社區內的爭議。批評者認為systemd過于復雜,不斷出現功能膨脹,認為其架構違反了Unix哲學。人們還擔心它形成了一套相互依賴的系統,因此發行版維護者幾乎沒有選擇,只能采用systemd,因為越來越多的用戶空間軟件依賴于其組件,這與另一個由Lennart Poettering開發的項目PulseAudio創建的問題類似。
在2012年的一次采訪中,Slackware的領導Patrick Volkerding對systemd的架構表示了保留意見,他認為其設計違反了Unix哲學,即由相互連接的實用程序組成,具有狹義的功能。截至2018年8月,Slackware不支持或使用systemd,但Volkerding并沒有排除切換到它的可能性。
2013年1月,Lennart Poettering在一篇名為“最大的謠言”的博客文章中試圖解決有關systemd的擔憂。2014年2月,musl的Rich Felker認為PID 1太特殊,不應負擔額外的責任,他認為PID 1只應負責啟動其余的init系統和清理僵尸進程,systemd增加的額外功能可以在其他地方提供。
發展歷程
Lennart Poettering 和 Kay Sievers 是當時為 Red Hat 工作的軟件工程師,他們最初開發了 systemd,他們在 2010 年啟動了一個項目來取代 Linux 的傳統 System V init。 2010 年 4 月,Poettering 發表了一篇題為“重新思考 PID 1”的博客文章,介紹了后來成為 systemd 的實驗版本。他們試圖在幾個方面超越init守護進程的效率。他們希望改進用于表達依賴關系的軟件框架,允許在系統啟動期間并發或并行完成更多處理,并減少 殼層 的計算開銷。
2011 年 5 月,Fedora Linux 取代了 Upstart,成為第一個默認啟用 systemd 的主要 Linux 發行版。當時的理由是,systemd 在啟動過程中提供了廣泛的并行化、更好的流程管理以及總體上更健全的、基于依賴關系的系統控制方法。
2012 年 10 月,Arch Linux 將 systemd 設為默認值,從 SysVinit 切換而來。自2012年8月以來,開發人員一直在爭論,并得出結論,它比SysVinit更快,功能更多,并且維護后者不值得在補丁中付出努力。他們中的一些人認為,對 systemd 實現的批評不是基于軟件的實際缺點,而是 Linux 社區的一部分對 Lennart 的厭惡和對變革的普遍猶豫。具體來說,一些關于 systemd 沒有用 bash 編程、它比 SysVinit 更大、更廣泛、使用 D-bus 以及日志的可選磁盤格式的抱怨被程序員視為優勢。
在2013年10月到2014年2月之間,Debian 技術委員會在 Debian 郵件列表上進行了長時間的辯論,討論了在 Debian 8 中使用哪個 init 系統作為默認系統,并最終決定支持 systemd。這場辯論被廣泛宣傳,在做出決定之后,這場辯論在 Debian 郵件列表上繼續進行。2014 年 2 月,在 Debian 做出決定后,Mark Shuttleworth 在他的博客上宣布,Ubuntu 將效仿 systemd,放棄自己的 Upstart。
2014 年 11 月,Debian 開發者 Joey Hess、Debian 技術委員會成員 Russ Allbery和 Ian Jackson 以及 systemd 軟件包維護者 Tollef Fog Heen辭職。這四個人都在公開的 Debian 郵件列表和個人博客上證明了他們的決定是合理的,因為他們暴露在 Debian 和 FOSS 社區內正在進行的 systemd 集成爭議中,這使得定期維護幾乎是不可能的。
2015 年 8 月,systemd 開始提供登錄 shell,可通過 machinectl shell 調用。
2016 年 9 月,發現了一個安全漏洞,該漏洞允許任何非特權用戶對 systemd 執行拒絕服務攻擊。musl的開發者Rich Felker表示,這個bug揭示了一個重大的“系統開發設計缺陷”。2017 年,在 systemd 中發現了另一個安全漏洞 CVE-2017-9445,該漏洞“允許惡意 DNS 服務器”中斷服務“。 2017年晚些時候,Pwnie Awards授予作者Lennart Poettering“最蹩腳的供應商響應”獎,以表彰他對漏洞的處理。
參考資料 >