序言

我电脑配置不高,开虚拟机跑linux总觉得太卡。最近才了解到windows早就上了wsl2——一款较为轻量的虚拟机软件。所以本篇博客偏笔记向,存粹记录以便多次使用。

环境

  1. 宿主机windows11
  2. 目标:安装基于WSL2的Ubuntu20.04虚拟机以及一些常用软件环境。

WSL2安装

可直接参考Microsoft官网手册,输入命令wsl --install一次性默认安装完毕。不过我本机配置不高,所以自己采用分步安装,以达到自定义存放虚拟机位置的目的。

  1. 启用windows功能

    设置->应用和功能 ->程序和功能 ->启用或关闭windows功能

  2. 启动windows的linux子系统和虚拟机平台,管理员身份打开Powershell,运行命令

    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  3. 重启电脑让设置生效。

  4. 下载linux内核更新包并且运行更新。

    https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

  5. (可选)如果想默认使用wsl2,则设置命令wsl --set-default-version 2 。如果想同时使用wsl1和wsl2,则可以对下载好不同的linux发行版设置version

    wsl --set-version Ubuntu-18.04 2
    wsl --set-version Ubuntu-20.04 1
  6. 下载ubuntu20.04 https://aka.ms/wslubuntu2004。(可能是网络问题下载很慢,我改用微软商店下载很快)

  7. 将文件后缀改为.zip,然后解压

  8. 双击exe启动,根据提示设置账号密码,安装完成。

配置阿里云镜像

  1. 为了提高Linux包管理器下载软件速度,修改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. 下载:可以直接用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
    在指定位置贴代码就行。

安装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. 创建用户,支持远程连接

    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; #刷新授权
  3. 修改配置文件

    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"
  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内运行的服务器,可是还是想尝试固定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 :不用每次右击脚本使用管理员权限的方法。

  1. 右键创建快捷方式
  2. 进入属性,点击快捷方式下的高级

  3. 勾上管理员身份运行即可。

自启动脚本

wsl2目前还没有systemctl,所以软件不能开机自启,开源社区提供一些自己开发的仿Systemctl软件,不过目前还不够完善,所以我用开机+自动运行脚本来达到傻瓜式自启。

  1. 在宿主机创建脚本(或者直接添加到上面固定ip脚本后面)
  2. 输入wsl /home/allworldg/startup.sh
  3. 在虚拟机内同样位置创建 /home/allworldg/startup.sh
  4. 根据自己情况编辑startup.sh ,例如
     echo '123123'| sudo -S service mysql start #自动输入sudo的密码
    echo '123123'| sudo -S service redis start

踩坑

  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

wsl2环境搭建的更多相关文章

  1. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

    2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...

  2. Azure Service Fabric 开发环境搭建

    微服务体系结构是一种将服务器应用程序构建为一组小型服务的方法,每个服务都按自己的进程运行,并通过 HTTP 和 WebSocket 等协议相互通信.每个微服务都在特定的界定上下文(每服务)中实现特定的 ...

  3. rnandroid环境搭建

    react-native 环境搭建具体步骤这个大家已经玩烂了,这个主要是记录下来自己做win7系统遇到的坑 1.com.android.ddmlib.installexception 遇到这个问题,在 ...

  4. python开发环境搭建

    虽然网上有很多python开发环境搭建的文章,不过重复造轮子还是要的,记录一下过程,方便自己以后配置,也方便正在学习中的同事配置他们的环境. 1.准备好安装包 1)上python官网下载python运 ...

  5. springMVC初探--环境搭建和第一个HelloWorld简单项目

    注:此篇为学习springMVC时,做的笔记整理. MVC框架要做哪些事情? a,将url映射到java类,或者java类的方法上 b,封装用户提交的数据 c,处理请求->调用相关的业务处理—& ...

  6. 【定有惊喜】android程序员如何做自己的API接口?php与android的良好交互(附环境搭建),让前端数据动起来~

    一.写在前面 web开发有前端和后端之分,其实android还是有前端和后端之分.android开发就相当于手机app的前端,一般都是php+android或者jsp+android开发.androi ...

  7. Nexus(一)环境搭建

    昨天,成功搭建了自己的 Maven 环境(详见:Maven(一)环境搭建),今天就来研究和探讨下 Nexus 的搭建! 使用背景: 安装环境:Windows 10 -64位 JDK版本:1.7 Mav ...

  8. 「译」JUnit 5 系列:环境搭建

    原文地址:http://blog.codefx.org/libraries/junit-5-setup/ 原文日期:15, Feb, 2016 译文首发:Linesh 的博客:环境搭建 我的 Gith ...

  9. appium+robotframework环境搭建

    appium+robotframework环境搭建步骤(Windows系统的appium自动化测试,只适用于测试安卓机:ios机需要在mac搭建appium环境后测试) 搭建步骤,共分为3部分: 一. ...

  10. Linux测试环境搭建的学习建议

    随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux测试环境搭建的一些建议. 一.Linux测试环境搭建从基 ...

随机推荐

  1. ArcPy之Python介绍

    1.Python简介 Python是一种面向对象.解释型计算机程序设计语言;Python是一种简单易学,功能强大的编程语言.它有高效率的高层数据结构,简单而有效地实现面向对象编程.Python简洁的语 ...

  2. 怎样用JS来添加CSS样式

    方法: document.getElementById("xx").style.xxx中的全部属性是什么 盒子标签和属性对比 CSS语法(不区分大写和小写) JavaScript语 ...

  3. [转载]Android开发常用调试技术记录

    ANDROID 调试技术: 1)Ps 指令 ls –l /proc/27/ cat /proc/27/cmdline       #cmdline文件表示了这个进程所在的命令行. cat /proc/ ...

  4. 支付宝app对接的坑

    主要流程是: 1.申请成为开发者 2.创建应用 3.设置应用公钥/私钥/支付宝公钥 4.制作服务器端代码(此处注意,不要解析htmlencode) https://blog.csdn.net/zzzi ...

  5. Python学习笔记-条件语句

    学习代码如下 flag=False name = raw_input("请输入:"); if name == '羊爸爸': flag=True print 'Welcome Hom ...

  6. 【Spring】30、Spring,SpringMVC用法汇总

    SpringMVC的工作原理图: springMVC中的几个组件: 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU. 处理器映射器(HandlerMappin ...

  7. openkm安装过程

    # java -jar /software/OKMInstaller.jar Running in Linux: 0.9.1-CE (build: 445bef5) Linux distro: rhe ...

  8. scikit-learn决策树的python实现以及作图

    decsion tree(决策树) 其中每个内部结点表示在一个属性上的测试,每个分支代表一个属性的输出,而每个树叶结点代表类或类的分布.树的最顶层是根节点 连续变量要离散化 机器学习中分类方法的一个重 ...

  9. Mac下 cordova 安装随笔

    首先这是我自己第一篇博客,如果有什么不对的,大家指出,积极修改. cordova是大家做混合开发最经常使用的一款使用HTML, CSS & JS进行移动App开发多平台共用一套代码,中文官方网 ...

  10. MySQL的主从复制+双主模式

    MySQL的主从复制 部署环境: MySQL master 192.168.40.21 MySQL slave  192.168.40.22 思路: 当主MySQL上进行数据上的操作或者变化时,主My ...