サードパーティ製アプリケーションの構築
Junos OS Evolvedは、Junos OS Evolved向けJET SDKを使用してC、C++、Pythonで開発された署名付きサードパーティ製アプリケーションのパッケージをサポートします。Junos OS Evolvedアプリケーションマネージャー()またはLinuxシステムマネージャー(SysMan
systemd
)は、アプリケーションの性質と使用状況に基づいて、これらのサードパーティ製アプリケーションを制御します。
JET SDK for Junos OS Evolved(英語)
デバイスで実行するサードパーティアプリケーションを構築する前に、まず署名キーを生成して、アプリケーションに実行権限を付与する必要があります。詳細については、「 署名キーの生成 」を参照してください。
Junos OS Evolvedリリース22.4R1以降のバージョンでは、次のプラットフォームでJunos OS Evolved用のJET SDKがサポートされています。
ACX | シリーズPTXシリーズ | QFXシリーズ |
---|---|---|
ACX7100-32C | PTX10001-36MR | QFX5130-32CD |
ACX7100〜48リットル | PTX10003 | QFX5130-48C |
ACX7509 | PTX10004 | QFX5220 |
PTX10008 | ||
PTX10016 |
JET SDKおよびJETツールキットのダウンロード
サードパーティ製アプリケーションの構築を開始する前に、JET SDK for Junos OS EvolvedとJET Toolkit for Junos OS Evolvedをダウンロードしてインストールします。これらのファイルは、 Juniper Extension Toolkit(Junos Evolved用) のページにあります。
-
Junos OS Evolved向けJET SDK: jet-junos-evo-sdk--releaseEVO.deb
-
Junos OS Evolved用JETツールキット: jet-junos-evo-toolkit--releaseEVO.tar.gz
Junos OS Evolved用JET SDKおよびJETツールキットのインストール
Junos OS Evolved用JETツールキットをダウンロードしたら、tarファイルを解凍し、パッケージからユーティリティを抽出し Jet-evo
ます。
Junos OS Evolvedリリース23.2R1以降以降では、バンドルISOを作成するためのユーティリティを抽出する Jet-evo-bundle-iso
こともできます。バンドルされた ISO の詳細については、「 バンドルされた ISO の作成」を参照してください。
SDKをダウンロードしたら、インストールしてソースします。JET SDK for Junos OS Evolvedは、UbuntuやDebianなどのDebianベースのLinuxディストリビューションにインストールできるDebianパッケージです。次のLinuxコマンドを使用して、Junos OS Evolvedリリース22.4R1向けのJET SDKをインストールします。
user@host:~$ dpkg -i jet-junos-evo-sdk-22.4R1.10-EVO.deb
このコマンドは dpkg
、SDK を / opt/jnpr/sdk/3.0.2-31 フォルダーにインストールします。
次に、サードパーティ パッケージの SDK を調達する必要があります。以下のコマンドを使用して、Junos OS Evolvedリリース22.4R1のパッケージのJunos OS Evolved用JET SDKを入手します。
user@host:~/package-name$ source /opt/jnpr/sdk/3.0.2-31/environment-setup-core2-32-poky-linux user@host:~/package-name$ source/opt/jnpr/sdk/3.0.2-31/environment-setup-core2-64-poky-linux user@host:~~/package-name$ source /opt/jnpr/sdk/3.0.2-31/environment-setup-x86-pokymllib32-linux
SysManおよびシステム制御アプリケーション
ネイティブのJunos OS Evolvedアプリケーションマネージャー()またはLinuxシステムマネージャー(SysMan
systemd
)は、サードパーティ製アプリケーションを制御できます。管理対象アプリケーションは、Junos OS Evolvedの分散型インフラストラクチャを利用して、複数のノードで実行できます。 SysMan
一方、マネージド アプリケーションは 1 つのノードでしか実行できないためSysMan
、ほとんどの場合、systemd
アプリケーション マネージャーが優先されます。
SysMan
マネージ アプリケーションは、 systemd
サービス ファイルを通じてポリシーを定義するためにさまざまな方法を使用します。によって SysMan
管理されるアプリケーションは、ファイルを使用して .yaml
ポリシーを定義し、サービスを割り当てます。詳細については、「 .yaml ファイル 」を参照してください。
によって systemd
管理されるアプリケーションは、ポリシーを定義し、ファイルを使用して .service
サービスを割り当てます。詳細については、「 サービス ファイル 」を参照してください。
ルーティングエンジンのスイッチオーバーが発生すると、管理対象アプリケーションは新しいプライマリルーティングエンジンで自動的に起動しますがsystemd
、SysMan
管理対象アプリケーションは元のルーティングエンジンで引き続き実行されます。可能な場合は、デュアルルーティングエンジンシステムで制御されたアプリケーションを使用することをお勧めしますSysMan
。
サードパーティ製アプリケーションのフォルダ構造
サードパーティ製アプリケーション パッケージは、Junos OS Evolved の特定のフォルダー構造に従います。
root-fs のフォルダ構造
このフォルダーには root-fs
、次のフォルダーが含まれています。
-
usr/sbin (必須): アプリケーションのバイナリ実行可能ファイルが含まれます。
-
usr/lib64 (オプション): アプリケーションに必要なライブラリーが入っています。
-
etc/sytemd/sytem (オプション): 管理対象アプリケーションのサービスユニットファイル
systemd
が含まれますsystemd
(管理対象アプリケーションでは必須systemd
)。 -
usr/conf (オプション): ポリシー生成用のファイルが保存されています
.yaml
(マネージ アプリケーションでは必須SysMan
)。
フォルダーの外には、次のオプションのフォルダーがあります root-fs
。
-
スクリプト (オプション): プレインストール、インストール後、およびアンインストール前のスクリプトが含まれます。
-
etc/config (オプション): アプリケーション固有の構成が含まれます。
インストール後のフォルダ構造
サードパーティパッケージをインストールすると、デフォルトで次のパスにファイルが保存されます。
-
/usr/sbin/: パッケージ内のアプリケーションのバイナリ実行可能ファイルが含まれます。
-
/usr/lib64/: パッケージ内のアプリケーション用のライブラリが含まれます。
-
/data/var/external//current-evo-version: インストール前、インストール後、アンインストール前のスクリプト ファイルと、パッケージ内のアプリケーションの 、 、
.bom
.sh
.fs
.ima
およびファイルが含まれます。 -
/etc/systemd/system/: アプリケーション ポリシーとアタッチされたサービスを設定するためのファイルが保存されています
.service
。 -
/usr/conf/: 制御対象アプリケーション用の
SysMan
ファイルが保存されています.yaml
。
ライブラリとバイナリのファイルはフォルダにあります read-only
。ライブラリとバイナリ read-write
を / etc や /var のような有効なフォルダに置くことはお勧めしません。
サードパーティ製アプリケーションファイル
サードパーティのアプリケーションパッケージには、いくつかの種類のファイルが含まれています。さまざまなファイルタイプの詳細については、読み続けてください。
メイクファイル
メイクファイルは、サードパーティアプリケーションの構築とインストールに必要なファイルです。メイクファイルには、SRC ファイル、構成ファイル .yaml
、ファイルなどの他のファイルのパスを含める必要があります。また、必要なファイルのインストール場所も制御します。
SRC ファイル
SRCファイルには、アプリケーションのソースコードが含まれています。SRCファイルは、C、C ++、またはPythonで記述できます。これらのファイルは、サードパーティアプリケーションの機能に必要です。
スクリプト ファイル
スクリプト ファイルには、インストール前、インストール後、およびアンインストール前のスクリプトが含まれます。これらのオプション・ファイルは、アプリケーションのニーズに合わせてカスタマイズできるシェル・スクリプトです。
-
インストール前のスクリプトは、サードパーティパッケージをインストールする前に実行されます。これらのスクリプトは通常、デバイスのさまざまな要因をテストおよびチェックするために使用されます。例えば、インストール前のスクリプトを作成して、インストールを開始する前に、実行中のJunos OS Evolvedのバージョンを確認することができます。
-
インストール後のスクリプトは、サードパーティパッケージのインストール後に実行されます。これらのスクリプトには、インストールの完了後に実行するコマンドが含まれています。たとえば、追加のログ ファイルやパッケージのログ ディレクトリを作成します。
-
アンインストール前スクリプトは、サードパーティパッケージをアンインストールする前に実行されます。これらのスクリプトは通常、サードパーティパッケージのインストール中に作成されたフォルダーとファイルをクリーンアップするために使用されます。
すべてのスクリプトは、正常に実行されると 0 を返し、失敗すると 0 以外を返す必要があります。
スクリプトは任意のフォルダに作成できます。ツールを使用した Jet-evo
サードパーティのパッケージ作成プロセス中に、各タイプのスクリプトへのパスを入力すると、デバイスの/ data/var/external/current-evo-version/ フォルダーにインストールされます。このツールの詳細については Jet-evo
、「 Jet-evo ツールの構成」を参照してください。
カスタム スクリプトを作成する場合は、追加の CLI 出力を作成するコマンドは使用 bash
しないことをお勧めします。CLI出力を独自のログファイルにリダイレクトできます。
サービスファイル
サービスファイルは、管理対象アプリケーションに必須のファイル systemd
です。これらのファイルは、アプリケーション ポリシーを制御し、アプリケーションが実行されるノードとルーティング エンジンを決定します。
サービスファイルは、パッケージのディレクトリの etc/ systemd/system/ フォルダ root-fs
内に配置する必要があります。
次の例は、 .service
という名前の Sample App
アプリケーションのファイルです。この .service
ファイルは、アプリケーションを起動するパスと、アプリケーションの実行に必要なシステム状態を定義します。
[Unit] Description="Sample App" After=syslog.target sysman.service network.target network-online.target Before=pre-evoapp-shutdown.service OnFailure=failure_handler@%p.service [Service] EnvironmentFile=/usr/conf/system/system_env TimeoutStopSec=60 WorkingDirectory=/usr/sbin ExecStart=/usr/evo/evostart -d /usr/sbin -p %p /usr/bin/python /usr/sbin/sample/sample_app.py ExecStop=/usr/sbin/exit_foo.py --bar ExecStopPost=/usr/evo/exit_handler.sh %p Restart=no StartLimitBurst=3 StartLimitInterval=300 MemoryLimit=2G RemainAfterExit=true SyslogIdentifier=sample_app
次のフィールドは必須であり、サンプル ファイルと同じ構文で使用する必要があります。
-
後
-
以前は
-
失敗時
-
作業ディレクトリ
-
エグゼクティブスタート
-
エグゼストップポスト
.yaml ファイル
.yaml
ファイルは、管理対象アプリケーションに必須のファイルSysMan
です。これらのファイルは、インストール時にベース・サービス・ユニットおよびSysMan
ベース・ポリシーの作成systemd
に使用されるアプリケーション固有のポリシーを渡すために使用されます。ファイルは、アプリケーションが稼働するノードやルーティング・エンジンを決定するためにも使用されます。 .yaml
同じアプリケーションの と の両方のファイルをパッケージに含める.yaml
.service
と、ファイル属性が優先され、.service
アプリケーションは管理対象アプリケーションとしてsysman
扱われます。
サードパーティのパッケージには、パッケージに複数のサービスをアタッチできます。によってSysMan
制御される各アプリケーションは、アタッチされたサービスごとに個別の.yaml
ファイルを持ち、サービス名をファイル名として.yaml
持つ必要があります。サードパーティのパッケージ名は、パッケージに含まれているサービスとは異なる可能性があるため、ファイル名はパッケージ名ではなくサービス名と一致させる必要があります。 .yaml
パッケージのディレクトリ内のroot-fs
フォルダー内にusr/conf
ファイルを配置.yaml
する必要があります。
ファイルは .yaml
、対応するアプリケーションに関する情報を含む複数のフィールドで構成されています。ファイル・フィールドの定義については、 .yaml
以下のリストを参照してください。
binpath | バイナリ実行可能ファイルへのパスを定義します。 |
exec-start | アプリケーションの起動に必要なパスや引数など、アプリケーションの起動方法を定義します。この項目は、 |
working-dir | バイナリを含む親ディレクトリへのパスを定義します。 |
id | アプリケーションの名前を制御します。ファイル名と一致する |
network | ネットワーク タイプを または の値 |
on-exit | 終了時にアプリケーションを再起動するための設定を制御します。
|
resource | アプリケーションが使用するシステムリソースの制限を設定します。
|
次のサンプル ファイルは、1 つのインスタンスのみを持つプライマリ ルーティング エンジンで実行されるサンプル .yaml
アプリケーションの構成を示しています。フィールドfalse
を all_nodes
に設定すると、アプリケーションがすべてのルーティングエンジンで実行されなくなります。max_number_of_instances
アプリケーションを 1 インスタンスに制限するように1
フィールドを設定します。node-attribute
フィールド-re
を に設定すると、アプリケーションがルーティング エンジンで実行されます。この設定では、プライマリ ルーティング エンジンがダウンした場合、バックアップ ルーティング エンジンでアプリケーションが自動的に起動します。
description: "Sample app" binpath: /usr/sbin/sample/sample_app.py exec-start: "/usr/bin/python /usr/sbin/sample/sample_app.py" working-dir: /usr/sbin id: sample-app network: internal on-exit: restart: true resource: instances: all_nodes: false max_num_of_instances: 1 node-attributes: - re max-memory: 2G startup: true
サードパーティパッケージの作成
このツールは Jet-evo
、アプリケーション開発者が作成したアプリケーション、バイナリ、およびライブラリを使用して、サードパーティのパッケージを作成します。サードパーティ製パッケージを作成するプロセスは、Junos OS Evolved SysMan
プロセスとLinux systemd
プロセスのどちらがパッケージを管理するかによって異なります。特定のシナリオの詳細については、以下を参照してください。
SysMan
管理パッケージの作成
によって SysMan
管理される外部アプリケーションには、アプリケーションにアタッチされたサービスのファイルが必要です .yaml
。
- Junos OS Evolved向けJET SDKを使用して、C、C++、またはPythonでアプリケーションをビルドおよびコンパイルします。
- サードパーティアプリケーションのフォルダ構造の説明に従って、必要なフォルダを作成します。
- バイナリ実行可能ファイルは usr/sbin/ フォルダに保管してください。
.yaml
ファイルは usr/conf/ フォルダに、設定ファイルは etc/config/ フォルダに保持します。Jet-evo
パッケージに固有のオプションを使用してツールを実行します。ツールの構成オプションの詳細については、「Jet-evo ツールの構成」を参照してくださいJet-evo
。
ファイルに含める.yaml
ことができない複雑な関数systemd
を使用する必要がある場合は、.yaml
オプションで独自のsystemd
ファイルをファイルと一緒にパッケージ化できます。サービスファイルを etc/systemd/system/ フォルダに配置し、.yaml
ファイルを usr/conf フォルダに配置します。
systemd
管理パッケージの作成
によって systemd
管理される外部アプリケーションには、 .service
アプリケーションにアタッチされたサービスのファイルが必要です。
- Junos OS Evolved向けJET SDKを使用して、C、C++、またはPythonでアプリケーションをビルドおよびコンパイルします。
- サードパーティアプリケーションのフォルダ構造の説明に従って、必要なフォルダを作成します。
- バイナリ実行可能ファイルは usr/sbin/ フォルダに保管してください。
- サービスファイルを etc/systemd/system/フォルダ に保管してください。
Jet-evo
パッケージに固有のオプションを使用してツールを実行します。ツールの構成オプションの詳細については、「Jet-evo ツールの構成」を参照してくださいJet-evo
。
Jet-evo
ツール構成
このツールは Jet-evo
、サードパーティパッケージの名前付け、バージョン番号の設定、インストールスクリプトの実行、およびサードパーティパッケージのインストール場所の設定に使用されます。これらの変数はすべて、コマンドの実行時に jet-evo
設定されるオプションによって制御されます。
$ ./Jet-evo -h usage: Jet-evo [-h] -n NAME -r ROOT [-v VERSION] [-a ARCH] [-N NODE] [-i PREINSTALL] [-p POSTINSTALL] [-u PREUNINSTALL] [-d DIRECTORY] [-x] [-t] [-l LOGFILE] [-k KEY]
ツールで使用するJet-evo
秘密キーの生成については、署名キーの生成を参照してください。
必須の引数
次の引数は必須です。
-n name | サードパーティパッケージの名前を設定します。 |
-r root: | パッケージに含まれるアプリケーションへのルート パスをコンマで区切って定義します。 |
-v version: | パッケージのバージョン番号を設定します。 |
省略可能な引数
次の引数は省略可能です。
-h | フィールドを説明する |
-a architecture | サードパーティ パッケージの対象となるアーキテクチャを選択します。 |
-n node | サードパーティパッケージが対象とするノードを定義します。 |
-i pre-install | プリインストール スクリプトのファイル パスを指定します。 |
-p post-install | インストール後のスクリプトへのファイル パスを指定します。 |
-u pre-uninstall |
アンインストール前のスクリプトのファイル パスを指定します。 |
-d directory | パッケージをインストールするためのターゲットディレクトリを設定します。 |
-x | パッケージからすべてのデバッグ ファイルを削除します。 |
-t | ツールのすべての |
-l name | パッケージャー ログ ファイルの名前とパスを設定します。 |
-k key | サードパーティ パッケージの署名に使用される秘密キー。 |
構文例
以下は、バージョン 1.0.1 という名前のsample_package
パッケージを使用したコマンドのjet-evo
構文の例です。
$ jet-evo -n sample_package -v 1.0.1 -t -i ./src/scripts/sample_package_preinstall -p ./src/scripts/sample_package_postinstall -u ./src/scripts/sample_package_preuninstall -d ./target/ -r ./install/ -k ima-privkey.pem
サードパーティパッケージのインストール
サードパーティ製アプリケーション パッケージを構築または入手したら、Junos OS Evolvedデバイスにインストールできます。パッケージは、複数のアプリケーションを一緒にインストールできます。インストール プロセスでは、パッケージ内に存在する以前にインストールされたアプリケーションが上書きされます。パッケージ内のアプリケーションは、異なるパッケージ間で一意にすることをお勧めします。
サードパーティアプリケーションをインストールする前に、まずすべてのREに適切な署名キーと証明書をインストールする必要があります。署名キーが正しく生成されていない場合、インストールは失敗します。詳細については、「 署名キーの生成 」を参照してください。
コマンドを使用して、インストールされているキー show security integrity extended-keyring
を表示できます。
コマンドを使用して、サードパーティのパッケージ request system software add package-name
をインストールできます。例えば:
request system software add sample_package.1.0.1.tgz
サードパーティパッケージは、マスタールーティングエンジンからのみインストールできます。
サードパーティのパッケージを正常にインストールすると、インストールプロセスによって関連するすべてのファイルがフォルダーに /data/var/external/current-evo-version/
コピーされます。出力では show version
、次のフィールドの下に External Software
、特定のソフトウェアバージョンの各ルーティングエンジン上のすべてのサードパーティパッケージが表示されます。
user@host> show version Hostname: sample_host Model: ptx10008 Junos: 22.4I20221214083306-EVO Yocto: 3.0.2 Linux Kernel: 5.2.60-yocto-standard-gae998d995 JUNOS-EVO OS 64-bit [junos-evo-install-ptx-x86-64-22.4I20221214083306-EVO] External Software: JET app sample_package 1.0.1
デバイスにインストールされているJunos OS Evolvedのすべてのバージョンと、各ノードと各ルーティングエンジンに現在のバージョンにインストールされているサードパーティパッケージを表示するには、次のコマンド show software list
を使用できます。
user@host> show system software list | no-more ------------------------------- node: re0 ------------------------------- Active boot device is primary: /dev/vda List of installed version(s) : '-' running version '>' next boot version after upgrade/downgrade '<' rollback boot version '*' deleted JSU version > junos-evo-install-ptx-x86-64-22.4I20221214085042 - [2022-12-14 09:14:39] - junos-evo-install-ptx-x86-64-22.4I20221214083306 - [2022-12-14 08:58:24] < junos-evo-install-ptx-x86-64-22.4I20221214072149 - [2022-12-14 08:04:20] junos-evo-install-ptx-x86-64-22.4I20221214055215 - [2022-12-14 06:39:46] External Software: JET app sample_package 1.0.1 ------------------------------- node: re1 ------------------------------- Active boot device is primary: /dev/vda List of installed version(s) : '-' running version '>' next boot version after upgrade/downgrade '<' rollback boot version '*' deleted JSU version > junos-evo-install-ptx-x86-64-22.4I20221214085042 - [2022-12-14 09:16:48] - junos-evo-install-ptx-x86-64-22.4I20221214083306 - [2022-12-14 08:58:59] < junos-evo-install-ptx-x86-64-22.4I20221214072149 - [2022-12-14 08:04:52] junos-evo-install-ptx-x86-64-22.4I20221214055215 - [2022-12-14 06:40:38] External Software: JET app sample_package 1.0.1