타사 응용 프로그램 구축
Junos OS Evolved는 Junos OS Evolved용 JET SDK를 사용하여 C, C++ 및 Python으로 개발된 서명된 타사 애플리케이션 패키지를 지원합니다. Junos OS Evolved 애플리케이션 관리자() 또는 Linux 시스템 관리자(SysMan
systemd
)는 애플리케이션의 특성과 용도에 따라 이러한 타사 애플리케이션을 제어합니다.
진화한 Junos OS를 위한 JET SDK
장치에서 실행할 타사 응용 프로그램을 빌드하기 전에 먼저 서명 키를 생성하여 응용 프로그램 실행 권한을 부여해야 합니다. 자세한 내용은 서명 키 생성을 참조하십시오.
Junos OS Evolved 릴리스 22.4R1 이상 버전은 다음 플랫폼에서 Junos OS Evolved용 JET SDK를 지원합니다.
ACX | 시리즈PTX | 시리즈QFX 시리즈 |
---|---|---|
ACX7100-32C | PTX10001-36MR | QFX5130-32CD |
ACX7100-48L | PTX10003 | QFX5130-48C |
ACX7509 | PTX10004 | QFX5220 |
PTX10008 | ||
PTX10016 |
JET SDK 및 JET Toolkit 다운로드
타사 애플리케이션 구축을 시작하기 전에 Junos OS Evolved용 JET SDK 및 Junos OS Evolved용 JET 툴킷을 다운로드하여 설치하십시오. Juniper Extension Toolkit(Junos Evolved용) 페이지에서 다음 파일을 찾을 수 있습니다.
-
진화한 Junos OS용 JET SDK: jet-junos-evo-sdk--releaseEVO.deb
-
진화한 Junos OS용 JET 툴킷: jet-junos-evo-toolkit--releaseEVO.tar.gz
진화한 Junos OS를 위한 JET SDK 및 JET 툴킷 설치
Junos OS Evolved용 JET 툴킷을 다운로드한 후 tar 파일의 압축을 풀고 패키지에서 유틸리티의 압축을 풉니다 Jet-evo
.
Junos OS Evolved 릴리스 23.2R1 이상부터 번들 ISO를 Jet-evo-bundle-iso
생성하기 위한 유틸리티를 추출할 수도 있습니다. 번들 ISO에 대한 자세한 내용은 번들 ISO 만들기를 참조하십시오.
SDK를 다운로드한 후 설치하고 소싱합니다. Junos OS Evolved용 JET SDK는 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 및 systemd 제어 애플리케이션
네이티브 Junos OS Evolved 애플리케이션 관리자() 또는 Linux 시스템 관리자(SysMan
systemd
)는 타사 애플리케이션을 제어할 수 있습니다. 제어된 애플리케이션은 Junos OS Evolved의 분산 인프라를 활용하여 여러 노드에서 실행할 수 있습니다. SysMan
한편, systemd
관리되는 응용 프로그램은 단일 노드에서만 실행할 수 있으므로 SysMan
대부분의 경우 선호되는 응용 프로그램 관리자입니다.
SysMan
관리되는 응용 프로그램에서는 systemd
서비스 파일을 통해 정책을 정의하는 데 여러 가지 방법을 사용합니다. 를 통해 SysMan
관리되는 응용 프로그램은 파일을 사용하여 .yaml
정책을 정의하고 서비스를 할당합니다. 자세한 내용은 .yaml 파일을 참조하세요.
를 통해 관리되는 애플리케이션은 정책을 정의하고 파일을 통해 systemd
.service
서비스를 할당합니다. 자세한 내용은 서비스 파일을 참조하십시오.
라우팅 엔진 전환이 발생하면 SysMan
매니지드 애플리케이션은 새로운 기본 라우팅 엔진에서 자동으로 시작되지만 systemd
매니지드 애플리케이션은 원래 라우팅 엔진에서 계속 실행됩니다. 듀얼 라우팅 엔진 시스템에서 가능하면 제어된 애플리케이션을 사용하는 SysMan
것이 좋습니다.
타사 응용 프로그램에 대한 폴더 구조Folder Structure for Third-Party Applications
타사 애플리케이션 패키지는 Junos OS Evolved의 특정 폴더 구조를 따릅니다.
root-fs 폴더 구조
폴더에는 root-fs
다음 폴더가 포함되어 있습니다.
-
usr/sbin (필수): 응용 프로그램에 대한 이진 실행 파일을 포함합니다.
-
usr/lib64 (선택 사항): 애플리케이션에 필요한 라이브러리를 포함합니다.
-
etc/sytemd/sytem(선택 사항): 제어된 응용 프로그램에 대한
systemd
서비스 단위 파일을 포함합니다systemd
(관리되는 응용 프로그램의 경우systemd
필수). -
usr/conf (선택 사항): 정책 생성을 위한 파일을 포함합니다
.yaml
(관리되는 애플리케이션의 경우SysMan
필수).
폴더 외부에서 다음과 같은 선택적 폴더를 찾을 수 있습니다.root-fs
-
scripts (선택 사항): 사전 설치, 설치 후 및 사전 제거 스크립트가 포함되어 있습니다.
-
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와 같은 활성화된 폴더에 배치하지 않는 것이 좋습니다.
타사 응용 프로그램 파일
타사 응용 프로그램 패키지에는 여러 유형의 파일이 포함되어 있습니다. 다양한 파일 형식에 대한 자세한 내용은 계속 읽으십시오.
메이크파일
Makefile은 타사 응용 프로그램을 빌드하고 설치하는 데 필요한 파일입니다. Makefile에는 SRC 파일, 구성 파일 및 .yaml
파일과 같은 다른 파일의 경로가 포함되어야 합니다. 또한 필요한 파일의 설치 위치를 제어합니다.
SRC 파일
SRC 파일에는 응용 프로그램의 소스 코드가 포함되어 있습니다. C, C++ 또는 Python으로 SRC 파일을 작성할 수 있습니다. 이러한 파일은 타사 응용 프로그램의 기능에 필요합니다.
스크립트 파일
스크립트 파일에는 설치 전, 설치 후 및 설치 전 스크립트가 포함됩니다. 이러한 선택적 파일은 응용 프로그램의 요구 사항에 맞게 사용자 지정할 수 있는 셸 스크립트입니다.
-
사전 설치 스크립트는 타사 패키지를 설치하기 전에 실행됩니다. 이러한 스크립트는 일반적으로 디바이스의 다양한 요소를 테스트하고 확인하는 데 사용됩니다. 예를 들어, 사전 설치 스크립트를 생성하여 설치를 시작하기 전에 실행 중인 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
다음 필드는 필수이며 예제 파일과 동일한 구문으로 사용해야 합니다.
-
후
-
전에
-
OnFailure(켜기 실패)
-
작업 디렉토리
-
ExecStart(실행 시작)
-
ExeStopPost
.yaml 파일
.yaml
파일은 제어되는 응용 프로그램의 필수 파일입니다SysMan
. 이러한 파일은 설치 중에 기반 서비스 장치 및 SysMan
기반 정책을 만드는 systemd
데 사용되는 응용 프로그램별 정책을 전달하는 데 사용됩니다. 파일은 또한 응용 프로그램이 실행되는 노드와 라우팅 엔진을 결정하는 데 사용됩니다. .yaml
패키지에 .service
동일한 응용 프로그램에 대한 및 .service
파일을 모두 .yaml
포함하는 경우 파일 특성이 우선적으로 적용되고 응용 프로그램이 제어된 sysman
응용 프로그램으로 처리됩니다.
타사 패키지에는 패키지에 연결된 둘 이상의 서비스가 있을 수 있습니다. 에 의해 SysMan
제어되는 각 응용 프로그램에는 연결된 각 서비스에 대해 서비스 이름을 .yaml
파일 이름으로 사용하여 별도의 .yaml
파일이 있어야 합니다. 타사 패키지 이름은 패키지에 포함된 서비스와 다를 수 있으므로 파일 이름은 패키지 이름이 아닌 서비스 이름과 일치해야 합니다. .yaml
패키지의 usr/conf
디렉터리에 있는 root-fs
폴더 안에 파일을 배치 .yaml
해야 합니다.
.yaml
파일은 해당 응용 프로그램에 대한 정보를 포함하는 여러 필드로 구성됩니다. 파일 필드의 정의에 .yaml
대해서는 다음 목록을 참조하십시오.
binpath | 이진 실행 파일의 경로를 정의합니다. |
exec-start | 응용 프로그램을 시작하는 데 필요한 경로와 인수를 포함하여 응용 프로그램을 시작하는 방법을 정의합니다. 이 필드는 서비스 유닛의 |
working-dir | 바이너리가 있는 부모 디렉터리의 경로를 정의합니다. |
id | 응용 프로그램의 이름을 제어합니다. 파일 이름과 일치해야 |
network | 또는 값을 |
on-exit | 종료 시 응용 프로그램을 다시 시작하기 위한 설정을 제어합니다.
|
resource | 응용 프로그램에서 사용하는 시스템 리소스에 대한 제한을 설정합니다.
|
다음 샘플 파일은 인스턴스가 1개뿐인 기본 라우팅 엔진에서 실행되는 샘플 .yaml
애플리케이션의 구성을 보여줍니다. all_nodes
필드를 로 false
설정하면 애플리케이션이 모든 라우팅 엔진에서 실행되지 않습니다. 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으로 애플리케이션을 빌드하고 컴파일합니다.
- Folder Structure for Third-Party Applications에 설명된 대로 필요한 폴더를 만듭니다.
- 바이너리 실행 파일을 usr/sbin/ 폴더에 보관합니다.
.yaml
파일은 usr/conf/ 폴더에 보관하고 구성 파일은 etc/config/ 폴더에 보관합니다.- 패키지와
Jet-evo
관련된 옵션을 사용하여 도구를 실행합니다. 도구의 구성 옵션에Jet-evo
대한 자세한 내용은 Jet-evo 도구 구성을 참조하세요.
파일에 포함할 .yaml
수 없는 복잡한 함수를 사용해야 하는 경우 필요에 따라 파일과 함께 .yaml
고유한 systemd
파일을 systemd
패키지화할 수 있습니다. 서비스 파일을 etc/systemd/system/ 폴더에 배치하고 .yaml
파일을 usr/conf 폴더에 배치합니다.
관리되는 패키지 systemd
만들기
에서 systemd
관리하는 외부 응용 프로그램에는 .service
응용 프로그램에 연결된 서비스에 대한 파일이 있어야 합니다.
- Junos OS Evolved용 JET SDK를 사용하여 C, C++ 또는 Python으로 애플리케이션을 빌드하고 컴파일합니다.
- Folder Structure for Third-Party Applications에 설명된 대로 필요한 폴더를 만듭니다.
- 바이너리 실행 파일을 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 | Packager 로깅 파일의 이름과 경로를 설정합니다. |
-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