systemd已經有10年的歷史了,但是Linux社群對它的感覺還沒有成熟,它現在和以前一樣具有分裂性。儘管許多主要的Linux發行版都使用它,但鐵桿反對者並沒有鬆懈。
開啟計算機電源後,硬體將引導,然後(根據計算機使用的引導扇區型別)執行主引導記錄(MBR)或執行統一可擴充套件韌體介面(UEFI)。最後一個動作是啟動Linux核心。
核心被載入到記憶體中,自我解壓並初始化。臨時檔案系統通常由名為initramfs或initrd的實用程式在RAM中建立。這允許確定和載入所需的驅動程式。這反過來允許使用者空間檔案系統載入並準備建立使用者空間環境。
使用者空間環境的建立由init程序處理,init程序是核心在使用者空間中啟動的第一個程序。它的程序ID(PID)為1。所有其他程序都是init程序的直接或間接子程序。
在systemd之前,init程序的主流預設值是對Unix系統V init的重寫。還有其他選擇,但systemvinit是大多數非Berkeley軟體發行版(BSD)派生髮行版的標準選項。因為它直接來自systemv Unix,Linux的精神祖先,許多人認為它是進行init的“官方方式”。
init程序啟動使作業系統以有意義的互動方式工作所需的所有守護程序和服務。這些守護程序處理諸如網路堆疊、啟用計算機內部的其他硬體以及提供引導螢幕之類的事情。
許多後臺程序在啟動後繼續執行。它們可以記錄事件資訊、在**或刪除裝置時監視硬體更改以及管理使用者登入。毫不奇怪,init系統還包括管理服務的特性。
我們可以使用ps來檢視PID為1的程序。我們將使用f(完整格式列表)和p(PID)選項:
ps -fp 1我們看到PID為1的過程是系統化的。在Manjaro-Linux上執行相同的命令會產生不同的結果。PID為1的程序被標識為/**in/init。快速檢視該檔案會發現它是指向systemd的符號連結:
ps -fp 1 ls -hl /**in/init透過對ps使用ppid(父程序ID)選項,我們可以看到systemd直接啟動了哪些程序:
ps -f --ppid 1這是一個很長的列表,如下圖所示。
有幾個專案試圖產生一種替代傳統系統V init的方法。主要問題之一是,使用systemvinit,所有程序都是一個接一個地連續啟動的。為了提高引導序列的效率,許多替代專案使用並行來併發和非同步地啟動程序。
以下是一些資訊:
還有許多其他不同的功能和設計。然而,他們中沒有一個**了系統所**的狂怒。
systemd於2010年釋出,2011年在Fedora中使用。從那時起,它被許多發行版採用。它是由雷德哈特的兩位軟體工程師lennartpoettering和kaysiewers開發的。
systemd不僅僅是init的替代品。相反,它是一個由大約70個二進位制檔案組成的套件,用於處理系統初始化、守護程序和服務、日誌記錄和日誌記錄,以及許多其他已經由Linux中的專用模組處理的功能。其中大部分與系統初始化無關。
systemd提供的一些守護程式包括:
而這只是冰山一角,也是問題的癥結所在。systemd早已超出了init系統的要求,根據它的反對者的說法,這正是範圍蠕變的定義。
systemd的反對者指出了它包含的大量奇怪的功能組合。所有這些特性都已經存在於Linux中,而且,也許其中一些特性需要更新或採用新的方法。然而,將所有這些功能捆綁到一個本應是init系統的系統中,在體系結構上是令人費解的。
systemd被稱為太多關鍵功能的單點故障,但這似乎是不合理的。誠然,它拋棄了Unix的理念,即建立可以協同工作的小工具,而不是將所有事情都放到窗外的大塊軟體。雖然systemd並不是嚴格意義上的單片(它由許多二進位制檔案組成,而不是一個巨大的二進位制檔案),但它確實在一個傘下包含了許多不同的管理工具和命令。
雖然它可能不是鐵板一塊,但它很大。為了瞭解規模,我們計算了核心5.6.15程式碼庫和GitHub儲存庫的systemd主分支中的文字行數。
這是一個相對粗糙的指標。它計算的是文字行,而不僅僅是程式碼行。所以,這包括評論、文件和其他一切。然而,這是一個相似的比較,給了我們一個簡單的標準:
( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc -l核心有將近2800萬(確切地說是27784340)行文字。相比之下,systemd有1349969人,接近140萬人。用我們的happy-go-lucky度量,systemd的大小大約是核心的5%,這太瘋狂了!
作為另一個比較,用於Arch Linux發行版的systemv init的現代實現的行數為1721行。
Poettering顯然沒有考慮到電氣與電子工程師協會(IEEE)的計算機協會,也沒有考慮到行動式作業系統介面(POSIX)標準。事實上,他鼓勵開發人員忽略POSIX:
“So, get yourself a copy of The Linux Programming Interface, ignore everything it says about POSIX compatibility and hack away your amazing Linux software. It’s quite relieving!”
有人指責systemd是一個只對redhat有利的redhat專案,然而它卻被強制提供給了更廣泛的Linux世界。是的,它誕生於紅帽之中,由紅帽統治和操縱。然而,在1321名投稿人中,只有一小部分人為Red Hat工作。
那麼,紅帽有什麼好處呢?
曾任Red Hat執行長的IBM總裁Jim Whitehurst說:
“Red Hat c***idered many available opti*** and even used Canonical’s Upstart for Red Hat Enterprise Linux 6. Ultimately, we chose systemd because it is the best architecture that provides the extensibility, simplicity, scalability, and well-defined interfaces to address the problems we see today and foresee in the future.”
懷特赫斯特還說,他們也看到了嵌入式系統的好處。Red Hat與“世界上最大的嵌入式供應商合作,特別是在穩定性和可靠性是首要考慮的電信和汽車行業。”
這些從技術上講似乎是合理的理由。你可以理解公司對可靠性的需求,紅帽為自己的利益著想也無可厚非,但其他人是否應該效仿?
一些反對systemd的人說,分發和人們只是盲目地跟隨紅帽的領導,並採用它。
然而,就像“喝可樂”這句話,這是不太正確的。這句話是1978年在邪教領袖吉姆·瓊斯(Jim Jones)透過喝一種摻有氰化物的葡萄味液體,強迫他的900多名追隨者**後產生的,它錯誤地羞辱了庫爾·艾德。這群人實際上喝了調味劑,但庫爾艾德從那以後就被刷子塗上了焦油。
另外,Linux發行版並沒有盲目地追隨Red Hat;他們經過認真考慮後採用了systemd。關於Debian郵件列表的爭論持續了很長時間。然而,在2014年,社群投票決定採用systemd作為預設的init系統,但同時也支援替代方案。
Debian是一個重要的例子,因為它不是從RedHat、Fedora或CentOS派生的。紅帽公司對德比安沒有任何指導作用。Debian和PID 1一樣,有許多後代,包括Ubuntu和它的許多衍生產品。
Debian社群做出的決定意義深遠。他們也進行了激烈的辯論,並投票使用孔多塞投票方法。社群也不會輕易做出這樣的選擇。
它在2019年12月再次投票決定繼續關注systemd,並繼續探索替代方案。與盲目追隨相反,這實際上是一個教科書上的民主和工作選擇自由的例子。
您通常無法選擇是否將systemd用於特定的Linux發行版。相反,發行版自己選擇是否要使用它,您可以選擇您喜歡的Linux發行版。也許你喜歡的Linux發行版換成了systemd。就像一個最喜歡的音樂家改變了風格一樣,這可能會讓人感到不安。
使用Debian、Fedora、CentOS、Ubuntu、Arch、Solus和openSUSE,並且反對採用systemd的人,可能會覺得他們被排擠在使用自己選擇的發行版之外。如果他們對任何一種體系結構選擇、範圍蠕變或對POSIX的漠視有足夠強烈的感覺,他們可能會發現繼續使用這種分佈是站不住腳的。
當然有光譜。一方面,你有不瞭解問題(甚至不關心問題)的人,另一方面,你有熱情的反對者。處於中間的是那些不喜歡改變的人,但他們並沒有為此操心到跳槽的地步。但是分配難民怎麼辦,他們由於自己的偏好或原則而不能堅持自己選擇的分配?
不幸的是,安裝任何一個init系統都不容易。不是每個人都有這樣的技術能力,即使當應用程式或桌面環境(如GNOME)依賴於systemd時會出現困難。
換個發行版怎麼樣?有些,比如Devuan,出現在採用systemd的發行版的非systemd分支(在本例中是Debian)。使用Devuan應該類似於父發行版,但並非所有非系統化的fork都是這樣。例如,如果你離開Fedora,搬到AntiX、Gentoo或Slackware,你會有一個非常不同的體驗。
我喜歡systemd的一些功能(簡單和標準化的過程控制機制)。我不理解它的一些功能(二進位制日誌)的基本原理。我也不喜歡它的一些功能(修改主資料夾是誰要求的?)。
像Debian這樣的發行版正在做一件聰明的事情,並研究各種替代方案以保持其選擇的開放性。然而,systemd是長期存在的。
如果您為其他人管理Linux機器,請學習systemd以及systemv init。這樣,無論遇到哪種情況,你都能履行自己的職責。
就在家裡用Linux?如果是這樣,請選擇一個既能滿足您的技術需求又能補充您的Linux思想的發行版。
相關:Systemd將改變Linux主目錄的工作方式
...遇到了一個有趣的名字:GNU/Linux。這些字母是什麼意思,為什麼人們總是把它們附加到Linux上?我可以回答這個問題,同時,我也會把你帶到一場在Linux世界持續了幾十年的爭論當中。 ...
... 但有點不對勁。為什麼你不能在Ubuntu中播放dvd?其他Linux發行版呢?這裡發生了什麼,你能做些什麼來修復它? ...
... 例如,現在許多Linux作業系統都使用一種稱為systemd的特殊軟體來啟動正在執行的計算機。對此有一些爭議(輕描淡寫),但任何進一步的討論都會佔用大量的資訊。Void使用了一種更輕的替代品runit。 ...
... 然而,一旦Debian(Ubuntu軟體包的上游源)切換到systemd,Canonical決定也這樣做。Ubuntu 15.04(生動的Vervet)的釋出是第一個預設情況下使用新的啟動系統的版本。 ...
...受歡迎的是CutePDF。這個應用程式仍然存在,但很難理解為什麼有人會選擇在Windows的原生功能上使用它。 ...
Linux太棒了。事實上,我已經告訴過你為什麼Ubuntu比Windows更好的一些原因。但如果它這麼好,為什麼只有不到2%的臺式計算機主動執行基於Linux的作業系統呢? ...
...開始喋喋不休地談論Windows和Linux之間的細微差別,並解釋systemd爭議之前,重要的是要打下一些基礎。也許您需要解釋的最初概念是作業系統是什麼。 ...
... 如果Canonical似乎不再那麼關心Ubuntu桌面,你為什麼要這麼做呢?事實證明,堅持使用這個特定版本的Linux有很多理由。 ...
您可能會對Linux社群的危機感到驚訝。幾年前,systemd init系統的建立加重了許多開發人員和使用者的負擔。大多數基於Linux的作業系統都採用了systemd,但也有一些選擇了另一種方法。 ...