21.3 Ubuntu/Debian 兼容层

注意

由于 Ports sysutils/debootstrap 长期未更新,经测试尚不支持 Ubuntu 24.04 和 Debian 13。

视频教程:06-FreeBSD-Ubuntu 兼容层脚本使用说明

Ubuntu 兼容层

以下教程在 FreeBSD 14.3-RELEASE 上测试通过。

采用类似的方法也可以构建 Debian 兼容层。其他系统的支持情况请参见 /usr/local/share/debootstrap/scripts/ 目录。

开始构建 Ubuntu 兼容层(基于 Ubuntu 22.04 LTS)

启用相关守护进程和服务:

构建 Ubuntu 22.04 LTS 基本系统:

挂载文件系统

nullfs_load="YES" 写入 /boot/loader.conf

将以下行写入 /etc/fstab

检查挂载有无报错。挂载所有在 /etc/fstab 中标记为自动挂载的文件系统:

在 Ubuntu 兼容环境中创建 home 目录:

重启系统:

设定 Linux 内核版本

如果不进行这一步,在 chroot 时可能会提示 FATAL: kernel too old

6.16.2 仅为示例,建议参考 The Linux Kernel Archives 中公布的版本号进行设置。

进入 Ubuntu 兼容层

首先 chroot 进入 Ubuntu 兼容环境,移除会导致报错的软件:

Ubuntu 换源

在卸载 rsyslog 之后需要更换软件源;由于 SSL 证书尚未更新,因此暂时无法使用 HTTPS 源。

使用 ee 编辑 Ubuntu 兼容环境中的 APT 软件源配置文件:

写入软件源:

进入 Ubuntu 兼容层,开始更新系统,安装常用软件:

附录:Ubuntu 兼容层脚本(基于 Ubuntu 22.04 LTS,FreeBSD 14.3-RELEASE 测试通过)

脚本内容如下:

附录:Debian 12(bookworm)(FreeBSD 14.2-RELEASE 测试通过)

脚本内容如下:

附录:安装 Windows 11 字体(可选。自制包,打包同时兼容 debian 和低版本 Ubuntu)

附录:运行 X11 软件

允许所有本地用户访问当前 X Server 实例:

故障排除与未竟事宜

不知道程序的命令行启动命令是什么?

请按以下方法依次查找 (以 gedit 为例):

  • 直接执行软件包名 # gedit

  • whereis 软件包名,定位后执行。whereis gedit

  • 通过 find 命令全局查找 # find / —name 软件包名——# find / —name gedit

  • 通过软件图标定位,进入 /usr/share/applications 目录,根据软件包名找到对应文件,并使用文本编辑器(如 eenano)打开。(软件图标本质上是文本文件,而非软链接或图片),找到其中的程序启动命令并复制到终端运行即可。

如何查找软件?

将 XXX 换成想要搜索的软件名即可。

缺失 .so 文件

  • 首先看看缺失哪些 .so 文件,一般不会只缺失一个。

可以看到 libffmpeg.so => not found,缺“libffmpeg.so”。

  • 安装工具

  • 查看 libffmpeg.so 属于哪个包:

可以看到多个包都提供了这个 so 文件,随便安装一个:

  • 按照上述路径复制文件,并刷新 ldd 缓存:

  • 再次查看可执行文件 /usr/bin/qq 所依赖的动态链接库:

systemd 与 wine

systemd 不可用,但可以使用 service xxx start 命令替代。

笔者试图导入过 https://github.com/zq1997/deepin-wine 源以安装 deepin-qq,deepin-wechat 等软件,但都提示 段错误。所有 Wine 程序均无法正常运行。如果读者能解决这个问题,请提出 issue 或者 PR。

最后更新于

这有帮助吗?