evansyangs evansyangs
首页
分类
标签
归档
GitHub (opens new window)

Evan Yang

摸鱼小能手
首页
分类
标签
归档
GitHub (opens new window)
  • 杂记
  • TP-Link WR842N桥接

  • 移动光猫改桥接

  • 基于WSL2打造Linux环境

    • 基于WSL2打造Linux环境
      • 前置条件
      • 启用并配置WSL 2
        • Windows版本要求
        • 启用虚拟机平台可选组件
        • 更新 WSL 2 Linux 内核
        • 设置WSL发行版
      • 下载安装 Ubuntu
        • Ubuntu更换国内源
        • 内存占用异常
      • 安装并配置Docker环境
        • 修改 Docker daemon 配置
        • 拉取镜像、运行容器
        • 设置通过VSCode远程连接Docker
        • VSCode无法连接Remote SSH
      • 常见问题
        • 1. 文件系统权限问题
      • 参考文献
  • 搭建个人博客

  • Windows Terminal设置

  • 上手HackMD

  • 杂记
  • 基于WSL2打造Linux环境
evansyangs
2020-07-07
目录

基于WSL2打造Linux环境

提示

它来了!它来了!它带着WSL 2走来了!

期待已久的WSL 2终于随着2004版本的登场正式发布了,本文将简要记录安装WSL 2和配置Docker进行开发的过程。

# 前置条件

  1. 确保Windows 10版本已更新至v2004 (20H1 / Build 19041)
  2. 启用虚拟机平台(开启子系统功能)
  3. 下载最新版Docker

# 启用并配置WSL 2

# Windows版本要求

WSL 2仅在Windwos 10 19041或更高版本中可用,我们可以在cmd中键入ver来检查当前Windwos的版本。

# 启用虚拟机平台可选组件

在 PowerShell 中以管理员身份运行下面命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
1
2

运行完成之后,请重启电脑完成安装。

# 更新 WSL 2 Linux 内核

下载适用于 x64 计算机的最新 WSL2 Linux 内核 (opens new window)的更新包。

# 设置WSL发行版

如果想要将默认的WSL发行版设置成 WSL 2,在 PowervShell 中使用下面命令:

wsl --set-default-version 2
1

如果想要设置某一个发行版为WSL2,在 PowerShell 中使用下面命令,将 <Distro> 换成你想要设置的发行版即可,例如 Ubuntu-18.04

wsl --set-version <Distro> 2
1

验证使用的WSL版本

wsl -l -v
1

# 下载安装 Ubuntu

在 Windows应用商店里搜索 Ubuntu,然后下载,下载完成之后打开 Ubuntu,这时会先进行一些初始化安装的设置,然后就会让你设置新的 UNIX用户名和密码,设置完成之后,就进入了 linux 子系统。验证是否是 WSL 2 我们只需要在 powerShell 下输入 wsl -l -v,输出内容如下,这里 VERSION为2代表启用了WSL 2

NAME                   STATE           VERSION
* Ubuntu-18.04           Running         2
1
2

# Ubuntu更换国内源

首先备份一下默认的源

sudo cp /etc/apt/sources.list /etc/apt/sourses.list.bak
1

更换默认源为阿里源,使用 sudo vim /etc/apt/sources.list 命令编辑,删除原来的内容,添加下面的阿里源信息:

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal universe
deb http://mirrors.aliyun.com/ubuntu/ focal-updates universe
deb http://mirrors.aliyun.com/ubuntu/ focal multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted
deb http://mirrors.aliyun.com/ubuntu/ focal-security universe
deb http://mirrors.aliyun.com/ubuntu/ focal-security multiverse
1
2
3
4
5
6
7
8
9
10

注意

请注意你的Ubuntu版本。

更换源之后,使用下面的命令更新一下

sudo apt-get update
sudo apt-get upgrade
1
2

# 内存占用异常

解决方法:在C:\Users\用户名下创建一个名为.wslconfig的配置文件

[wsl2]
memory=3GB # Limits VM memory in WSL 2 to 3 GB
swap=0
localhostForwarding=true
1
2
3
4

# 安装并配置Docker环境

从Docker官网下载最新桌面版 (opens new window)

# 修改 Docker daemon 配置

在系统右下角托盘图标内右键菜单选择 Settings,打开配置窗口后左侧导航菜单选择 Docker Daemon。编辑窗口内的JSON串,填写加速器地址,如下所示。编辑完成,点击 Apply 保存按钮,等待Docker重启并应用配置的镜像加速器。

{
 "registry-mirrors" : [
   "https://mirror.ccs.tencentyun.com",
   "http://registry.docker-cn.com",
   "http://docker.mirrors.ustc.edu.cn",
   "http://hub-mirror.c.163.com"
 ],
 "insecure-registries" : [
   "registry.docker-cn.com",
   "docker.mirrors.ustc.edu.cn"
 ],
 "debug" : true,
 "experimental" : true
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 拉取镜像、运行容器

镜像:Causal Discovery Toolbox (opens new window)

拉取:

docker pull divkal/cdt-py3.6
1

运行:

docker run -d -i -t divkal/cdt-py3.6 /bin/bash
1

# 设置通过VSCode远程连接Docker

  1. 在VSCode的settings.json中添加"docker.host": "tcp://localhost:23750"

注意

若需要通过VSCode连接本地Docker,将其注释掉即可。

  1. 在cmd中通过SSH保持远程连接
ssh -NL localhost:23750:/var/run/docker.sock user@hostname
1

注意

将user和hostname替换成自己的服务器信息。

# VSCode无法连接Remote SSH

当VSCode无法连接SSH到Remote时,可以尝试:

pgrep -f "vscode" | xargs kill
1

# 常见问题

# 1. 文件系统权限问题

这只是让文件在 WSL 中的权限看起来正常(目录 755,文件 644),实际并不会作用到 Win­dows 文件系统下的文件本身。

在 /etc/wsl.conf 中添加以下配置:

[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=111"
mountFsTab = true
1
2
3
4
5

由于 enabled、root、mountFsTab 均为默认值,可以对其进行精简:

[automount]
options = "metadata,umask=22,fmask=111"
1
2

上面的方法对所有盘符都有效,如果你想在 WSL 中调用 Win­dows 下的应用程序(比如 explorer.exe . 调用资源管理器打开当前路径)就需要对 C 盘进行单独设置,否则会提示没有权限。首先确认 wsl.conf 中的 mountFsTab 设置为 true,然后编辑 /etc/fstab,添加如下内容:

C:\ /mnt/c drvfs rw,noatime,uid=1000,gid=1000,metadata,umask=22,fmask=11 0 0
1

此时以为所有问题都解决了,但用 mkdir 命令新建一个目录,会发现新建的目录权限依然是 777。

目前民间解决方案是在.profile、.bashrc、.zshrc 或者其他 shell 配置文件中添加如下命令,重新设置 umask

# Fixing Bad Default Permissions
if [ "$(umask)" = "000" ]; then
  umask 022
fi
1
2
3
4

未来官方解决方案 (opens new window)是在 /etc/wsl.conf 添加以下配置:

[filesystem]
umask = 022
1
2

在未来某个版本的系统更新后生效,与上面的方案理论上不会冲突,所以添加无副作用。

# 参考文献

  1. 将WSL2作为生产力工具 (opens new window)

  2. Docker——配置国内源 (opens new window)

  3. VSCode Remote Development (SSH + Docker) (opens new window)

  4. WSL2出现Vmmem内存占用过大问题解决 (opens new window)

  5. VSCODE 无法连接Remote SSH (opens new window)

  6. WSL文件系统权限问题 (opens new window)

编辑 (opens new window)
#Ubuntu#Docker
上次更新: 2021/03/14, 14:46:50
移动光猫改桥接
搭建博客的初衷

← 移动光猫改桥接 搭建博客的初衷→

最近更新
01
Dell7472黑苹果
03-27
02
上手HackMD
04-13
03
Windows Terminal设置
03-14
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Evan Yang
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式