将Arch Linux导入Windows Linux子系统

发布于 2022-05-19  7567 次阅读


虽然已经有了ArchWSL可以直接用,但是Arch的理念不正是自己动手的才是最好的么。

获取tar文件

将Linux导入Windows Linux子系统需要首先获得Linux发行版的tar文件,最简单的方式就是将Docker镜像打包得到,这里使用podman来制作,如果使用docker的话替换一下就行了。

首先执行以下命令启动Arch Linux容器:

podman run -t archlinux

然后看一下容器名字,如果在上一条命令指定名称,这时候就不用看了。接下来导出容器:

podman export 容器名 > 保存文件名.tar

例如

podman export archlinux > ~/archlinux.tar

将得到的tar文件保存好就行了。

导入tar文件到WSL中

首先建好存放WSL文件的文件夹,然后执行:

wsl --import WSL名 WSL存放文件夹 tar文件路径

例如:

wsl --import "Archlinux" "C:\Users\Username\WSL\Archlinux" "C:\Users\Username\archlinux.tar"

注意WSL名不能有空格,然后输入wsl -l -v来查看导入是否成功。

还原pacman设置

Arch Linux 的Docker镜像中精简掉了一些内容,比如中文locale,现在要还原回来。

先安装一个文件编辑器:pacman -S nano

/etc/pacman.conf文件中最后[options]中的noextract项目注释掉,然后使用pacman -S $(pacman -Qnq)重新安装所有软件包。

添加中文支持

生成区域设置

虽然上一步还原了国际化所需的文件,但是设置文件/etc/locale.gen并没有还原,需要手动在文件末尾添加中文设置,例如:

zh_CN.UTF-8 UTF-8

然后执行:

locale-gen

来生成区域设置。

修改全局设置

虽然官方百科为了避免终端乱码并不推荐将全局locale设置为中文,但是WSL本来就支持中文,如果想要修改的话并没有问题。如果不想修改的话可以参考官方百科来修改用户个人设置

修改/etc/locale.conf文件,将其改为:

LANG=zh_CN.UTF-8

然而在WSL中,光是这么做还不够,接下来需要将上面的locale.conf文件复制并命名成/etc/default/locale文件,或者干脆用ln命令设置连接。

完成之后退出并重启WSL。再次进入即可显示中文。

添加用户

导入之后默认的用户为root用户,如果常用的话不是很安全,所以这里需要建立新的用户来进行日常使用。

首先为root用户设置密码,如果没有为root和新用户设置密码,后面创建用户后将无法使用root权限。输入passwd并设置密码。

然后安装sudo

pacman -S sudo

为了方便后面使用,首先创造一个变量:

myUsername=用户名

然后创建用户:

useradd -m -G wheel $myUsername

设置为WSL默认用户:

echo -e "[user]\ndefault=$myUsername" >> /etc/wsl.conf

设置密码:

passwd $myUsername

最后修改sudoer文件,因为之前安装的是nano而不是vi,所以要为visudo指定使用的编辑器,如果已经安装了vi的话可以直接执行visudo命令,使用visudo的原因是visudo会检查修改后的文件,避免出现错误导致无法使用root权限:

EDITOR=nano visudo

翻到最后,取消%wheel ALL=(ALL:ALL) ALL的注释符号#,如果想不输入密码的话就取消%wheel ALL=(ALL:ALL) NOPASSWD: ALL前面的注释符号。

完成后重启WSL即可。

参考文章

https://docs.microsoft.com/zh-cn/windows/wsl/use-custom-distro

https://bbs.archlinux.org/viewtopic.php?id=253198

https://wiki.archlinux.org/title/Locale_(简体中文)

https://wiki.archlinux.org/title/Localization_(简体中文)/Simplified_Chinese_(简体中文)

https://wiki.archlinux.org/title/Users_and_groups_(简体中文)#用户管理

https://wiki.archlinux.org/title/Sudo_(简体中文)#使用_visudo

https://github.com/yuk7/ArchWSL/issues/76