序言
筆者的電腦配置不高,開虛擬機跑linux總覺得太重,最近才了解到windows早就上了wsl2——一款較為輕量的虛擬機軟體,所以筆者打算一邊安裝一邊記錄筆記,方便以后查閱,同時將內容分享出來,給大家提供一些幫助,
環境
- 宿主機windows11
- 目標:安裝基于WSL2的Ubuntu20.04虛擬機以及一些常用軟體環境,
WSL2安裝
可直接參考Microsoft官網手冊(https://docs.microsoft.com/zh-cn/windows/wsl/install-manual),可以直接一鍵默認安裝Ubuntu,輸入命令wsl --install,不過我本機配置不高,所以自己采用分布安裝,以達到自定義存放虛擬機位置的目的,
-
啟用windows功能
設定->應用和功能 ->程式和功能 ->啟用或關閉windows功能

-
啟動windows的linux子系統,管理員身份打開Powershell,運行命令
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart -
啟用虛擬機平臺,同樣管理員身份打開Powershell,運行命令
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart -
重啟電腦讓設定生效,
-
下載linux內核更新包更新,https://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 -
https://aka.ms/wslubuntu2004下載ubuntu20.04,
-
將檔案后綴改為.zip,然后解壓
-
雙擊exe啟動,根據提示設定賬號密碼,安裝完成,

配置阿里云鏡像
- 為了提高包管理器下載軟體速度,修改apt-get鏡像源,打開阿里云的ubuntu鏡像網站 https://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
-
下載:因為有JavaWeb的后端專案,所以需要maven構建打包,可以直接用apt源下載maven3.6.3,不過由于筆者曾經用3.6.3版本各種構筑出bug,所以還是老實上官網下,(進入maven官網,下載后綴為bin.tar.gz的版本)
wget https://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 打開https://developer.aliyun.com/mirror/maven?spm=a2c6h.13651102.0.0.571a1b11fQGJr9 在指定位置貼代碼就行,
安裝mysql
-
下載mysql 8.0的安裝配置包->解壓->更新apt源->安裝mysql 8.0 server
wget -c https://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 -
創建用戶,支持遠程連接(想省事root密碼登陸遠程連接,后面也會提)
- 運行
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; #重繪授權- 直接root密碼登陸并且允許遠程連接
use mysql; alter user 'root'@'%' identified by '#password'; grant all on *.* to 'root'@'%' ; 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 https://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" 28 $EXEC $CONF & #此處添加一個&是為了讓服務后臺運行(此方法個人認為不太好,應該在組態檔修改,因為輸出在終端,關閉shell有可能導致行程停止, - 修改組態檔
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內運行的服務器等,可是終究不方便,翻閱論壇、博客以及開源社區,找到一個比較精簡的方法,在宿主機上寫個腳本(注意自行修改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
netsh interface ip add address "vEthernet (WSL)" 192.168.50.88 255.255.255.0
每次重啟wsl后運行一下該腳本即可,
idea遠程開發
Idea支持wsl開發,需要注意的是在IDEA的Maven設定里,三個路徑都必須選擇wsl中的maven路徑,以及maven版本不推薦使用3.6.3版本(個人在3.6.3版本碰到多次bug,各種構建失敗),Java SDK也選擇使用wsl2中的Java,最終體驗感覺較卡,暫時不記錄,
踩坑
- 因為修改
/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
- 原因:每次編輯/etc檔案都得加
- 啟動 mysql服務時,報錯:
'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'' -- Missing /var/run/mysqld/mysqld.sock- 一開始我以為是mysql組態檔問題,按照網上教程分別嘗試修改將mysqld生成位置設定到別處,或者是自行手動創建目標路徑,修改設定到別處發現不能生效,手動創建盡管可以成功,但是/var/run檔案夾是個臨時檔案夾,重啟后會洗掉臨時檔案,每次手動創建很麻煩,
- 解決:啟動了一個新系統,然后移動服務發現能自行創建指定路徑,所以問題應該是出在踩坑1中隨意修改了/etc中的某個檔案權限,導致mysql沒有權限能自行創建目標路徑,具體是哪個檔案的權限還沒有找到,(所以我選擇了重裝系統),
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/469644.html
標籤:Linux
