wsl2環境搭建
序言
我電腦配置不高,開虛擬機跑linux總覺得太卡。最近才了解到windows早就上了wsl2——一款較為輕量的虛擬機軟體。所以本篇部落格偏筆記向,存粹記錄以便多次使用。
環境
- 宿主機windows11
- 目標:安裝基於WSL2的Ubuntu20.04虛擬機以及一些常用軟體環境。
WSL2安裝
可直接參考Microsoft官網手冊,輸入命令wsl --install
一次性默認安裝完畢。不過我本機配置不高,所以自己採用分步安裝,以達到自定義存放虛擬機位置的目的。
-
啟用windows功能
設置->應用和功能 ->程式和功能 ->啟用或關閉windows功能 -
啟動windows的linux子系統和虛擬機平台,管理員身份打開Powershell,運行命令
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
-
重啟電腦讓設置生效。
-
下載linux內核更新包並且運行更新。
//wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
-
(可選)如果想默認使用wsl2,則設置命令
wsl --set-default-version 2
。如果想同時使用wsl1和wsl2,則可以對下載好不同的linux發行版設置version
。wsl --set-version Ubuntu-18.04 2 wsl --set-version Ubuntu-20.04 1
-
下載ubuntu20.04 //aka.ms/wslubuntu2004。(可能是網路問題下載很慢,我改用微軟商店下載很快)
-
將文件後綴改為.zip,然後解壓
-
雙擊exe啟動,根據提示設置帳號密碼,安裝完成。
配置阿里雲鏡像
- 為了提高Linux包管理器下載軟體速度,修改apt-get鏡像源。打開阿里雲的ubuntu鏡像網站 //developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.3e221b11YfnocC
- 根據提示將配置內容覆蓋到
/etc/apt/sources.list
文件中(記得先備份)。 - 然後運行命令
sudo apt-get update
————————————以下安裝內容為可選向—————————————–
安裝jdk
直接在apt源內找一個下載。
sudo apt search jdk
udo apt install openjdk-11-jdk
java -v #下載好後測試一下
安裝maven
-
下載:可以直接用apt源下載maven3.6.3。不過由於我曾經用3.6.3版本各種構築出bug,所以還是老實上官網下。(進入maven官網,下載後綴為bin.tar.gz的版本)
wget //dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz #下載包 tar -zxf apache-maven-3.8.5-bin.tar.gz
-
配置環境變數
sudo vim /etc/profile export M2_HOME=/opt/apache-maven-3.8.5 M2_HOME = /opt/apache-maven-3.8.5 export PATH=${M2_HOME}/bin:$PATH #添加到文件結尾 退出後運行 source /etc/profile讓變數生效 mvn -v #列印出版本號說明配置成功
-
配置maven阿里雲鏡像,此處獲取鏡像地址
cd /opt/apache-maven-xxx/conf #進入安裝目錄下的conf文件夾 vim settings.xml 在指定位置貼程式碼就行。
安裝mysql
-
下載mysql 8.0的安裝配置包->解壓->更新apt源->安裝mysql 8.0 server
wget -c //dev.mysql.com/get/mysql-apt-config_0.8.15-1_all.deb #下載 sudo dpkg -i mysql-apt-config_0.8.15-1_all.deb #解壓並且選擇配置 sudo apt update #更新 sudo apt install mysql-server #下載mysql 8.0
-
創建用戶,支援遠程連接
- 運行
sudo service mysql start
啟動資料庫。 - 因為mysql8的root賬戶加密插件默認採用sock插件(即mysql root賬戶在登陸時只會允許外部系統用戶名為同名root的用戶登陸)。所以安裝mysql時有沒有初始化密碼無所謂,直接
sudo mysql
打開即可。
sudo mysql use mysql; create user '#userName'@'#host' identified by '#passWord'; #創建角色,#host設置為%,代表該賬戶允許其他ip地址連接 grant all on *.* to '#username'@'%'; #圖省事,給了所有許可權。 flush privileges; #刷新授權
- 運行
-
修改配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf 將 bind-address 注釋 重啟mysql服務即可
安裝python3
因為筆者的linux環境自帶python,所以暫時直接用。在此也備份一個網路上的方法(添加源然後下載)。
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.6
安裝c和 c++
sudo apt update
sudo apt install build-essential #一次安裝gcc,g++和make
安裝redis
- 可以直接使用
sudo apt install redis
下載倉庫自帶的版本,比較方便。這裡演示一下下載官網版本。 - 下載安裝
wget //github.com/redis/redis/archive/7.0.0.tar.gz #下載安裝包 tar -zxf 7.0.0.tar.gz #解壓 mv redis /opt/ # 移動到自定義位置 sudo make ; #安裝 (可選) sudo make install PREFIX=/opt/redis-7.0.0 #自定義安裝位置並且安裝(可選) ./opt/redis-7.0.0/bin/redis-server #運行redis-server,如果出現運行畫面則成功
- 創建配置文件和服務腳本文件
cd /opt/redis-7.0.0 cp redis.conf ./bin/6379.conf#將配置文件複製一份到軟體目錄下,埠號作為名字是為了之後註冊腳本服務時方便用到。 cp /opt/redis-7.0.0/utils/redis_init_script /etc/init.d/redis #複製腳本文件,方便service命令啟動
- 修改腳本文件
以下幾個參數根據自己實際情況修改。sudo vim /etc/init.d/redis 14 REDISPORT=6379 15 EXEC=/opt/redis-7.0.0/bin/redis-server 16 CLIEXEC=/opt/redis-7.0.0/bin/redis-cli 17 18 PIDFILE=/var/run/redis_${REDISPORT}.pid 19 CONF="/opt/redis-7.0.0/bin/${REDISPORT}.conf"
- 修改配置文件
sudo vim /opt/redis-7.0.0/bin/6379.conf protected-mode no #關閉保護模式,允許遠程連接的寫入讀取。 daemonize yes #後台運行 # bind 127.0.0.1 -::1 #注釋此行,允許遠程連接
- 運行 sudo service redis start
固定ip
我感覺wsl2目前比較受人詬病的其中一點是wsl2的ip是動態的,每次完全關閉再打開wsl2都會更新ip,儘管目前可以使用localhost訪問wsl2內運行的伺服器,可是還是想嘗試固定ip。翻閱論壇、部落格以及開源社區,找到一個比較精簡的方法。在宿主機上寫個腳本(可以自行修改linux發行版名稱以及ip)
wsl -d Ubuntu-20.04 -u root ip addr add 192.168.50.16/24 broadcast 192.168.50.255 dev eth0 label eth0:1 #注意必須是root
netsh interface ip add address "vEthernet (WSL)" 192.168.50.88 255.255.255.0
每次重啟wsl後以管理員許可權運行一下該腳本即可。
ps :不用每次右擊腳本使用管理員許可權的方法。
- 右鍵創建快捷方式
- 進入屬性,點擊快捷方式下的高級
- 勾上管理員身份運行即可。
自啟動腳本
wsl2目前還沒有systemctl
,所以軟體不能開機自啟,開源社區提供一些自己開發的仿Systemctl
軟體,不過目前還不夠完善,所以我用開機+自動運行腳本來達到傻瓜式自啟。
- 在宿主機創建腳本(或者直接添加到上面固定ip腳本後面)
- 輸入
wsl /home/allworldg/startup.sh
- 在虛擬機內同樣位置創建
/home/allworldg/startup.sh
- 根據自己情況編輯
startup.sh
,例如echo '123123'| sudo -S service mysql start #自動輸入sudo的密碼 echo '123123'| sudo -S service redis start
踩坑
- 因為修改
/etc
文件的許可權,導致sudo無法使用。- 原因:每次編輯
/etc
文件都得加sudo
,太不爽,圖痛快直接來了一句sudo chown "myusername" -R /etc
,結果後來使用sudo命令時報錯。sudo: /etc/sudoers is owned by uid 1000, should be 0 sudo: no valid sudoers sources found, quitting sudo: unable to initialize policy plugin
- 解決方式:運行
pkexec /usr/sbin/visudo
命令即可。 - 由於本次環境是在wsl2下,使用以上命令並不能成功執行,所以還需要別的方法。經過查閱得知,對於 WSL 而言,可以在 CMD 或者 Windows PowerShell 中使用以下命令登陸 root 帳號:
wsl -u root
。然後修改sudoers
和sudoers.e
即可。chown root:root /etc/sudoers chown -R root:root /etc/sudoers.d
- 原因:每次編輯