Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

开发设备上 JET 应用程序

概述

使用 C、C++ 和 Python 语言编写的 JET 应用程序可在设备上运行。您可以在下载的 JET VM 中开发应用程序,然后在运行 Junos OS 的设备上部署这些应用程序。您可以在设备上签署 JET 应用程序,以表明它们是值得信任的。

注意:

Python 2.7 停产和支持终止日期为 2020 年 1 月 1 日。Python 2.7 的官方升级路径是 Python 3。对于为不同类型的设备脚本运行 Junos OS 的设备添加了对 Python 3 的支持,我们建议您将支持的脚本类型从 Python 2 迁移到 Python 3。

从 Junos OS 21.1R1 版和 Junos OS Evolved 版本 22.3R1 开始,Python 2.7 不再支持, set system scripts language python 语句将弃用。请改为使用 语 set system scripts language python3 句。

图 1 显示了未签名和设备上签名 JET 应用程序的应用程序开发工作流程。

图 1:设备上 JET 应用程序工作流程 On-Device JET Application Workflow

开发未签名的 JET 应用程序

未签名的 JET 应用程序只能在 Python 中编写。

要开发未签名的 JET 应用程序:

  1. (可选)下载并设置 JET 虚拟机。请参阅 设置 JET VM

  2. 在 Python 中开发应用程序。

  3. 打包您的应用程序。请参阅 JET 应用程序包

  4. 在 Junos 设备上配置 language 语句。例如,要使用 Python 3 运行支持 Python 3 的 JET 脚本:

    有关详细信息,请参阅 了解运行 Junos OS 的设备的 Python 自动化脚本

  5. 在 Junos OS 上运行的设备上运行应用程序。

开发签名 JET 应用程序

您可以在 C、C++或 Python 中开发签名应用程序。

要开发已签名的应用程序:

  1. 下载所需的软件包并设置 JET 虚拟机。请参阅 设置 JET VM

  2. 请求签名证书。请参阅 请求签名证书

  3. 开发应用程序。

  4. 如果应用程序写入 C 或 C++,请配置许可证。对于在 Python 中编写的应用程序,此步骤是可选的。有关详细信息,请参阅 在运行 Junos OS 的设备上配置 JET 应用程序及其许可证

  5. 使用获取的证书构建软件包并签字。

  6. 在运行 Junos OS 的设备上部署应用程序。

请求签名证书

要开发和分发 JET 应用程序,必须通过执行证书请求脚本在 JET VM 上安装软件包签名证书。此脚本可协助您创建与 JET 配合使用的签名密钥和证书请求。

谨慎:

决不要与包括瞻博网络在内的任何人分享签名密钥。密钥允许任何人签署路由器将信任的应用程序。因此,使用与路由器的 root 密码相同的安全级别来对待密钥。获取签名密钥后,将其保存在虚拟机之外的文件中。

证书请求脚本要求提供以下信息:

  • 城市、州和国家/地区。

  • 您的组织和部门。组织不应含糊不清。没有任何连字符 (“-”)。

  • 证书类型:指定证书是商业证书还是私有证书。非瞻博网络实体必须使用商业性。仅在组织为瞻博网络时才分配私有证书。

  • 提供商前缀:这是瞻博网络为每个 JET 合作伙伴分配的独特提供商名称。

  • 用户字符串:这是您选择的附加规格。可以是指定开发团队或项目名称的字符串。用户字符串可以包含一个小写字母,然后是一个或多个小写字母或数字(例如,teamjet2)。

  • 部署范围:部署范围是瞻博网络为同一 JET 合作伙伴分配的字符串,用于区分多个证书。这定义了所生成证书的有效期。范围可以是商业或评估。如果未分配给您,请将其留空。

  • 索引号:此编号称为证书代号。初始证书为 1。当证书到期时,当您请求新证书时,此编号将会递增。

  • 电子邮件地址:证书联系人的电子邮件地址将嵌入到证书中。我们建议使用组织中某个部门或单位的电子邮件地址。我们建议您不要使用个人电子邮件地址。

要创建已签名的应用程序,请按照以下过程中的说明申请证书并将其复制。如果您想要创建未签名的应用程序,则此过程是可选的。

要手动请求证书:

  1. 如果设备上不存在,请创建 /usr/local/junos-jet/certs 目录。

  2. 在虚拟机终端中运行 jet-certificate-request 命令。

  3. 该脚本将引导您完成一系列问题。回答问题,并在每个回答后按 Enter。请参阅上述每个答案的要求。

  4. 根据您的答案,脚本在 /usr/local/junos-jet/certs 目录中生成两个文件: certname_key.pemcertname_req.pem。是 certname 证书的名称。

    证书名称必须遵循格式化的 ORGANIZATION-USER-TYPE-NUMBER。所有四个参数都是必填参数,否则您将看到以下错误:

  5. certname_key.pem 文件保存在虚拟机外部。这是您的签名密钥。确保您的开发组织之外没有人能够访问它。决不要与包括瞻博网络在内的任何人分享签名密钥。

    密钥允许任何人签署路由器将信任的应用程序。因此,使用与路由器的 root 密码相同的安全级别来对待密钥。

  6. certname_req.pem 文件发送至 mailto:jet-cert@juniper.net 的 JET 证书处理。此文件包含您的证书请求。请求人应获得代表其组织请求签名证书的授权。JET 证书处理将立即将证书发送给您。

  7. 收到证书时,保存好 certname ,并将其复制到 /usr/local/junos-jet/certs 目录。

  8. 验证证书和签名密钥是否在 /usr/local/junos-jet/certs 目录中可用。

编译 64 位应用程序

JET 支持具有 FreeBSD 和 Junos OS 以及升级后的 FreeBSD 的 Junos OS 64 位应用程序。准备好打包应用程序时,请使用以下命令汇编 64 位应用程序,以便与 AMD64 或 ARM64 64 位处理器架构配合使用。

要将应用程序编译为使用 AMD64 和 Junos OS,请使用 FreeBSD:

  1. 检查您已准备好 GCC 工具链,该工具链应包含在 JET 软件包中。

  2. 使用 命令 mk-amd64 application name 构建应用程序包。

要将应用程序与 AMD64 和 Junos OS 编译为升级后的 FreeBSD:

  1. 检查您的 Clang 工具链,该工具链应包含在 JET 软件包中。

  2. 使用 命令 mk-amd64,bsdx application name 构建应用程序包。

要将应用程序编译为与升级后的 FreeBSD 配合使用 ARM64 和 Junos OS:

  1. 检查您的 Clang 工具链,该工具链应包含在 JET 软件包中。

  2. 使用 命令 mk-arm64,bsdx application name 构建应用程序包。

示例:开发签名 C 包

设置 JET 虚拟机并获得签名认证后,即可在虚拟机中创建开发沙盒并开始开发已签名的设备上应用程序。使用此示例创建 C 应用程序回声客户端和回声服务器。

  1. 查看沙盒。沙盒是一种构建树,顶部有一个称为 .sandbox-env 的小环境文件,由包装脚本 mk 用于确保构建环境得到正确调整。
    注意:

    Echo 客户端是演示应用程序。在 垃圾箱/ 目录中,所有必要的配置和构建相关文件均可在沙盒内提供,以及回应客户端的源文件。

  2. 构建回应客户端包。
    注意:

    从 Junos OS 版本 20.2R1 开始,如果您要在 ACX710 设备上运行 JET 应用程序,则可以使用 Clang 工具链来编译以 C、Python 或 Ruby 编写的基于 ARM 的 JET 应用程序。使用 命令 mk-arm,bsdx 而不是 mk-i386,bsdx 使用 Clang 工具链来编译应用程序。

  3. 将回应客户端软件包复制到 Junos OS 上运行的设备上。
  4. 在 Junos 设备上进入配置模式。
  5. 安装回应客户端软件包。

    确认已成功安装。

  6. 查看 Echo 服务器沙盒。
  7. 构建回应服务器包。
  8. 将回应服务器包复制到 Junos VM。
  9. 将 echo Server 软件包添加至 Junos 设备。
  10. 检查软件包是否已成功添加。
  11. 在 Junos 设备上配置回应服务器提供商的 ID、许可证类型和部署范围。使用您曾经打包的同一提供商许可证。
  12. 在 Junos 设备上配置回应服务器。
  13. 在 Junos 设备上配置 Echo 客户端的提供商 ID、许可证类型和部署范围。使用您曾经打包的同一提供商许可证。
  14. 在 Junos 设备上配置回应客户端应用程序。
  15. 运行回应客户端应用程序。

示例:开发无 C 依赖项的签名 Python 软件包

设置 JET 虚拟机并获得签名认证后,即可在虚拟机中创建开发沙盒并开始开发已签名的设备上应用程序。请使用此示例开发签名的 Python 软件包,而无需 C 依赖。

  1. 在虚拟机中,转至/主页/用户目录。
  2. 使用 mksb 命令(沙盒的名称在哪里 SamplePyApp )创建沙盒。沙盒是一种构建树,顶部有一个称为 .sandbox-env 的小环境文件,由包装脚本 mk 用于确保构建环境得到正确调整。
  3. 在沙盒中创建子方向。

    首先,使用 workon 命令进入您的沙盒。命令 workon 将直接带您到 $SB/src 目录,然后正确设置沙盒。

    或者,也可以 cd 到沙盒 的 src 目录。

    接下来,根据需要 Python、库或垃圾箱(可执行)文件,在 $SB/src/python$SB/src/lib$SB/src/bin 中创建应用程序代码的子方向。

  4. 开发代码。

    如果您使用 Python 3 编写应用程序,请将 PASS 关键字包含在脚本的例外块中。

  5. 编写应用程序 JSON 文件以打包应用程序。

    有关详细信息,请参阅JET 应用程序包

  6. 将路径添加到您的 .bashrc 文件 jet-pkg-gen.py
  7. 通过运行 jet-pkg-gen.py 命令自动生成适当的制作文件。命令 jet-pkg-gen.py 有两个选项:
    • 选项 -i 后面是 JSON 文件的路径和文件名。

    • 随后 -p 是通往沙盒 src 目录的路径。

    例如,如果沙盒名称为 SamplePyApp:

    注意:

    在大多数情况下,自动生成的应用程序制作文件是正确的。如果存在任何外部库依赖项,请相应调整制作文件。

  8. 构建整个软件包。

    首先,返回 src 目录 ($SB/src)。接下来,运行 mk-i386 SamplePyApp 命令,步骤 "app-name" 5 中的 JSON 文件位于何处SamplePyApp

    注意:

    从 Junos OS 版本 20.2R1 开始,如果您要在 ACX710 设备上运行 JET 应用程序,则可以使用 Clang 工具链来编译以 C、Python 或 Ruby 编写的基于 ARM 的 JET 应用程序。使用 命令 mk-arm,bsdx 而不是 mk-i386,bsdx 使用 Clang 工具链来编译应用程序。

  9. 将软件包复制到运行 Junos OS 的设备上。

现在配置 Junos 设备并安装软件包。

  1. 进入配置模式。

  2. 必要时在 Junos 设备上配置应用程序提供商的 ID、许可证类型和部署范围。使用您曾经打包的同一提供商许可证。

    有关详细信息,请参阅 在 运行 Junos OS 的设备上配置 JET 应用程序及其许可证

  3. 退出操作模式并在 Junos 设备上安装复制的软件包。

    注意:

    如果不 providers 配置,此步骤将失败。

  4. 验证软件包是否已成功安装。

  5. 进入配置模式。

  6. 通过 Junos OS CLI 配置命令行参数。如果运行 Junos OS 的设备上的 /var/db/scripts/jet/ 目录中有 Python JET 脚本,则可以为该文件配置命令行参数,并提供 Junos CLI 中的参数。

    以下是应用程序中的论据。

    在 CLI 中配置命令行参数。在此示例中,脚本文件名为 cmdline_args.py

  7. 提交配置并退出操作模式。

  8. 运行应用程序。

示例:开发带 C 依赖项的签名 Python 软件包

设置 JET 虚拟机并获得签名认证后,即可在虚拟机中创建开发沙盒并开始开发已签名的设备上应用程序。使用此示例开发带有 C 依赖项的签名 Python 软件包。

  1. 查看沙盒。
  2. 在 Python 子方向创建应用程序目录。
  3. 有点混乱是具有 C 依赖的相对简单的 Python 模块的示例。从 https://pypi.org/project/bitarray/ 下载并提取到 Python 应用程序目录中。

    这是使用位状模块的简单 Python 应用程序的示例:

    如果您使用 Python 3 编写应用程序,请将 PASS 关键字包含在脚本的例外块中。

  4. 创建引用外部源文件的 JSON 配置文件。有关详细信息,请参阅 JET 应用程序包
  5. 运行以下命令以创建必要的制作文件和可在安装文件包时在 Junos 设备上找到文件的清单文件。
  6. 要在 Junos 设备上找到 bitarray 模块,请为 __init__.py 文件添加 /PyAppC/ 路径,以及 _bitarray.so 文件的 bitarray/ 目录路径。
  7. 构建和打包应用程序。
    注意:

    从 Junos OS 版本 20.2R1 开始,如果您要在 ACX710 设备上运行 JET 应用程序,则可以使用 Clang 工具链来编译以 C、Python 或 Ruby 编写的基于 ARM 的 JET 应用程序。使用 命令 mk-arm,bsdx 而不是 mk-i386,bsdx 使用 Clang 工具链来编译应用程序。

  8. 将构建的软件包复制到运行 Junos OS 的设备上。
  9. 必要时在 Junos 设备上配置应用程序提供商的 ID、许可证类型和部署范围。使用您曾经打包的同一提供商许可证。
  10. 在运行 Junos OS 的设备上安装软件包。

    成功安装软件包后,将按照清单文件中指定的标准 Python 模块路径中安装相关 Python 模块和 C 共享库。

  11. 在配置模式下添加应用程序。
  12. 运行应用程序
发布历史记录表
释放
描述
20.2R1
从 Junos OS 版本 20.2R1 开始,如果您要在 ACX710 设备上运行 JET 应用程序,则可以使用 Clang 工具链来编译以 C、Python 或 Ruby 编写的基于 ARM 的 JET 应用程序。