示例:FreeBSD 镜像

本示例创建一个与 OpenStack 和 bsd-cloudinit 兼容的最小 FreeBSD 镜像。 bsd-cloudinit 程序由独立团队维护并积极开发中。有关项目当前状态的最佳信息来源是 bsd-cloudinit

KVM 与 virtio 驱动程序被用作虚拟化平台,因为这是 OpenStack 操作员中最广泛使用的平台。 如果您为云虚拟化使用不同的平台,请在镜像创建步骤中使用相同的平台。

本示例演示如何创建 FreeBSD 10 镜像。 要创建 FreeBSD 9.2 镜像,请遵循以下步骤,并注意所做的更改。

先决条件

  1. 创建一个虚拟磁盘

    $ qemu-img create -f qcow2 freebsd.qcow2 1G
    

    FreeBSD 支持的最小磁盘大小为 1 GB。 由于目标是创建尽可能小的基本镜像,因此示例使用该最小大小。 该大小足以包含可选的 docgameslib32 集合。 要包含 ports 集合,请再添加 1 GB。 要包含 src,请添加 512 MB。

  2. 获取安装程序 ISO

    $ curl ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.1/FreeBSD-10.1-RELEASE-amd64-bootonly.iso \
      > FreeBSD-10.1-RELEASE-amd64-bootonly.iso
    
  3. 在您的本地工作站上启动虚拟机。 使用与您的生产环境相同的 hypervisor、虚拟磁盘和虚拟网络驱动程序。

    以下命令使用最少量的 RAM,即 256 MB

    $ kvm -smp 1 -m 256 -cdrom FreeBSD-10.1-RELEASE-amd64-bootonly.iso \
      -drive if=virtio,file=freebsd.qcow2 \
      -net nic,model=virtio -net user
    

    您可以指定最多 1 GB 的额外 RAM 以加快安装过程。

    此虚拟机还必须具有互联网访问权限才能下载软件包。

    注意

    通过使用相同的 hypervisor,您可以确保模拟与生产环境中存在的相同的设备。 但是,如果您使用完全硬件虚拟化而不是准虚拟化,则不需要使用相同的 hypervisor;您必须使用相同类型的虚拟化硬件,因为 FreeBSD 设备名称与它们的驱动程序相关。 如果您的生产环境中根块设备或主网络接口的名称与镜像创建期间使用的名称不同,则可能会发生错误。

    现在您拥有一个从下载的安装 ISO 启动并连接到您之前创建的空白虚拟磁盘的虚拟机。

安装

  1. 要安装操作系统,请在虚拟机内部完成以下步骤

    1. 系统提示时,选择以 安装 模式运行 ISO。

    2. 接受默认键盘映射或选择适合您需求的映射。

    3. 为您的镜像提供主机名。 如果您使用 bsd-cloudinit,它将用 OpenStack 在从该镜像启动实例时提供的名称覆盖此值。

    4. 当系统提示有关可选的 docgameslib32portssrc 系统组件时,仅选择您需要的组件。 可以进行完全正常安装,而无需选择其他组件。 如前所述,具有 1 GB 虚拟磁盘的最小系统支持 docgameslib32ports 集合需要至少 1 GB 的额外空间,并且如果您计划安装许多端口,可能需要更多空间。 src 集合需要额外的 512 MB。

    5. 将主网络接口配置为使用 DHCP。 在本示例中,使用 virtio 网络设备,该接口名为 vtnet0

    6. 接受默认网络镜像。

    7. 设置磁盘分区。

      磁盘分区是镜像创建过程的关键要素,并且当前的自动生成默认分区方案与 bsd-cloudinit 不兼容。

      由于默认设置不起作用,因此您必须选择手动分区。 分区编辑器应仅列出单个块设备。 如果您使用 virtio 作为磁盘设备驱动程序,则其名称为 vtbd0。 选择此设备并运行 create 命令三次

      1. 选择 创建 以创建分区表。 当不存在分区表时,此操作是默认操作。 然后,从列表中选择 GPT GUID 分区表。 此选择是默认选项。

      2. 创建两个分区

        • 第一个分区:64 kB freebsd-boot 分区,没有挂载点。

        • 第二个分区:一个 freebsd-ufs 分区,挂载点为 /,并使用所有剩余的可用空间。

      下图显示了一个具有 1 GB 虚拟磁盘的完成分区表

      _images/freebsd-partitions.png

      选择 完成,然后选择 提交 以提交您的更改。

      注意

      如果您修改此示例,则挂载在 / 上的根分区必须是驱动器上的最后一个分区,以便在运行时扩展到您的实例类型提供的磁盘大小。 另外请注意,bsd-cloudinit 当前有一个硬编码假设,即这是第二个分区。

  2. 选择一个根密码。

  3. 选择 CMOS 时区。

    虚拟 CMOS 几乎总是以 UTC 存储其时间,因此,除非您知道其他情况,否则请选择 UTC。

  4. 选择适合您环境的时区。

  5. 从启动时要启动的服务列表中,您必须选择 ssh。 可选地,选择其他服务。

  6. 可选地,添加用户。

    您现在不需要添加用户。 bsd-cloudinit 程序会添加一个 freebsd 用户帐户(如果不存在)。 此用户的 ssh 密钥与 OpenStack 相关联。 要自定义此用户帐户,您现在可以创建它。 例如,您可能希望自定义用户的 shell。

  7. 最终配置

    此菜单使您可以更新以前的设置。 检查设置是否正确,然后单击 退出

  8. 退出后,您可以打开 shell 以完成手动配置步骤。 选择 以进行一些 OpenStack 特定的更改

    1. 设置控制台

      # echo 'console="comconsole,vidconsole"' >> /boot/loader.conf
      

      这将设置控制台输出到序列控制台,该控制台由 nova consolelog 显示,以及具有 VNC 或 Spice 配置的站点的视频控制台。

    2. 最小化启动延迟

      # echo 'autoboot_delay="1"' >> /boot/loader.conf
      
    3. 下载最新的 bsd-cloudinit-installer。 由于 fetch 命令处理 HTTPS URL 的方式不同,因此 FreeBSD 10.1 和 9.2 之间的下载命令不同。

      在 FreeBSD 10.1 中,fetch 命令默认情况下会验证 SSL 对等体,因此您需要安装包含证书颁发机构根证书的 ca_root_nss 包,并告诉 fetch 在哪里找到它们。 对于 FreeBSD 10.1,运行以下命令

      # pkg install ca_root_nss
      # fetch --ca-cert=/usr/local/share/certs/ca-root-nss.crt \
        https://raw.github.com/pellaeon/bsd-cloudinit-installer/2025.2/installer.sh
      

      FreeBSD 9.2 fetch 不支持 https 的对等体验证。 对于 FreeBSD 9.2,运行此命令

      # fetch https://raw.github.com/pellaeon/bsd-cloudinit-installer/2025.2/installer.sh
      
    4. 运行安装程序

      # sh ./installer.sh
      

      发出此命令以下载并安装最新的 bsd-cloudinit 包,并安装必要的先决条件。

    5. 安装 sudo 并配置 freebsd 用户以具有无密码访问权限

      # pkg install sudo
      # echo 'freebsd ALL=(ALL) NOPASSWD: ALL' > /usr/local/etc/sudoers.d/10-cloudinit
      
  9. 关闭系统

    # shutdown -h now