Erstellen von Anwendungen von Drittanbietern
Junos OS Evolved unterstützt Pakete signierter Anwendungen von Drittanbietern, die in C, C++ und Python mit dem JET SDK für Junos OS Evolved entwickelt wurden. Der Junos OS Evolved-Anwendungsmanager () oder der Linux-Systemmanager (SysMan
systemd
) steuert diese Anwendungen von Drittanbietern basierend auf Art und Verwendung der Anwendung.
JET-SDK für Junos OS weiterentwickelt
Bevor Sie eine Drittanbieteranwendung erstellen, die auf Ihrem Gerät ausgeführt werden soll, müssen Sie zunächst Signaturschlüssel generieren, um Ihrer Anwendung die Berechtigung zum Ausführen zu erteilen. Weitere Informationen finden Sie unter Generieren von Signaturschlüsseln .
Junos OS Evolved Version 22.4R1 und höhere Versionen unterstützen das JET SDK für Junos OS Evolved auf den folgenden Plattformen:
ACX-Serie | PTX-Serie | QFX-Serie |
---|---|---|
ACX7100-32C | PTX10001-36MR | QFX5130-32CD |
ACX7100-48L | PTX10003 | QFX5130-48C |
ACX7509 | PTX10004 | QFX5220 |
PTX10008 | ||
PTX10016 |
- Herunterladen des JET SDK und des JET Toolkits
- Installieren des JET SDK und des JET Toolkit für Junos OS Evolved
Herunterladen des JET SDK und des JET Toolkits
Bevor Sie mit der Entwicklung einer Drittanbieteranwendung beginnen, laden Sie das JET SDK für Junos OS Evolved und das JET Toolkit für Junos OS Evolved herunter und installieren Sie es. Sie finden diese Dateien auf der Seite Juniper Extension Toolkit (For Junos Evolved):
-
Das JET-SDK für Junos OS weiterentwickelt: jet-junos-evo-sdk--releaseEVO.deb
-
Das JET Toolkit für Junos OS weiterentwickelt: jet-junos-evo-toolkit--releaseEVO.tar.gz
Installieren des JET SDK und des JET Toolkit für Junos OS Evolved
Nachdem Sie das JET Toolkit für Junos OS Evolved heruntergeladen haben, entpacken Sie die tar-Datei, und extrahieren Sie das Jet-evo
Dienstprogramm aus dem Paket.
Ab Junos OS Evolved Version 23.2R1 und höher können Sie auch das Jet-evo-bundle-iso
Dienstprogramm zum Erstellen von gebündelten ISOs extrahieren. Weitere Informationen zu gebündelten ISOs finden Sie unter Erstellen einer gebündelten ISO.
Nachdem Sie das SDK heruntergeladen haben, installieren Sie es, und beziehen Sie es. Das JET SDK für Junos OS Evolved ist ein Debian-Paket, das Sie auf Debian-basierten Linux-Distributionen wie Ubuntu und Debian installieren können. Verwenden Sie den folgenden Linux-Befehl, um das JET SDK für Junos OS Evolved Version 22.4R1 zu installieren:
user@host:~$ dpkg -i jet-junos-evo-sdk-22.4R1.10-EVO.deb
Mit dem Befehl wird das SDK im Ordner /opt/jnpr/sdk/3.0.2-31 installiert. dpkg
Als Nächstes müssen Sie das SDK für Ihr Drittanbieterpaket beschaffen. Verwenden Sie die folgenden Befehle, um das JET SDK für Junos OS Evolved für ein Paket in Junos OS Evolved Version 22.4R1 zu beziehen:
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
Von SysMan und systemd gesteuerte Anwendungen
Der native Junos OS Evolved-Anwendungsmanager () oder der Linux-Systemmanager (SysMan
systemd
) können Anwendungen von Drittanbietern steuern. Gesteuerte Anwendungen können die verteilte Infrastruktur von Junos OS Evolved nutzen und auf mehreren Knoten ausgeführt werden. SysMan
Verwaltete systemd
Anwendungen können nur auf einem einzigen Knoten ausgeführt werden, daher SysMan
ist dies in den meisten Fällen der bevorzugte Anwendungsmanager.
SysMan
und systemd
verwaltete Anwendungen verwenden unterschiedliche Methoden, um Richtlinien über Dienstdateien zu definieren. Anwendungen, die über verwaltet werdenSysMan
, verwenden .yaml
Dateien, um Richtlinien zu definieren und Dienste zuzuweisen. Weitere Informationen finden Sie unter .yaml-Dateien.
Anwendungen, die über definiert Richtlinien verwaltet werden, und weisen Dienste über systemd
.service
Dateien zu. Weitere Informationen finden Sie unter Servicedateien .
Wenn ein Routing-Engine-Switchover stattfindet, werden verwaltete Anwendungen automatisch auf der neuen primären Routing-Engine gestartet, SysMan
verwaltete Anwendungen werden jedoch systemd
weiterhin auf der ursprünglichen Routing-Engine ausgeführt. Wir empfehlen, kontrollierte Anwendungen nach Möglichkeit auf dualen Routing-Engine-Systemen zu verwenden SysMan
.
Ordnerstruktur für Anwendungen von Drittanbietern
Anwendungspakete von Drittanbietern folgen einer bestimmten Ordnerstruktur in Junos OS Evolved.
root-fs Ordnerstruktur
Der root-fs
Ordner enthält die folgenden Ordner:
-
usr/sbin (obligatorisch): Enthält die ausführbare Binärdatei für die Anwendung.
-
usr/lib64 (optional): Enthält die notwendigen Bibliotheken für die Anwendung.
-
etc/sytemd/sytem (optional): Enthält Service-Unit-Dateien
systemd
für kontrollierte Anwendungen (obligatorisch fürsystemd
systemd
verwaltete Anwendungen). -
usr/conf (optional): Enthält Dateien für die Richtliniengenerierung
.yaml
(obligatorisch fürSysMan
verwaltete Anwendungen).
Außerhalb des Ordners root-fs
finden Sie die folgenden optionalen Ordner:
-
scripts (optional): Enthält die Skripts für die Vorinstallation, die Nachinstallation und die Vorabdeinstallation.
-
etc/config (optional): Enthält anwendungsspezifische Konfigurationen.
Ordnerstruktur nach der Installation
Nachdem Sie das Drittanbieterpaket installiert haben, werden die Dateien standardmäßig unter den folgenden Pfaden gespeichert:
-
/usr/sbin/: Enthält die ausführbaren Binärdateien für Anwendungen im Paket.
-
/usr/lib64/: Enthält die Bibliotheken für Anwendungen im Paket.
-
/data/var/external//current-evo-version: Enthält Skriptdateien vor der Installation, nach der Installation und vor der Deinstallation sowie
.bom
,.sh
.fs
und.ima
Dateien für die Anwendungen im Paket. -
/etc/systemd/system/: Enthält Dateien zum Setzen
.service
von Anwendungsrichtlinien und angehängten Diensten. -
/usr/conf/: Enthält
.yaml
Dateien fürSysMan
kontrollierte Programme.
Sie finden die Dateien für Bibliotheken und Binärdateien in read-only
Ordnern. Es wird nicht empfohlen, Bibliotheken und Binärdateien in read-write
aktivierten Ordnern wie / etc oder /var abzulegen.
Anwendungsdateien von Drittanbietern
Anwendungspakete von Drittanbietern enthalten mehrere Dateitypen. Lesen Sie weiter, um weitere Informationen zu den verschiedenen Dateitypen zu erhalten:
Makefile
Das Makefile ist eine notwendige Datei zum Erstellen und Installieren Ihrer Drittanbieteranwendung. Das Makefile muss die Pfade für andere Dateien wie die SRC-Datei, die Konfigurationsdatei und .yaml
die Datei enthalten. Es steuert auch den Installationsort der erforderlichen Dateien.
SRC-Dateien
SRC-Dateien enthalten den Quellcode für Ihre Anwendung. Sie können SRC-Dateien in C, C++ oder Python schreiben. Diese Dateien sind für die Funktion Ihrer Drittanbieteranwendung erforderlich.
Skript-Dateien
Zu den Skriptdateien gehören Skripts vor der Installation, nach der Installation und vor der Deinstallation. Bei diesen optionalen Dateien handelt es sich um Shellskripts, die Sie an die Anforderungen Ihrer Anwendung anpassen können.
-
Vorinstallierte Skripts werden ausgeführt, bevor Sie Ihr Drittanbieterpaket installieren. Diese Skripte werden in der Regel zum Testen und Überprüfen verschiedener Faktoren auf Ihrem Gerät verwendet. Sie können beispielsweise ein Skript vor der Installation erstellen, um die Version von Junos OS Evolved zu überprüfen, die ausgeführt wird, bevor Sie mit der Installation beginnen.
-
Skripts nach der Installation werden nach der Installation des Drittanbieterpakets ausgeführt. Diese Skripts enthalten die Befehle, die nach Abschluss der Installation ausgeführt werden sollen. Erstellen Sie z. B. zusätzliche Protokolldateien oder ein Protokollierungsverzeichnis für Ihr Paket.
-
Skripts vor der Deinstallation werden ausgeführt, bevor Sie Ihr Drittanbieterpaket deinstallieren. Diese Skripts werden in der Regel verwendet, um Ordner und Dateien zu bereinigen, die während der Installation des Drittanbieterpakets erstellt wurden.
Alle Skripte müssen bei erfolgreicher Ausführung Null und bei Fehlschlag einen Wert ungleich Null zurückgeben.
Skripte können in jedem beliebigen Ordner erstellt werden. Während der Paketerstellung von Drittanbietern mit dem Jet-evo
Tool können Sie die Pfade zu jedem Skripttyp eingeben und sie werden im Ordner /data/var/external//current-evo-version auf Ihrem Gerät installiert. Weitere Informationen zum Jet-evo
Werkzeug finden Sie unter Jet-evo-Werkzeugkonfiguration.
Wenn Sie benutzerdefinierte Skripts erstellen, empfehlen wir, keine Befehle zu verwenden bash
, die zusätzliche CLI-Ausgaben erstellen. Sie können die CLI-Ausgabe in Ihre eigene Protokolldatei umleiten.
Service-Dateien
Servicedateien sind Pflichtdateien für systemd
kontrollierte Anwendungen. Diese Dateien steuern die Anwendungsrichtlinien und bestimmen, auf welchen Knoten und Routing-Engines die Anwendung ausgeführt wird.
Sie müssen die Dienstdateien im Ordner etc/systemd/system/ im root-fs
Verzeichnis für Ihr Paket ablegen.
Das folgende Beispiel ist eine Datei für eine .service
Anwendung mit dem Namen Sample App
. Diese .service
Datei definiert den Pfad zum Starten der Anwendung und den Systemstatus, der zum Ausführen der Anwendung erforderlich ist.
[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
Die folgenden Felder sind Pflichtfelder und sollten mit der gleichen Syntax wie die Beispieldatei verwendet werden:
-
Nach
-
Bevor
-
OnFailure (OnFailure)
-
Arbeitsverzeichnis
-
ExecStart
-
ExeStopPost
.yaml-Dateien
.yaml
Dateien sind Pflichtdateien für SysMan
kontrollierte Anwendungen. Diese Dateien werden verwendet, um anwendungsspezifische Richtlinien zu übergeben, die bei der Erstellung von systemd
basierten Service Units und basierten Richtlinien während der Installation verwendet werden. Dateien werden auch verwendet, um zu bestimmen, auf welchen Knoten und SysMan
Routing-Engines die Anwendung ausgeführt wird. .yaml
Wenn Sie sowohl Dateien als auch .yaml
.service
Dateien für dieselbe Anwendung in ein Paket aufnehmen, haben die Dateiattribute Vorrang, und die .service
Anwendung wird als gesteuerte sysman
Anwendung behandelt.
An Pakete von Drittanbietern können mehr als ein Dienst angehängt sein. Jede Anwendung, die von gesteuert wird, muss über eine separate .yaml
Datei für jeden angehängten Dienst verfügen, wobei die Dienstnamen als Dateinamen gelten.yaml
. Dateinamen sollten mit den Dienstnamen und nicht mit dem Paketnamen übereinstimmen, da sich Paketnamen von Drittanbietern von SysMan
den im Paket enthaltenen Diensten unterscheiden können. .yaml
Sie müssen Dateien innerhalb des usr/conf
Ordners im root-fs
Verzeichnis für Ihr Paket ablegen.yaml
.
Eine .yaml
Datei besteht aus mehreren Feldern, die Informationen über die entsprechende Anwendung enthalten. In der folgenden Liste finden Sie Definitionen der .yaml
Dateifelder:
binpath | Definiert den Pfad zur ausführbaren Binärdatei. |
exec-start | Definiert, wie die Anwendung gestartet wird, einschließlich des Pfads und der Argumente, die zum Starten der Anwendung erforderlich sind. Dieses Feld entspricht dem |
working-dir | Definiert den Pfad zum übergeordneten Verzeichnis mit Binärdateien. |
id | Steuert den Namen der Anwendung. Sollte mit dem |
network | Legt den Netzwerktyp mit den Werten |
on-exit | Steuert die Einstellung für den Neustart der Anwendung beim Beenden.
|
resource | Legt die Grenzwerte für die von der Anwendung verwendeten Systemressourcen fest:
|
Die folgende Beispieldatei zeigt die Konfiguration für eine Beispielanwendung .yaml
, die auf der primären Routing-Engine mit nur 1 Instanz ausgeführt wird. Durch Festlegen des all_nodes
Felds auf false
wird verhindert, dass die Anwendung auf allen Routing-Engines ausgeführt wird. Durch Festlegen des max_number_of_instances
Felds 1
wird die Anwendung auf 1 Instanz beschränkt. Durch Festlegen des node-attribute
Felds auf wird die Anwendung auf -re
der Routing-Engine ausgeführt. Wenn mit dieser Konfiguration die primäre Routing-Engine ausfällt, wird die Anwendung automatisch auf der Backup-Routing-Engine gestartet.
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
Erstellen eines Drittanbieterpakets
Das Jet-evo
Tool erstellt Pakete von Drittanbietern mithilfe der vom Anwendungsentwickler erstellten Anwendungen, Binärdateien und Bibliotheken. Der Prozess zum Erstellen eines Drittanbieterpakets unterscheidet sich je nachdem, ob das Paket vom Junos OS Evolved-Prozess SysMan
oder vom Linux-Prozess systemd
verwaltet wird. Nachfolgend finden Sie weitere Informationen zu den einzelnen Szenarien:
- Erstellen eines von SysMan verwalteten Pakets
- Erstellen eines verwalteten Pakets von systemd
- Jet-evo Werkzeugkonfiguration
Erstellen eines SysMan
verwalteten Pakets
Externe Anwendungen, die von verwaltet werden SysMan
, müssen Dateien für die Dienste haben, die an die Anwendung angehängt sind .yaml
.
- Erstellen und kompilieren Sie die Anwendung mit C, C++ oder Python mithilfe des JET SDK für Junos OS Evolved.
- Erstellen Sie die erforderlichen Ordner, wie unter Ordnerstruktur für Anwendungen von Drittanbietern beschrieben.
- Bewahren Sie die ausführbare Binärdatei im Ordner usr/sbin/ auf.
- Bewahren Sie die Dateien im Ordner usr/conf/ und die
.yaml
Konfigurationsdateien im Ordner etc/config/ auf. - Führen Sie das
Jet-evo
Tool mit paketspezifischen Optionen aus. Weitere Informationen zu den Konfigurationsoptionen imJet-evo
Tool finden Sie unter Jet-evo-Tool-Konfiguration.
Sie können optional Ihre eigene systemd
Datei zusammen mit der .yaml
Datei packen, wenn Sie komplexe Funktionen verwenden müssen, die systemd
nicht in einer .yaml
Datei enthalten sein können. Legen Sie die Dienstdatei im Ordner etc/systemd/system / und .yaml
die Datei im Ordner usr/conf ab.
Erstellen eines systemd
verwalteten Pakets
Externe Anwendungen, die von verwaltet werden systemd
, benötigen eine .service
Datei für die Dienste, die an die Anwendung angehängt sind.
- Erstellen und kompilieren Sie die Anwendung mit C, C++ oder Python mithilfe des JET SDK für Junos OS Evolved.
- Erstellen Sie die erforderlichen Ordner, wie unter Ordnerstruktur für Anwendungen von Drittanbietern beschrieben.
- Bewahren Sie die ausführbare Binärdatei im Ordner usr/sbin/ auf.
- Bewahren Sie die Dienstdatei im Ordner etc/systemd/system/ auf.
- Führen Sie das
Jet-evo
Tool mit paketspezifischen Optionen aus. Weitere Informationen zu den Konfigurationsoptionen imJet-evo
Tool finden Sie unter Jet-evo-Tool-Konfiguration.
Jet-evo
Werkzeugkonfiguration
Das Jet-evo
Tool wird verwendet, um das Drittanbieterpaket zu benennen, die Versionsnummer festzulegen, Installationsskripts auszuführen und den Installationspfad für das Drittanbieterpaket festzulegen. Diese Variablen werden alle durch Optionen gesteuert, die beim Ausführen des jet-evo
Befehls festgelegt werden:
$ ./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]
Unter Generieren von Signaturschlüsseln finden Sie Informationen zum Generieren eines privaten Schlüssels für die Verwendung mit dem Jet-evo
Tool.
Erforderliche Argumente
Die folgenden Argumente sind erforderlich:
-n name | Legen Sie den Namen Ihres Drittanbieterpakets fest. |
-r root: | Definieren Sie die Stammpfade zu den Anwendungen, die in Ihrem Paket enthalten sind, durch Kommas getrennt. |
-v version: | Legen Sie eine Versionsnummer für Ihr Paket fest. |
Optionale Argumente
Die folgenden Argumente sind optional:
-h | Zeigt eine Hilfemeldung an, in der die |
-a architecture | Wählen Sie die Architektur aus, auf die Ihr Drittanbieterpaket abzielt. |
-n node | Definieren Sie die Knoten, auf die Ihr Drittanbieterpaket abzielt. |
-i pre-install | Geben Sie Dateipfade für die Vorinstallation von Skripts an. |
-p post-install | Geben Sie Dateipfade für Skripts nach der Installation an. |
-u pre-uninstall |
Geben Sie Dateipfade für Skripts vor der Deinstallation an. |
-d directory | Legen Sie das Zielverzeichnis für die Installation Ihres Pakets fest. |
-x | Entfernt alle Debug-Dateien aus dem Paket. |
-t | Erstellen Sie eine TAR-Datei mit der gesamten Ausgabe des |
-l name | Legen Sie den Namen und den Pfad der Packager-Protokolldatei fest. |
-k key | Privater Schlüssel, der zum Signieren des Drittanbieterpakets verwendet wird. |
Beispielsyntax
Im Folgenden finden Sie ein Beispiel für die Syntax für den jet-evo
Befehl unter Verwendung eines Pakets mit dem Namen sample_package
Version 1.0.1:
$ 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
Installieren eines Drittanbieterpakets
Nachdem Sie ein Anwendungspaket eines Drittanbieters erstellt oder erhalten haben, können Sie es auf einem Junos OS Evolved-Gerät installieren. Ein Paket kann mehrere Anwendungen zusammen installieren. Der Installationsvorgang überschreibt alle zuvor installierten Anwendungen, die im Paket vorhanden sind. Es wird empfohlen, Anwendungen in Paketen für verschiedene Pakete eindeutig zu halten.
Bevor Sie eine Anwendung eines Drittanbieters installieren, müssen Sie zunächst die entsprechenden Signaturschlüssel und Zertifikate auf allen REs installieren. Die Installation schlägt fehl, wenn die Signaturschlüssel nicht ordnungsgemäß generiert werden. Weitere Informationen finden Sie unter Generieren von Signaturschlüsseln .
Sie können installierte Schlüssel anzeigen, indem Sie den show security integrity extended-keyring
Befehl verwenden.
Mit dem request system software add package-name
Befehl können Sie Pakete von Drittanbietern installieren. Zum Beispiel:
request system software add sample_package.1.0.1.tgz
Pakete von Drittanbietern können nur über die Master-Routing-Engine installiert werden.
Nach erfolgreicher Installation eines Drittanbieterpakets werden beim Installationsvorgang alle zugehörigen Dateien in den /data/var/external/current-evo-version/
Ordner kopiert. In show version
der Ausgabe werden alle Drittanbieterpakete auf jeder Routing-Engine für eine bestimmte Softwareversion im External Software
Feld angezeigt:
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
Um alle auf Ihrem Gerät installierten Versionen von Junos OS Evolved sowie die für die aktuelle Version installierten Drittanbieterpakete auf jedem Knoten und jeder Routing-Engine anzuzeigen, können Sie den show software list
folgenden Befehl verwenden:
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