开发设备上 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 应用程序的应用程序开发工作流程。

另请参阅
开发未签名的 JET 应用程序
未签名的 JET 应用程序只能在 Python 中编写。
要开发未签名的 JET 应用程序:
(可选)下载并设置 JET 虚拟机。请参阅 设置 JET VM。
在 Python 中开发应用程序。
打包您的应用程序。请参阅 JET 应用程序包。
-
在 Junos 设备上配置
language
语句。例如,要使用 Python 3 运行支持 Python 3 的 JET 脚本:[edit] user@device# set system scripts language python3
有关详细信息,请参阅 了解运行 Junos OS 的设备的 Python 自动化脚本 。
在 Junos OS 上运行的设备上运行应用程序。
开发签名 JET 应用程序
您可以在 C、C++或 Python 中开发签名应用程序。
要开发已签名的应用程序:
下载所需的软件包并设置 JET 虚拟机。请参阅 设置 JET VM。
请求签名证书。请参阅 请求签名证书。
开发应用程序。
如果应用程序写入 C 或 C++,请配置许可证。对于在 Python 中编写的应用程序,此步骤是可选的。有关详细信息,请参阅 在运行 Junos OS 的设备上配置 JET 应用程序及其许可证 。
使用获取的证书构建软件包并签字。
在运行 Junos OS 的设备上部署应用程序。
请求签名证书
要开发和分发 JET 应用程序,必须通过执行证书请求脚本在 JET VM 上安装软件包签名证书。此脚本可协助您创建与 JET 配合使用的签名密钥和证书请求。
决不要与包括瞻博网络在内的任何人分享签名密钥。密钥允许任何人签署路由器将信任的应用程序。因此,使用与路由器的 root 密码相同的安全级别来对待密钥。获取签名密钥后,将其保存在虚拟机之外的文件中。
证书请求脚本要求提供以下信息:
城市、州和国家/地区。
您的组织和部门。组织不应含糊不清。没有任何连字符 (“-”)。
证书类型:指定证书是商业证书还是私有证书。非瞻博网络实体必须使用商业性。仅在组织为瞻博网络时才分配私有证书。
提供商前缀:这是瞻博网络为每个 JET 合作伙伴分配的独特提供商名称。
用户字符串:这是您选择的附加规格。可以是指定开发团队或项目名称的字符串。用户字符串可以包含一个小写字母,然后是一个或多个小写字母或数字(例如,teamjet2)。
部署范围:部署范围是瞻博网络为同一 JET 合作伙伴分配的字符串,用于区分多个证书。这定义了所生成证书的有效期。范围可以是商业或评估。如果未分配给您,请将其留空。
索引号:此编号称为证书代号。初始证书为 1。当证书到期时,当您请求新证书时,此编号将会递增。
电子邮件地址:证书联系人的电子邮件地址将嵌入到证书中。我们建议使用组织中某个部门或单位的电子邮件地址。我们建议您不要使用个人电子邮件地址。
要创建已签名的应用程序,请按照以下过程中的说明申请证书并将其复制。如果您想要创建未签名的应用程序,则此过程是可选的。
要手动请求证书:
如果设备上不存在,请创建 /usr/local/junos-jet/certs 目录。
在虚拟机终端中运行
jet-certificate-request
命令。该脚本将引导您完成一系列问题。回答问题,并在每个回答后按 Enter。请参阅上述每个答案的要求。
根据您的答案,脚本在 /usr/local/junos-jet/certs 目录中生成两个文件: certname_key.pem 和 certname_req.pem。是 certname 证书的名称。
证书名称必须遵循格式化的 ORGANIZATION-USER-TYPE-NUMBER。所有四个参数都是必填参数,否则您将看到以下错误:
ERROR: CN has invalid format; regex: ^([a-z0-9]+)-([a-z0-9]+)-(commercial|private)-([1-9][0-9]*)$ Expected format: ORGANIZATION-USER-TYPE-NUMBER organization: [a-z0-9]+ Must be "juniper" for type is "private" user: [a-z0-9]+ type: commercial|private number: [1-9][0-9]*
将 certname_key.pem 文件保存在虚拟机外部。这是您的签名密钥。确保您的开发组织之外没有人能够访问它。决不要与包括瞻博网络在内的任何人分享签名密钥。
密钥允许任何人签署路由器将信任的应用程序。因此,使用与路由器的 root 密码相同的安全级别来对待密钥。
将 certname_req.pem 文件发送至 mailto:jet-cert@juniper.net 的 JET 证书处理。此文件包含您的证书请求。请求人应获得代表其组织请求签名证书的授权。JET 证书处理将立即将证书发送给您。
收到证书时,保存好 certname ,并将其复制到 /usr/local/junos-jet/certs 目录。
验证证书和签名密钥是否在 /usr/local/junos-jet/certs 目录中可用。
编译 64 位应用程序
JET 支持具有 FreeBSD 和 Junos OS 以及升级后的 FreeBSD 的 Junos OS 64 位应用程序。准备好打包应用程序时,请使用以下命令汇编 64 位应用程序,以便与 AMD64 或 ARM64 64 位处理器架构配合使用。
要将应用程序编译为使用 AMD64 和 Junos OS,请使用 FreeBSD:
检查您已准备好 GCC 工具链,该工具链应包含在 JET 软件包中。
使用 命令
mk-amd64 application name
构建应用程序包。
要将应用程序与 AMD64 和 Junos OS 编译为升级后的 FreeBSD:
检查您的 Clang 工具链,该工具链应包含在 JET 软件包中。
使用 命令
mk-amd64,bsdx application name
构建应用程序包。
要将应用程序编译为与升级后的 FreeBSD 配合使用 ARM64 和 Junos OS:
检查您的 Clang 工具链,该工具链应包含在 JET 软件包中。
使用 命令
mk-arm64,bsdx application name
构建应用程序包。
示例:开发签名 C 包
设置 JET 虚拟机并获得签名认证后,即可在虚拟机中创建开发沙盒并开始开发已签名的设备上应用程序。使用此示例创建 C 应用程序回声客户端和回声服务器。
示例:开发无 C 依赖项的签名 Python 软件包
设置 JET 虚拟机并获得签名认证后,即可在虚拟机中创建开发沙盒并开始开发已签名的设备上应用程序。请使用此示例开发签名的 Python 软件包,而无需 C 依赖。
现在配置 Junos 设备并安装软件包。
进入配置模式。
root@device> configure Entering configuration mode [edit] root@device#
-
必要时在 Junos 设备上配置应用程序提供商的 ID、许可证类型和部署范围。使用您曾经打包的同一提供商许可证。
root@device# set system extensions providers 12345 license-type juniper deployment-scope commercial
有关详细信息,请参阅 在 运行 Junos OS 的设备上配置 JET 应用程序及其许可证。
-
退出操作模式并在 Junos 设备上安装复制的软件包。
root@device# exit root@device> request system software add /var/tmp/SamplePyApp-x86-32-20180828.231545_user.tgz
注意:如果不
providers
配置,此步骤将失败。 验证软件包是否已成功安装。
root@device> show version Hostname: device Model: mx480 … … JET app SamplePyApp [20180828.231545_user]
进入配置模式。
root@device> configure Entering configuration mode [edit] root@device#
通过 Junos OS CLI 配置命令行参数。如果运行 Junos OS 的设备上的 /var/db/scripts/jet/ 目录中有 Python JET 脚本,则可以为该文件配置命令行参数,并提供 Junos CLI 中的参数。
以下是应用程序中的论据。
import argparse def main(): parser = argparse.ArgumentParser(description='This is a demo script.') parser.add_argument('-arg1', required=True) parser.add_argument('-arg2', required=True) args = parser.parse_args() print args.arg1 print args.arg2 if __name__ == '__main__': main()
在 CLI 中配置命令行参数。在此示例中,脚本文件名为
cmdline_args.py
。root@device# set system extensions extension-service application file cmdline_args.py arguments "-arg1 jet -arg2 application"
提交配置并退出操作模式。
root@device# commit root@device# exit
运行应用程序。
root@device> request extension-service start cmdline_args.py Extension-service application 'cmdline_args.py' started with PID: 12345 jet application
示例:开发带 C 依赖项的签名 Python 软件包
设置 JET 虚拟机并获得签名认证后,即可在虚拟机中创建开发沙盒并开始开发已签名的设备上应用程序。使用此示例开发带有 C 依赖项的签名 Python 软件包。