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 (SysMansystemd) 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 (SysMansystemd) 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.
SysManund 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
systemdfür kontrollierte Anwendungen (obligatorisch fürsystemdsystemdverwaltete Anwendungen). -
usr/conf (optional): Enthält Dateien für die Richtliniengenerierung
.yaml(obligatorisch fürSysManverwaltete 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.fsund.imaDateien für die Anwendungen im Paket. -
/etc/systemd/system/: Enthält Dateien zum Setzen
.servicevon Anwendungsrichtlinien und angehängten Diensten. -
/usr/conf/: Enthält
.yamlDateien fürSysMankontrollierte 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
.yamlDateien 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
.yamlKonfigurationsdateien im Ordner etc/config/ auf. - Führen Sie das
Jet-evoTool mit paketspezifischen Optionen aus. Weitere Informationen zu den Konfigurationsoptionen imJet-evoTool 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-evoTool mit paketspezifischen Optionen aus. Weitere Informationen zu den Konfigurationsoptionen imJet-evoTool 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