12.3.Linux 用户空间 =================== Linux 软件正常工作所依赖的不只是 ABI。为了运行这样的 Linux 软件,必须首先安装 Linux 用户空间。 **技巧** 如果只是想运行一些已经包含在 Ports 中的软件, 可以通过软件包管理器来安装, `pkg(8) `__ 将自动设置所需的 Linux 用户空间。 例如,要安装 Sublime Text 4,以及它所依赖的所有 Linux 库,运行这个命令: .. code:: shell-session # pkg install linux-sublime-text4 12.3.1.从 FreeBSD 软件包安装 CentOS 基础系统 -------------------------------------------- 要安装 CentOS 用户空间,请执行以下命令: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # pkg install linux_base-c7 `emulators/linux_base-c7 `__ 将衍生自 CentOS 7 的基本系统安装在 **/compat/linux** 路径下。 安装这个包后,通过执行下列命令查看 **/compat/linux** 路径下的内容来确认 CentOS 用户空间已经被成功安装: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # ls -l /compat/linux/ 输出应该和下面类似: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session total 30 lrwxr-xr-x 1 root wheel 7 Apr 11 2018 bin -> usr/bin drwxr-xr-x 13 root wheel 512 Apr 11 21:10 dev drwxr-xr-x 25 root wheel 64 Apr 11 21:10 etc lrwxr-xr-x 1 root wheel 7 Apr 11 2018 lib -> usr/lib lrwxr-xr-x 1 root wheel 9 Apr 11 2018 lib64 -> usr/lib64 drwxr-xr-x 2 root wheel 2 Apr 11 21:10 opt dr-xr-xr-x 1 root wheel 0 Apr 11 21:25 proc lrwxr-xr-x 1 root wheel 8 Feb 18 02:10 run -> /var/run lrwxr-xr-x 1 root wheel 8 Apr 11 2018 sbin -> usr/sbin drwxr-xr-x 2 root wheel 2 Apr 11 21:10 srv dr-xr-xr-x 1 root wheel 0 Apr 11 21:25 sys drwxr-xr-x 8 root wheel 9 Apr 11 21:10 usr drwxr-xr-x 16 root wheel 17 Apr 11 21:10 var 12.3.2.使用 debootstrap 构建 Debian/Ubuntu 基本系统 --------------------------------------------------- 另一种提供 Linux 共享库的方法是使用 `sysutils/debootstrap `__\ 。这样做的好处是可以提供一个完整的 Debian 或 Ubuntu 发行版。 执行下列命令安装 debootstrap: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # pkg install debootstrap `debootstrap(8) `__ 需要启用 `linux(4) `__ ABI 支持。启用后,执行以下命令在 **/compat/ubuntu** 路径下安装 Ubuntu 或 Debian: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # debootstrap focal /compat/ubuntu .. **注意** 虽然从技术上来说可以安装到 **/compat/linux** 路径下,但是为了避免和基于 CentOS 的软件包发生冲突,不建议这样做。因此,应该从发行版或版本名称中导出目录名称,例如,\ **/compat/ubuntu**\ 。 输出应该和下面类似: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session I: Retrieving InRelease I: Checking Release signature I: Valid Release signature (key id F6ECB3762474EDA9D21B7022871920D1991BC93C) I: Retrieving Packages I: Validating Packages I: Resolving dependencies of required packages... I: Resolving dependencies of base packages... I: Checking component main on http://archive.ubuntu.com/ubuntu... [...] I: Configuring console-setup... I: Configuring kbd... I: Configuring ubuntu-minimal... I: Configuring libc-bin... I: Configuring ca-certificates... I: Base system installed successfully. 然后在 **/etc/fstab** 中设置挂载。 **技巧** 如果家目录的内容会被共享,以及为了能够运行 X11 软件,\ **/home** 和 **/tmp** 目录应该使用 `nullfs(5) `__ 挂载在 linux compat 区域用于回环。 下面的例子可以添加在 **/etc/fstab** 文件中: .. code:: shell-session # Device Mountpoint FStype Options Dump Pass# devfs /compat/ubuntu/dev devfs rw,late 0 0 tmpfs /compat/ubuntu/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0 fdescfs /compat/ubuntu/dev/fd fdescfs rw,late,linrdlnk 0 0 linprocfs /compat/ubuntu/proc linprocfs rw,late 0 0 linsysfs /compat/ubuntu/sys linsysfs rw,late 0 0 /tmp /compat/ubuntu/tmp nullfs rw,late 0 0 /home /compat/ubuntu/home nullfs rw,late 0 0 然后执行 `mount(8) `__\ : .. code:: shell-session # mount -al 要使用 `chroot(8) `__ 访问系统,请执行以下命令: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # chroot /compat/ubuntu /bin/bash 然后可以执行 `uname(1) `__ 来检查 Linux 环境: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session # uname -s -r -m 输出应该和下面类似: .. raw:: latex \diilbookstyleinputcell .. code:: shell-session Linux 3.17.0 x86_64 进入 chroot 后,系统的表现与正常的 Ubuntu 安装一样。虽然 systemd 没有运行,但 `service(8) `__ 命令照常工作。 **技巧** 想要添加默认源中缺少的软件包库,请编辑 **/compat/ubuntu/etc/apt/sources.list** 文件。 对于 amd64 架构,可以使用下面的例子: .. code:: shell-session deb http://archive.ubuntu.com/ubuntu focal main universe restricted multiverse deb http://security.ubuntu.com/ubuntu/ focal-security universe multiverse restricted main deb http://archive.ubuntu.com/ubuntu focal-backports universe multiverse restricted main deb http://archive.ubuntu.com/ubuntu focal-updates universe multiverse restricted main 对于 amd64 架构,另一个可以使用的例子: .. code:: shell-session deb http://ports.ubuntu.com/ubuntu-ports bionic main universe restricted multiverse