온 디바이스 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 Release 21.1R1 및 Junos OS Evolved Release 22.3R1부터 Python 2.7은 더 이상 지원되지 않으며 set system scripts language python
명령문은 사용되지 않습니다. 대신 명령문을 set system scripts language python3
사용합니다.
그림 1 은 서명되지 않고 서명한 온 디바이스 JET 애플리케이션을 위한 애플리케이션 개발 워크플로우를 보여줍니다.

자세한 내용은
서명되지 않은 JET 애플리케이션 개발
서명되지 않은 JET 애플리케이션은 Python으로만 작성할 수 있습니다.
서명되지 않은 JET 애플리케이션을 개발하려면 다음을 수행합니다.
(선택사항) JET VM을 다운로드하고 설정합니다. JET VM 설정을 참조하십시오.
Python으로 애플리케이션을 개발하십시오.
애플리케이션을 패키지화하십시오. 패키지 JET 애플리케이션을 참조하십시오.
-
Junos 디바이스에서
language
명령문을 구성합니다. 예를 들어 Python 3을 사용하여 Python 3을 지원하는 JET 스크립트를 실행합니다.[edit] user@device# set system scripts language python3
자세한 내용은 Junos OS를 실행하는 디바이스용 Python 자동화 스크립트 이해(Understanding Python Automation Scripts )를 참조하십시오.
Junos OS에서 실행되는 디바이스에서 애플리케이션을 실행합니다.
서명된 JET 애플리케이션 개발
서명된 애플리케이션을 C, C++또는 Python으로 개발할 수 있습니다.
서명된 애플리케이션을 개발하려면 다음을 수행합니다.
필요한 패키지를 다운로드하여 JET VM을 설정합니다. JET VM 설정을 참조하십시오.
서명 증명서를 요청합니다. 서명 인증서 요청(Request a Signing Certificate)을 참조하십시오.
애플리케이션을 개발합니다.
애플리케이션이 C 또는 C++로 작성된 경우 라이선스를 구성합니다. 이 단계는 Python으로 작성된 애플리케이션에 대한 옵션입니다. 자세한 내용은 Junos OS를 실행하는 디바이스에서 JET 애플리케이션 및 라이선스 구성 을 참조하십시오.
취득한 인증서를 사용하여 패키지를 빌드하고 패키지에 서명합니다.
Junos OS를 실행하는 디바이스에 애플리케이션을 구축합니다.
서명 인증서 요청
JET 애플리케이션을 개발 및 배포하려면 인증서 요청 스크립트를 실행하여 JET VM에 패키지 서명 인증서를 설치해야 합니다. 이 스크립트는 서명 키와 JET와 함께 사용할 인증서 요청을 생성하는 데 도움이 됩니다.
주니퍼 네트웍스를 포함한 누구와도 서명 키를 공유하지 마십시오. 이 키를 사용하면 누구나 라우터에서 신뢰할 수 있는 애플리케이션에 서명할 수 있습니다. 따라서 라우터의 루트 암호와 동일한 보안 수준을 가진 키를 처리합니다. 일단 서명 키를 확보하면 VM 외부의 파일에 저장합니다.
인증서 요청 스크립트는 다음 정보를 요청합니다.
도시, 주 및 국가.
조직 및 단위. 조직은 모호해서는 안됩니다. 하이픈은 있을 수 없습니다("-").
인증서 유형: 인증서가 상용인지 개인인지 지정합니다. 주니퍼 법인이 아닌 법인은 상업적인 솔루션을 사용해야 합니다. 사설 인증서는 조직이 주니퍼인 경우에만 할당됩니다.
프로바이더 접두사: 각 JET 파트너에게 주니퍼가 지정한 고유한 프로바이더 이름입니다.
사용자 문자열: 선택한 추가 사양입니다. 개발 팀이나 프로젝트 이름을 지정하는 문자열일 수 있습니다. 사용자 문자열은 소문자 뒤에 하나 이상의 소문자 또는 번호(예: teamjet2)로 구성될 수 있습니다.
구축 범위: 구축 범위는 동일한 JET 파트너에 대해 여러 인증서를 구분하기 위해 주니퍼가 지정한 문자열입니다. 이는 생성된 인증서의 유효 기간을 정의합니다. 범위는 상용 또는 평가가 될 수 있습니다. 할당되지 않은 경우 빈 상태로 두십시오.
인덱스 번호: 이 숫자는 인증서 생성 번호로 알려져 있습니다. 최초 인증서의 경우 1이 됩니다. 인증서가 만료되고 새 인증서를 요청하면 이 번호가 증분됩니다.
이메일 주소: 인증서 연락처의 이메일 주소가 인증서에 내장됩니다. 조직 부서 또는 부서의 이메일 주소를 사용하는 것이 좋습니다. 개인 이메일 주소를 사용하지 않는 것이 좋습니다.
서명된 애플리케이션을 만들려면 다음 절차에서 설명한 대로 인증서를 요청하고 복사합니다. 서명되지 않은 애플리케이션을 생성하려는 경우 이 절차는 선택 사항입니다.
인증서를 수동으로 요청하려면 다음을 수행합니다.
디바이스에 이미 없는 경우 /usr/local/junos-jet/certs 디렉토리를 생성합니다.
VM 터미널에서 명령을 실행합니다
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]*
VM 외부에 certname_key.pem 파일을 저장합니다. 바로 서명 키입니다. 개발 조직 외부의 아무도 액세스할 수 없도록 합니다. 주니퍼 네트웍스를 포함한 누구와도 서명 키를 공유하지 마십시오.
이 키를 사용하면 누구나 라우터에서 신뢰할 수 있는 애플리케이션에 서명할 수 있습니다. 따라서 라우터의 루트 암호와 동일한 보안 수준을 가진 키를 처리합니다.
certnamemailto:jet-cert@juniper.net jet Certificate Processing로 _req.pem 파일을 보냅니다. 이 파일에는 인증서 요청이 포함되어 있습니다. 요청자는 조직을 대신하여 서명 인증서를 요청할 수 있는 권한을 부여받아야 합니다. JET 인증서 처리가 즉시 인증서를 귀하에게 보냅니다.
인증서를 받으면 증명서를 저장 certname 하여 /usr/local/junos-jet/certs 디렉토리에 복사합니다.
인증서와 서명 키가 /usr/local/junos-jet/certs 디렉토리에 있는지 확인합니다.
64비트 애플리케이션 컴파일
JET는 FreeBSD 및 Junos OS를 통해 업그레이드된 FreeBSD로 Junos OS를 위한 64비트 애플리케이션을 지원합니다. 애플리케이션을 패키징할 준비가 되면 다음 명령을 사용하여 AMD64 또는 ARM64 64비트 프로세서 아키텍처에 사용할 64비트 애플리케이션을 컴파일합니다.
FreeBSD를 사용하는 AMD64 및 Junos OS와 함께 사용할 수 있는 애플리케이션을 컴파일하려면 다음을 수행합니다.
JET 패키지에 포함되어야 하는 GCC 툴체인이 있는지 확인합니다.
명령을
mk-amd64 application name
사용하여 애플리케이션 패키지를 구축합니다.
업그레이드된 FreeBSD를 사용하는 AMD64 및 Junos OS와 함께 사용할 수 있는 애플리케이션을 컴파일하려면 다음을 수행합니다.
JET 패키지에 포함해야 하는 Clang 툴체인이 있는지 확인합니다.
명령을
mk-amd64,bsdx application name
사용하여 애플리케이션 패키지를 구축합니다.
업그레이드된 FreeBSD를 사용하는 ARM64 및 Junos OS와 함께 사용할 수 있는 애플리케이션을 컴파일하려면 다음을 수행합니다.
JET 패키지에 포함해야 하는 Clang 툴체인이 있는지 확인합니다.
명령을
mk-arm64,bsdx application name
사용하여 애플리케이션 패키지를 구축합니다.
예: 서명된 C 패키지 개발
JET VM을 설정하고 서명 인증을 취득한 후에는 VM에서 개발 샌드박스를 생성하고 서명된 디바이스 애플리케이션의 개발을 시작할 준비가 됩니다. 이 예제를 사용하여 C 애플리케이션 에코클라이언트 및 에코서비스를 생성하십시오.
예: C 종속성 없이 서명된 Python 패키지 개발
JET VM을 설정하고 서명 인증을 취득한 후에는 VM에서 개발 샌드박스를 생성하고 서명된 디바이스 애플리케이션의 개발을 시작할 준비가 됩니다. 이 예제를 사용하여 C 종속성 없이 서명된 Python 패키지를 개발하십시오.
이제 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/ directory에서 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 VM을 설정하고 서명 인증을 취득한 후에는 VM에서 개발 샌드박스를 생성하고 서명된 디바이스 애플리케이션의 개발을 시작할 준비가 됩니다. 이 예제를 사용하여 C 종속성이 있는 서명된 Python 패키지를 개발하십시오.