

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# KVM 和 VMware 上的 Amazon Linux 2023 的 NoCloud (`seed.iso`) `cloud-init` 配置
<a name="seed-iso"></a>

 这部分介绍如何创建和使用 `seed.iso` 映像来配置在 KVM 或 VMware 上运行的 Amazon Linux 2023。由于 KVM 和 VMware 环境没有 [Amazon EC2 实例元数据服务 (IMDS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service)，因此需要一种配置 Amazon Linux 2023 的替代方法，而提供 `seed.iso` 映像就是其中一种方法。

 `seed.iso` 启动映像包括启动和配置新的虚拟机所需的初始配置信息，例如网络配置、主机名和用户数据。

**注意**  
 `seed.iso` 映像仅包括启动虚拟机所需的配置信息，它不包括 Amazon Linux 2023 操作系统文件。

 要生成 `seed.iso` 映像，您至少需要两个配置文件，有时则需要三个：

** `meta-data` **  
 此文件通常包含虚拟机的主机名。

** `user-data` **  
 此文件通常配置用户账户、用户密码、ssh 密钥对和/或访问机制。默认情况下，Amazon Linux 2023 KVM 和 VMware 映像会创建一个 `ec2-user` 用户账户。您可以使用 `user-data` 配置文件为此默认用户账户设置密码和/或 ssh 密钥。

** `network-config`（可选） **  
 此文件通常为虚拟机提供网络配置，该配置将覆盖默认配置。默认配置是在第一个可用网络接口上使用 DHCP。

**创建 `seed.iso` 磁盘映像**

1. 在 Linux 或 MacOS 计算机上，创建一个名为 `seedconfig` 的新文件夹并导航到该文件夹。
**注意**  
 虽然可以使用 Windows 或其他操作系统完成这些步骤，但您必须找到 `mkisofs` 的等效工具才能完成创建 `seed.iso` 映像。

1. 创建 `meta-data` 配置文件。

   1. 创建名为 `meta-data` 的新文件。

   1.  使用首选编辑器打开 `meta-data` 文件并添加以下内容，将 {{vm-hostname}} 替换为虚拟机的主机名：

      ```
      #cloud-config
      local-hostname: {{vm-hostname}}
      ```

   1. 保存并关闭 `meta-data` 配置文件。

1. 创建 `user-data` 配置文件。

   1. 创建名为 `user-data` 的新文件。

   1.  使用首选编辑器打开 `user-data` 文件并添加以下内容，进行必要的替换：

      ```
      #cloud-config
      #vim:syntax=yaml
      users:
      # A user by the name 'ec2-user' is created in the image by default.
        - default
        - name: ec2-user
      ssh_authorized_keys:
        - ssh-rsa {{ssh-key}}
      # In the above line, replace {{ssh key}} with the content of your ssh public key.
      ```

   1.  您可以选择性地向 `user-data` 配置文件中添加更多用户账户。

       您可以指定其他用户账户、用户访问机制、密码和密钥对。有关支持的指令的更多信息，请参阅[上游 `cloud-init` 文档](https://cloudinit.readthedocs.io/en/22.2/topics/format.html)。

   1. 保存并关闭 `user-data` 配置文件。

1. （可选）创建 `network-config` 配置文件。

   1. 创建名为 `network-config` 的新文件。

   1.  使用首选编辑器打开 `network-config` 文件并添加以下内容，将各个 IP 地址替换为适合您的设置的地址。

      ```
      #cloud-config
      version: 2
      ethernets:
        enp1s0:
          addresses:
            - {{192.168.122.161/24}}
          gateway4: {{192.168.122.1}}
          nameservers:
            addresses: {{192.168.122.1}}
      ```
**注意**  
 `cloud-init` 网络配置提供了与接口的 MAC 地址匹配的机制，而不是指定接口名称，接口名称可能会根据虚拟机配置而变化。[上游 `cloud-init` 网络配置版本 2 文档](https://cloudinit.readthedocs.io/en/22.2/topics/network-config-format-v2.html)中详细描述了网络配置的这个（以及更多）`cloud-init` 功能。

   1. 保存并关闭 `network-config` 配置文件。

1.  使用在前面步骤中创建的 `meta-data`、`user-data` 和可选的 `network-config` 配置文件创建 `seed.iso` 磁盘映像。

    根据要在其上创建 `seed.iso` 磁盘映像的操作系统，执行以下操作之一。
   +  在 Linux 系统上，使用 **mkisofs** 或 **genisoimage** 之类的工具来创建已完成的 `seed.iso` 文件。导航到 `seedconfig` 文件夹，并运行以下命令：

     ```
     $ mkisofs -output seed.iso -volid cidata -joliet -rock user-data meta-data
     ```
   +  如果您使用 `network-config`，则将其包含在 **mkisofs** 调用中：

     ```
     $ mkisofs -output seed.iso -volid cidata -joliet -rock user-data meta-data network-config
     ```
   +  在 macOS 系统上，您可以使用 **hdiutil** 之类的工具来生成已完成的 `seed.iso` 文件。由于 **hdiutil** 采用路径名而不是文件列表，因此无论是否创建了 `network-config` 配置文件，都可以使用相同的调用。

     ```
     $ hdiutil makehybrid -o seed.iso -hfs -joliet -iso -default-volume-name cidata seedconfig/
     ```

1.  现在，生成的 `seed.iso` 文件可以通过虚拟 CD-ROM 驱动器附加到您的新 Amazon Linux 2023 虚拟机，以便在首次启动时被 `cloud-init` 找到并将配置应用到系统。