Systemd

列出目前安裝的具有指定依賴項的包

  • June 28, 2022

我目前systemd在 Manjaro 上使用,我正計劃使用 OpenRC 切換到 Artix(沒有任何反對意見systemd,只是想嘗試一個新的初始化系統來拓寬我的視野)。我讀過非 systemd 初始化系統的一個問題是某些包對 systemd 有硬依賴,但我能找到的唯一範例是snap(來自以下文章)。

有沒有一種方法可以列出我目前安裝的依賴於 systemd 和/或其任何相關包的包,所以如果我決定改用 OpenRC,我可以看看我目前使用的任何東西是否不起作用?

雖然這個問題有點不清楚,但假設你想列出安裝在系統中的包,systemd提到 as Depends on,你可以簡單地檢查一下pacman(因為你在 manjaro 中)。

pacman -Qi systemd | grep Required

就我而言,它顯示以下內容:

Required By     : android-udev  at-spi2-core  base  bluez-utils  colord  dhcpcd  dunst  iio-sensor-proxy  libcolord  libgudev  libinput  libmbim  libpulse  libwacom  mdadm  media-player-info  mkinitcpio  netctl  phodav  polkit  rtkit  sbupdate-git  subversion  swayidle  systemd-sysvcompat  transmission-cli  upower  vte3  xdg-desktop-portal  zram-generator

這是否意味著如果沒有 systemd,我將無法使用這些程序?不必要。

我在 arch 上,arch 和 manjaro 都為基於 systemd 的系統提供官方支持。這意味著,官方儲存庫中的二進制包(需要初始化系統、udev、syslog 等)在打包時要牢記這一點。Systemd 完成了這些角色,因此如果一個 arch 包需要(不是真的),打包者會systemdPKGBUILD.

舉個例子,在我的例子中,你可以將 dhcpcd 列為依賴於systemd. 那是為了方便,它並不需要啟動一個初始化系統。你可以從終端執行dhcpcd。軟體包維護者已經打包了一些 systemd 服務,因此您可以使用 dhcpcd 啟動systemctl或在啟動後由 systemd 啟動它(同樣可以通過從 ~/.profile 或其他自動啟動腳本執行的 shell 腳本輕鬆完成)。

另一個例子是libinput.libinput 需要 udev,而 udev 由systemd包提供,因此systemd作為依賴項給出。artixeudev等官方軟體包被打包時eudev考慮在內。還有其他替代方案可以替代udev像suckless’s nldevor mldev,它只需要在文本配置文件中進行一些調整即可適應這些不同的環境。

netctl(網路管理器)也被列出,但我從不需要使用它的systemd服務啟動它。我可以從 ~/.profile(例如)啟動它。

這些不是在程式碼中硬編碼的。唯一的區別(從外行的角度來看)是不同的服務管理器使用不同的配置語法和位置來儲存它們。

這是gentoo wiki的摘錄。適用於 gentoo 使用者,但你明白了:

一些上游軟體包提供了 systemd 單元文件,以使它們更容易安裝在基於 systemd 的發行版上,並嘗試使它們大部分開箱即用,但與 systemd 沒有任何更重的集成,或者需要任何 systemd 特定的功能。這種類型的包不被認為對 systemd 有實際的依賴關係(既不是“軟”也不是“硬”),並且根據 systemd 的官方 ebuild 政策,單元文件遵循針對小文本文件的通常準則(bash 完成, logrotate 等)和 ebuild 不得基於 systemd USE 標誌阻止其安裝。

如果未安裝 systemd,單元文件是無害的,並且不會執行任何操作,就像未安裝 sys-apps/openrc 時 OpenRC 服務腳本不會執行任何操作一樣。但是,絕對不希望在他們的機器上使用 systemd 單元文件的使用者可以將 systemd 的單元文件路徑添加到 /etc/portage/make.conf 中的 INSTALL_MASK 變數中:

因此,systemd如果您從 manjaro 更改為 artix,並不是說您的包(為 打包)會損壞,只是artix包維護者會打包他們的包,同時牢記他們的實現,所以一般不會破壞任何東西。

即使對於snapAFAIK,它也需要systemd-tmpfiles創建和刪除臨時文件以及使用systemd.mount. 可以像這個人一樣使用您自己的自定義腳本檢測這些呼叫來捕捉和複製它

然而

確實有一些軟體包可能對 systemd 或其某些服務(例如Gnome desktop依賴systemd-logind. 但是 artix 在測試(alpha)階段有一個 gnome-openrc iso 。

引用自:https://unix.stackexchange.com/questions/707717