我最近在 WSL2 上安装了 Arch,想知道为什么官方引导镜像导入失败,但导入提取的 Arch 的 Docker 镜像工作正常。
情况1
- 从archlinux.org列出的镜像之一下载了最新的引导映像。
- 重新打包它以摆脱
root.x86_64
子目录:fakeroot -- bash -c "tar -xf bootstrap.tar.gz && tar -czaf rootfs.tar.gz root.x86_64/*"
- 移至
.tar
Windows 文件系统 - 导入
.tar
并运行wsl -d Arch
。这产生了以下错误,使发行版无用。Error mounting one of the file systems. Run 'dmesg' for more details.
- 我尝试运行
dmesg
但wsl -d Arch --exec dmesg
返回相同的先前错误,因此无法查明问题。
案例2
- 使用最新的 Arch 镜像创建了一个 Docker 容器。
docker run -t --name arch archlinux ls /
- 将其导出为 tar 文件。
docker export arch -o arch-wsl.tar
- 进口的。冉
wsl -d Arch
。它立即让我陷入了bash
.
知道为什么这两种情况会产生不同的结果吗?
简短的回答:
您第一次尝试使用引导映像并
fakeroot
生成无效的 rootfs。它实际上并没有删除root.x86_64
父目录。更多详情:
以
Error mounting one of the file systems. Run 'dmesg' for more details.
我的经验,通常意味着存档不包含有效的(对 WSL 而言)rootfs。起初我认为这是由于导入了一个 gzip 压缩文件,因为默认的 for
--export
是一个简单的 tar(你在 Docker 步骤中这样做)。但是,我只是用 a
tar
和 a进行了测试,无论.tar.gz
哪种方式都对我有用。不过,我使用了稍微不同的步骤——具体来说,我使用sudo
了而不是fakeroot
因为我正在从现有的 Ubuntu 20.04 发行版中尝试它。 编辑:我也在fakeroot
我的 Artix 发行版下试了一下,发现了问题。请参阅下面的“为什么您的 fakeroot 尝试不起作用”部分。我在以下方面取得了成功。首先,从 Ubuntu 20.04 开始:
然后从 PowerShell(显然,您已经熟悉这些步骤):
为什么您的 fakeroot 尝试不起作用
我在 Artix 下运行了你的命令行来试用它,我可以看到问题所在。从它创建的焦油仍然有
root.x86_64
它。要摆脱它,您需要使用该-C/--directory
选项来指定真正的根:但是,这仍然存在问题,因为结果存档在一些命令上没有适当的安全功能:
尝试
--xattrs
像我在sudo
上面做的那样使用,仍然无法正常工作,我现在不确定为什么:结果是:
如果您能弄清楚为什么会失败
fakeroot
,请告诉我。但是这个sudo
版本对我来说很好用。一些旁注:
创建默认用户后,您需要使用这些步骤将其设置为 WSL 默认用户。
Arch 仍然是一个 Systemd 发行版,并且(您可能已经知道),Systemd 在 WSL 下没有得到很好的支持,因为 (a) WSL 的
/init
系统设置了 WSL/Windows 集成,以及 (b) Systemd 要求它是 PID1。我很快从 Arch 迁移到了 Artix,因为后者是基于 Arch 的无 Systemd 发行版。我仍然“早期”(已经使用了大约一个月),但结果令人鼓舞。Artix 支持 5 种不同的替代流程管理器,并且具有用于通过
pacman
(但不是 AUR)安装的大多数所有服务的脚本/单元文件。如果你想走这条路,请告诉我,我可以分享我的设置说明。感谢@NotTheDr01ds 抽出时间并指出我之前的尝试和结果的问题
tar
。我发现使用
bsdtar
include withlibarchive
可以完美地工作,而不是GNU tar
withfakeroot
:这导致完美的导入。然后,您可以继续初始化
pacman
密钥环和其他东西。至于为什么
GNU tar
会产生警告,我不确定。据此,这只是两个工具之间的兼容性冲突。我在这里找到了一个比较线程。