IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> WSL简单环境搭建以及踩坑 -> 正文阅读

[系统运维]WSL简单环境搭建以及踩坑

序言

笔者的电脑配置不高,开虚拟机跑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没有权限能自行创建目标路径。具体是哪个文件的权限还没有找到。(所以我选择了重装系统)。
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 11:20:15  更:2022-05-06 11:21:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:07:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码