

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

# 按层操作系统程序包安装
<a name="per-layer-os-package-install"></a>

**重要**  
该 AWS OpsWorks Stacks 服务于 2024 年 5 月 26 日终止，新客户和现有客户均已禁用。我们强烈建议客户尽快将其工作负载迁移到其他解决方案。如果您对迁移有疑问，请通过 re [AWS : Post 或通过 Pre](https://repost.aws/) mium Su [AWS pp](https://aws.amazon.com/support) ort 与 AWS 支持 团队联系。

从 Chef 12 开始，您必须使用自定义配方将程序包安装到正在运行不同操作系统的层上。这种方法会在程序包安装方面为您提供极大的灵活性和控制力。

例如，假设你要将 Apache 安装在正在运行的各层 RedHat、Ubuntu 和 Amazon 版本的 Linux 操作系统上。Apache 软件包 RedHat 和 Amazon Linux 被调用`httpd`，但在 Ubuntu 上，它被称为。`apache2`

要解决程序包命名方面的这种差异，您可以使用类似于下面的示例配方中的语法。该配方可安装适用于各个操作系统的 Apache 程序包。此示例基于 [Chef 文档](https://docs.chef.io/)。

```
package "Install Apache" do
   case node[:platform]
      when "redhat", "amazon"
         package_name "httpd"
      when "ubuntu"
         package_name "apache2"
   end
end
```

有关如何使用 `package` 资源来管理包的详细信息，请转到 Chef 文档中的[包](https://docs.chef.io/resource_package.html)页面。

或者，您也可以使用 Chef 配方 DSL (领域特定的语言) 的 `value_for_platform` 帮助程序方法，这种方法可以更加简便地完成同样的任务：

```
package "Install Apache" do
   package_name value_for_platform(
      ["redhat", "amazon"] => { "default" => "httpd" },
      ["ubuntu"] => { "default" => "apache2" }
   )
end
```

有关使用 `value_for_platform` 帮助程序方法的信息，请转到 [About the Recipe DSL](https://docs.chef.io/dsl_recipe.html)。