Created: 2022-12-10 20:32:54
Status: #linux
原因和安装思路
好几年没折腾服务器,VM,Docker等东西。近期进行了知识更新。win11开始,hyperv偏windows和服务器内置vm模拟(我个人更喜欢更轻便的virtualbox运行旧系统),并且发现wsl2基本上已原生支持linux。但默认只能安装应用商店的unbuntu等系列,并且会把发行版默认安装在C盘。 我想测试用用Archlinux,并且想将这些发行版统一放到D盘。
两种方式:
- 别人做好的ArchWSL,需要依赖别人更新,对我来说不利于理解WSL。
- 借助docker源自己安装导入。
这里使用第二种方式。
为了操作简便,先安装ubuntu
应用商店安装,或是命令行:
wsl --install -d Ubuntu
安装完成后想怎么设置可以自己搜索安装docker desktop,可以网页download安装或命令行:
winget install Docker.DockerDesktop
安装它,操作系统需要重启,重启后启动,需要确保General里面 Use the WSL 2 based engine勾选打上;并且Resources的WSL INTEGRATION里的Enable integration wth my default WSL distro勾选上,以及下面Ubuntu选上。
从docker上面拉需要的发行版,不仅是archlinux
在docker desktop里操作或命令:docker pull archlinux
等待安装完成latestdocker create -i archlinux bash
会出现很长一串字符,我们需前8位保存一下,后面导出有用,如: 739f913a
启动这个dockerdocker container start 739f913a
使用shell通过docker挂载过去docker exec -it 739f913a /bin/bash
(archlinux专用)
sudo pacman -S reflector
使用
1、需要全球最新:下载速度进行排序,并筛选出前 100 个最近同步的镜像,最后将结果覆写到 /etc/pacman.d/mirrorlist 文件
sudo reflector --verbose --latest 100 --sort rate --save /etc/pacman.d/mirrorlist
2、国内常用的:选择在最近 同步的,并且是位于中国的12个镜像,然后根据下载速度进行排序,最后将结果覆写到 /etc/pacman.d/mirrorlist 文件
sudo reflector --verbose -c China --latest 12 --sort rate --threads 100 --save /etc/pacman.d/mirrorlist
docker默认把archlinux挂载成root后,需要初始化一下pacmankeypacman-key --init
更新系统pacman -Syu
安装sudo和vim等自己需要的软件pacman -Syu sudo vim
增加用户,useradd -m -G wheel username
passwd username
用下面命令找到 %wheel ALL=(ALL) ALL 反注释,并让wheel用户组可以sudoEDITOR=vim visudo
退出archlinux bashexit
将linux发行版放到自己管理的目录
我放在D盘的 D:\Docker\wslcd /mnt/d/Docker/wsl
mkdir archlinux
上面退出后当前位置在ubuntu linux中从docker导出当前发行版docker export 739f913a > /mnt/d/Docker/wsl/archlinux.tar
退出ubuntu,现在 D:\Docker\wsl 目录上应该有archlinux.tar文件exit
导入tar文件到D:\Docker\wsl\archlinux 目录$ wsl --import archlinux ./archlinux archlinux.tar
重启windows Terminal终端,这时候终端应该能进入archlinux了,具体archlinux的其他设置请参考其他文章
我们可以选择把docker desktop和Ubuntu都卸载掉或保留。
其他注意点
使用systemd
wsl默认使用windows自己的init,但wsl2最新版已支持systemd,有两种方式,一种是放到windows用户目录C:\Users\<UserName>\.wslconfig
;第二种就是放到linux发行版的/etc/wsl.conf里。
1 | [boot] |
或命令:echo -e "[user]\ndefault=$myUsername" >> /etc/wsl.conf
用top命令查一下,如果pid 1 是systemd就OK,如果是init就说明没成功
想默认用某个用户登录
可以在发行版linux里的/etc/wsl.conf里记录,
1 | [user] |
或在Windows终端Terminal的”设置”的Json文件里增加
1 | "name": "archlinux", |
或启动的时候指定某个发行版用某个用户登录
1 | wsl -u root -d <distro> # "-d <distro>" is only needed for non-default instances |
wsl迁移当前ubuntu到其它目录的一些命令参考
输入以下命令开始导出,需要保证磁盘有足够的空间,建议安装完发行版就立刻操作,大概需要1G左右空间存储压缩包。
wsl --export Ubuntu-20.04 wsl-ubuntu20.04.tar
导出完之后需要取消注册发行版
wsl --unregister Ubuntu-20.04
等待导出完成,这里以存储在D盘为例,执行以下代码开始导入。
wsl --import Ubuntu-20.04 D:\Ubuntu-20.04 .\wsl-ubuntu20.04.tar --version 2
如果存储路径有空格就使用以下代码,将全路径加上单引号。
wsl --import Ubuntu-20.04 'D:\Program Files\Ubuntu-20.04' .\wsl-ubuntu20.04.tar --version 2
等待导入完成,这个时候登进去就是root账户,如果需要使用刚才你设置的用户执行以下代码ubuntu2004 config --default-user <你的用户>