

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

# 教程：创建基于 Linux 的 WorkSpaces 自定义应用程序镜像
<a name="tutorial-create-linux-image"></a>

本教程介绍如何创建基于 Linux 的自定义 Amazon Appl WorkSpaces ications 镜像，其中包含可以流式传输给用户的应用程序。

**重要**  
不要在映像生成器中创建名为“as2-streaming-user”的用户。这是实例集的保留用户名。如果您在 WorkSpaces 应用程序工作流程之外创建此用户名，则可能会在 Fleets 中遇到流式传输问题。

**Topics**
+ [

## 步骤 1：在映像生成器上安装 Linux 应用程序
](#tutorial-linux-image-install)
+ [

## 步骤 2：生成应用程序优化清单文件
](#tutorial-linux-image-manifest)
+ [

## 步骤 3：创建 WorkSpaces 应用程序应用程序目录
](#tutorial-linux-image-catalog)
+ [

## 步骤 4：创建默认应用程序设置和环境变量
](#tutorial-linux-image-create-default-app-settings)
+ [

## 步骤 5：测试应用程序和设置
](#tutorial-linux-image-test-applications)
+ [

## 步骤 6：完成映像的创建
](#tutorial-linux-image-finish-create-image)
+ [

## 步骤 7（可选）：标记和复制映像
](#tutorial-linux-image-tag-copy)
+ [

## 步骤 8：清除
](#tutorial-linux-image-finish)

## 步骤 1：在映像生成器上安装 Linux 应用程序
<a name="tutorial-linux-image-install"></a>

在此步骤中，您将连接 Linux 映像生成器并在该映像生成器上安装您的应用程序。

**在映像生成器上安装应用程序**

1. 通过执行以下任一操作来连接到映像生成器：
   + [使用 WorkSpaces 应用程序控制台](managing-image-builders-connect-console.md)（仅适用于 Web 连接）
   + [创建直播 URL](managing-image-builders-connect-streaming-URL.md)（用于 Web 或 WorkSpaces 应用程序客户端连接）
**注意**  
您将以 ImageBuilderAdmin 用户身份登录到 Amazon Linux GNOME 桌面并拥有根管理员权限。

1. 安装所需的应用程序。例如，要从公有 yum 存储库安装 Chromium 浏览器，请先打开终端应用程序，然后运行以下命令：

   **[ImageBuilderAdmin]\$1 sudo yum update && sudo yum install chromium.x86\$164** 
**注意**  
仅从您信任的站点下载并安装应用程序。

## 步骤 2：生成应用程序优化清单文件
<a name="tutorial-linux-image-manifest"></a>

在此步骤中，您将为步骤 1 中安装的每个应用程序生成一个清单文件。

**生成清单文件以优化应用程序的启动性能**

1. 确保您尝试优化的应用程序（如 Chromium）已启动并正在运行。

1. 在终端窗口中运行以下命令，以列出与应用程序相关的进程：

   **[ImageBuilderAdmin]\$1 ps -ef \$1 grep chromium **

1. 从上面命令的输出中找到根父 PID。以下是示例输出，根父 PID 为 16712：  
**Example**  

   ```
   [ImageBuilderAdmin]$ ps -ef | grep chromium
   
   ImageBu+ 16712 4128 0 Aug26 ? 00:00:44 /usr/lib64/chromium- browser/chromium-browser --enable-plugins --enable-extensions -- enable-user- scripts --enable-printing --enable-gpu-rasterization -- enable-sync --auto-ssl- client-auth
   
   ImageBu+ 16726 16712 0 Aug26 ? 00:00:00 /usr/lib64/chromium- browser/chromium-browser --type=zygote --no-zygote-sandbox ImageBu+ 16727 16712 0 Aug26 ? 00:00:00 /usr/lib64/chromium- browser/chromium- browser --type=zygote
   
   ImageBu+ 16731 16727 0 Aug26 ? 00:00:00 /usr/lib64/chromium- browser/chromium-browser --type=zygot
   ```

1. 保持应用程序运行，并确保使用用户所需的初始组件。这就确保了优化过程能够捕获这些组件。

1. 创建包含以下内容的脚本文件（如 `~/getfilestool.sh`）：

   ```
   #!/bin/bash
   ## usage getfilestool.sh $pid
   lsof -p $(pstree -p $1 | grep -o '([0-9]\+)' | grep -o '[0-9]\+' | tr '\012' ,)|grep REG | sed -n '1!p' | awk '{print $9}'|awk 'NF'
   ```

1. 通过运行以下命令验证是否可以运行该文件：

   **[ImageBuilderAdmin]\$1 chmod u\$1x \$1/getfilestool.sh** 

1. 运行以下命令，从上述步骤 3 中找到的根父进程中捕获所有正在运行的文件，并将其保存到临时清单文件：

   **[ImageBuilderAdmin]\$1 sudo \$1/getfilestool.sh 16712 > /tmp/chromium-manifest.txt **

1. 验证优化清单的内容，该清单是每个应用程序的以行分隔的文本文件。

## 步骤 3：创建 WorkSpaces 应用程序应用程序目录
<a name="tutorial-linux-image-catalog"></a>

在此步骤中，您将使用映像生成器`AppStreamImageAssistant`上的 CLI 工具，通过为映像指定应用程序来创建应用程序目录。 WorkSpaces 对于您计划流式传输的每个应用程序，可以指定名称、显示名称、要启动的可执行文件和要显示的图标。

**创建 WorkSpaces 应用程序应用程序目录**

1. 在映像生成器桌面上，从侧面板或通过打开应用程序网格打开**终端**。

1. 运行 **AppStreamImageAssistant --help** 以查看可用命令列表。您将使用这些命令来添加应用程序和创建映像。

1. 运行以下命令将已安装的应用程序（例如 Chromium）添加到应用程序用户的 WorkSpaces 应用程序列表中：

   ```
   AppStreamImageAssistant add-application \
    --name Chromium \
    --absolute-app-path /usr/lib64/chromium-browser/chromium-browser \
    --display-name Chromium \
    --absolute-icon-path /usr/share/icons/hicolor/256x256/apps/chromium-browser.png \
    --absolute-manifest-path /tmp/chromium-manifest.txt
   ```

   或者，运行以下命令：

   ```
   AppStreamImageAssistant add-application \
    --name="Chromium" \
    --absolute-app-path="/usr/lib64/chromium-browser/chromium-browser" \
    --display-name="Chromium" \
    --absolute-icon-path="/usr/share/icons/hicolor/256x256/apps/chromium-browser.png" \
    --absolute-manifest-path="/tmp/chromium-manifest.txt"
   ```

1. 要添加更多应用程序，请对每个其他应用程序重复步骤 3。

1. 要查看已添加到目录中的应用程序列表以及图标路径和启动参数等元数据，请运行以下命令：

   **AppStreamImageAssistant list-applications**

1. 要从目录中删除应用程序，请运行以下命令：

   **AppStreamImageAssistant remove-application –-name *application\$1name***

## 步骤 4：创建默认应用程序设置和环境变量
<a name="tutorial-linux-image-create-default-app-settings"></a>

在此步骤中，您将为应用程序用户创建默认的应用程序设置和环境变量。 WorkSpaces 这样做可以让您的用户在应用程序流式传输会话期间快速开始使用 WorkSpaces 应用程序，而无需自己创建或配置这些设置。

**为用户创建默认应用程序和环境变量**

1. 启动要为其创建默认设置的应用程序。例如，在终端窗口中，运行以下命令启动 Chromium 浏览器：

    **[ImageBuilderAdmin]\$1 chromium-browser**

1. 配置应用程序的设置。例如，将 Chromium 浏览器的主页设置为 **https://aws.amazon.com**。

1. 确保 Chromium 应用程序已关闭，然后运行以下命令将 Chromium 的配置复制到 **/etc/skel**：

   **[ImageBuilderAdmin]\$1 sudo mkdir /etc/skel/.config**

   **[ImageBuilderAdmin]\$1 sudo cp -R \$1/.config/chromium /etc/skel/.config** 

1. 设置环境变量并将其添加到脚本文件中。例如，运行以下命令：

   **[ImageBuilderAdmin]\$1 echo "export *FOO*=*BAR*" \$1 sudo tee -a /etc/profile.d/myenvvars.sh** 

   **[ImageBuilderAdmin]\$1 sudo chmod \$1x /etc/profile.d/myenvvars.sh** 

## 步骤 5：测试应用程序和设置
<a name="tutorial-linux-image-test-applications"></a>

在此步骤中，请验证您添加的应用程序是否正常运行，以及默认应用程序设置和环境变量是否按预期运行。

**在映像生成器上测试您的应用程序和默认设置**

1. 创建一个没有根权限的测试用户。例如，在**终端**窗口中，运行以下命令以在映像生成器上创建 **test-user**：

   **[ImageBuilderAdmin]\$1 sudo useradd -m test-user**

   **[ImageBuilderAdmin]\$1 echo -e 'Pa55w0rdas2\$1\$1\$1\$1nPa55w0rdas2\$1\$1\$1\$1n' \$1 sudo passwd test-user** 

1. 切换到测试用户：

   **[ImageBuilderAdmin]\$1 su - test-user**

1. 以测试用户身份启动应用程序（例如 Chromium）：

   **[test-user]\$1 /usr/bin/chromium-browser** 

1. 确认测试用户可以使用默认设置（例如，Chromium 主页为 https://aws.amazon.com/）。

1. 验证测试用户是否可以使用环境变量。例如，运行以下命令：

   **[test-user]\$1 echo \$1*FOO***

   此命令应在终端中显示输出 ***BAR***。

1. 使用此映像生成器创建映像之前，请运行以下命令以删除测试用户：

   **\$1 logout test user**

   **[test-user]\$1 logout**

   **\$1 kill test user's running processes**

   **[ImageBuilderAdmin]\$1 sudo killall -u test-user**

   **\$1 delete user**

   **[ImageBuilderAdmin]\$1 sudo userdel -r test-user**

## 步骤 6：完成映像的创建
<a name="tutorial-linux-image-finish-create-image"></a>

在此步骤中，选择映像名称并完成映像的创建。

**创建映像**

1. 在**终端**窗口中，通过运行 **AppStreamImageAssistant create-image** 从映像生成器创建映像。此映像包含您已安装和注册的应用程序，以及您已配置的所有会话脚本和默认应用程序设置。

   要查看可用选项列表，请运行 **AppStreamImageAssistant create-image --help**。有关更多信息，请参阅[使用镜像助手 CLI 操作以编程方式创建您的 Amazon WorkSpaces 应用程序映像](programmatically-create-image.md)中的 **create-image** 操作。

1. 远程会话在片刻之后断开连接。当 **Lost Connectivity (连接丢失)** 消息出现时，关闭浏览器选项卡。在创建映像时，映像生成器状态将显示为 **Snapshotting (正在拍摄快照)**。在此过程完成之前，您无法连接到映像生成器。

1. 返回到控制台并导航到 **Images**、**Image Registry**。验证您的新映像是否出现在列表中。

   创建映像时，控制台的映像注册表中的映像状态将显示为 **Pending (待处理)**。您无法连接到处于**待处理**状态的映像。

1. 请选择**刷新**图标来更新状态。在创建映像后，映像状态将更改为 **Available (可用)**，并且映像生成器将自动停止。

   要继续创建映像，请启动映像生成器并从控制台连接到该生成器，或创建新的映像生成器。

## 步骤 7（可选）：标记和复制映像
<a name="tutorial-linux-image-tag-copy"></a>

您可以在创建映像期间或创建映像后向映像添加一个或多个标签。您也可以在同一区域内复制该映像，或者将该映像复制到同一 Amazon Web Services 账户中的新区域。复制源图像会生成相同但不同的目标图像。 AWS 但是，不会复制任何用户定义的标签。此外，您只能复制您创建的自定义映像，而不能复制由 AWS提供的基本映像。

**注意**  
您可以同时将最多两个映像复制到一个目标。如果将映像复制到的目标达到映像限制，您将收到一条错误。在这种情况下，要复制映像，您必须先从目标中删除映像。在目标低于映像配额（也称为限制）后，开始从源区域复制映像。有关更多信息，请参阅 [亚马逊 WorkSpaces 应用程序服务配额](limits.md)。

**向现有映像添加标签**

1. 在导航窗格中，选择 **Images** (映像) 和 **Image Registry** (映像注册表)。

1. 在映像列表中，选择要添加标签的映像。

1. 请依次选择**标签**、**添加/编辑标签**、**添加标签**。为标签指定键和值，然后选择**保存**。

有关更多信息，请参阅 [标记您的 Amazon WorkSpaces 应用程序资源](tagging-basic.md)。

**复制映像**

通过跨地理位置不同的区域复制映像，您可以基于同一映像从多个区域流式传输应用程序。通过在离用户更近的地方流式传输应用程序，可以改善用户使用应用程序流式传输 WorkSpaces 应用程序的体验。

1. 在导航窗格中，选择 **Images** (映像) 和 **Image Registry** (映像注册表)。

1. 在映像列表中，选择要复制的映像。

1. 选择 **Actions** (操作) 和 **Copy** (复制)。

1. 在 **Copy Image** (复制映像) 对话框中，指定以下信息，然后选择 **Copy Image:** (复制映像：)
   + 对于 **Destination region** (目标区域) 中，选择要将新映像复制到的区域。
   + 对于 **Name** (名称)，指定映像在复制到目标时将具有的名称。
   + 对于可选的 **Description** (描述)，指定映像在复制到目标时将具有的描述。

1. 要检查复制操作的进度，请返回控制台并导航到 **Images** (映像) 和 **Image Registry** (映像注册表)。使用导航栏切换到目标区域 (如果适用)，并确认您的新映像显示在映像列表中。

   新映像首次显示在控制台的映像注册表中时，其状态为 **Copying** (正在复制)。成功创建映像后，映像的状态将变为 **Available**，这意味着您可以使用映像启动堆栈并流式传输您的应用程序。

## 步骤 8：清除
<a name="tutorial-linux-image-finish"></a>

最后，您可以停止运行中的映像生成器以释放资源并避免您的账户产生意外费用。建议您停止任何未使用的、运行中的映像生成器。有关更多信息，请参阅[WorkSpaces 应用程序定价](https://aws.amazon.com/appstream2/pricing/)。

**停止运行中的映像生成器**

1. 在导航窗格中，选择 **Images** 和 **Image Builders**，然后选择运行中的映像生成器实例。

1. 依次选择 **Actions** 和 **Stop**。