无需远程控制台的 FreeBSD 操作系统远程安装

商标

FreeBSD 是 FreeBSD 基金会的注册商标。

许多制造商和销售商用来区分其产品的名称被认定为商标。如果这些名称出现在本文档中,并且 FreeBSD 项目知道商标声明,那么这些名称后面将带有“™”或“®”符号。

摘要

本文档介绍了在远程系统控制台不可用时远程安装 FreeBSD 操作系统的方法。本文的主要思路来自于与 Martin Matuska <mm@FreeBSD.org> 的合作,并得到了 Paweł Jakub Dawidek <pjd@FreeBSD.org> 的宝贵意见。


1. 背景

世界上有很多服务器托管提供商,但真正正式支持 FreeBSD 的却很少。他们通常提供对 Linux® 发行版的支持,以便在他们提供的服务器上安装。

在某些情况下,如果您要求,这些公司会安装您首选的 Linux® 发行版。利用这个选项,我们将尝试安装 FreeBSD。在其他情况下,他们可能会提供一个用于紧急情况的救援系统。我们也可以将此系统用于我们的目的。

本文介绍了使用 RAID-1 和 ZFS 功能引导 FreeBSD 远程安装所需的安装和配置基本步骤。

2. 简介

本节将总结本文的目的,并更好地解释本文涵盖的内容。本文中的说明将有利于那些使用不提供 FreeBSD 支持的托管设施提供的服务的用户。

  1. 正如我们在 背景 部分提到的,许多信誉良好的服务器托管公司都提供某种形式的救援系统,该系统从他们的 LAN 启动,并可以通过 SSH 访问。他们通常提供这项支持来帮助客户修复损坏的操作系统。正如本文将解释的那样,可以使用这些救援系统安装 FreeBSD。

  2. 本文的下一部分将描述如何在本地机器上配置和构建一个极简的 FreeBSD 系统。该版本最终将从一个 ramdisk 在远程机器上运行,这将允许我们使用 sysinstall 实用程序从 FTP 镜像安装完整的 FreeBSD 操作系统。

  3. 本文的其余部分将描述安装过程本身,以及 ZFS 文件系统的配置。

2.1. 需求

为了成功继续,您必须

  • 拥有一个具有 SSH 访问权限的网络可访问操作系统

  • 了解 FreeBSD 安装过程

  • 熟悉 sysinstall(8) 实用程序

  • 拥有 FreeBSD 安装 SO 镜像或 CD

3. 准备 - mfsBSD

在 FreeBSD 能够安装到目标系统之前,有必要构建一个最小的 FreeBSD 操作系统镜像,该镜像将从硬盘启动。这样,新系统就可以从网络访问,并且无需远程访问系统控制台就可以完成其余的安装。

mfsBSD 工具集可用于构建一个微小的 FreeBSD 镜像。顾名思义(“mfs”代表“内存文件系统”),生成的镜像完全从 ramdisk 运行。由于具有此功能,硬盘操作不会受到限制,因此可以安装完整的 FreeBSD 操作系统。mfsBSD 主页 包含指向工具集最新版本的链接。

请注意,本文不会介绍 mfsBSD 的内部机制以及它的整体工作方式。有兴趣的读者应参考 mfsBSD 的原始文档以了解更多信息。

下载并解压缩最新的 mfsBSD 版本,并将您的工作目录更改为 mfsBSD 脚本所在的目录

# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz
# tar xvzf mfsbsd-2.1.tar.gz
# cd mfsbsd-2.1/

3.1. mfsBSD 的配置

在启动 mfsBSD 之前,必须设置一些重要的配置选项。最重要的是,我们必须正确设置网络设置。配置网络选项的最合适方法取决于我们是否事先知道将要使用的网络接口类型,以及将要为我们的硬件加载的网络接口驱动程序。我们将看到 mfsBSD 在两种情况下如何配置。

另一个需要设置的重要事项是 root 密码。这可以通过编辑 conf/loader.conf 来实现。请参阅包含的注释。

3.1.1. conf/interfaces.conf 方法

当安装的网卡未知时,可以使用 mfsBSD 的自动检测功能。如果我们在 conf/interfaces.conf 中设置以下选项,mfsBSD 的启动脚本可以根据接口的 MAC 地址检测到正确的驱动程序

mac_interfaces="ext1"
ifconfig_ext1_mac="00:00:00:00:00:00"
ifconfig_ext1="inet 192.168.0.2/24"

不要忘记将 defaultrouter 信息添加到 conf/rc.conf

defaultrouter="192.168.0.1"

3.1.2. conf/rc.conf 方法

当网络接口驱动程序已知时,使用 conf/rc.conf 设置网络选项更加方便。该文件使用的语法与 FreeBSD 中的标准 rc.conf(5) 文件相同。

例如,如果您知道 re(4) 网络接口将可用,您可以在 conf/rc.conf 中设置以下选项

defaultrouter="192.168.0.1"
ifconfig_re0="inet 192.168.0.2/24"

3.2. 构建 mfsBSD 镜像

构建 mfsBSD 镜像的过程非常简单。

第一步是将 FreeBSD 安装 CD 或安装 ISO 镜像挂载到 /cdrom。为了举例说明,本文假设您已经下载了 FreeBSD 10.1-RELEASE ISO。使用 mdconfig(8) 实用程序将此 ISO 镜像挂载到 /cdrom 目录很容易

# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso
# mount_cd9660 /dev/md10 /cdrom

由于最近的 FreeBSD 发行版不包含常规发行版集,因此需要从 ISO 镜像上的发行版存档中提取 FreeBSD 发行版文件

# mkdir DIST
# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST
# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST

接下来,构建可启动的 mfsBSD 镜像

# make BASE=DIST

上面的 make 必须从 mfsBSD 目录树的顶层运行,例如 ~/mfsbsd-2.1/

3.3. 启动 mfsBSD

现在 mfsBSD 镜像已经准备就绪,必须将其上传到运行实时救援系统或预安装 Linux® 发行版的远程系统。最适合此任务的工具是 scp

# scp disk.img root@192.168.0.2:.

要正确启动 mfsBSD 镜像,必须将其放置在给定机器的第一个(可启动)设备上。这可以通过使用这个示例来实现,前提是 sda 是第一个可启动磁盘设备

# dd if=/root/disk.img of=/dev/sda bs=1m

如果一切顺利,镜像现在应该在第一个设备的 MBR 中,并且可以重新启动机器。注意机器是否使用 ping(8) 工具正常启动。一旦机器恢复联机,应该可以以 root 用户身份使用已配置的密码通过 ssh(1) 访问机器。

4. FreeBSD 操作系统的安装

mfsBSD 已经成功启动,应该可以通过 ssh(1) 登录。本节将介绍如何创建和标记切片、设置用于 RAID-1 的 gmirror,以及如何使用 sysinstall 安装 FreeBSD 操作系统的最小发行版。

4.1. 硬盘的准备

第一个任务是为 FreeBSD 分配磁盘空间,即:创建切片和分区。显然,当前运行的系统完全加载到系统内存中,因此操作硬盘不会有任何问题。要完成此任务,可以使用 sysinstallfdisk(8)bsdlabel(8) 结合使用。

首先,将所有系统磁盘标记为空。对每个硬盘重复以下命令

# dd if=/dev/zero of=/dev/ad0 count=2

接下来,使用您喜欢的工具创建分区并标记它们。虽然使用sysinstall被认为更容易,但一种更强大也可能更稳定的方法是使用标准的基于文本的 UNIX® 工具,例如 fdisk(8)bsdlabel(8),本节也将介绍这些工具。前者在 FreeBSD 手册的 安装 FreeBSD 章中进行了详细说明。如引言中所述,本文将介绍如何设置具有 RAID-1 和 ZFS 功能的系统。我们的设置将包括一个小的 gmirror(8) 镜像的 / (根目录) 、/usr/var 数据集,剩余的磁盘空间将分配给一个 zpool(8) 镜像的 ZFS 文件系统。请注意,ZFS 文件系统将在 FreeBSD 操作系统成功安装并启动后进行配置。

以下示例将说明如何创建分区和标签、在每个分区上初始化 gmirror(8) 以及如何在每个镜像分区中创建 UFS2 文件系统。

# fdisk -BI /dev/ad0 (1)
# fdisk -BI /dev/ad1
# bsdlabel -wB /dev/ad0s1 (2)
# bsdlabel -wB /dev/ad1s1
# bsdlabel -e /dev/ad0s1 (3)
# bsdlabel /dev/ad0s1 > /tmp/bsdlabel.txt && bsdlabel -R /dev/ad1s1 /tmp/bsdlabel.txt (4)
# gmirror label root /dev/ad[01]s1a (5)
# gmirror label var /dev/ad[01]s1d
# gmirror label usr /dev/ad[01]s1e
# gmirror label -F swap /dev/ad[01]s1b (6)
# newfs /dev/mirror/root (7)
# newfs /dev/mirror/var
# newfs /dev/mirror/usr
1创建一个覆盖整个磁盘的分区,并初始化包含在给定磁盘的扇区 0 中的引导代码。对系统中的所有硬盘重复此命令。
2为每个磁盘编写一个标准标签,包括引导代码。
3现在,手动编辑给定磁盘的标签。请参考 bsdlabel(8) 手册页,了解如何创建分区。创建分区 a 用于 / (根目录) 文件系统,b 用于交换空间,d 用于 /vare 用于 /usr,最后是 f,它将在以后用于 ZFS。
4导入最近为第二个硬盘创建的标签,这样两个硬盘将以相同的方式进行标记。
5在每个分区上初始化 gmirror(8)
6请注意,-F 用于交换分区。这会指示 gmirror(8) 假设设备在电源/系统故障后处于一致状态。
7在每个镜像分区上创建一个 UFS2 文件系统。

4.2. 系统安装

这是最重要的部分。本节将描述如何在上一节准备的硬盘上实际安装 FreeBSD 的最小发行版。为了实现这一目标,所有文件系统都需要被挂载,以便 sysinstall 可以将 FreeBSD 的内容写入硬盘。

# mount /dev/mirror/root /mnt
# mkdir /mnt/var /mnt/usr
# mount /dev/mirror/var /mnt/var
# mount /dev/mirror/usr /mnt/usr

完成后,启动 sysinstall(8)。从主菜单中选择 自定义 安装。选择 选项 并按 Enter。使用箭头键将光标移动到 安装根目录 项目上,按 Space 并将其更改为 /mnt。按 Enter 提交更改,并通过按 q 退出 选项 菜单。

请注意,这一步非常重要,如果跳过,sysinstall 将无法安装 FreeBSD。

转到 发行版 菜单,使用箭头键将光标移动到 最小,并通过按 Space 选中它。本文使用最小发行版来节省网络流量,因为系统本身将通过 ftp 安装。通过选择 退出 退出此菜单。

将跳过 分区标签 菜单,因为它们现在没有用。

媒体 菜单中,选择 FTP。选择最近的镜像,并让 sysinstall 假设网络已经配置。您将返回到 自定义 菜单。

最后,通过选择最后一个选项 提交 来执行系统安装。当 sysinstall 完成安装后,退出它。

4.3. 安装后步骤

FreeBSD 操作系统现在应该已经安装了;但是,过程还没有完成。需要执行一些安装后步骤,才能让 FreeBSD 在将来启动并能够登录到系统。

您现在必须 chroot(8) 到新安装的系统中,以完成安装。使用以下命令

# chroot /mnt

为了完成我们的目标,请执行以下步骤

  • GENERIC 内核复制到 /boot/kernel 目录。

    # cp -Rp /boot/GENERIC/* /boot/kernel
  • 创建 /etc/rc.conf/etc/resolv.conf/etc/fstab 文件。不要忘记在 /etc/rc.conf 中正确设置网络信息并启用 sshd。 /etc/fstab 的内容将类似于以下内容

    # Device                Mountpoint      FStype  Options         Dump    Pass#
    /dev/mirror/swap        none            swap    sw              0       0
    /dev/mirror/root        /               ufs     rw              1       1
    /dev/mirror/usr         /usr            ufs     rw              2       2
    /dev/mirror/var         /var            ufs     rw              2       2
    /dev/cd0                /cdrom          cd9660  ro,noauto       0       0
  • 创建具有以下内容的 /boot/loader.conf

    geom_mirror_load="YES"
    zfs_load="YES"
  • 执行以下命令,这将使 ZFS 在下次启动时可用

    # sysrc zfs_enable="YES"
  • 使用 adduser(8) 工具将其他用户添加到系统中。不要忘记将用户添加到 wheel 组,这样您就可以在重启后获得 root 访问权限。

  • 仔细检查所有设置。

系统现在应该准备好在下次启动。使用 reboot(8) 命令重新启动系统。

5. ZFS

如果您的系统在重启后幸存下来,您现在应该可以登录了。欢迎来到新的 FreeBSD 安装,它是在没有使用远程控制台的情况下远程执行的!

剩下的唯一步骤是配置 zpool(8) 并创建一些 zfs(8) 文件系统。创建和管理 ZFS 非常简单。首先,创建一个镜像池

# zpool create tank mirror /dev/ad[01]s1f

接下来,创建一些文件系统

# zfs create tank/ports
# zfs create tank/src
# zfs set compression=gzip tank/ports
# zfs set compression=on tank/src
# zfs set mountpoint=/usr/ports tank/ports
# zfs set mountpoint=/usr/src tank/src

就是这样。如果您想了解有关 FreeBSD 上 ZFS 的更多详细信息,请参阅 FreeBSD Wiki 的 ZFS 部分。


最后修改时间: 2024 年 9 月 20 日,由 Fernando Apesteguía 修改