經過一番辛苦調教,總算把 WSL 調整成可推廣到團隊使用的地步。下一步就是要輸出成 WSL 公版。
謹以此文記錄匯出與匯入 WSL 映像檔的步驟與除雷經驗。
前置作業:查看已安裝的軟體清單
在匯出成公版之前,先查看已安裝了哪些軟體:
# 查看已用 apt install 安裝了哪些軟體
% apt list --installed
# 查看已用 brew install 安裝了哪些軟體
% brew list
# 查看手動下載安裝了哪些軟體
% ls -al /usr/local/bin
前置作業:清理內容
在匯出成公版之前,記得先清理一下機敏資料。譬如:
- 檢視一下
~/.ssh
- 檢視一下
~/.kube
- 檢視一下
~/.gitconfig
- 檢視一下其他重要的 dotfiles
也記得清理一下足跡:
- 清理一下
~/.*_history
- 清理一下
/var/log
前置作業:預設登入用戶
踩雷經驗:匯出再匯入 WSL 映像檔之後,再登入的身分會是 root。
為了避免此事發生,請在匯出映像檔之前,先編輯 WSL 設定檔 /etc/wsl.conf
如下:
[user]
default=預設的登入帳號名稱
匯出映像檔
先在 PowerShell 查看一下現在系統裡有哪些 WSL 設置:
wsl -l -v
---
NAME STATE VERSION
* Ubuntu Running 2
Ubuntu-22.04 Stopped 2
假設 Ubuntu
就是我們想要匯出的標的,請輸入以下命令:
# 停止 "Ubuntu" 個體
wsl -t Ubuntu
# 將 "Ubuntu" 個體匯出至 "my-image.vhdx" 映像檔
wsl --export Ubuntu --vhd my-image.vhdx
映像檔可能很大。建議對它產生一份 hash,以供比對。1
匯入映像檔
假設我們想從 my-image.vhdx
映像檔匯入到一個名為 dev
的 WSL 個體,請輸入以下指令:
# 將 "my-image.vhdx" 映像檔匯入到名為 "dev" 的 WSL 個體,
# 並在 C:\WslDisk 建立虛擬硬碟
wsl --import dev C:\WslDisk my-image.vhdx --vhd
# 看看是否匯入成功
wsl -l -v
---
NAME STATE VERSION
* Ubuntu Stopped 2
dev Stopped 2
Ubuntu-22.04 Stopped 2
你在 Windows Terminal 應該可以看到多了一個名為 dev
的終端機選項:
測試
既然是要給研發團隊用的公版,自然要登入看看是否一切正常。就以這陣子在實驗的 Laravel Sail 環境為例 2:
如果有問題,就得卸載這份有瑕疵的 WSL 個體,回到源頭繼續修改:
# 停止 "dev" 個體
wsl -t dev
# 卸載 "dev" 個體
wsl --unregister dev
如果還有預設登入帳號的問題
在前置作業時,曾經透過 WSL 設定檔 /etc/wsl.conf
避免預設登入帳號變成 root 的問題。如果此法無效,請根據這份建議,用 Windows 登錄編輯程式 regedit.exe
去修改 Windows registry:
- Key: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{某一個}
- Name:
DefaultUid
- Type: 請切換成「十進位數字」
- Data: 請設成
1000
(十進位數字)
萬一還無效,請參考 “How to set default user for manually installed WSL distro?” 一文的討論。
-
在 Windows 可透過
certutil
或Get-FileHash
指令取得檔案的 hash 值。詳見 “5 Ways to Generate and Verify MD5 SHA Checksum of Any File in Windows 10” 一文。 ↩︎ -
詳見〈用 Podman 執行 Laravel + Sail〉一文。 ↩︎