Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

온 디바이스 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 애플리케이션을 위한 애플리케이션 개발 워크플로우를 보여줍니다.

그림 1: 온 디바이스 JET 애플리케이션 워크플로우 On-Device JET Application Workflow

서명되지 않은 JET 애플리케이션 개발

서명되지 않은 JET 애플리케이션은 Python으로만 작성할 수 있습니다.

서명되지 않은 JET 애플리케이션을 개발하려면 다음을 수행합니다.

  1. (선택사항) JET VM을 다운로드하고 설정합니다. JET VM 설정을 참조하십시오.

  2. Python으로 애플리케이션을 개발하십시오.

  3. 애플리케이션을 패키지화하십시오. 패키지 JET 애플리케이션을 참조하십시오.

  4. Junos 디바이스에서 language 명령문을 구성합니다. 예를 들어 Python 3을 사용하여 Python 3을 지원하는 JET 스크립트를 실행합니다.

    자세한 내용은 Junos OS를 실행하는 디바이스용 Python 자동화 스크립트 이해(Understanding Python Automation Scripts )를 참조하십시오.

  5. Junos OS에서 실행되는 디바이스에서 애플리케이션을 실행합니다.

서명된 JET 애플리케이션 개발

서명된 애플리케이션을 C, C++또는 Python으로 개발할 수 있습니다.

서명된 애플리케이션을 개발하려면 다음을 수행합니다.

  1. 필요한 패키지를 다운로드하여 JET VM을 설정합니다. JET VM 설정을 참조하십시오.

  2. 서명 증명서를 요청합니다. 서명 인증서 요청(Request a Signing Certificate)을 참조하십시오.

  3. 애플리케이션을 개발합니다.

  4. 애플리케이션이 C 또는 C++로 작성된 경우 라이선스를 구성합니다. 이 단계는 Python으로 작성된 애플리케이션에 대한 옵션입니다. 자세한 내용은 Junos OS를 실행하는 디바이스에서 JET 애플리케이션 및 라이선스 구성 을 참조하십시오.

  5. 취득한 인증서를 사용하여 패키지를 빌드하고 패키지에 서명합니다.

  6. Junos OS를 실행하는 디바이스에 애플리케이션을 구축합니다.

서명 인증서 요청

JET 애플리케이션을 개발 및 배포하려면 인증서 요청 스크립트를 실행하여 JET VM에 패키지 서명 인증서를 설치해야 합니다. 이 스크립트는 서명 키와 JET와 함께 사용할 인증서 요청을 생성하는 데 도움이 됩니다.

주의:

주니퍼 네트웍스를 포함한 누구와도 서명 키를 공유하지 마십시오. 이 키를 사용하면 누구나 라우터에서 신뢰할 수 있는 애플리케이션에 서명할 수 있습니다. 따라서 라우터의 루트 암호와 동일한 보안 수준을 가진 키를 처리합니다. 일단 서명 키를 확보하면 VM 외부의 파일에 저장합니다.

인증서 요청 스크립트는 다음 정보를 요청합니다.

  • 도시, 주 및 국가.

  • 조직 및 단위. 조직은 모호해서는 안됩니다. 하이픈은 있을 수 없습니다("-").

  • 인증서 유형: 인증서가 상용인지 개인인지 지정합니다. 주니퍼 법인이 아닌 법인은 상업적인 솔루션을 사용해야 합니다. 사설 인증서는 조직이 주니퍼인 경우에만 할당됩니다.

  • 프로바이더 접두사: 각 JET 파트너에게 주니퍼가 지정한 고유한 프로바이더 이름입니다.

  • 사용자 문자열: 선택한 추가 사양입니다. 개발 팀이나 프로젝트 이름을 지정하는 문자열일 수 있습니다. 사용자 문자열은 소문자 뒤에 하나 이상의 소문자 또는 번호(예: teamjet2)로 구성될 수 있습니다.

  • 구축 범위: 구축 범위는 동일한 JET 파트너에 대해 여러 인증서를 구분하기 위해 주니퍼가 지정한 문자열입니다. 이는 생성된 인증서의 유효 기간을 정의합니다. 범위는 상용 또는 평가가 될 수 있습니다. 할당되지 않은 경우 빈 상태로 두십시오.

  • 인덱스 번호: 이 숫자는 인증서 생성 번호로 알려져 있습니다. 최초 인증서의 경우 1이 됩니다. 인증서가 만료되고 새 인증서를 요청하면 이 번호가 증분됩니다.

  • 이메일 주소: 인증서 연락처의 이메일 주소가 인증서에 내장됩니다. 조직 부서 또는 부서의 이메일 주소를 사용하는 것이 좋습니다. 개인 이메일 주소를 사용하지 않는 것이 좋습니다.

서명된 애플리케이션을 만들려면 다음 절차에서 설명한 대로 인증서를 요청하고 복사합니다. 서명되지 않은 애플리케이션을 생성하려는 경우 이 절차는 선택 사항입니다.

인증서를 수동으로 요청하려면 다음을 수행합니다.

  1. 디바이스에 이미 없는 경우 /usr/local/junos-jet/certs 디렉토리를 생성합니다.

  2. VM 터미널에서 명령을 실행합니다 jet-certificate-request .

  3. 스크립트는 일련의 질문을 통해 안내합니다. 질문에 답변하고 각 답변 후에 Enter 키를 누릅니다. 위에 나열된 각 답변의 요구 사항을 참조하십시오.

  4. 답변을 바탕으로 스크립트는 /usr/local/junos-jet/certs 디렉토리 certname인 _key.pem 및 certname_req.pem에 두 개의 파일을 생성합니다. 인증서 certname 의 이름입니다.

    인증서 이름은 ORGANIZATION-USER-TYPE-NUMBER 형식을 따라야 합니다. 네 가지 매개 변수는 모두 필수입니다. 그렇지 않으면 다음과 같은 오류가 나타납니다.

  5. VM 외부에 certname_key.pem 파일을 저장합니다. 바로 서명 키입니다. 개발 조직 외부의 아무도 액세스할 수 없도록 합니다. 주니퍼 네트웍스를 포함한 누구와도 서명 키를 공유하지 마십시오.

    이 키를 사용하면 누구나 라우터에서 신뢰할 수 있는 애플리케이션에 서명할 수 있습니다. 따라서 라우터의 루트 암호와 동일한 보안 수준을 가진 키를 처리합니다.

  6. certnamemailto:jet-cert@juniper.net jet Certificate Processing로 _req.pem 파일을 보냅니다. 이 파일에는 인증서 요청이 포함되어 있습니다. 요청자는 조직을 대신하여 서명 인증서를 요청할 수 있는 권한을 부여받아야 합니다. JET 인증서 처리가 즉시 인증서를 귀하에게 보냅니다.

  7. 인증서를 받으면 증명서를 저장 certname 하여 /usr/local/junos-jet/certs 디렉토리에 복사합니다.

  8. 인증서와 서명 키가 /usr/local/junos-jet/certs 디렉토리에 있는지 확인합니다.

64비트 애플리케이션 컴파일

JET는 FreeBSD 및 Junos OS를 통해 업그레이드된 FreeBSD로 Junos OS를 위한 64비트 애플리케이션을 지원합니다. 애플리케이션을 패키징할 준비가 되면 다음 명령을 사용하여 AMD64 또는 ARM64 64비트 프로세서 아키텍처에 사용할 64비트 애플리케이션을 컴파일합니다.

FreeBSD를 사용하는 AMD64 및 Junos OS와 함께 사용할 수 있는 애플리케이션을 컴파일하려면 다음을 수행합니다.

  1. JET 패키지에 포함되어야 하는 GCC 툴체인이 있는지 확인합니다.

  2. 명령을 mk-amd64 application name 사용하여 애플리케이션 패키지를 구축합니다.

업그레이드된 FreeBSD를 사용하는 AMD64 및 Junos OS와 함께 사용할 수 있는 애플리케이션을 컴파일하려면 다음을 수행합니다.

  1. JET 패키지에 포함해야 하는 Clang 툴체인이 있는지 확인합니다.

  2. 명령을 mk-amd64,bsdx application name 사용하여 애플리케이션 패키지를 구축합니다.

업그레이드된 FreeBSD를 사용하는 ARM64 및 Junos OS와 함께 사용할 수 있는 애플리케이션을 컴파일하려면 다음을 수행합니다.

  1. JET 패키지에 포함해야 하는 Clang 툴체인이 있는지 확인합니다.

  2. 명령을 mk-arm64,bsdx application name 사용하여 애플리케이션 패키지를 구축합니다.

예: 서명된 C 패키지 개발

JET VM을 설정하고 서명 인증을 취득한 후에는 VM에서 개발 샌드박스를 생성하고 서명된 디바이스 애플리케이션의 개발을 시작할 준비가 됩니다. 이 예제를 사용하여 C 애플리케이션 에코클라이언트 및 에코서비스를 생성하십시오.

  1. 샌드박스를 확인하십시오. 샌드박스는 빌드 환경이 적절하게 조건화되었는지 확인하기 위해 래퍼 스크립트 mk에서 사용하는 상단의 .sandbox-env라는 작은 환경 파일을 가진 빌드 트리입니다.
    참고:

    에코 클라이언트는 데모 애플리케이션입니다. bin/ 디렉토리에서는 에코 클라이언트에 대한 소스 파일과 함께 샌드박스 내에서 필요한 모든 구성 및 빌드 관련 파일을 사용할 수 있습니다.

  2. 에코 클라이언트 패키지를 구축합니다.
    참고:

    Junos OS 릴리스 20.2R1부터 ACX710 디바이스에서 JET 애플리케이션을 실행하는 경우 C, Python 또는 Ruby로 작성된 JET 애플리케이션의 ARM 기반 컴파일을 위해 Clang 툴체인을 사용할 수 있습니다. Clang 툴체인을 사용하는 대신 mk-i386,bsdx 명령을 mk-arm,bsdx 사용하여 애플리케이션을 컴파일합니다.

  3. Junos OS에서 실행되는 디바이스에 에코 클라이언트 패키지를 복사합니다.
  4. Junos 디바이스에서 구성 모드를 입력합니다.
  5. 에코 클라이언트 패키지를 설치합니다.

    설치되었는지 확인합니다.

  6. 에코 서버 샌드박스를 확인하십시오.
  7. 에코 서버 패키지를 구축합니다.
  8. 에코 서버 패키지를 Junos VM에 복사합니다.
  9. Junos 디바이스에 에코 서버 패키지를 추가합니다.
  10. 패키지가 성공적으로 추가되었는지 확인합니다.
  11. Junos 디바이스에서 에코 서버의 공급업체 ID, 라이선스 유형 및 구축 범위를 구성합니다. 패키지에 사용했던 것과 동일한 프로바이더는 라이선스를 사용하십시오.
  12. Junos 디바이스에서 에코 서버를 구성합니다.
  13. Junos 디바이스에서 에코 클라이언트의 ID, 라이선스 유형 및 구축 범위를 구성합니다. 패키지에 사용했던 것과 동일한 프로바이더는 라이선스를 사용하십시오.
  14. Junos 디바이스에서 에코 클라이언트 애플리케이션을 구성합니다.
  15. 에코 클라이언트 애플리케이션을 실행합니다.

예: C 종속성 없이 서명된 Python 패키지 개발

JET VM을 설정하고 서명 인증을 취득한 후에는 VM에서 개발 샌드박스를 생성하고 서명된 디바이스 애플리케이션의 개발을 시작할 준비가 됩니다. 이 예제를 사용하여 C 종속성 없이 서명된 Python 패키지를 개발하십시오.

  1. VM에서 /home/user directory로 이동합니다.
  2. 샌드박스 이름인 명령을 SamplePyApp 사용하여 mksb 샌드박스를 만듭니다. 샌드박스는 빌드 환경이 적절하게 조건화되었는지 확인하기 위해 래퍼 스크립트 mk에서 사용하는 상단의 .sandbox-env라는 작은 환경 파일을 가진 빌드 트리입니다.
  3. 샌드박스에서 하위디렉터를 생성합니다.

    먼저 명령을 사용하여 workon 샌드박스로 이동합니다. 명령어로 workon $SB /src 디렉토리로 직접 연결하고 샌드박스를 올바르게 설정합니다.

    또는 샌드박스의 src 디렉토리로 연결할 수도 있습니다cd.

    다음으로, Python, 라이브러리 또는 빈(실행 파일) 파일을 기반으로 $SB/src/python, $SB/src/lib 또는 $SB/src/bin의 애플리케이션 코드 하위디렉터를 생성합니다.

  4. 코드를 개발합니다.

    Python 3을 사용하여 애플리케이션을 작성하는 경우 스크립트의 예외 블록에 PASS 키워드를 포함하십시오.

  5. 애플리케이션을 패키지로 작성하기 위해 애플리케이션 JSON 파일을 작성합니다.

    자세한 내용은패키지 JET 애플리케이션을 참조하십시오.

  6. .bashrc 파일에 jet-pkg-gen.py 경로를 추가합니다.
  7. 명령을 실행 jet-pkg-gen.py 하여 적절한 만들기파일을 자동 생성합니다. 명령은 jet-pkg-gen.py 두 가지 옵션을 제공합니다.
    • -i 다음으로 JSON 파일의 경로와 파일 이름을 클릭하여 선택할 수 있습니다.

    • -p 그 다음으로 샌드박스의 src 디렉토리로 향하는 경로가 제공됩니다.

    예를 들어 샌드박스 이름이 SamplePyApp인 경우를 예로 들어 보겠습니다.

    참고:

    자동 생성 애플리케이션 만들기파일은 대부분의 경우 수정될 것입니다. 외부 라이브러리 종속성이 있는 경우 필요에 따라 makefile을 조정합니다.

  8. 전체 패키지를 빌드합니다.

    먼저 src 디렉토리($SB/src)로 돌아갑니다. 다음으로 5단계의 mk-i386 SamplePyApp SamplePyApp "app-name" JSON 파일에서 명령을 실행합니다.

    참고:

    Junos OS 릴리스 20.2R1부터 ACX710 디바이스에서 JET 애플리케이션을 실행하는 경우 C, Python 또는 Ruby로 작성된 JET 애플리케이션의 ARM 기반 컴파일을 위해 Clang 툴체인을 사용할 수 있습니다. Clang 툴체인을 사용하는 대신 mk-i386,bsdx 명령을 mk-arm,bsdx 사용하여 애플리케이션을 컴파일합니다.

  9. 패키지를 Junos OS가 실행되는 디바이스에 복사합니다.

이제 Junos 디바이스를 구성하고 패키지를 설치합니다.

  1. 구성 모드를 입력합니다.

  2. 필요한 경우 Junos 디바이스에서 애플리케이션의 제공업체 ID, 라이선스 유형 및 구축 범위를 구성합니다. 패키지에 사용했던 것과 동일한 프로바이더는 라이선스를 사용하십시오.

    자세한 내용은 Junos OS를 실행하는 디바이스에서 JET 애플리케이션 및 라이선스 구성을 참조하십시오.

  3. 운영 모드로 빠져나간 후 Junos 디바이스에 복사된 패키지를 설치합니다.

    참고:

    구성되지 않으면 providers 이 단계가 실패합니다.

  4. 패키지가 성공적으로 설치되었는지 확인합니다.

  5. 구성 모드를 입력합니다.

  6. Junos OS CLI를 통해 명령줄 인수를 구성합니다. Junos OS를 실행하는 디바이스의 /var/db/scripts/jet/ directory에서 Python JET 스크립트를 사용할 수 있는 경우 파일에 대한 명령줄 인수를 구성하고 Junos CLI에서 인수를 제공할 수 있습니다.

    애플리케이션의 인수는 다음과 같습니다.

    CLI에서 명령줄 인수를 구성합니다. 이 예에서 스크립트 파일 이름은 cmdline_args.py.

  7. 구성을 커밋하고 운영 모드로 전환합니다.

  8. 애플리케이션을 실행합니다.

예: C 종속성이 있는 서명된 Python 패키지 개발

JET VM을 설정하고 서명 인증을 취득한 후에는 VM에서 개발 샌드박스를 생성하고 서명된 디바이스 애플리케이션의 개발을 시작할 준비가 됩니다. 이 예제를 사용하여 C 종속성이 있는 서명된 Python 패키지를 개발하십시오.

  1. 샌드박스를 확인하십시오.
  2. Python 하위 디렉토리에서 애플리케이션 디렉토리를 만듭니다.
  3. 비트어레이는 C 종속성이 있는 비교적 단순한 Python 모듈의 예입니다. https://pypi.org/project/bitarray/ Bitarray를 다운로드하여 Python 애플리케이션 디렉토리로 추출합니다.

    이것은 비트어레이 모듈을 사용하는 간단한 Python 애플리케이션의 예입니다.

    Python 3을 사용하여 애플리케이션을 작성하는 경우 스크립트의 예외 블록에 PASS 키워드를 포함하십시오.

  4. 외부 소스 파일을 참조하는 JSON 구성 파일을 만듭니다. 자세한 내용은 패키지 JET 애플리케이션을 참조하십시오.
  5. 다음 명령을 실행하여 필수 파일과 패키지가 설치될 때 Junos 장비에서 파일을 찾은 매니지드 파일을 만듭니다.
  6. Junos 장치에서 bitarray 모듈을 찾으려면 __init__.py 파일의 /PyAppC/경로와 _bitarray.so 파일의 bitarray/디렉토리 경로를 추가합니다.
  7. 애플리케이션을 빌드 및 패키지합니다.
    참고:

    Junos OS 릴리스 20.2R1부터 ACX710 디바이스에서 JET 애플리케이션을 실행하는 경우 C, Python 또는 Ruby로 작성된 JET 애플리케이션의 ARM 기반 컴파일을 위해 Clang 툴체인을 사용할 수 있습니다. Clang 툴체인을 사용하는 대신 mk-i386,bsdx 명령을 mk-arm,bsdx 사용하여 애플리케이션을 컴파일합니다.

  8. Junos OS를 실행하는 디바이스에 내장된 패키지를 복사합니다.
  9. 필요한 경우 Junos 디바이스에서 애플리케이션의 제공업체 ID, 라이선스 유형 및 구축 범위를 구성합니다. 패키지에 사용했던 것과 동일한 프로바이더는 라이선스를 사용하십시오.
  10. Junos OS를 실행하는 디바이스에 패키지를 설치합니다.

    패키지가 성공적으로 설치되면 종속 Python 모듈과 C 공유 라이브러리가 매니지드 파일에 지정된 표준 Python 모듈 경로의 장비에 설치됩니다.

  11. 구성 모드에서 애플리케이션을 추가합니다.
  12. 애플리케이션 실행
릴리스 히스토리 테이블
릴리스
설명
20.2R1
Junos OS 릴리스 20.2R1부터 ACX710 디바이스에서 JET 애플리케이션을 실행하는 경우 C, Python 또는 Ruby로 작성된 JET 애플리케이션의 ARM 기반 컴파일을 위해 Clang 툴체인을 사용할 수 있습니다.