WSL簡單環境搭建以及踩坑

来源:https://www.cnblogs.com/allworldg/archive/2022/05/04/16222977.html
-Advertisement-
Play Games

序言 筆者的電腦配置不高,開虛擬機跑linux總覺得太重。最近才瞭解到windows早就上了wsl2——一款較為輕量的虛擬機軟體。所以筆者打算一邊安裝一邊記錄筆記,方便以後查閱,同時將內容分享出來,給大家提供一些幫助。 環境 宿主機windows11 目標:安裝基於WSL2的Ubuntu20.04虛 ...


序言

筆者的電腦配置不高,開虛擬機跑linux總覺得太重。最近才瞭解到windows早就上了wsl2——一款較為輕量的虛擬機軟體。所以筆者打算一邊安裝一邊記錄筆記,方便以後查閱,同時將內容分享出來,給大家提供一些幫助。

環境

  1. 宿主機windows11
  2. 目標:安裝基於WSL2的Ubuntu20.04虛擬機以及一些常用軟體環境。

WSL2安裝

可直接參考Microsoft官網手冊(https://docs.microsoft.com/zh-cn/windows/wsl/install-manual)。可以直接一鍵預設安裝Ubuntu。輸入命令wsl --install。不過我本機配置不高,所以自己採用分佈安裝,以達到自定義存放虛擬機位置的目的。

  1. 啟用windows功能

    設置->應用和功能 ->程式和功能 ->啟用或關閉windows功能
    在這裡插入圖片描述

  2. 啟動windows的linux子系統,管理員身份打開Powershell,運行命令

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    
  3. 啟用虛擬機平臺,同樣管理員身份打開Powershell,運行命令

    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    
  4. 重啟電腦讓設置生效。

  5. 下載linux內核更新包更新。https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

  6. (可選)如果想預設使用wsl2,則設置命令wsl --set-default-version 2 。如果想同時使用wsl1和wsl2,則可以對下載好不同的linux發行版設置version

    wsl --set-version Ubuntu-18.04 2
    wsl --set-version Ubuntu-20.04 1
    
  7. https://aka.ms/wslubuntu2004下載ubuntu20.04。

  8. 將文件尾碼改為.zip,然後解壓

  9. 雙擊exe啟動,根據提示設置賬號密碼,安裝完成。
    image-20220425153222566

配置阿裡雲鏡像

  1. 為了提高包管理器下載軟體速度,修改apt-get鏡像源。打開阿裡雲的ubuntu鏡像網站 https://developer.aliyun.com/mirror/ubuntu?spm=a2c6h.13651102.0.0.3e221b11YfnocC
  2. 根據提示將配置內容覆蓋到 /etc/apt/sources.list文件中(記得先備份)。
  3. 然後運行命令 sudo apt-get update

安裝jdk

這裡筆者為了省事,直接在apt源內找了一個下載。

sudo apt search jdk
udo apt install openjdk-11-jdk
java -v #下載好後測試一下

安裝maven

  1. 下載:因為有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
    
  2. 配置環境變數

    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 #列印出版本號說明配置成功
    
  3. 配置maven阿裡雲鏡像

    cd /opt/apache-maven-xxx/conf  #進入安裝目錄下的conf文件夾
    vim settings.xml
    打開https://developer.aliyun.com/mirror/maven?spm=a2c6h.13651102.0.0.571a1b11fQGJr9
    在指定位置貼代碼就行。
    

安裝mysql

  1. 下載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
    
  2. 創建用戶,支持遠程連接(想省事root密碼登陸遠程連接,後面也會提)

    1. 運行 sudo service mysql start 啟動資料庫。
    2. 因為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; #刷新授權
    
    1. 直接root密碼登陸並且允許遠程連接
    use mysql;
    alter user 'root'@'%' identified by '#password';
    grant all on *.* to 'root'@'%' ; 
    flush privileges;
    
    1. 修改配置文件
    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

  1. 可以直接使用 sudo apt install redis 下載倉庫自帶的版本,比較方便。這裡演示一下下載官網版本。
  2. 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,如果出現運行畫面則成功
    
  3. 創建配置文件和服務腳本文件
    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命令啟動
    
  4. 修改腳本文件
    以下幾個參數根據自己實際情況修改。
    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有可能導致進程停止。
    
  5. 修改配置文件
    sudo vim /opt/redis-7.0.0/bin/6379.conf
    protected-mode no #關閉保護模式,允許遠程連接的寫入讀取。
    daemonize yes #後臺運行
    # bind 127.0.0.1 -::1 #註釋此行,允許遠程連接
    
  6. 運行 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。最終體驗感覺較卡,暫時不記錄。

踩坑

  1. 因為修改 /etc文件的許可權,導致sudo無法使用。
    1. 原因:每次編輯/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
      
    2. 解決方式:運行 pkexec /usr/sbin/visudo命令即可。
    3. 由於本次環境是在wsl2下,使用以上命令並不能成功執行,所以還需要別的方法。經過查閱得知,對於 WSL 而言,可以在 CMD 或者 Windows PowerShell 中使用以下命令登陸 root 賬號:wsl -u root 。然後修改sudoerssudoers.e即可。
      chown root:root /etc/sudoers
      chown -R root:root /etc/sudoers.d
      
  2. 啟動 mysql服務時,報錯:'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'' -- Missing /var/run/mysqld/mysqld.sock
    1. 一開始我以為是mysql配置文件問題,按照網上教程分別嘗試修改將mysqld生成位置設置到別處,或者是自行手動創建目標路徑。修改設置到別處發現不能生效,手動創建儘管可以成功,但是/var/run文件夾是個臨時文件夾,重啟後會刪除臨時文件。每次手動創建很麻煩。
    2. 解決:啟動了一個新系統,然後移動服務發現能自行創建指定路徑,所以問題應該是出在踩坑1中隨意修改了/etc中的某個文件許可權,導致mysql沒有許可權能自行創建目標路徑。具體是哪個文件的許可權還沒有找到。(所以我選擇了重裝系統)。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • VSCode開發環境配置 先到VSCode官網去下載適合自己系統的VSCode安裝軟體 VScode下載地址:https://code.visualstudio.com/Download ### 演示在WIndows下 安裝使用 (1)把vscode安裝軟體準備好 如果不清楚選64位還是32位可以在 ...
  • 文件操作(輸入輸出流) 文件操作的概述 程式運行時產生的數據都屬於零食數據,程式一旦運行結束,就會被釋放 通過文件可以將數據持久化 C++中對文件的操作包含頭文件(文件流) 文件類型分為兩種 文本文件:文件以文本的ASCII碼的形式存儲在電腦中 二進位文件:文件以文本的二進位形式存儲在電腦中,用 ...
  • string是C標準模板庫中專門用於字元串處理的數據結構類型。它並不是 C的基本數據類型,它是 C++標準模板庫中的一個“類”。若要使用 string 對象,則必須包含頭文件#include <string>。 初始化 常用的初始化有以下幾種,帶等號的是拷貝初始化, string str1("hel ...
  • 7. 多態 7.1 多態基本用法 1 #include<iostream> 2 using namespace std; 3 4 // 多態 5 6 // 動態多態滿足條件: 7 // 1.有繼承關係 8 // 2. 子類重寫父類的虛函數 9 // 10 // 動態多態使用 11 // 父類的指針或 ...
  • 1.安裝 1.1 創建虛擬環境 mkdir myproject cd myproject python3 -m venv venv 1.2 進入虛擬環境 . venv/bin/activate 1.3 安裝 flask pip install Flask 2.上手 2.1 最小 Demo 將下列代碼 ...
  • 除了程式計數器外,虛擬機記憶體在其他幾個運行時區域都有發生OutOfMemoryError異常的可能。 Java堆溢出 設置Idea堆的大小為20MB,不可擴展(-Xms參數與最大值-Xmx參數設置為一樣,避免自動擴展) -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX: ...
  • 本文原來只計劃直接翻譯OptaPlanner官網一篇關於SolverManager下實時規劃的博文《Real-time planning meets SolverManager》,但在翻譯過程中,發現該文僅從具體的技術細節上描述使用SolverManager及其相關介面實現在批量規划過程中的實時響應 ...
  • 從2019年使用WordPress搭建Dotnet9網站,到現在手擼代碼開發,介紹中間使用的一些資源,絕無保留,希望對大家有用。 1. 申請功能變數名稱、搭建WordPress網站 時間點:2019年11月 申請Dotnet9功能變數名稱,講個實話,站長是從Dotnet1試到Dotnet9的,前面8個都被註冊了,哈 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...