第二十八章 DragonFlyBSD
第五节 Linux 兼容层
注意:一个常见误解就是把 FreeBSD 的 Linux 兼容层当做 Wine,认为这样做会降低软件的运行效率。实际情况是不仅不会慢,而且有些软件的运行速度还会比在 Linux 中更快,运行效率更高。

系统自带;

以下参考

开启服务

1
# sysrc linux_enable="YES"
2
# sysrc kld_list+="linux linux64"
3
# kldload linux64
4
# pkg install emulators/linux-c7 dbus
5
# service linux start
6
# sysrc dbus_enable="YES"
7
# service dbus start
8
# dbus-uuidgen > /compat/linux/etc/machine-id
9
# reboot
Copied!

配置 fstab

以下写入 /etc/fstab:
1
linprocfs /compat/linux/proc linprocfs rw 0 0
2
linsysfs /compat/linux/sys linsysfs rw 0 0
3
tmpfs /compat/linux/dev/shm tmpfs rw,mode=1777 0 0
Copied!
检查挂载有无报错:
1
# mount -al
Copied!
1
# reboot
Copied!

自己构建 Ubuntu 兼容层

以下教程仅在 FreeBSD 13.0 测试通过。构建的是 Ubuntu 20.04 LTS(18.04 亦可)。兼容层使用技术实际上是 Linux jail,并非 chroot。
需要先按照“系统自带”的方法配置好原生的 CentOS 兼容层。
更多其他系统请看/usr/local/share/debootstrap/scripts/
nullfs_load="YES"写入/boot/loader.conf

开始构建

1
# pkg install debootstrap
2
# debootstrap focal /compat/ubuntu http://mirror.bjtu.edu.cn/ubuntu/
3
# reboot
Copied!

挂载文件系统

将以下行写入/etc/fstab
1
# Device Mountpoint FStype Options Dump Pass#
2
devfs /compat/ubuntu/dev devfs rw,late 0 0
3
tmpfs /compat/ubuntu/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0
4
fdescfs /compat/ubuntu/dev/fd fdescfs rw,late,linrdlnk 0 0
5
linprocfs /compat/ubuntu/proc linprocfs rw,late 0 0
6
linsysfs /compat/ubuntu/sys linsysfs rw,late 0 0
7
/tmp /compat/ubuntu/tmp nullfs rw,late 0 0
8
/home /compat/ubuntu/home nullfs rw,late 0 0
Copied!
检查挂载有无报错:
1
# mount -al
Copied!
如果提示没有home文件夹,请新建:
1
# mkdir /home
Copied!

Jail

首先 chroot 进去 Ubuntu,移除会报错的软件:
1
# chroot /compat/ubuntu /bin/bash
2
# apt remove rsyslog # 此时已经位于 Ubuntu 兼容层了。
Copied!

换源

在卸载 rsyslog 之后,换源,由于 SSL 证书没有更新,所以还不能用 https:
1
# ee /compat/ubuntu/etc/apt/sources.list #此时处于 FreeBSD 系统!因为 Ubuntu 兼容层还没有文本编辑器。
Copied!
写入:
1
deb http://mirror.bjtu.edu.cn/ubuntu/ focal main restricted universe multiverse
2
deb-src http://mirror.bjtu.edu.cn/ubuntu/ focal main restricted universe multiverse
3
deb http://mirror.bjtu.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
4
deb-src http://mirror.bjtu.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
5
deb http://mirror.bjtu.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
6
deb-src http://mirror.bjtu.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
7
deb http://mirror.bjtu.edu.cn/ubuntu/ focal-security main restricted universe multiverse
8
deb-src http://mirror.bjtu.edu.cn/ubuntu/ focal-security main restricted universe multiverse
Copied!
进入 Ubuntu 兼容层,开始更新系统,安装常用软件:
1
# apt update && apt upgrade && apt install nano wget # 此时已经位于 Ubuntu 兼容层了。
Copied!

运行 X11 软件

1
# xhost +local:#此时处于 FreeBSD 系统!
Copied!

示例:运行 Chrome

1
# wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb # 无需代理软件,可以直连。此时已经位于 Ubuntu 兼容层了。
2
# apt install ./google-chrome-stable_current_amd64.deb # 此时已经位于 Ubuntu 兼容层了。
Copied!
1
# /usr/bin/google-chrome-stable --no-sandbox --no-zygote --in-process-gpu # 此时已经位于 Ubuntu 兼容层了。
Copied!
Systemd 不可用,但可以用server xxx start。其他更多可以运行的软件见 https://wiki.freebsd.org/LinuxApps
类似的方法可以构建 Debian、Arch 兼容层(经测试会提示 内核太老,旧版本则强制升级无法使用)。Gentoo 兼容层则提示 bash so 文件错误,即使静态编译了 zsh。
导入过 https://github.com/zq1997/deepin-wine 源以安装 deepin-qq,deepin-wechat 等软件,但都提示段错误。所有 Wine 程序都无法正常运行。如果你能解决这个问题,请提出 issue 或者 pull。