

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

# 使用手动资源配置来安装 AWS IoT Greengrass Core 软件
<a name="manual-installation"></a>

 AWS IoT Greengrass 核心软件包括一个安装程序，可将您的设备设置为 Greengrass 核心设备。要手动设置设备，您可以创建设备要使用的必需资源 AWS IoT 和 IAM 资源。如果您手动创建这些资源，则无需向安装程序提供 AWS 凭据。

手动安装 AWS IoT Greengrass Core 软件时，也可以将设备配置为使用网络代理或通过端口 443 AWS 进行连接。例如，如果您的设备在防火墙或网络代理后方运行，则可能需要指定这些配置选项。有关更多信息，请参阅 [通过端口 443 或网络代理进行连接](configure-greengrass-core-v2.md#configure-alpn-network-proxy)。

您也可以通过 [PKCS \$111](https://en.wikipedia.org/wiki/PKCS_11) 接口将 AWS IoT Greengrass 核心软件配置为使用硬件安全模块 (HSM)。此功能使您能够安全地存储私有密钥和证书文件，避免其在软件中暴露或重复。您可以将私有密钥和证书存储在 HSM 或可信平台模块（TPM）等硬件模块上或其他加密元素中。此功能仅在 Linux 设备上可用。有关硬件安全性及其使用要求的更多信息，请参阅 [硬件安全性集成](hardware-security.md)。

**重要**  <a name="install-greengrass-core-requirements-note"></a>
在下载 AWS IoT Greengrass 酷睿软件之前，请检查您的核心设备是否满足安装和运行 AWS IoT Greengrass 酷睿软件 v2.0 的[要求](greengrass-nucleus-component.md#greengrass-v2-requirements)。

**Topics**
+ [检索 AWS IoT 端点](#retrieve-iot-endpoints)
+ [创建 AWS IoT 事物](#create-iot-thing)
+ [创建事物证书](#create-thing-certificate)
+ [配置事物证书](#configure-thing-certificate)
+ [创建令牌交换角色](#create-token-exchange-role)
+ [将证书下载到设备](#download-thing-certificates)
+ [设置设备环境](#set-up-device-environment)
+ [下载 AWS IoT Greengrass 核心软件](#download-greengrass-core-v2)
+ [安装 AWS IoT Greengrass 核心软件](#run-greengrass-core-v2-installer-manual)

## 检索 AWS IoT 端点
<a name="retrieve-iot-endpoints"></a>

获取您的终 AWS IoT 端节点 AWS 账户，然后将其保存以备后用。您的设备使用这些端点来连接 AWS IoT。执行以下操作：

1. 获取您的 AWS IoT 数据端点 AWS 账户。

   ```
   aws iot describe-endpoint --endpoint-type iot:Data-ATS
   ```

   如果请求成功，响应类似如下示例。

   ```
   {
     "endpointAddress": "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
   }
   ```

1. 获取您的 AWS IoT 凭证端点 AWS 账户。

   ```
   aws iot describe-endpoint --endpoint-type iot:CredentialProvider
   ```

   如果请求成功，响应类似如下示例。

   ```
   {
     "endpointAddress": "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   }
   ```

## 创建 AWS IoT 事物
<a name="create-iot-thing"></a>

AWS IoT *事物*代表连接到的设备和逻辑实体 AWS IoT。Greengrass 的核心设备就是东西。 AWS IoT 当您将设备注册为 AWS IoT 事物时，该设备可以使用数字证书进行身份验证 AWS。

在本节中，您将创建一个代表您的设备的 AWS IoT 东西。

**创建 AWS IoT 事物**

1. 为你的设备创建 AWS IoT 一件东西。在开发计算机上运行以下命令。
   + *MyGreengrassCore*替换为要使用的事物名称。此名称也是您 Greengrass 核心设备的名称。
**注意**  <a name="install-argument-thing-name-constraint"></a>
事物名称不得包含英文冒号 (`:`) 字符。

   ```
   aws iot create-thing --thing-name MyGreengrassCore
   ```

   如果请求成功，响应类似如下示例。

   ```
   {
     "thingName": "MyGreengrassCore",
     "thingArn": "arn:aws:iot:us-west-2:123456789012:thing/MyGreengrassCore",
     "thingId": "8cb4b6cd-268e-495d-b5b9-1713d71dbf42"
   }
   ```

1. （可选）将 AWS IoT 事物添加到新的或现有的事物组。您可以使用事物组来管理 Greengrass 核心设备实例集。将软件组件部署到设备时，可以以单个设备或设备组为目标。您可以将设备添加到有活动 Greengrass 部署的事物组，以将该事物组的软件组件部署到该设备。执行以下操作：

   1. （可选）创建 AWS IoT 事物组。
      + *MyGreengrassCoreGroup*替换为要创建的事物组的名称。
**注意**  <a name="install-argument-thing-group-name-constraint"></a>
事物组名称不得包含英文冒号 (`:`) 字符。

      ```
      aws iot create-thing-group --thing-group-name MyGreengrassCoreGroup
      ```

      如果请求成功，响应类似如下示例。

      ```
      {
        "thingGroupName": "MyGreengrassCoreGroup",
        "thingGroupArn": "arn:aws:iot:us-west-2:123456789012:thinggroup/MyGreengrassCoreGroup",
        "thingGroupId": "4df721e1-ff9f-4f97-92dd-02db4e3f03aa"
      }
      ```

   1. 将 AWS IoT 事物添加到事物组。
      + *MyGreengrassCore*用你的 AWS IoT 东西的名字替换。
      + *MyGreengrassCoreGroup*替换为事物组的名称。

      ```
      aws iot add-thing-to-thing-group --thing-name MyGreengrassCore --thing-group-name MyGreengrassCoreGroup
      ```

      如果请求成功，则该命令没有任何输出。

## 创建事物证书
<a name="create-thing-certificate"></a>

<a name="create-thing-certificate-intro-1"></a>当您将设备注册为 AWS IoT 事物时，该设备可以使用数字证书进行身份验证 AWS。此证书允许设备与 AWS IoT 和通信 AWS IoT Greengrass。

<a name="create-thing-certificate-intro-2"></a>在本节中，您将创建和下载可供您的设备连接 AWS的证书。

<a name="create-thing-certificate-intro-3"></a>如果要将 AWS IoT Greengrass Core 软件配置为使用硬件安全模块 (HSM) 来安全存储私钥和证书，请按照步骤在 HSM 中使用私钥创建证书。否则，请按照步骤在 AWS IoT 服务中创建证书和私钥。硬件安全功能仅在 Linux 设备上可用。有关硬件安全性及其使用要求的更多信息，请参阅 [硬件安全性集成](hardware-security.md)。

### 在 AWS IoT 服务中创建证书和私钥
<a name="create-thing-certificate-cloud"></a><a name="create-thing-certificate-cloud-steps"></a>

**创建事物证书**

1. 创建一个文件夹，用于下载 AWS IoT 事物的证书。

   ```
   mkdir greengrass-v2-certs
   ```

1. 为该 AWS IoT 事物创建并下载证书。

   ```
   aws iot create-keys-and-certificate --set-as-active --certificate-pem-outfile greengrass-v2-certs/device.pem.crt --public-key-outfile greengrass-v2-certs/public.pem.key --private-key-outfile greengrass-v2-certs/private.pem.key
   ```

   如果请求成功，响应类似如下示例。

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----",
     "keyPair": {
       "PublicKey": "-----BEGIN PUBLIC KEY-----\
   MIIBIjANBgkqhkEXAMPLEQEFAAOCAQ8AMIIBCgKCAQEAEXAMPLE1nnyJwKSMHw4h\
   MMEXAMPLEuuN/dMAS3fyce8DW/4+EXAMPLEyjmoF/YVF/gHr99VEEXAMPLE5VF13\
   59VK7cEXAMPLE67GK+y+jikqXOgHh/xJTwo+sGpWEXAMPLEDz18xOd2ka4tCzuWEXAMPLEahJbYkCPUBSU8opVkR7qkEXAMPLE1DR6sx2HocliOOLtu6Fkw91swQWEXAMPLE\\GB3ZPrNh0PzQYvjUStZeccyNCx2EXAMPLEvp9mQOUXP6plfgxwKRX2fEXAMPLEDa\
   hJLXkX3rHU2xbxJSq7D+XEXAMPLEcw+LyFhI5mgFRl88eGdsAEXAMPLElnI9EesG\
   FQIDAQAB\
   -----END PUBLIC KEY-----\
   ",
       "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\
   key omitted for security reasons\
   -----END RSA PRIVATE KEY-----\
   "
     }
   }
   ```

   保存证书的 Amazon 资源名称（ARN），以便稍后用于配置证书。

### 使用 HSM 中的私有密钥创建证书
<a name="create-thing-certificate-hardware-security"></a>

**注意**  
[此功能适用于 Greengrass nucleus 组件的 2.5.3 及更高版本。](greengrass-nucleus-component.md) AWS IoT Greengrass 目前不支持在 Windows 核心设备上使用此功能。

**创建事物证书**

1. 在核心设备上，在 HSM 中初始化 PKCS\$111 令牌，然后生成私有密钥。私有密钥必须是密钥大小为 RSA-2048（或更大）的 RSA 密钥，或 ECC 密钥。
**注意**  <a name="hardware-security-module-requirements-key-notes"></a>
要使用带 ECC 密钥的硬件安全模块，必须使用 [Greengrass Nucleus](greengrass-nucleus-component.md) v2.5.6 或更高版本。  
要使用硬件安全模块和[密钥管理器](secret-manager-component.md)，必须使用带 RSA 密钥的硬件安全模块。

   查看 HSM 的文档，了解如何初始化令牌并生成私有密钥。如果您的 HSM 支持对象 IDs，请在生成私钥时指定对象 ID。保存您在初始化令牌并生成私有密钥时指定的槽位 ID、用户 PIN、对象标签、对象 ID（如果您的 HSM 使用对象）。稍后将事物证书导入 HSM 并配置 C AWS IoT Greengrass ore 软件时，您将使用这些值。

1. 使用私钥创建证书签名请求 (CSR)。 AWS IoT 使用此 CSR 为您在 HSM 中生成的私钥创建事物证书。有关如何通过私有密钥创建 CSR 的信息，请参阅适用于您 HSM 的文档。CSR 是一个文件，例如 `iotdevicekey.csr`。

1. 将 CSR 从设备复制到您的开发计算机。如果在开发计算机和设备上启用了 SSH 和 SCP，则可以在开发计算机上使用 `scp` 命令传输 CSR。*device-ip-address*替换为设备的 IP 地址，然后*\$1/iotdevicekey.csr*替换为设备上 CSR 文件的路径。

   ```
   scp device-ip-address:~/iotdevicekey.csr iotdevicekey.csr
   ```

1. 在开发计算机上，创建一个文件夹，用于下载该 AWS IoT 事物的证书。

   ```
   mkdir greengrass-v2-certs
   ```

1. 使用 CSR 文件创建 AWS IoT 事物的证书并将其下载到您的开发计算机。

   ```
   aws iot create-certificate-from-csr --set-as-active --certificate-signing-request=file://iotdevicekey.csr --certificate-pem-outfile greengrass-v2-certs/device.pem.crt
   ```

   如果请求成功，响应类似如下示例。

   ```
   {
     "certificateArn": "arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificateId": "aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4",
     "certificatePem": "-----BEGIN CERTIFICATE-----
   MIICiTCCAfICCQD6m7oRw0uXOjANBgkqhkiG9w
    0BAQUFADCBiDELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZ
    WF0dGxlMQ8wDQYDVQQKEwZBbWF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIw
    EAYDVQQDEwlUZXN0Q2lsYWMxHzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5
    jb20wHhcNMTEwNDI1MjA0NTIxWhcNMTIwNDI0MjA0NTIxWjCBiDELMAkGA1UEBh
    MCVVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdTZWF0dGxlMQ8wDQYDVQQKEwZBb
    WF6b24xFDASBgNVBAsTC0lBTSBDb25zb2xlMRIwEAYDVQQDEwlUZXN0Q2lsYWMx
    HzAdBgkqhkiG9w0BCQEWEG5vb25lQGFtYXpvbi5jb20wgZ8wDQYJKoZIhvcNAQE
    BBQADgY0AMIGJAoGBAMaK0dn+a4GmWIWJ21uUSfwfEvySWtC2XADZ4nB+BLYgVI
    k60CpiwsZ3G93vUEIO3IyNoH/f0wYK8m9TrDHudUZg3qX4waLG5M43q7Wgc/MbQ
    ITxOUSQv7c7ugFFDzQGBzZswY6786m86gpEIbb3OhjZnzcvQAaRHhdlQWIMm2nr
    AgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAtCu4nUhVVxYUntneD9+h8Mg9q6q+auN
    KyExzyLwaxlAoo7TJHidbtS4J5iNmZgXL0FkbFFBjvSfpJIlJ00zbhNYS5f6Guo
    EDmFJl0ZxBHjJnyp378OD8uTs7fLvjx79LjSTbNYiytVbZPQUQ5Yaxu2jXnimvw
    3rrszlaEXAMPLE=
   -----END CERTIFICATE-----"
   }
   ```

   保存证书的 ARN，以便稍后用于配置证书。

## 配置事物证书
<a name="configure-thing-certificate"></a>

将事物证书附加到您之前创建 AWS IoT 的事物，然后向证书添加 AWS IoT 策略以定义核心设备的 AWS IoT 权限。

**配置事物证书**

1. 将证书附加到 AWS IoT 事物上。
   + *MyGreengrassCore*用你的 AWS IoT 东西的名字替换。
   + 将证书 Amazon 资源名称（ARN）替换为您在上一步中创建的证书的 ARN。

   ```
   aws iot attach-thing-principal --thing-name MyGreengrassCore --principal arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
   ```

   如果请求成功，则该命令没有任何输出。

1. 创建并附加用于定义 Greengrass 核心设备 AWS IoT 权限的 AWS IoT 策略。以下策略允许访问所有 MQTT 主题和 Greengrass 操作，因此您的设备可以处理需要新 Greengrass 操作的自定义应用程序和未来更改。您可以根据自己的使用案例来限制此策略。有关更多信息，请参阅 [AWS IoT Greengrass V2 核心设备的最低 AWS IoT 政策](device-auth.md#greengrass-core-minimal-iot-policy)。

   如果您之前设置过 Greengrass 核心设备，则可以附加 AWS IoT 其策略，而不必创建新的策略。

   执行以下操作：

   1. 创建一个包含 Greengrass 核心设备所需的 AWS IoT 策略文档的文件。

      <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

      ```
      nano greengrass-v2-iot-policy.json
      ```

      将以下 JSON 复制到该文件中。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "iot:Publish",
              "iot:Subscribe",
              "iot:Receive",
              "iot:Connect",
              "greengrass:*"
            ],
            "Resource": [
              "*"
            ]
          }
        ]
      }
      ```

   1. 根据 AWS IoT 策略文档创建策略。
      + *GreengrassV2IoTThingPolicy*替换为要创建的策略的名称。

      ```
      aws iot create-policy --policy-name GreengrassV2IoTThingPolicy --policy-document file://greengrass-v2-iot-policy.json
      ```

      如果请求成功，响应类似如下示例。

      ```
      {
        "policyName": "GreengrassV2IoTThingPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassV2IoTThingPolicy",
        "policyDocument": "{
          \\"Version\\": \\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": [
                \\"iot:Publish\\",
                \\"iot:Subscribe\\",
                \\"iot:Receive\\",
                \\"iot:Connect\\",
                \\"greengrass:*\\"
              ],
              \\"Resource\\": [
                \\"*\\"
              ]
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1. 将 AWS IoT 策略附加到 AWS IoT 事物的证书上。
      + *GreengrassV2IoTThingPolicy*替换为要附加的策略的名称。
      + 将目标 ARN 替换为您的 AWS IoT 事物证书的 ARN。

      ```
      aws iot attach-policy --policy-name GreengrassV2IoTThingPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      如果请求成功，则该命令没有任何输出。

## 创建令牌交换角色
<a name="create-token-exchange-role"></a>

<a name="installation-create-token-exchange-role-intro"></a>Greengrass 核心设备使用 IAM 服务角色（称为*令牌交换角色）来授权对*服务的调用。 AWS 设备使用 AWS IoT 证书提供程序来获取此角色的临时 AWS 证书，从而允许设备与 Amazon Logs 进行交互 AWS IoT、向 Amazon Logs 发送 CloudWatch 日志以及从 Amazon S3 下载自定义组件项目。有关更多信息，请参阅 [授权核心设备与 AWS 服务交互](device-service-role.md)。

<a name="installation-create-token-exchange-role-alias-intro"></a>您可以使用 AWS IoT *角色别名*为 Greengrass 核心设备配置令牌交换角色。角色别名允许您更改设备的令牌交换角色，但设备配置保持不变。有关更多信息，请参阅《AWS IoT Core 开发人员指南》**中的[授权直接调用 AWS 服务](https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html)。

在本节中，您将创建一个令牌交换 IAM 角色和一个指向该 AWS IoT 角色的角色别名。如果您已经设置了 Greengrass 核心设备，则可以使用其令牌交换角色和角色别名，而不必新建。然后，您将设备的 AWS IoT 事物配置为使用该角色和别名。

**创建令牌交换 IAM 角色**

1. <a name="create-token-exchange-role-create-iam-role"></a>创建设备可将其用作令牌交换角色的 IAM 角色。执行以下操作：

   1. 创建包含令牌交换角色所需的信任策略文档的文件。

      <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

      ```
      nano device-role-trust-policy.json
      ```

      将以下 JSON 复制到该文件中。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "credentials.iot.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }
      ```

   1. 通过信任策略文档创建令牌交换角色。
      + *GreengrassV2TokenExchangeRole*替换为要创建的 IAM 角色的名称。

      ```
      aws iam create-role --role-name GreengrassV2TokenExchangeRole --assume-role-policy-document file://device-role-trust-policy.json
      ```

      如果请求成功，响应类似如下示例。

      ```
      {
        "Role": {
          "Path": "/",
          "RoleName": "GreengrassV2TokenExchangeRole",
          "RoleId": "AROAZ2YMUHYHK5OKM77FB",
          "Arn": "arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole",
          "CreateDate": "2021-02-06T00:13:29+00:00",
          "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",		 	 	 
            "Statement": [
              {
                "Effect": "Allow",
                "Principal": {
                  "Service": "credentials.iot.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
              }
            ]
          }
        }
      ```

   1. 创建一个包含令牌交换角色所需的访问策略文档的文件。

      <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

      ```
      nano device-role-access-policy.json
      ```

      将以下 JSON 复制到该文件中。

      ```
      {
        "Version": "2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "logs:CreateLogGroup",
              "logs:CreateLogStream",
              "logs:PutLogEvents",
              "logs:DescribeLogStreams",
              "s3:GetBucketLocation"
            ],
            "Resource": "*"
          }
        ]
      }
      ```
**注意**  
此访问策略不允许访问 S3 存储桶中的组件构件。要在 Amazon S3 中部署可定义构件的自定义组件，您必须为该角色添加权限以允许核心设备检索组件构件。有关更多信息，请参阅 [允许访问 S3 存储桶中的组件构件](device-service-role.md#device-service-role-access-s3-bucket)。  
如果您还没有适用于组件构件的 S3 存储桶，则可以在创建存储桶后添加这些权限。

   1. 通过策略文档创建 IAM 策略
      + *GreengrassV2TokenExchangeRoleAccess*替换为要创建的 IAM 策略的名称。

      ```
      aws iam create-policy --policy-name GreengrassV2TokenExchangeRoleAccess --policy-document file://device-role-access-policy.json
      ```

      如果请求成功，响应类似如下示例。

      ```
      {
        "Policy": {
          "PolicyName": "GreengrassV2TokenExchangeRoleAccess",
          "PolicyId": "ANPAZ2YMUHYHACI7C5Z66",
          "Arn": "arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess",
          "Path": "/",
          "DefaultVersionId": "v1",
          "AttachmentCount": 0,
          "PermissionsBoundaryUsageCount": 0,
          "IsAttachable": true,
          "CreateDate": "2021-02-06T00:37:17+00:00",
          "UpdateDate": "2021-02-06T00:37:17+00:00"
        }
      }
      ```

   1. 将 IAM 策略附加到令牌交换角色。
      + 将 *GreengrassV2TokenExchangeRole* 替换为 IAM 角色的名称。
      + 将策略 ARN 替换为您在上一步中创建的 IAM 策略的 ARN。

      ```
      aws iam attach-role-policy --role-name GreengrassV2TokenExchangeRole --policy-arn arn:aws:iam::123456789012:policy/GreengrassV2TokenExchangeRoleAccess
      ```

      如果请求成功，则该命令没有任何输出。

1. <a name="create-token-exchange-role-create-iot-role-alias"></a>创建 AWS IoT 指向代币交换角色的角色别名。
   + *GreengrassCoreTokenExchangeRoleAlias*替换为要创建的角色别名的名称。
   + 将角色 ARN 替换为您在上一步中创建的 IAM 角色的 ARN。

   ```
   aws iot create-role-alias --role-alias GreengrassCoreTokenExchangeRoleAlias --role-arn arn:aws:iam::123456789012:role/GreengrassV2TokenExchangeRole
   ```

   如果请求成功，响应类似如下示例。

   ```
   {
     "roleAlias": "GreengrassCoreTokenExchangeRoleAlias",
     "roleAliasArn": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
   }
   ```
**注意**  
要创建角色别名，您必须有权将令牌交换 IAM 角色传递到 AWS IoT。如果您在尝试创建角色别名时收到错误消息，请检查您的 AWS 用户是否具有此权限。有关更多信息，请参阅[《用户*指南》中的授予AWS Identity and Access Management 用户*向 AWS 服务传递角色的权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

1. 创建并附加 AWS IoT 允许您的 Greengrass 核心设备使用角色别名担任令牌交换角色的策略。如果您之前设置过 Greengrass 核心设备，则可以附加其角色 AWS IoT 别名策略，而不必创建新的角色别名策略。执行以下操作：

   1. （可选）创建一个包含角色别名所需的 AWS IoT 策略文档的文件。

      <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

      ```
      nano greengrass-v2-iot-role-alias-policy.json
      ```

      将以下 JSON 复制到该文件中。
      + 将资源 ARN 替换为您角色别名的 ARN。

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iot:AssumeRoleWithCertificate",
            "Resource": "arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias"
          }
        ]
      }
      ```

   1. 根据 AWS IoT 策略文档创建策略。
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*替换为要创建的 AWS IoT 策略的名称。

      ```
      aws iot create-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --policy-document file://greengrass-v2-iot-role-alias-policy.json
      ```

      如果请求成功，响应类似如下示例。

      ```
      {
        "policyName": "GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyArn": "arn:aws:iot:us-west-2:123456789012:policy/GreengrassCoreTokenExchangeRoleAliasPolicy",
        "policyDocument": "{
          \\"Version\\":\\"2012-10-17		 	 	 \\",
          \\"Statement\\": [
            {
              \\"Effect\\": \\"Allow\\",
              \\"Action\\": \\"iot:AssumeRoleWithCertificate\\",
              \\"Resource\\": \\"arn:aws:iot:us-west-2:123456789012:rolealias/GreengrassCoreTokenExchangeRoleAlias\\"
            }
          ]
        }",
        "policyVersionId": "1"
      }
      ```

   1. 将 AWS IoT 策略附加到 AWS IoT 事物的证书上。
      + *GreengrassCoreTokenExchangeRoleAliasPolicy*替换为角色别名 AWS IoT 策略的名称。
      + 将目标 ARN 替换为您的 AWS IoT 事物证书的 ARN。

      ```
      aws iot attach-policy --policy-name GreengrassCoreTokenExchangeRoleAliasPolicy --target arn:aws:iot:us-west-2:123456789012:cert/aa0b7958770878eabe251d8a7ddd547f4889c524c9b574ab9fbf65f32248b1d4
      ```

      如果请求成功，则该命令没有任何输出。

## 将证书下载到设备
<a name="download-thing-certificates"></a>

之前，您已将设备的证书下载到开发计算机上。在本节中，您需将证书复制到核心设备，以便为设备设置用于连接 AWS IoT的证书。您还需下载 Amazon 根证书颁发机构（CA）证书。如果您使用 HSM，在本节中，您还需将证书文件导入 HSM。
+ 如果您之前在 AWS IoT 服务中创建了事物证书和私钥，请按照步骤下载带有私钥和证书文件的证书。
+ 如果您之前在硬件安全模块（HSM）中通过私有密钥创建了事物证书，请按照步骤下载带私有密钥的证书和 HSM 中的证书。

### 下载带私有密钥的证书和证书文件
<a name="download-thing-certificates-without-hardware-security"></a>

**将证书下载到设备**

1. <a name="installation-copy-thing-certificate-to-device"></a>将 AWS IoT 事物证书从开发计算机复制到设备。如果在开发计算机和设备上启用了 SSH 和 SCP，则可以在开发计算机上使用 `scp` 命令传输证书。*device-ip-address*替换为设备的 IP 地址。

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>在设备上创建 Greengrass 根文件夹。稍后，您将将 AWS IoT Greengrass Core 软件安装到此文件夹。
**注意**  
Windows 的路径长度限制为 260 个字符。如果您使用的是 Windows，请使用 `C:\greengrass\v2` 或 `D:\greengrass\v2` 等根文件夹，将 Greengrass 组件的路径保持在 260 个字符的限制以下。

------
#### [ Linux or Unix ]
   + 将 `/greengrass/v2` 替换为要使用的文件夹。

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + 将 *C:\$1greengrass\$1v2* 替换为要使用的文件夹。

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + 将 *C:\$1greengrass\$1v2* 替换为要使用的文件夹。

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>（仅限 Linux）设置 Greengrass 根文件夹的父文件夹的权限。
   + */greengrass*替换为根文件夹的父文件夹。

   ```
   sudo chmod 755 /greengrass
   ```

1. 将 AWS IoT 事物证书复制到 Greengrass 根文件夹。

------
#### [ Linux or Unix ]
   + 将 `/greengrass/v2` 替换为 Greengrass 根文件夹。

   ```
   sudo cp -R ~/greengrass-v2-certs/* /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + 将 *C:\$1greengrass\$1v2* 替换为要使用的文件夹。

   ```
   robocopy %USERPROFILE%\greengrass-v2-certs C:\greengrass\v2 /E
   ```

------
#### [ PowerShell ]
   + 将 *C:\$1greengrass\$1v2* 替换为要使用的文件夹。

   ```
   cp -Path ~\greengrass-v2-certs\* -Destination C:\greengrass\v2
   ```

------

1. <a name="installation-download-root-ca-certificate"></a>下载 Amazon 根证书颁发机构 (CA) 证书。 AWS IoT 默认情况下，证书与亚马逊的根 CA 证书相关联。

------
#### [ Linux or Unix ]

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

### 下载带私有密钥的证书和 HSM 中的证书
<a name="download-thing-certificates-with-hardware-security"></a>

**注意**  
[此功能适用于 Greengrass nucleus 组件的 2.5.3 及更高版本。](greengrass-nucleus-component.md) AWS IoT Greengrass 目前不支持在 Windows 核心设备上使用此功能。

**将证书下载到设备**

1. <a name="installation-copy-thing-certificate-to-device"></a>将 AWS IoT 事物证书从开发计算机复制到设备。如果在开发计算机和设备上启用了 SSH 和 SCP，则可以在开发计算机上使用 `scp` 命令传输证书。*device-ip-address*替换为设备的 IP 地址。

   ```
   scp -r greengrass-v2-certs/ device-ip-address:~
   ```

1. <a name="installation-create-greengrass-root-folder"></a>在设备上创建 Greengrass 根文件夹。稍后，您将将 AWS IoT Greengrass Core 软件安装到此文件夹。
**注意**  
Windows 的路径长度限制为 260 个字符。如果您使用的是 Windows，请使用 `C:\greengrass\v2` 或 `D:\greengrass\v2` 等根文件夹，将 Greengrass 组件的路径保持在 260 个字符的限制以下。

------
#### [ Linux or Unix ]
   + 将 `/greengrass/v2` 替换为要使用的文件夹。

   ```
   sudo mkdir -p /greengrass/v2
   ```

------
#### [ Windows Command Prompt ]
   + 将 *C:\$1greengrass\$1v2* 替换为要使用的文件夹。

   ```
   mkdir C:\greengrass\v2
   ```

------
#### [ PowerShell ]
   + 将 *C:\$1greengrass\$1v2* 替换为要使用的文件夹。

   ```
   mkdir C:\greengrass\v2
   ```

------

1. <a name="installation-set-greengrass-root-folder-permissions"></a>（仅限 Linux）设置 Greengrass 根文件夹的父文件夹的权限。
   + */greengrass*替换为根文件夹的父文件夹。

   ```
   sudo chmod 755 /greengrass
   ```

1. 将事物证书文件 `~/greengrass-v2-certs/device.pem.crt` 导入 HSM。查看 HSM 文档，了解如何将证书导入其中。使用之前在 HSM 中生成私有密钥时使用的令牌、槽位 ID、用户 PIN、对象标签和对象 ID（如果您的 HSM 使用）导入证书。
**注意**  
如果您之前未使用对象 ID 生成私有密钥，并且证书具有对象 ID，请将私有密钥的对象 ID 设置为与证书相同的值。查看 HSM 文档，了解如何为私有密钥对象设置对象 ID。

1. （可选）删除事物证书文件，使其仅在 HSM 中存在。

   ```
   rm ~/greengrass-v2-certs/device.pem.crt
   ```

1. <a name="installation-download-root-ca-certificate"></a>下载 Amazon 根证书颁发机构 (CA) 证书。 AWS IoT 默认情况下，证书与亚马逊的根 CA 证书相关联。

------
#### [ Linux or Unix ]

   ```
   sudo curl -o /greengrass/v2/AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -o C:\greengrass\v2\\AmazonRootCA1.pem https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://www.amazontrust.com/repository/AmazonRootCA1.pem -OutFile C:\greengrass\v2\\AmazonRootCA1.pem
   ```

------

## 设置设备环境
<a name="set-up-device-environment"></a>

按照本节中的步骤，将 Linux 或 Windows 设备设置为您的 AWS IoT Greengrass 核心设备。

### 设置 Linux 设备
<a name="set-up-linux-device-environment"></a><a name="set-up-linux-device-environment-procedure"></a>

**设置 Linux 设备用于 AWS IoT Greengrass V2**

1. 安装 Java 运行时， AWS IoT Greengrass 核心软件需要运行该运行时。我们建议您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 长期支持版本。需要版本 8 或更高版本。以下命令向您展示如何在您的设备上安装 OpenJDK。
   + 对于基于 Debian 或基于 Ubuntua 的发行版：

     ```
     sudo apt install default-jdk
     ```
   + 对于基于 Red Hat 的发行版：

     ```
     sudo yum install java-11-openjdk-devel
     ```
   + 对于 Amazon Linux 2：

     ```
     sudo amazon-linux-extras install java-openjdk11
     ```
   + 对于 Amazon Linux 2023：

     ```
     sudo dnf install java-11-amazon-corretto -y
     ```

   安装完成后，运行以下命令以验证 Java 是否在您的 Linux 设备上运行。

   ```
   java -version
   ```

   此命令会打印设备上运行的 Java 版本。例如，在基于 Debian 的发行版上，输出可能与以下示例类似。

   ```
   openjdk version "11.0.9.1" 2020-11-04
   OpenJDK Runtime Environment (build 11.0.9.1+1-post-Debian-1deb10u2)
   OpenJDK 64-Bit Server VM (build 11.0.9.1+1-post-Debian-1deb10u2, mixed mode)
   ```

1. （可选）创建在设备上运行组件的默认系统用户和组。您也可以选择让 AWS IoT Greengrass 核心软件安装程序在安装过程中使用安装程序参数创建此用户和组。`--component-default-user`有关更多信息，请参阅 [安装程序参数](configure-installer.md)。

   ```
   sudo useradd --system --create-home ggc_user
   sudo groupadd --system ggc_group
   ```

1. 验证运行 AWS IoT Greengrass Core 软件的用户（通常`root`）是否有权`sudo`与任何用户和任何组一起运行。

   1. 运行以下命令以打开 `/etc/sudoers` 文件。

      ```
      sudo visudo
      ```

   1. 验证用户的权限是否如以下示例所示。

      ```
      root    ALL=(ALL:ALL) ALL
      ```

1. （可选）要[运行容器化 Lambda 函数](run-lambda-functions.md)，必须启用 [cgroups](https://en.wikipedia.org/wiki/Cgroups) v1，且必须启用并装载*内存*和*设备* cgroups。如果您不打算运行容器化 Lambda 函数，则可跳过此步骤。

   要启用这些 cgroups 选项，请使用以下 Linux 内核参数启动设备。

   ```
   cgroup_enable=memory cgroup_memory=1 systemd.unified_cgroup_hierarchy=0
   ```

   有关查看和设置设备内核参数的信息，请参阅适用于您操作系统和启动加载程序的文档。按照说明永久设置内核参数。

1. 按照 [设备要求](greengrass-nucleus-component.md#greengrass-v2-requirements) 中的要求列表所示，在您的设备上安装所有其他必需的依赖关系。

### 设置 Windows 设备
<a name="set-up-windows-device-environment"></a>

**注意**  
此功能适用于 [Greengrass Nucleus 组件](greengrass-nucleus-component.md) v2.5.0 及更高版本。<a name="set-up-windows-device-environment-procedure"></a>

**要将 Windows 设备设置为 AWS IoT Greengrass V2**

1. 安装 Java 运行时， AWS IoT Greengrass 核心软件需要运行该运行时。我们建议您使用 [Amazon Corretto](https://aws.amazon.com/corretto/) 或 [OpenJDK](https://openjdk.java.net/) 长期支持版本。需要版本 8 或更高版本。

1. 检查在 [PATH](https://en.wikipedia.org/wiki/PATH_(variable)) 系统变量上是否有 Java 可用，如果没有，请进行添加。该 LocalSystem 帐户运行 AWS IoT Greengrass Core 软件，因此您必须将 Java 添加到 PATH 系统变量中，而不是用户的 PATH 用户变量。执行以下操作：

   1. 按下 Windows 键打开开始菜单。

   1. 键入 **environment variables** 以从开始菜单中搜索系统选项。

   1. 在开始菜单搜索结果中，选择**编辑系统环境变量**，以打开**系统属性**窗口。

   1. 选择**环境变量...**，打开**环境变量**窗口。

   1. 在**系统变量**下，选择**路径**，然后选择**编辑**。在**编辑环境变量**窗口中，您可以分行查看每个路径。

   1. 检查 Java 安装的 `bin` 文件夹的路径是否存在。路径可能与以下示例类似。

      ```
      C:\\Program Files\\Amazon Corretto\\jdk11.0.13_8\\bin
      ```

   1. 如果**路径**中缺少 Java 安装的 `bin` 文件夹，请选择**新建**，添加该文件夹，然后选择**确定**。

1. <a name="set-up-windows-device-environment-open-cmd"></a>以管理员身份打开 Windows 命令提示符 (`cmd.exe`)。

1. <a name="set-up-windows-device-environment-create"></a>在 Windows 设备上的 LocalSystem 帐户中创建默认用户。*password*替换为安全密码。

   ```
   net user /add ggc_user password
   ```
**提示**  <a name="windows-password-expiration-tip"></a>
根据您的 Windows 配置，用户密码可能会设置为在将来某个日期过期。为确保您的 Greengrass 应用程序继续运行，请跟踪密码过期时间，并在密码过期之前对其进行更新。您还可以将用户的密码设置为永不过期。  
要检查用户及其密码的过期时间，请运行以下命令。  

     ```
     net user ggc_user | findstr /C:expires
     ```
要将用户密码设置为永不过期，请运行以下命令。  

     ```
     wmic UserAccount where "Name='ggc_user'" set PasswordExpires=False
     ```
如果你使用的是[已弃用该`wmic`命令的](https://learn.microsoft.com/en-us/windows/win32/wmisdk/wmic) Windows 10 或更高版本，请运行以下 PowerShell 命令。  

     ```
     Get-CimInstance -Query "SELECT * from Win32_UserAccount WHERE name = 'ggc_user'" | Set-CimInstance -Property @{PasswordExpires="False"}
     ```

1. <a name="set-up-windows-device-psexec"></a>从微软下载该[PsExec实用程序](https://docs.microsoft.com/en-us/sysinternals/downloads/psexec)并将其安装到设备上。

1. <a name="set-up-windows-device-credentials"></a>使用该 PsExec 实用程序将默认用户的用户名和密码存储在 LocalSystem 账户的凭据管理器实例中。*password*替换为您之前设置的用户密码。

   ```
   psexec -s cmd /c cmdkey /generic:ggc_user /user:ggc_user /pass:password
   ```

   如果系统打开 **PsExec License Agreement**，请选择 **Accept** 以同意许可并运行命令。
**注意**  
在 Windows 设备上，该 LocalSystem 帐户运行 Greengrass 核心，您必须使用 PsExec 该实用程序在帐户中存储默认用户信息。 LocalSystem 使用凭据管理器应用程序将此信息存储在当前登录用户的 Windows 帐户中，而不是 LocalSystem 帐户中。

## 下载 AWS IoT Greengrass 核心软件
<a name="download-greengrass-core-v2"></a>

您可以从以下位置下载最新版本的 AWS IoT Greengrass Core 软件：
+ [https://d2s8p88vqu9w66.cloudfront。 net/releases/greengrass](https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip)-nucleus-latest.zip

**注意**  
您可以从以下位置下载特定版本的 AWS IoT Greengrass Core 软件。*version*替换为要下载的版本。  

```
https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-version.zip
```

**下载 AWS IoT Greengrass 核心软件**

1. <a name="installation-download-ggc-software-step"></a>在您的核心设备上，将 AWS IoT Greengrass Core 软件下载到名为的文件中`greengrass-nucleus-latest.zip`。

------
#### [ Linux or Unix ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip > greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   iwr -Uri https://d2s8p88vqu9w66.cloudfront.net/releases/greengrass-nucleus-latest.zip -OutFile greengrass-nucleus-latest.zip
   ```

------

   <a name="core-software-license"></a>下载此软件即表示您同意[Greengrass Core 软件许可协议](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)。

1. <a name="verify-gg-nucleus-signature"></a>（可选）验证 Greengrass Nucleus 软件签名
**注意**  
此功能适用于 Greengrass Nucleus 版本 2.9.5 及更高版本。

   1. 使用以下命令验证您 Greengrass Nucleus 构件的签名：

------
#### [ Linux or Unix ]

      ```
      jarsigner -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ Windows Command Prompt (CMD) ]

      根据您安装的 JDK 版本，文件名可能有所不同。将 *`jdk17.0.6_10`* 替换为您安装的 JDK 版本。

      ```
      "C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe" -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------
#### [ PowerShell ]

      根据您安装的 JDK 版本，文件名可能有所不同。将 *`jdk17.0.6_10`* 替换为您安装的 JDK 版本。

      ```
      'C:\\Program Files\\Amazon Corretto\\jdk17.0.6_10\\bin\\jarsigner.exe' -verify -certs -verbose greengrass-nucleus-latest.zip
      ```

------

   1. `jarsigner` 调用会生成输出，指示验证结果。

      1. 如果 Greengrass Nucleus ZIP 文件已签署，则输出将包含以下语句：

         ```
         jar verified.
         ```

      1. 如果 Greengrass Nucleus ZIP 文件未签署，则输出将包含以下语句：

         ```
         jar is unsigned.
         ```

   1. 如果您提供了 Jarsigner `-certs` 选项以及 `-verify` 和 `-verbose` 选项，则输出还将包含详细的签名者证书信息。

1. <a name="installation-unzip-ggc-software-step"></a>将 AWS IoT Greengrass Core 软件解压缩到设备上的某个文件夹。*GreengrassInstaller*替换为要使用的文件夹。

------
#### [ Linux or Unix ]

   ```
   unzip greengrass-nucleus-latest.zip -d GreengrassInstaller && rm greengrass-nucleus-latest.zip
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   mkdir GreengrassInstaller && tar -xf greengrass-nucleus-latest.zip -C GreengrassInstaller && del greengrass-nucleus-latest.zip
   ```

------
#### [ PowerShell ]

   ```
   Expand-Archive -Path greengrass-nucleus-latest.zip -DestinationPath .\\GreengrassInstaller
   rm greengrass-nucleus-latest.zip
   ```

------

1. （可选）运行以下命令以查看 AWS IoT Greengrass Core 软件的版本。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

**重要**  <a name="installer-folder-2.4.0-warning"></a>
如果您安装的版本早于 v2.4.0 的 Greengrass nucleus，则在安装 Core 软件后请勿删除此文件夹。 AWS IoT Greengrass C AWS IoT Greengrass ore 软件使用此文件夹中的文件运行。  
如果您下载的是最新版本的软件，则需要安装 v2.4.0 或更高版本，并且可以在安装 C AWS IoT Greengrass ore 软件后删除此文件夹。

## 安装 AWS IoT Greengrass 核心软件
<a name="run-greengrass-core-v2-installer-manual"></a>

使用可指定以下操作的参数运行安装程序：
+ 从指定使用您之前创建的 AWS 资源和证书的部分配置文件进行安装。 AWS IoT Greengrass Core 软件使用配置文件来指定设备上每个 Greengrass 组件的配置。安装程序会根据您提供的部分配置文件创建完整的配置文件。
+ <a name="install-argument-component-default-user"></a>指定使用 `ggc_user` 系统用户在核心设备上运行软件组件。在 Linux 设备上，此命令还指定使用 `ggc_group` 系统组，安装程序会为您创建系统用户和组。
+ <a name="install-argument-system-service"></a>将 AWS IoT Greengrass Core 软件设置为启动时运行的系统服务。在 Linux 设备上，这需要 [Systemd](https://en.wikipedia.org/wiki/Systemd) 初始化系统。
**重要**  <a name="windows-system-service-requirement-important-note"></a>
在 Windows 核心设备上，必须将 AWS IoT Greengrass 核心软件设置为系统服务。

有关您可以指定的参数的更多信息，请参阅[安装程序参数](configure-installer.md)。

**注意**  
<a name="jvm-tuning-note"></a>如果您在内存有限的设备 AWS IoT Greengrass 上运行，则可以控制 AWS IoT Greengrass 酷睿软件使用的内存量。要控制内存分配，您可以在 Nucleus 组件的 `jvmOptions` 配置参数中设置 JVM 堆大小选项。有关更多信息，请参阅 [使用 JVM 选项控制内存分配](configure-greengrass-core-v2.md#jvm-tuning)。
+ 如果您之前在 AWS IoT 服务中创建了事物证书和私钥，请按照步骤安装带有私钥和证书文件的 AWS IoT Greengrass 核心软件。
+ 如果您之前使用硬件安全模块 (HSM) 中的私钥创建了事物证书，请按照步骤在 HSM 中安装带有私钥和证书的 AWS IoT Greengrass Core 软件。

### 使用私钥和证书文件安装 C AWS IoT Greengrass ore 软件
<a name="manual-installation-without-hardware-security"></a>

**安装 AWS IoT Greengrass 核心软件**

1. <a name="installer-check-greengrass-core-software-version"></a>检查 AWS IoT Greengrass 核心软件的版本。
   + *GreengrassInstaller*替换为包含该软件的文件夹的路径。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 使用文本编辑器创建名为 `config.yaml` 的配置文件，以提供给安装程序。

   <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   将以下 YAML 内容复制到该文件中。此部分配置文件会指定系统参数和 Greengrass Nucleus 参数。

   ```
   ---
   system:
     certificateFilePath: "/greengrass/v2/device.pem.crt"
     privateKeyPath: "/greengrass/v2/private.pem.key"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.17.0"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
   ```

   然后执行以下操作：
   + 将每个 `/greengrass/v2` 实例替换为 Greengrass 根文件夹。
   + *MyGreengrassCore*替换为 AWS IoT 事物的名称。
   + *2.17.0*替换为 AWS IoT Greengrass 核心软件的版本。
   + *us-west-2*替换为您创建资源 AWS 区域 的位置。
   + *GreengrassCoreTokenExchangeRoleAlias*替换为令牌交换角色别名的名称。
   + `iotDataEndpoint`用您的 AWS IoT 数据端点替换。
   + 用您的`iotCredEndpoint` AWS IoT 凭证终端节点替换。
**注意**  
在此配置文件中，您可以自定义其他 Nucleus 配置选项，例如要使用的端口和网络代理，如以下示例所示。有关更多信息，请参阅 [Greengrass Nucleus 配置](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)。  

   ```
   ---
   system:
     certificateFilePath: "/greengrass/v2/device.pem.crt"
     privateKeyPath: "/greengrass/v2/private.pem.key"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.17.0"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "https://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
   ```

1. 运行安装程序，并指定 `--init-config` 来提供配置文件。
   + 用 Greengrass 根文件夹替换`/greengrass/v2`或*C:\$1greengrass\$1v2*。
   + 将的*GreengrassInstaller*每个实例替换为解压安装程序所在的文件夹。

------
#### [ Linux or Unix ]

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" ^
     -jar ./GreengrassInstaller/lib/Greengrass.jar ^
     --init-config ./GreengrassInstaller/config.yaml ^
     --component-default-user ggc_user ^
     --setup-system-service true
   ```

------
#### [ PowerShell ]

   ```
   java -Droot="C:\greengrass\v2" "-Dlog.store=FILE" `
     -jar ./GreengrassInstaller/lib/Greengrass.jar `
     --init-config ./GreengrassInstaller/config.yaml `
     --component-default-user ggc_user `
     --setup-system-service true
   ```

------
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
在 Windows 核心设备上，`--setup-system-service true`必须指定将 AWS IoT Greengrass 核心软件设置为系统服务。

   <a name="installer-setup-system-service-output-message"></a>如果指定 `--setup-system-service true`，则安装程序会在将软件设置为系统服务并运行后打印 `Successfully set up Nucleus as a system service`。否则，如果安装程序成功安装软件，则不会输出任何消息。
**注意**  <a name="installer-deploy-dev-tools-without-provision"></a>
在没有 `deploy-dev-tools` 参数的情况下运行安装程序时，您不能使用 `--provision true` 参数来部署本地开发工具。有关直接在您的设备上部署 Greengrass CLI 的信息，请参阅 [Greengrass 命令行界面](gg-cli.md)。

1. <a name="installer-verify-installation"></a>通过查看根文件夹中的文件来验证安装情况。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   ls C:\greengrass\v2
   ```

------

   如果安装成功，则根文件夹中包含多个文件夹，例如 `config`、`packages` 和 `logs`。

### 在 HSM 中安装带有私钥和证书的 C AWS IoT Greengrass ore 软件
<a name="manual-installation-with-hardware-security"></a>

**注意**  
[此功能适用于 Greengrass nucleus 组件的 2.5.3 及更高版本。](greengrass-nucleus-component.md) AWS IoT Greengrass 目前不支持在 Windows 核心设备上使用此功能。

**安装 AWS IoT Greengrass 核心软件**

1. <a name="installer-check-greengrass-core-software-version"></a>检查 AWS IoT Greengrass 核心软件的版本。
   + *GreengrassInstaller*替换为包含该软件的文件夹的路径。

   ```
   java -jar ./GreengrassInstaller/lib/Greengrass.jar --version
   ```

1. 要使 AWS IoT Greengrass 核心软件能够在 HSM 中使用私钥和证书，请在安装 C AWS IoT Greengrass ore 软件时安装 [PKCS \$111 提供程序组件](pkcs11-provider-component.md)。PKCS\$111 提供程序组件是一个可以在安装过程中配置的插件。您可以从以下位置下载最新版本的 PKCS\$111 提供程序组件：
   + [https://d2s8p88vqu9w66.cloudfront。 net/releases/Pkcs11Provider/aws.greengrass.crypto.pkcs11Provider-latest.jar](https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar)

   将 PKCS\$111 提供程序插件下载到名为 `aws.greengrass.crypto.Pkcs11Provider.jar` 的文件中。*GreengrassInstaller*替换为要使用的文件夹。

   ```
   curl -s https://d2s8p88vqu9w66.cloudfront.net/releases/Pkcs11Provider/aws.greengrass.crypto.Pkcs11Provider-latest.jar > GreengrassInstaller/aws.greengrass.crypto.Pkcs11Provider.jar
   ```

   <a name="core-software-license"></a>下载此软件即表示您同意[Greengrass Core 软件许可协议](https://greengrass-release-license.s3.us-west-2.amazonaws.com/greengrass-license-v1.pdf)。

1. 使用文本编辑器创建名为 `config.yaml` 的配置文件，以提供给安装程序。

   <a name="nano-command-intro"></a>例如，在基于 Linux 的系统上，您可以运行以下命令来使用 GNU nano 创建该文件。

   ```
   nano GreengrassInstaller/config.yaml
   ```

   将以下 YAML 内容复制到该文件中。此部分配置文件会指定系统参数、Greengrass Nucleus 参数和 PKCS\$111 提供程序参数。

   ```
   ---
   system:
     certificateFilePath: "pkcs11:object=iotdevicekey;type=cert"
     privateKeyPath: "pkcs11:object=iotdevicekey;type=private"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.17.0"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
     aws.greengrass.crypto.Pkcs11Provider:
       configuration:
         name: "softhsm_pkcs11"
         library: "/usr/local/Cellar/softhsm/2.6.1/lib/softhsm/libsofthsm2.so"
         slot: 1
         userPin: "1234"
   ```

   然后执行以下操作：
   + 将 PKCS \$111 *iotdevicekey* URIs 中的每个实例替换为创建私钥并导入证书的对象标签。
   + 将每个 `/greengrass/v2` 实例替换为 Greengrass 根文件夹。
   + *MyGreengrassCore*替换为 AWS IoT 事物的名称。
   + *2.17.0*替换为 AWS IoT Greengrass 核心软件的版本。
   + *us-west-2*替换为您创建资源 AWS 区域 的位置。
   + *GreengrassCoreTokenExchangeRoleAlias*替换为令牌交换角色别名的名称。
   + `iotDataEndpoint`用您的 AWS IoT 数据端点替换。
   + 用您的`iotCredEndpoint` AWS IoT 凭证终端节点替换。
   + 将 `aws.greengrass.crypto.Pkcs11Provider` 组件的配置参数替换为核心设备上 HSM 配置的值。
**注意**  
在此配置文件中，您可以自定义其他 Nucleus 配置选项，例如要使用的端口和网络代理，如以下示例所示。有关更多信息，请参阅 [Greengrass Nucleus 配置](greengrass-nucleus-component.md#greengrass-nucleus-component-configuration)。  

   ```
   ---
   system:
     certificateFilePath: "pkcs11:object=iotdevicekey;type=cert"
     privateKeyPath: "pkcs11:object=iotdevicekey;type=private"
     rootCaPath: "/greengrass/v2/AmazonRootCA1.pem"
     rootpath: "/greengrass/v2"
     thingName: "MyGreengrassCore"
   services:
     aws.greengrass.Nucleus:
       componentType: "NUCLEUS"
       version: "2.17.0"
       configuration:
         awsRegion: "us-west-2"
         iotRoleAlias: "GreengrassCoreTokenExchangeRoleAlias"
         iotDataEndpoint: "device-data-prefix-ats.iot.us-west-2.amazonaws.com"
         iotCredEndpoint: "device-credentials-prefix.credentials.iot.us-west-2.amazonaws.com"
         mqtt:
           port: 443
         greengrassDataPlanePort: 443
         networkProxy:
           noProxyAddresses: "http://192.168.0.1,www.example.com"
           proxy:
             url: "https://my-proxy-server:1100"
             username: "Mary_Major"
             password: "pass@word1357"
     aws.greengrass.crypto.Pkcs11Provider:
       configuration:
         name: "softhsm_pkcs11"
         library: "/usr/local/Cellar/softhsm/2.6.1/lib/softhsm/libsofthsm2.so"
         slot: 1
         userPin: "1234"
   ```

1. 运行安装程序，并指定 `--init-config` 来提供配置文件。
   + 将 `/greengrass/v2` 替换为 Greengrass 根文件夹。
   + 将的*GreengrassInstaller*每个实例替换为解压安装程序所在的文件夹。

   ```
   sudo -E java -Droot="/greengrass/v2" -Dlog.store=FILE \
     -jar ./GreengrassInstaller/lib/Greengrass.jar \
     --trusted-plugin ./GreengrassInstaller/aws.greengrass.crypto.Pkcs11Provider.jar \
     --init-config ./GreengrassInstaller/config.yaml \
     --component-default-user ggc_user:ggc_group \
     --setup-system-service true
   ```
**重要**  <a name="windows-system-service-installer-argument-important-note"></a>
在 Windows 核心设备上，`--setup-system-service true`必须指定将 AWS IoT Greengrass 核心软件设置为系统服务。

   <a name="installer-setup-system-service-output-message"></a>如果指定 `--setup-system-service true`，则安装程序会在将软件设置为系统服务并运行后打印 `Successfully set up Nucleus as a system service`。否则，如果安装程序成功安装软件，则不会输出任何消息。
**注意**  <a name="installer-deploy-dev-tools-without-provision"></a>
在没有 `deploy-dev-tools` 参数的情况下运行安装程序时，您不能使用 `--provision true` 参数来部署本地开发工具。有关直接在您的设备上部署 Greengrass CLI 的信息，请参阅 [Greengrass 命令行界面](gg-cli.md)。

1. <a name="installer-verify-installation"></a>通过查看根文件夹中的文件来验证安装情况。

------
#### [ Linux or Unix ]

   ```
   ls /greengrass/v2
   ```

------
#### [ Windows Command Prompt (CMD) ]

   ```
   dir C:\greengrass\v2
   ```

------
#### [ PowerShell ]

   ```
   ls C:\greengrass\v2
   ```

------

   如果安装成功，则根文件夹中包含多个文件夹，例如 `config`、`packages` 和 `logs`。

<a name="install-greengrass-core-run-software"></a>如果您将 AWS IoT Greengrass Core 软件作为系统服务安装，则安装程序会为您运行该软件。否则，您必须手动运行该软件。有关更多信息，请参阅 [运行 AWS IoT Greengrass 核心软件](run-greengrass-core-v2.md)。

**注意**  <a name="install-greengrass-core-recognized-note"></a>
<a name="install-greengrass-core-recognized-para"></a>当 C AWS IoT Greengrass ore 软件连接到云端时，您的设备将被识别为 Core 设备。

<a name="install-greengrass-core-next-steps-intro"></a>有关如何配置和使用软件的更多信息 AWS IoT Greengrass，请参阅以下内容：<a name="install-greengrass-core-next-steps-links"></a>
+ [配置 AWS IoT Greengrass 核心软件](configure-greengrass-core-v2.md)
+ [开发 AWS IoT Greengrass 组件](develop-greengrass-components.md)
+ [将 AWS IoT Greengrass 组件部署到设备](manage-deployments.md)
+ [Greengrass 命令行界面](gg-cli.md)