快轉到主要內容

Android手機安裝Linux發行版:Termux proot-distro使用教學

智慧型手機 Termux教學 Proot-Distro
🗓️ 民國112年 癸卯年
✍ 切換正體/簡體字
目錄

這篇文章討論proot-distro安裝Linux發行版的用法。

Termux作為終端模擬器,能在手機上以proot-distro工具安裝Linux發行版,不需要Root權限。

例如可以裝Ubuntu、Arch Linux、Alpine Linux、Fedora、Debian、openSUSE等。

Debian 11

proot-distro安裝的Linux發行版僅有純文字界面,圖形介面要自行設定。

如果你覺得很麻煩,可以參閱文末提供的自動化指令稿。

1. 什麼是Proot
#

在電腦GNU/Linux系統上,我們可以利用chroot指令,建立一個隔離的Linux環境。透過chroot指令切換進去後,就彷彿進到了另外一個系統。例如在Ubuntu用debootstrap建立Debian的環境。

但是chroot一定得用到root權限,Android的Termux終端機收錄了proot套件作為替代品。

根據 PRoot官網說明,proot是chroot的usersapce實作,用ptrace來模擬系統呼叫,包含bind、binfmt等功能。

因為用ptrace的因素,proot的程式執行速度必然比chroot慢,但好處是不用root權限也能跑Linux環境。

跟chroot一樣,proot只要搭配一個Linux rootfs(根檔案系統),再利用Termux載入一個假的Linux核心,就能讓程式以為自己跑在一個真的Linux環境。

但請注意proot的環境只能算容器,不能算完整Linux系統!

為何要使用proot而不是直接在Termux跑指令呢?Termux本身收錄的套件較少,透過proot安裝Linux系統,我們就能善用電腦版Linux的套件來達成特定目的,例如Termux一直沒收「Chromium」,然而大部分Linux發行版都有提供。

在Proot環境執行電腦軟體是沒什麼問題的,GIMP、LibreOffice、Firefox都能正常執行。但systemct的系統管理指令無法使用,因為Android沒有Systemd。


Termux有收錄proot套件,可用於設定proot環境,用proot安裝的Linux發行版我們稱作「Proot Distro」

用proot裝的Linux發行版頂多算做「容器」(container),並非虛擬機那樣的完整系統。

但請不要把「Proot Distro」跟「proot-distro」搞混,後者是一個工具。

由於proot需要自行準備Linux系統的rootfs,指令又複雜,所以Termux提供了叫做proot-distro的工具(wrapper script),能自動安裝Termux官方維護的Linux發行版rootfs,並處理proot相關環境問題,這樣用起來就輕鬆多了。

2. proot-distro指令用法
#

  1. 開啟Termux,安裝proot-distro套件
pkg install proot-distro
  1. 使用以下指令查看線上有什麼發行版
proot-distro list
  1. 目前有Alpine Linux、Arch Linux、Debian、Fedora、openSUSE、Ubuntu、Void Linux、Pardus Linux

  2. 假設要安裝Debian,執行:

proot-distro install debian
  1. 下載之後,登入系統:
proot-distro login debian
  1. 登入後會是root帳號,輸入apt update後就可以開始安裝套件了。使用完畢輸入exit退出系統。

  2. 如果你想繼續設定Proot-distro的圖形環境和音訊伺服器,並將其中文化,請參考: Termux安裝Proot Debian系統完成後續設定。

一個Linux發行版只能安裝一個rootfs,如果你需要同一個發行版「多開」,請使用下面討論的「自訂rootfs」。

移除proot系統的指令:

proot-distro remove debian

刪除下載的rootfs快取:

proot-distro clear-cache

3. proot-distro指令引數
#

參考 Github說明,你可以在proot-distro login debian的指令後面使用以下引數:

--:登入後執行指令,比如下面--後面的內容是登入proot執行sshd,而非proot-distro的引數。

proot-distro login debian -- /usr/bin/sshd

--user:要登入的使用者

--fix-low-ports:將低位數的通訊埠重新導向。由於proot的關係,像SSH daemon這種使用低位數22通訊埠的程式會出問題。使用此選項後,SSH的通訊埠會重新導向到2022(即預設通訊埠+2000)。


--isolated:不要掛載/sdcard/data/data/com.termux到proot內部。

proot-distro預設會把手機內部儲存空間bind mount到proot系統的/sdcard目錄,也就是說你在proot Linux系統裡面執行rm -rf是能把手機檔案也一併刪除的。

此外,Termux會將自身的PATH也掛載進proot內部,比如你要執行Python指令的時候可能會執行到Termux的版本。使用此選項即可確保執行Python指令的時候是執行proot Linux內部的Python。


--termux-home:將Termux的家目錄掛載到proot Linux內部的家目錄。

--shared-tmp:將Termux的tmp目錄掛載到proot Linux內部的tmp

--bind path:path:額外掛載的路徑,格式為<外部路徑>:<Proot Linux內部路徑>

--no-link2symlink:停用PRoot link2symlink的延伸模組,關閉proot的硬連結模擬功能。僅限SELinux為permissiv或關閉狀態可使用。

--no-sysvipc: 停用PRoot的System V IPC模擬。僅在遇到崩潰時使用。

--no-kill-on-exit:不要在登出的時候殺死所有行程。

4. 如何備份proot-distro
#

Termux的備份指令並不會備份proot-distro,需要額外備份。

  1. 使用此指令備份proot系統成壓縮檔到手機內部儲存空間,例如備份debian的檔案:
proot-distro backup --output storage/shared/debianbackup.tar.gz debian
  1. 使用此指令還原proot系統:
proot-distro restore debianbackup.tar.gz

5. proot-distro使用自訂Linux rootfs
#

參見 proot-distro使用自訂rootfs

6. proot-distro模擬異質架構系統
#

proot-distro支援搭配qemu-user模擬器使用,比方說你可以在ARM64架構的系統模擬執行x86_64的Linux系統。

參見 Termux proot-distro模擬執行異質架構rootfs

附錄:用指令稿自動安裝Proot Distro
#

Github有很多懶人指令稿幫你搞定Linux + 圖形介面的安裝,通常只要複製貼上即可。

不過他們有些並不是使用proot-distro,而是直接用proot指令安裝的。所以該發行版可能會無法用本文討論的proot-distro移除。

相關文章

Android手機免Root安裝Ubuntu系統 (Termux圖形桌面+中文化+音訊+一鍵啟動指令稿)
智慧型手機 Termux教學 Proot-Distro Ubuntu
如何用VNC遠端連線至Termux的Linux桌面
智慧型手機 Termux教學 Proot-Distro VNC
Termux:從0到1安裝Arch Linux桌面系統+一鍵啟動指令稿
智慧型手機 Termux教學 Proot-Distro Arch Linux

留言板

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

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

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。