快轉到主要內容

iOS版UTM安裝Alpine Linux虛擬機,跑Docker容器、與iOS共享資料夾

分類   資訊科技 虛擬機與容器技術
標籤   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啦!如果裝置RAM有4GB以上且啟用JIT,那麼跑Ubuntu Server也是可行的。

影片安裝過程參考:

1. 建立Alpine Linux UTM虛擬機
#

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

  2. 安裝UTM APP,新增Linux虛擬機。RAM至少512MB,儲存空間至少8GB,CPU至少分配2核心,並啟用強制多核心模式。

  3. 可以的話順便給UTM啟用JIT,虛擬機執行速度會快很多。不方便的話也沒關係,用UTM SE跑Alpine Linux勉強能行。

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

2. 安裝Docker
#

  1. 登入一般使用者帳號,即可在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

3. 外部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. 你也可以在電腦用SSH客戶端,遠端登入UTM虛擬機:ssh user@iOS裝置的IP -p 2022

4. 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
#

UTM的VirtFS為VirtIO-9P,不是VirtIO-FS。

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

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

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

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

5. 虛擬機GPU加速
#

GPU直通不可行。

Linux虛擬機請善用 UTM的virtio-gpu半虛擬化技術,增強虛擬機的圖形效能。

相關文章

使用鏡像網路模式(Mirrored Mode),讓WSL的服務能從外網連線
分類   資訊科技 虛擬機與容器技術
標籤   Windows Subsystem for Linux Docker
ReDroid教學:用Docker跑Android系統,在x86電腦玩ARM手機遊戲
分類   資訊科技 虛擬機與容器技術
標籤   ReDroid Android Docker Linux Scrcpy
Nvidia Container Toolkit:不想裝CUDA但是想跑CUDA,那就改在Docker容器裡跑吧
分類   資訊科技 虛擬機與容器技術
標籤   Nvidia Docker

留言板

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

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

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