快轉到主要內容

iOS跑Docker容器,UTM安裝64位元Alpine Linux虛擬機&共享資料夾

分類   智慧型手機 ISH Shell教學
標籤   ISH Shell UTM Alpine Linux Docker
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

在iPhone/iPad執行Linux系統的虛擬機跑Docker。

緣由:解決 iSH Shell過於老舊的問題。iSH Shell模擬的是32位元(i386)的Alpine Linux系統,然而32位元很多套件都無法安裝,還有一堆Bad System Call的bug,不利於跑Docker容器,所以改用UTM跑64位元Linux虛擬機解決這個問題。

我依然選用Alpine Linux,本身就是一個輕量的發行版,最低只要128MB RAM就能安裝,開機速度很快,安裝速度非常快。雖然UTM虛擬機啟動時間比iSH Shell要多上幾分鐘,但是環境相對完整,起碼QEMU對x86指令的支援度要比iSH Shell好多了。UTM執行指令的回應速度約5秒,所以是足夠跑一些純文字工具的,例如ffmpeg、ImageMagick、完整的Python-pip環境,寫寫小程式,當然還有Docker。

其實不一定要跑Alpine啦!如果iOS裝置RAM有4GB以上,那麼跑Ubuntu Server也是可行的。

1. 建立Alpine Linux UTM虛擬機
#

  1. Alpine Linux官網下載x86_64或aarch64架構的映像檔,選取standard版本

  2. 安裝UTM APP,新增Linux虛擬機。RAM至少512MB,儲存空間至少8GB,CPU至少分配2核心。

  3. 將虛擬機開機,參考 Alpine Linux安裝教學,執行seupt-alpine指令稿,完成系統安裝。通常執行這個指令稿安裝十分鐘就能完成。為節省資源可以不安裝圖形界面,開機後會直接進入tty。

  4. 登入一般使用者帳號,即可在Alpine Linux安裝Docker:

sudo apk add docker docker-cli-compose

sudo addgroup $USER docker

sudo rc-update add docker

sudo rc-service docker start
  1. 如果docker pull指令出現No route to host錯誤,嘗試設定DNS伺服器:
echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf

2. 外部SSH連線到UTM虛擬機
#

假設你覺得UTM的tty畫面太醜,那就用iSH Shell的ssh登入Alpine Linux虛擬機操作,還能用scp指令傳輸檔案。

  1. UTM虛擬機預設網路無法從外部存取。編輯Alpine Linux虛擬機網路設定,新增通訊埠轉送,把虛擬機內部的22通訊埠導向localhost的2022通訊埠,這樣虛擬機的SSH服務才能從外部連線。若果Docker服務有用到通訊埠也請一併開啟。

  2. 將虛擬機開機,在Alpine Linux虛擬機安裝SSH套件:

sudo apk add openssh

sudo rc-update add sshd

sudo rc-service sshd start
  1. 開啟iSH Shell APP。注意UTM放在後台容易被iOS系統中止。如果是iPad的話使用「滑動置前」或「幕前調度」開啟iSH Shell視窗即可保證兩個APP不會被系統中止。

  2. 在iSH Shell的視窗,輸入ssh user@localhost -p 2022指令登入,就能用iSH Shell管理UTM虛擬機內的服務。

3. iOS與UTM虛擬機共享資料夾
#

此處介紹scp與VirtFS兩種共享資料夾方法。

SCP
#

  1. 在iSH Shell使用scp指令傳輸,例如將虛擬機內的/home/user/Downloads/file.txt,傳送到iSH Shell的/root目錄
scp -P 2022 -r user@localhost:/home/user/Downloads/file.txt  /root
  1. 同樣的,iSH Shell也能傳送檔案到虛擬機內部:
scp -P 2022 -r /root/file.txt  user@localhost:/home/user/Downloads/
  1. 若要將iSH Shell收到的檔案搬移到其他APP,開啟「檔案APP」,找到iSH Shell的/root目錄就能看到檔案了。

VirtFS
#

9Pfs大多數Linux發行版都有支援。

  1. 編輯UTM虛擬機,到共享資料夾啟用VirtFS (9Pfs),掛載iOS的「下載」資料夾給虛擬機存取。

  2. 然後在虛擬機內執行指令,掛載iOS的共享資料夾到/mnt

sudo mount share -t 9p /mnt
  1. 如此一來兩邊的檔案就會互通了。

相關文章

修改iSH Shell套件庫,更新至最新版Alpine Linux
分類   智慧型手機 ISH Shell教學
標籤   ISH Shell
iOS跑SSH伺服器,電腦遠端連線存取iPhone檔案
分類   智慧型手機 ISH Shell教學
標籤   ISH Shell Jailbreak IOS Tweak
iSH Shell: 在iOS上執行Linux終端機指令的APP
分類   智慧型手機 iOS越獄與玩機
標籤   ISH Shell IOS Linux Alpine Linux

留言板

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

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

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