快轉到主要內容

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

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

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加速的情況下執行效率極差。

參考資料
#

相關文章

淺談Termux檔案管理,將Linux環境的檔案與Android共享
分類   智慧型手機 Termux教學
標籤   Termux
Termux Proot安裝Box64與Box86,Android手機執行Windows exe
分類   智慧型手機 Termux教學
標籤   Box86 Box64 Wine ExaGear
x86架構debootstrap建立ARM架構rootfs,在Android安裝chroot Debian環境
分類   智慧型手機 Termux教學
標籤   Debootstrap Debian QEMU User Mode Ubuntu Chroot

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur或Postimages。您的留言會在Github Discussions向所有人公開。

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