wsl2 開發使用說明(總體來講不建議)

amorZhu發表於2022-07-06

WSL 使用說明

關於解除安裝

  • wsl --shutdown
  • wsl --unregister xxxxx
  • 解除安裝 Ubuntu
  • 開啟 Windows 功能關閉:

    • 適用於 LinuxWindows 子系統
    • 虛擬機器平臺
  • 點選確定

關於匯入匯出

  • importexport 只是針對磁碟,意思就是網上說的修改 Ubuntu 目錄用的匯入匯出方法的就是修改了磁碟的位置罷了。
    下面是遷移 Ubuntu 時的操作:

    wsl --export Ubuntu E:\Wsl\Ubuntu\ubuntu.tar
    wsl --unregister Ubuntu
    wsl --import Ubuntu E:\Wsl\Ubuntu E:\Wsl\Ubuntu\Ubuntu.tar --version 2

關於使用者許可權

  • 當第一次啟動 Ubuntu 時,會讓你建立使用者,下面設定的就是這個使用者。 可以很好的解決在 Windwos 下建立檔案具有 Root 許可權的問題,還有 Vscode 中的 Terminal 也可以開啟就是普通使用者,不需要在進行設定。
  • cmd 或者 powershell 中執行如下命令

    ubuntu config --default-user xxx
    # wsl 關閉
    wsl --terminate Ubuntu
    # wsl 啟動 -u 指定使用者
    wsl -d Ubuntu -u xxx

關於代理

代理問題,一定要開發代理軟體的允許區域網。完了之後找到區域網的代理埠。
設定:source proxy.sh set 10811
取消設定: source proxy.sh unset

#!/bin/sh
hostip=$(cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }')
wslip=$(hostname -I | awk '{print $1}')

set_proxy(){

    PROXY_HTTP="http://${hostip}:${port}"
    PROXY_HTTPS="http://${hostip}:${port}"

    export http_proxy="${PROXY_HTTP}"
    export HTTP_PROXY="${PROXY_HTTP}"

    export https_proxy="${PROXY_HTTPS}"
    export HTTPS_PROXY="${PROXY_HTTPS}"

    export all_proxy="${PROXY_HTTP}"
    export ALL_PROXY="${PROXY_HTTP}"

    echo "Host ip:" ${hostip}
    echo "WSL ip:" ${wslip}
    echo "Current http  proxy: ${PROXY_HTTP}"
    echo "Current https proxy: ${PROXY_HTTPS}"
    echo "Note: You need to invoke this command with source, like: source proxy.sh set ${port}"
}

unset_proxy(){
    unset http_proxy
    unset HTTP_PROXY
    unset https_proxy
    unset HTTPS_PROXY
    unset ALL_PROXY
    unset all_proxy
    echo "Unset done: http_proxy HTTP_PROXY https_proxy HTTPS_PROXY"
    echo "Note: You need to invoke this command with source: source proxy.sh unset"
}

proxy_info(){
    echo "Host ip:" ${hostip}
    echo "WSL ip:" ${wslip}
    echo "Current http  proxy: $http_proxy"
    echo "Current https proxy: $https_proxy"
}

if [ "$1" = "set" ]
then
    if [ "$2" = "" ]
    then
        port="10809"
        echo "Use default port: ${port}"
    else
        port="$2"
    fi
    set_proxy

elif [ "$1" = "unset" ]
then
    unset_proxy

elif [ "$1" = "info" ]
then
    proxy_info
else
    echo "Unsupported arguments: $1. Available aguments: set [port] unset info"
fi

關於 IDEA

ideawsl2 的支援簡直不忍直視!希望你們改好之後發個公告告訴我能用了。
這幾天我碰到了很多問題:
1,wsl2 普通使用者建立的檔案無法開啟。
2,idea 無法切換到 wsl2 的普通使用者上去。
3,idea 每次都要檢查 jdk,即使第一次檢查後是沒問題的。特別慢。
4,apt install 安裝的 maven 無法識別。
5,特別容易卡死,奔潰!

關於開發

注:wsl2 不建議跨系統檔案呼叫。我們考慮以下幾個情景。

  • wsl 作為伺服器
    只需要 wsl 做為伺服器,程式碼本地開發。
    這樣需要將原生程式碼開發完複製一份到 wsl 目錄。只能通過檔案上傳的形式,部署程式碼。即使在你看來,都在 windows 上,很可惜,因為不建議跨系統訪問檔案,這個不建議的準確度有多高呢?基本上就是說,一個 ls 都會卡一陣。。。
    還有,只能在 windows 開發,遠端就會有網路問題。
  • 開發環境
    全部使用 wsl 目錄,idea 不支援,vscode 表示適配的很好。jetbrains 的遠端開發和 vscode 差不多,都能使用。
    簡單來講就是遠端開發,即使你感覺他們都在你的 windows 上,其實隔著很遠很遠。。。
  • 不知道說啥
    全部在 windows,請關閉 wsl2 這個垃圾。

關於網路

wsl2 中的所有服務,都只能本地訪問,如果想提供遠端訪問,需要讓 windows 轉發。
涉及兩條命令:

netsh interface portproxy add v4tov4 listenport=[port] listenaddress=0.0.0.0 connectport=[port] connectaddress=[wsl ip]

netsh.exe advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=[port]

一條告訴 windows 轉發 wsl 服務埠。一條告訴 windows 開放防火牆

關於 docker

可以很開心的玩,但是由於網路原因,你不能提供遠端服務。

總結

  • 磁碟和網路問題不解決,請不要使用 wsl2,還不如開個虛擬機器。
  • 建議在 windows 本地開發,該裝的都裝,不要想著使用 wsl2 來隔離開發環境。

相關文章