教程:创建基于 Linux 的自定义 AppStream 2.0 映像 - 亚马逊 AppStream 2.0

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

教程:创建基于 Linux 的自定义 AppStream 2.0 映像

本教程介绍如何创建基于 Linux 的自定义 Amazon AppStream 2.0 映像,其中包含可以流式传输给用户的应用程序。

步骤 1:在映像生成器上安装 Linux 应用程序

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

在映像生成器上安装应用程序
  1. 通过执行以下任一操作来连接到映像生成器:

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

    [ImageBuilderAdmin]$ sudo yum update && sudo yum install chromium.x86_64

    注意

    仅从您信任的站点下载并安装应用程序。

步骤 2:生成应用程序优化清单文件

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

生成清单文件以优化应用程序的启动性能
  1. 确保您尝试优化的应用程序(如 Chromium)已启动并正在运行。

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

    [ImageBuilderAdmin]$ ps -ef | grep chromium

  3. 从上面命令的输出中找到根父 PID。以下是示例输出,根父 PID 为 16712:

    [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
  4. 保持应用程序运行,并确保使用用户所需的初始组件。这就确保了优化过程能够捕获这些组件。

  5. 创建包含以下内容的脚本文件(如 ~/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'
  6. 通过运行以下命令验证是否可以运行该文件:

    [ImageBuilderAdmin]$ chmod u+x ~/getfilestool.sh

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

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

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

步骤 3:创建 AppStream 2.0 应用程序目录

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

创建 AppStream 2.0 应用程序目录
  1. 在映像生成器桌面上,从侧面板或通过打开应用程序网格打开终端

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

  3. 运行以下命令将已安装的应用程序(例如 Chromium)添加到 AppStream 2.0 用户的应用程序列表中:

    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"
  4. 要添加更多应用程序,请对每个其他应用程序重复步骤 3。

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

    AppStreamImageAssistant list-applications

  6. 要从目录中删除应用程序,请运行以下命令:

    AppStreamImageAssistant remove-application –-name application_name

步骤 4:创建默认应用程序设置和环境变量

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

为用户创建默认应用程序和环境变量
  1. 启动要为其创建默认设置的应用程序。例如,在终端窗口中,运行以下命令启动 Chromium 浏览器:

    [ImageBuilderAdmin]$ chromium-browser

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

  3. 运行以下命令将 Chromium 的配置复制到 /etc/skel

    [ImageBuilderAdmin]$ sudo mkdir /etc/skel/.config

    [ImageBuilderAdmin]$ sudo cp -R ~/.config/chromium /etc/skel/.config

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

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

    [ImageBuilderAdmin]$ sudo chmod +x /etc/profile.d/myenvvars.sh

步骤 5:测试应用程序和设置

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

在映像生成器上测试您的应用程序和默认设置
  1. 创建一个没有根权限的测试用户。例如,在终端窗口中,运行以下命令以在映像生成器上创建 test-user

    [ImageBuilderAdmin]$ sudo useradd -m test-user

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

  2. 切换到测试用户:

    [ImageBuilderAdmin]$ su - test-user

  3. 以测试用户身份启动应用程序(例如 Chromium):

    [test-user]$ /usr/bin/chromium-browser

  4. 验证测试用户是否可以使用默认设置(例如,Chromium 的主页为 https://aws.amazon.com/)。

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

    [test-user]$ echo $FOO

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

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

    # logout test user

    [test-user]$ logout

    # kill test user's running processes

    [ImageBuilderAdmin]$ sudo killall -u test-user

    # delete user

    [ImageBuilderAdmin]$ sudo userdel -r test-user

步骤 6:完成映像的创建

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

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

    要查看可用选项列表,请运行 AppStreamImageAssistant create-image --help。有关更多信息,请参阅使用 Image Assistant CLI 操作以编程方式创建 AppStream 2.0 映像中的 create-image 操作。

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

  3. 返回到控制台并导航到 ImagesImage Registry。验证您的新映像是否出现在列表中。

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

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

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

步骤 7(可选):标记和复制映像

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

注意

您可以同时将最多两个映像复制到一个目标。如果将映像复制到的目标达到映像限制,您将收到一条错误。在这种情况下,要复制映像,您必须先从目标中删除映像。在目标低于映像配额(也称为限制)后,开始从源区域复制映像。有关更多信息,请参阅Amazon AppStream 2.0 服务限额

向现有映像添加标签
  1. 在导航窗格中,选择 Images (映像) 和 Image Registry (映像注册表)。

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

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

有关更多信息,请参阅为 Amazon AppStream 2.0 资源添加标签

复制映像

通过跨地理位置不同的区域复制映像,您可以基于同一映像从多个区域流式传输应用程序。通过将应用程序流式传输到更接近用户的位置,您可以改善使用 AppStream 2.0 流式传输应用程序的用户体验。

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

  2. 在映像列表中,选择要复制的映像。

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

  4. Copy Image (复制映像) 对话框中,指定以下信息,然后选择 Copy Image: (复制映像:)

    • 对于 Destination region (目标区域) 中,选择要将新映像复制到的区域。

    • 对于 Name (名称),指定映像在复制到目标时将具有的名称。

    • 对于可选的 Description (描述),指定映像在复制到目标时将具有的描述。

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

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

步骤 8:清除

最后,您可以停止运行中的映像生成器以释放资源并避免您的账户产生意外费用。建议您停止任何未使用的、运行中的映像生成器。有关更多信息,请参阅 AppStream 2.0 定价

停止运行中的映像生成器
  1. 在导航窗格中,选择 ImagesImage Builders,然后选择运行中的映像生成器实例。

  2. 依次选择 ActionsStop