21.4 Arch Linux 兼容层(基于 Arch Linux bootstrap)

注意

现在完成兼容层构建并 chroot 后,界面看似卡住,其实是 bash 没有任何输出,但仍可以正常输入和使用。

即使切换到 zsh 也无效,TTY 会报错:linux: jid 0 pid 1154 (bash): linux_ioctl_fallback fd=0, cmd=0x802c542a ('T',42) is not implemented

视频教程:07-FreeBSD-Arch Linux 兼容层脚本使用说明

Arch Linux 兼容层看起来占用的资源略高于 Ubuntu 兼容层,这是因为系统中正在运行谷歌 Chrome 浏览器。

构建基本系统

处理所需服务项

Linux 服务项

D-Bus

通常桌面环境已经配置了 D-Bus 服务,如果未安装 D-Bus,请自行安装。

调整 Linux 兼容层默认内核版本

对于滚动发行版,Linux 兼容层的默认内核版本通常较低。若直接构建,Arch Linux 兼容层在 chroot 时会报错 FATAL: kernel too old。因此,需要将 Linux 兼容层的内核版本调整为 6.12.63(或其他较高版本)。

  • 查看当前 Linux 兼容层的内核版本:

注意

你必须先启动 linux 服务才能查看当前的 Linux 内核版本。

放置自举系统

挂载文件系统

nullfs_load="YES" 写入 /boot/loader.conf(如需立刻生效,可使用 kldload nullfs)。

将以下内容添加到 /etc/fstab 文件中:

加入后的 /etc/fstab 示例(请勿复制粘贴下方代码):

警告

请勿看错行、照抄上面的示例,否则你将需要进入急救模式!

检查挂载过程中是否有报错:

挂载 /etc/fstab 中所有未挂载的文件系统。

基本配置

初始化 pacman 密钥环

换源

由于新安装的 Arch 没有任何文本编辑器,所以我们需要在 FreeBSD 中编辑相关文件,设置 Arch Linux pacman 使用清华大学镜像源:

启用 DisableSandbox

我们需要为 pacman 启用 DisableSandbox,否则会报错 error: restricting filesystem access failed because landlock is not supported by the kernel!,因为 FreeBSD 未实现此沙箱。

在 pacman.conf 文件中取消 DisableSandbox 选项的注释:

检查是否启用成功,在 pacman.conf 中查找 DisableSandbox 所在行及行号:

使用 pacman 安装基本系统、开发工具、文本编辑器 nano、AUR 助手 yay 以及文泉驿字体 wqy-zenhei:

参考文献

  • pacman.conf(5) 指出“在 Linux 系统上,禁用为下载文件进程应用默认的 sandbox。当因当前 Linux 内核不支持该特性而导致下载文件时出现 landlock 相关失败时,这会很有用。”

archlinuxcn 源配置

配置 Arch Linux CN 仓库使用清华大学镜像:

安装 Arch Linux CN 仓库密钥环:

技巧

==> Locally signing trusted keys in keyring... 这一步可能需要十分钟或更长时间。请耐心等待。

由于 yay 及其他用于安装 AUR 的软件禁止以 root 用户直接操作,因此需要在 chroot 中创建一个具有普通权限的新用户(经测试,FreeBSD 中现有普通用户不可用)。

创建用户 test,并加入 wheel 组,同时创建用户主目录:

使用 nano 编辑 sudoers 文件,配置用户权限(若有红色警告请无视之):

删除 # %wheel ALL=(ALL) ALL 前的注释符号 #

删除 # %sudo ALL=(ALL:ALL) ALL 前的注释符号 #

卸载 fakeroot 更改为 fakeroot-tcp,否则无法使用 AUR。

该 Bug 见 Problem with fakeroot and qemu

使用 pacman 安装 fakeroot-tcp 工具:

技巧

如果为用户 test 设置了密码后仍提示密码错误,需要新开一个终端,执行 reboot 重启 FreeBSD,然后继续操作。

区域设置

提示

如果不进行此设置,Arch Linux 的图形化程序将无法使用中文输入法。

编辑 /etc/locale.gen,将 zh_CN.UTF-8 UTF-8 前面的注释 # 删掉。

生成系统本地化语言环境:

Shell 脚本

脚本内容如下:

参考文献

最后更新于

这有帮助吗?