現代 Linux 是不是太複雜了?

湯曉發表於2015-07-12

多年來,我習慣於在我的個人機器上執行 Debian sid (不穩定版)。筆記本、工作站,有時甚至我的個人伺服器幾年前也執行 sid。顧名思義,Sid 是不穩定的,有時會出現問題。但這沒什麼,因為無論是什麼問題,我總能發現並很快修復它們。這同時也是我為最新最酷系統所付出的代價。

過去的幾個月,我解決了 Jessie 中一個很小但卻惱人的問題:Nautilus、Thunar 以及 digikam(是的,這代表Gnome,XFCE和KDE)均不能掛載我插入的USB裝置。僅提示“沒有執行許可權。”當然,我仍然可以使用 mount -o uid=1000 /dev/sdc1 /mnt指令掛載,但這樣做很不方便。

為解決該問題,我特地將一個 jessie 系統切換至 systemd。確實有效,但我不知道原因。我還沒有時間去更新我的工作站,坦白地說,我對此很擔憂。

問題的關鍵在於:我甚至不知道要從何處開始著手。我在 google 上搜尋了該問題,發現所有答案均指向 polkit,或者 dbus,或者 systemd-shim,或者 cgmanager,或者 lightdm,或者 XFCE,或者… 我找到該問題的一份具體 bug 報告 — Debian #760281,但標註為已修復,而我描述自己仍舊遇到的問題的相關評論,卻無人問津。

沒有任何地方備註 Digikam 掛載問題應該檢視 polkit ,更別提 cgmanager。甚至當我找到那些安裝包時,卻發現其文件患有不良 Unix 文件詬病: 談論一些細枝末節的觀點,而沒有將其放到上下文中。下面是 cgmanager 幫助文件中令人困惑的內容提要。

cgmanager 是管理 cgroup 的守護程式。程式和使用者可以根據自己的特權發出管理 cgroups 的 D-Bus 請求。為確保使用者在操縱 cgroups 時不超出指定許可權,cgroup 管理器只接受來自自身程式標識和使用者名稱空間內任務的常規 D-Bus 請求。對於私有名稱空間的任務(例如容器),可使用 SCM 增強型 D-Bus 呼叫。不建議主動使用這些呼叫。相反,建議每個容器都執行 cgproxy, 它將普通 D-Bus 請求作為增強型 SCM D-Bus 請求轉發至主機 cgmanager 。

這對我來說就像 Vogon 詩歌一樣難以理解。cgmanager 如何啟動的?“ SCM 增強型”是什麼意思?我甚至不知道 cgroup 是什麼。

這種情況持續了幾個月,讓我很困惑:只有我是這樣嗎?(Google 結果表明並非如此,有很多發行版都存在這種具體問題,除此之外還存在一些非常可怕的建議。)如果不是,為何如此基礎和明顯的情況持續了這麼久?我們是不是創造了一些難以理解和除錯的複雜事物。

在我看來,這與 systemd 問題密切相關。過去我常常會說 Linux 是乾淨的、條理分明的、組織合理的、安排有序的。但我現在真的不能這樣說了。使用者和群組實際上並沒有絕對的許可權,因為系統中有類似 polkit 的程式在執行。(是的,順便說一下,我是 plugdev 的成員之一。)錯誤資訊是無用的(為什麼我沒有許可權?)並且找不到日誌資訊。通常,一個人可以指定誰能通過 /etc/fstab 行資訊或者某些sudo規則掛載裝置。當然,你必須知道去哪裡查詢,這貌似很簡單,只要將這兩個地方組合起來,但是我甚至花費了大量時間都想弄不明白應該去哪裡查詢。

systemd 也許能夠解決其中部分問題,也許會帶來一些新的問題。但在我看來,問題不僅僅是具體的桌面環境問題,而是脫離對實際含義的思考去新增特性的理念問題。

當然,在我寫這篇文章時,我的筆記本堅持要求用 root 密碼來執行掛起操作,並且 systemd 仍在執行中,於是另一個夢魘又誕生了……

相關文章