246 lines
7.0 KiB
Markdown
246 lines
7.0 KiB
Markdown
---
|
||
title: wsl2
|
||
categories:
|
||
- CS
|
||
status: done
|
||
abbrlink: 47686
|
||
---
|
||
|
||
# 安装 wsl
|
||
|
||
前置条件,主板 bios 开启 `intel 虚拟化`
|
||
|
||
> ms app store如果打不开、转圈 -> 关闭小飞机,也可以试试 改 ipv4 host 4.2.2.2
|
||
|
||
- windows terminal 必备,ms store 下载
|
||
|
||
[巨硬官方文档](https://docs.microsoft.com/en-us/windows/wsl/install)
|
||
|
||
# ubuntu软件源
|
||
|
||
[阿里开源镜像站](https://developer.aliyun.com/mirror/)
|
||
|
||
下面是 ubuntu20.04 用的
|
||
|
||
```bash
|
||
# 备份apt默认源
|
||
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
|
||
sudo vim /etc/apt/sources.list
|
||
# 替换 /srouces.list
|
||
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
|
||
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
|
||
|
||
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
|
||
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
|
||
|
||
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
|
||
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
|
||
|
||
# deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
|
||
# deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
|
||
|
||
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
|
||
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
|
||
|
||
|
||
# 更新apt
|
||
sudo apt upgrade
|
||
sudo apt update
|
||
```
|
||
|
||
# 安装 zsh
|
||
|
||
> 注意`.zshrc`在安装的`用户`目录下,别和`root`搞混了
|
||
|
||
```bash
|
||
# 安装
|
||
sudo apt install zsh
|
||
# 将 zsh 设置为默认 shell
|
||
chsh -s /bin/zsh
|
||
# 检查,若没成功,重启试试看
|
||
echo $SHELL
|
||
```
|
||
|
||
# 安装 oh-my-zsh
|
||
|
||
```bash
|
||
# 443 confused 手动 vim oh-my-zsh.sh 然后 bash ./oh-my-zsh.sh
|
||
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
|
||
```
|
||
|
||
# 配置 oh-my-zsh 主题/插件/alias
|
||
|
||
安装插件
|
||
|
||
- 自动补全:
|
||
|
||
```bash
|
||
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
|
||
```
|
||
|
||
- 代码高亮:
|
||
|
||
```bash
|
||
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
|
||
```
|
||
|
||
修改`当前用户`目录下的 `.zshrc`
|
||
|
||
```bash
|
||
# 主题
|
||
ZSH_THEME="ys"
|
||
# 引入插件
|
||
plugins=(git zsh-autosuggestions zsh-syntax-highlighting)
|
||
# alias
|
||
alias cls='clear'
|
||
alias ga='git add'
|
||
alias gc='git commit -m'
|
||
alias gp='git push'
|
||
alias gf='git fetch'
|
||
alias update='sudo apt update'
|
||
alias upgrade='sudo apt upgrade'
|
||
alias install='sudo apt install'
|
||
# windows文件管理器打开wsl文件
|
||
alias open='explorer.exe'
|
||
```
|
||
|
||
# 安装 Nodejs
|
||
|
||
[巨硬文档赛高](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-wsl)
|
||
|
||
安装完注意文字提示
|
||
|
||
```bash
|
||
# =>Appending nvm source string to /home/mozzie/.zshrc
|
||
# => Appending bash_completion source string to /home/mozzie/.zshrc
|
||
# => Close and reopen your terminal to start using nvm or run the following to use it now:
|
||
```
|
||
照它说的做
|
||
|
||
```bash
|
||
export NVM_DIR="$HOME/.nvm"
|
||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
|
||
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
|
||
```
|
||
|
||
验证`nvm`安装 `nvm ls`,会看见类似
|
||
|
||
```bash
|
||
iojs -> N/A (default)
|
||
node -> stable (-> N/A) (default)
|
||
unstable -> N/A (default)
|
||
```
|
||
|
||
安装 `nodejs stable`
|
||
|
||
```bash
|
||
nvm install node
|
||
# node -v | npm -v 验证安装版本
|
||
```
|
||
|
||
# 子系统使用宿主机代理
|
||
|
||
1. clash为例,勾选 `允许局域网`
|
||
|
||
2. wsl2 子系统 root 权限
|
||
|
||
```bash
|
||
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
|
||
export https_proxy="http://${hostip}:7890"
|
||
export http_proxy="http://${hostip}:7890"
|
||
# 生效
|
||
# source ~/.bashrc
|
||
# source ~/.zshrc
|
||
```
|
||
|
||
# 外网/LAN 访问 wsl2 服务
|
||
|
||
[巨硬官方解释](https://docs.microsoft.com/en-us/windows/wsl/networking)
|
||
|
||
When using a WSL 1 distribution, if your computer was set up to be accessed by your LAN, then applications run in WSL could be accessed on your LAN as well.
|
||
|
||
This isn't the default case in WSL 2. WSL 2 has a virtualized ethernet adapter with its own unique IP address. Currently, to enable this workflow you will need to go through the same steps as you would for a regular virtual machine. (We are looking into ways to improve this experience.)
|
||
|
||
Here's an example PowerShell command to add a port proxy that listens on port 4000 on the host and connects it to port 4000 to the WSL 2 VM with IP address 192.168.101.100
|
||
|
||
```bash
|
||
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100
|
||
```
|
||
> 注意端口覆盖的问题,避免 windows 端口和端口 wsl2 冲突
|
||
|
||
## netsh 端口映射
|
||
|
||
- listenaddress: 监听地址, 0.0.0.0 表示匹配所有地址
|
||
- listenport: 监听的 windows 端口
|
||
|
||
- connectaddress: 转发到 wsl2 的 ip地址, 这里设置为localhost,默认从 windows 可以通过localhost 访问 wsl2
|
||
- connectport: 转发到 wsl2 的端口
|
||
|
||
例如 windows 的 ip 为 `192.168.1.100`,监听 windows 的 3000 端口,转发到 wsl2 ip localhost 的 3000 端口
|
||
|
||
```bash
|
||
# windows-terminal 管理员权限执行
|
||
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=localhost
|
||
# 删除端口监听
|
||
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=3000
|
||
```
|
||
|
||
## 配置 windows defender 防火墙入站规则
|
||
|
||
新建规则 -> 端口 -> TCP / 特定本地端口(3000) -> 允许链接 -> 下一步 -> 取个名字 -> Done
|
||
|
||
# docker
|
||
|
||
windows 宿主机安装 `docker desktop`,`设置 -> 资源 -> WSL INTEGRATION` 打开 对应的 linux发行版,即使用
|
||
|
||
## mysql 容器
|
||
|
||
```bash
|
||
# brdige
|
||
docker network create --driver bridge --subnet=172.21.0.0/16 wsl2
|
||
# pull
|
||
docker pull mysql:5.7.38
|
||
# 生产 mysql 5.7.38 容器
|
||
docker run --restart=always --privileged=true -p 3306:3306 --name mysql --net wsl2 --ip 172.21.0.5 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7.38
|
||
```
|
||
|
||
## mongo 容器
|
||
|
||
```bash
|
||
docker pull mongo:5.0
|
||
# 宿主机 /mongo/data
|
||
docker run --restart=always -d -p 27017:27017 -v /mongo/data:/data --name mongo --net wsl2 --ip 172.21.0.6 mongo:5.0 --auth
|
||
# 初始化
|
||
docker exec -it mongo /bin/bash
|
||
# 进入 mongo shell
|
||
mongo
|
||
# admin
|
||
use admin
|
||
# 创建root用户,管理全部数据库的权限,这会可以navicat等gui链接数据库,用户名密码root,验证数据库admin
|
||
db.createUser({
|
||
user: "root",
|
||
pwd: "root",
|
||
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
|
||
})
|
||
# 退出
|
||
exit
|
||
# 再次进入
|
||
mongo
|
||
# 使用root登录授权,正确返回 1
|
||
db.auth("root","root")
|
||
# 创建 testDB 数据库
|
||
use testDB
|
||
# 创建 test 用户 管理 testDB
|
||
db.createUser({user:'test',pwd:'test',roles:[{role:'dbOwner',db:'testDB'}]})
|
||
```
|
||
|
||
使用 navicat 登录,验证数据库 `admin` ,用户名密码 `test`
|
||
|
||
|
||
# 默认 wsl root 用户登录
|
||
|
||
```bash
|
||
# wsl -l 查看 ubuntu版本,例如 Ubuntu-20.04
|
||
Ubuntu2004 config --default-user root
|
||
```
|