快轉到主要內容

Termux proot無法使用systemctl指令的解決方案

· 民國113年甲辰年
·
切換繁體/簡體
分類 智慧型手機 Termux教學
標籤 Systemd Proot-Distro Chroot OpenRC Runit
目錄

Systemd為一款init程式,幾乎所有的Linux發行版都使用Systemd來管理系統服務,常用的指令為systemctljournalctl等等。

不過Termux無法使用Systemd。若在Termux的proot-distro或chroot容器環境執行systemctl start相關指令,會出現錯誤:System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down

這是因為容器環境不支援Systemd所致。

這個其實沒有解法,除非Termux開發組學Microsoft WSL想辦法讓Systemd跑起來。不過,我們有一些替代方案可以解決這個問題。

方法1:直接從執行檔路徑啟動程式
#

首先要知道Systemd是一個管理系統服務的init程式而已,負責在Linux開機後啟動程式,並讓使用者可以開關程式。不過單純啟動某個程式其實不必依賴systemctl。

  1. 比如,要在proot Debian啟動SSH服務,用Systemd的方式就是執行以下指令:
sudo systemctl start sshd
  1. 如果我們找到Systemd的服務檔/etc/systemd/system/sshd.service(大部分Systemd服務檔都在這裡),會發現ExecStart=後面執行的東西就是它真正執行的指令:
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D
  1. 故SSH服務可以用這個指令直接啟動,並於背景執行:
mkdir -p /run/sshd

/usr/sbin/sshd -D

註解:Termux proot-distro內的程式無法使用1000以下的通訊埠,請在登入proot-distro的時候加入--fix-low-ports參數將SSH的22通訊埠重新導向到2022。

如果要設定登入proot-distro後自動啟動特定程式,最簡單的方式就是將要執行的指令加入到使用者家目錄的~/.bashrc

方法2:改用OpenRC的發行版
#

OpenRC和runit是較為傳統的init程式,沒有Systemd那麼複雜,它可以在proot執行並管理服務。不熟OpenRC指令的用戶可以參考下面Systemd與OpenRC指令的對照表。

目前proot-distro使用OpenRC的發行版為Alpine Linux,使用runit的有Artix Linux和Void Linux。

  1. 安裝Alpine Linux
proot-distro install alpine
proot-distro login alpine
  1. 安裝OpenRC套件
apk add openrc
  1. 之後登入proot的時候串這個指令,OpenRC程式便會啟動
proot-distro login alpine --fix-low-ports -- /bin/ash -c "/sbin/openrc default; /bin/ash -l"
  1. 之後就可以用OpenRC來管理服務了,例如SSH可以用rc-service指令管理,不用打執行檔路徑
sudo rc-service sshd start
  1. 還可以設定SSH服務在登入proot-distro後自動啟動。
sudo rc-update add sshd

方法3:跑完整Linux系統虛擬機
#

最終極的解決方案就是模擬完整Linux系統,讓Systemd得以執行。

參見Termux安裝QEMU跑Ubuntu虛擬機

不過這方法的缺點就是太慢了,QEMU沒有KVM加速的情況下執行效率極差。

參考資料
#

相關文章


此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。

(留言板載入中)這是Giscus留言板,需要Github帳號才能留言。支援Markdown語法,若要上傳圖片請善用外部圖床。您的留言會在Github Discussions向所有人公開。

Click here to edit your comments.

(留言板載入中)這是Disqus留言板,您可能會看到Disqus強制投放的廣告。為防止垃圾內容,有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。若要上傳圖片請善用外部圖床網站。