Apache Karaf에 설치

Red Hat Fuse 7.10

Apache Karaf 컨테이너에 Red Hat Fuse 설치

Red Hat Fuse Documentation Team

초록

Red Hat Fuse를 쉽게 설치하고 특정 환경에 맞게 설치를 조정할 수 있습니다.

머리말

Red Hat Fuse는 온프레미스 또는 클라우드에서 확장된 엔터프라이즈에서 신속하게 통합할 수 있는 경량의 유연한 통합 플랫폼입니다.

Apache Camel을 기반으로 하는 Fuse는 패턴 기반 통합, 풍부한 커넥터 카탈로그 및 광범위한 데이터 변환 기능을 활용하여 사용자가 모든 것을 통합할 수 있도록 지원합니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지에서 참조하십시오.

1장. Apache Karaf에 Fuse for Development 설치

Karaf에서 실행되는 Fuse 애플리케이션을 개발하려면 다음 항목에 설명된 대로 Fuse를 로컬로 설치합니다.

1.1. Apache Karaf에 Fuse 설치 준비

Apache Karaf에 Fuse를 설치하려면 시스템을 확인하여 하드웨어 요구 사항을 충족하고 지원되는 플랫폼이며 Java 런타임이 지원되는지 확인합니다. 또한 웹 서비스, API 및 전송 프로토콜에 지원되는 표준 소프트웨어를 사용할 계획이 있는지 확인합니다.

절차

  1. Fuse를 설치하려는 시스템에서 다음이 있는지 확인합니다.

    • 250MB의 디스크 여유 공간
    • 2GB RAM

    이 하드웨어 요구 사항은 Apache Karaf에 Fuse를 완전히 설치하기 위한 것입니다. 또한 Fuse를 실행 중인 시스템에는 캐싱, 영구 메시지 저장소 및 기타 기능을 위한 공간이 필요합니다. 실제 요구 사항은 Fuse 애플리케이션의 기능에 따라 다릅니다.

  2. Fuse를 설치하려는 시스템이 지원되는 플랫폼을 실행하고 있는지 확인합니다. Red Hat은 Red Hat Fuse 지원 구성에 나열된 플랫폼에서 Fuse 제품을 테스트하고 지원합니다.
  3. 시스템이 Apache Karaf의 Fuse에서 지원하는 Java 런타임을 실행하고 있는지 확인합니다. Red Hat Fuse 지원 구성에서 지원되는 Java 버전을 참조하십시오.
  4. Java 런타임이 공백을 포함하는 디렉터리 경로 아래에 설치되지 않았는지 확인합니다. 예를 들어 C:\Program Files\Java\jdk8 은 허용 가능한 경로가 아닙니다. 경로의 공백으로 인해 런타임에 Apache Karaf의 Fuse에서 예기치 않은 오류가 발생합니다.
  5. Red Hat Fuse 지원 표준 목록을 확인하여 지원되는 표준 소프트웨어를 사용하고 있는지 확인합니다.

1.2. Apache Karaf에 Fuse 설치

Karaf의 Fuse 7.10용 표준 설치 패키지는 Red Hat 고객 포털에서 다운로드할 수 있습니다. Apache Karaf 컨테이너의 표준 어셈블리를 설치하고 전체 Fuse 기술 스택을 제공합니다.

Fuse 기능 및 번들의 사용자 지정 하위 집합이 포함된 Fuse 7.1의 사용자 지정 어셈블리를 만들 수 있습니다. 사용자 지정 빠른 시작에서는 Maven을 사용하여 Red Hat Fuse의 사용자 지정 어셈블리를 생성하는 방법을 보여줍니다. Fuse Software Downloads 페이지에서 다운로드 가능한 파일에서 모든 빠른 시작을 설치할 수 있습니다.

사전 요구 사항

Fuse를 설치하려는 시스템은 1.1절. “Apache Karaf에 Fuse 설치 준비” 에 설명된 하드웨어 및 소프트웨어 요구 사항을 충족합니다.

절차

  1. 브라우저에서 Fuse Software Downloads 페이지로 이동합니다.

    Red Hat 고객 포털에 로그인하지 않은 경우 로그인하라는 메시지가 표시되면 다운로드 페이지가 표시됩니다(계정이 Red Hat Fuse 서브스크립션에 연결되어야 함).

  2. Fuse 소프트웨어 다운로드 페이지에서 Karaf Installer의 Red Hat Fuse 7.10 오른쪽에 있는 다운로드를 클릭하여 로컬 zip 파일을 가져옵니다.
  3. zip 파일의 내용을 모든 권한이 있는 디렉터리로 추출합니다.

    #, %, ^, , " 이라는 경로 이름에 공백 또는 다음 특수 문자가 있는 디렉토리에 zip 파일의 압축을 풉니다. 예를 들어 C:\Documents 및 Settings\Greco#Roman\Desktop\fuse 에 압축을 넣지 마십시오.

  4. IBM JDK를 사용하는 경우 다음 추가 단계를 수행합니다.

    1. Fuse 설치 디렉터리의 /lib/endorsed 디렉토리에서 saaj-api .jar 파일을 제거합니다. 예를 들면 다음과 같습니다.

      rm lib/endorsed/org.apache.servicemix.specs.saaj-api-1.3-2.9.0.jar
    2. 다음과 같이 JAVA_OPTS 환경 변수를 설정합니다.

      JAVA_OPTS=-Xshareclasses:none

      Karaf 컨테이너를 시작하기 전에 JAVA_OPTS 환경 변수를 설정해야 합니다.

  5. ariaf 컨테이너의 Fuse에 대한 원격 액세스를 활성화하고 Fuse Console에 액세스할 수 있는 관리자 사용자를 추가합니다.

    기본적으로 컨테이너에 대해 사용자가 정의되어 있지 않습니다. 이 경우 전경에서 컨테이너를 실행할 수 있지만 원격으로 컨테이너에 액세스할 수 없으며 백그라운드에서 실행할 수 없습니다. 다음 단계에 따라 admin 역할의 사용자를 하나 이상 생성하는 것이 좋습니다.

    1. 텍스트 편집기에서 Fuse 설치 디렉터리에 있는 etc/users.properties 파일을 엽니다.
    2. 다음 행을 찾습니다.

      #admin = admin,_g_:admingroup
      #_g_\:admingroup = group,admin,manager,viewer,systembundles,ssh
    3. 각 줄에서 선행 # 문자를 제거하여 줄의 주석을 제거합니다.
    4. 첫 번째 줄에서 admin 의 첫 번째 인스턴스를 선택한 사용자 이름(예: user1 )으로 변경합니다.
    5. 동일한 행에서 admin 의 두 번째 인스턴스를 해당 사용자의 암호로 변경합니다(예: passw0rd ).

      예를 들면 다음과 같습니다.

      user1 = passw0rd,_g_:admingroup
      _g_\:admingroup = group,admin,manager,viewer,systembundles,ssh
    6. 파일을 저장하고 닫습니다.
  6. Fuse를 시작하려면 Windows에서 Linux/Unix 또는 bin \fuse.errors에서 bin/fuse /fuse 를 실행합니다.
  7. 필요한 경우 Fuse 콘솔에 액세스하려면 웹 브라우저에서 제공된 URL을 열고 etc/users.properties 파일에 설정한 사용자 이름 및 암호로 로그인합니다. Fuse Console 사용에 대한 자세한 내용은 Karaf Standalone에서 Fuse 관리를 참조하십시오.

1.3. Fuse on Karaf 오프라인에서 실행 정보

인터넷 연결 없이도 Apache Karaf 컨테이너를 오프라인 모드에서 실행할 수 있습니다. 그러나 사용자 지정 애플리케이션을 컨테이너에 배포하려는 경우 이러한 애플리케이션을 사용하여 오프라인 모드에서 컨테이너를 실행하기 전에 추가 종속 항목을 로컬 Maven 리포지토리로 다운로드해야 할 수 있습니다.

Apache Karaf 컨테이너를 오프라인 모드로 실행하려면 다음과 같은 종속 항목을 구분해야 합니다.

  • 런타임 종속성 은 기본 구성에서 Apache Karaf 컨테이너를 실행하는 데 필요한 종속 항목입니다.
  • 빌드 시간 종속성 은 타사 라이브러리를 포함할 수 있는 사용자 지정 애플리케이션을 빌드하는 데 필요한 종속 항목입니다.

다음은 오프라인 모드에서 수행할 수 있는 작업과 온라인 모드에서 수행해야 하는 작업(인터넷 연결 사용)에 대한 요약입니다.

  • Apache Karaf 컨테이너를 기본 구성으로 실행하는 것은 오프라인 모드에서 지원됩니다. Apache Karaf 컨테이너의 기본 구성은 etc/org.apache.karaf.features.cfg 파일의 featuresBoot 속성에 의해 지정됩니다. 필요한 종속 항목은 설치의 시스템/ 하위 디렉터리에 제공됩니다.
  • 추가 기능 설치 는 일반적으로 오프라인 모드에서 지원되지 않습니다. 기본적으로 features:install 명령을 사용하여 표준 기능 리포지토리( etc/org.apache.karaf.cfg 파일의 featuresRepositories 속성에 따라 지정됨)를 설치할 수 있지만 이러한 기능의 대부분은 인터넷에서 다운로드해야 하므로 오프라인 모드에서 지원되지 않습니다.
  • 사용자 지정 애플리케이션 배포 는 일반적으로 오프라인 모드에서 지원되지 않습니다. 최소한의 빌드 시간 종속 항목 세트가 있는 애플리케이션을 오프라인 상태로 배포할 수 있는 경우가 있을 수 있습니다. 그러나 사용자 지정 애플리케이션에는 일반적으로 Apache Maven에서 JAR 파일을 다운로드할 수 있도록 인터넷 연결이 필요한 타사 종속 항목이 있습니다.

1.4. 선택적으로 독립 실행형 Apache 배포 사용

Red Hat Fuse는 다운로드할 수 있는 추가 패키지를 제공하며 Apache Camel 및 Apache CXF의 표준 배포가 포함되어 있습니다. Apache Camel 또는 Apache CXF(OSGi 컨테이너 제외)의 표준 업스트림 배포를 사용하려면 다운로드한 추가 패키지에 보관된 버전을 사용합니다.

절차

  1. Red Hat 고객 포털에 로그인합니다.
  2. Red Hat 고객 포털Downloads CryostatRed Hat FuseDownloads 페이지로 이동합니다.
  3. 소프트웨어 다운로드 페이지의 버전 드롭다운 목록에서 7.10.0 을 선택합니다.
  4. Red Hat Fuse 7.10.0 Extras 아카이브를 다운로드합니다.

    extras 아카이브 파일에는 내부에 중첩된 다음 아카이브 파일이 포함되어 있습니다.

    • apache-camel-2.23.2.fuse-7_10_0-00018-redhat-00001.zip
    • apache-cxf-3.3.6.fuse-7_10_0-00020-redhat-00001.zip
  5. 이러한 파일을 원하는 위치에 복사하고 플랫폼에 적절한 유틸리티를 사용하여 압축을 풉니다.
주의

경로 이름에 공백이 있는 폴더에 아카이브 파일의 압축을 풀지 마십시오. 예를 들어 C:\Documents 및 Settings\Grecorom\Desktop\fuse에 압축을 넣지 마십시오.

2장. Apache Karaf의 Fuse에 Hotfix Patch 적용

2.1. 기능 및 번들 패치

패치는 Apache Karaf 설치 시 Fuse에 있는 업데이트된 파일 버전이 포함된 ZIP 아카이브입니다. 여기에는 다음이 포함됩니다.

  • 번들: 가장 일반적이며 가장 간단한 경우 핫픽스 패치에는 단일 번들이 포함될 수 있습니다.
  • 각각 $FUSE_HOME/etc$FUSE_HOME/bin 디렉터리에 있는 구성 파일 및 스크립트입니다.
  • 일반 번들이 아니며 $FUSE_HOME/lib 디렉터리에 있는 라이브러리입니다.
  • 기능 정의 변경: 일반적으로 Karaf 기능은 $FUSE_HOME/system 디렉토리에서 사용 가능한 설명자에 포함되어 있지만 핫픽스 패치는 이러한 파일을 변경하지 않습니다. 대신 핫 수정 패치는 $FUSE_HOME/etc/org.apache.karaf.features.xml 인 기능 덮어쓰기 파일을 변경할 수 있습니다. 이를 통해 특정 기능의 번들을 업그레이드하거나 지정된 기능을 통해 핫픽스 방식으로 기능 정의를 변경할 수 있습니다.

업그레이드 및 핫픽스 패치의 차이점

  • 핫픽스 패치: 핫픽스 패치에는 하나 이상의 중요한 버그에 대한 수정 사항이 포함되어 있습니다. 이는 현재 Red Hat Fuse 배포판 상단에 적용됩니다. 주요 목적은 기존 배포에서 일부 번들 및 라이브러리를 업데이트하는 것입니다.
  • 업그레이드: Fuse on Apache Karaf 업그레이드 메커니즘을 사용하면 Karaf에서 업데이트된 버전의 Fuse를 다시 설치할 필요 없이 Apache Karaf 컨테이너에 수정 사항을 적용할 수 있습니다. 또한 업그레이드로 인해 배포된 애플리케이션에 문제가 발생하는 경우 업그레이드를 롤백할 수 있습니다. Apache Karaf 업그레이드의 Fuse는 번들 JAR, 구성 파일, 정적 파일을 포함한 모든 파일을 업데이트합니다.

Apache Karaf Standalone의 Fuse의 경우 Karaf 콘솔의 패치 쉘에서 명령을 사용하여 패치를 적용할 수 있습니다. 이 방법은 파괴적이고 되돌릴 수 없습니다. 다음 절차에 따라 Apache Karaf에서 Red Hat Fuse를 업그레이드할 수도 있습니다. 업그레이드에 대한 자세한 내용은 Upgrading Fuse on Apache Karaf 를 참조하십시오.

2.2. Apache Karaf에서 Red Hat Fuse에 핫픽스 패치 적용

핫픽스 메커니즘을 사용하여 사용 가능한 기능 정의 및 번들을 동시에 업데이트할 수 있습니다. Apache Karaf 설치 시 Fuse에 핫픽스 패치를 적용하는 절차는 다음과 같습니다.

절차

  1. 업그레이드하기 전에 Apache Karaf에서 Fuse를 전체 백업하십시오.
  2. 터미널을 열고 Apache karaf 서버에서 Fuse를 시작합니다.

    [user@FUSE_HOME/bin ~] $ ./fuse
  3. 선택 사항: 고객 포털에서 필요한 패치를 다운로드하여 5단계로 건너뜁니다.
  4. patch:find 명령을 입력하여 Maven 리포지토리에서 사용 가능한 패치를 찾습니다. 예를 들면 다음과 같습니다.

    karaf@root()> patch:find
    Found new remote patch at mvn:org.jboss.redhat-fuse/fuse-karaf-patch-repository/7.8.0.fuse-sb2-780040/zip
    You can add the patch using "patch:add mvn:org.jboss.redhat-fuse/fuse-karaf-patch-repository/7.8.0.fuse-sb2-780040/zip" command, or simply use "patch:find --add" option.
    참고

    patch:find 명령을 --add 옵션과 함께 사용하여 최신 패치를 찾아서 컨테이너 환경에 추가할 수 있습니다.

  5. patch:add 명령을 입력하여 컨테이너 환경에 패치를 추가합니다. 예를 들면 다음과 같습니다.

    karaf@root()> patch:add mvn:org.jboss.redhat-fuse/fuse-karaf-patch-repository/7.8.0.fuse-sb2-780040/zip
    [name]                                             [installed] [rollup] [description]                                      [CVEs]
    fuse-karaf-maintenance-patch-7.8.0.fuse-sb2-780040 false       false    fuse-karaf-maintenance-patch-7.8.0.fuse-sb2-780040 CVE-2020-28052
    
    Current patch mechanism version: 7.8.0.fuse-780038
    New patch mechanism version detected: 7.8.0.fuse-780040
    Please run "patch:update" command to upgrade patching mechanism to version 7.8.0.fuse780040
    참고

    patch:add 명령을 사용하는 대신 .zip 패치 파일을 FUSE_HOME/patches 디렉터리에 복사하여 패치 파일을 자동으로 추가할 수도 있습니다.

  6. 선택 사항: patch:update 명령을 입력하여 패치 메커니즘 자체를 업데이트합니다.

    karaf@root()> patch:update
    Current patch mechanism version: 7.8.0.fuse-780038
    New patch mechanism version detected: 7.8.0.fuse-780040
    Uninstalling patch features in version 7.8.0.fuse-780038
    Installing patch features in version 7.8.0.fuse-780040
  7. patch:simulate 명령을 입력하여 패치 설치를 시뮬레이션합니다.

    이렇게 하면 패치가 설치될 때 컨테이너에 대한 변경 사항이 발생하지만 실제 컨테이너는 변경되지 않습니다. 시뮬레이션 로그를 검토하여 이러한 변경 사항을 파악합니다.

  8. patch:list 명령을 입력하여 추가된 패치 목록을 확인합니다. 이 목록에서 [name] 제목 아래의 항목은 패치 ID입니다.

    karaf@root()> patch:list
    [name]                                             [installed] [rollup] [description]                                      [CVEs]
    fuse-karaf-maintenance-patch-7.8.0.fuse-sb2-780040 false       false    fuse-karaf-maintenance-patch-7.8.0.fuse-sb2-780040 CVE-2020-28052
  9. 패치에 명시적인 CVE 메타데이터가 포함된 경우 patch:show 명령을 입력하여 자세한 내용을 확인할 수 있습니다.

    karaf@root()> patch:show fuse-karaf-maintenance-patch-7.8.0.fuse-sb2-780040
    Patch ID: fuse-karaf-maintenance-patch-7.8.0.fuse-sb2-780040
    Patch Commit ID: a2d7cf58e21116cde66c97232aea4be1ec304400
    #### 1 CVE fix:
     - CVE-2020-28052: bouncycastle: password bypass in OpenBSDBCrypt.checkPassword utility possible
       Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1912881
       CVE link: https://cve.mitre.org/cgi-bin/cvename.cgi?name=2020-28052
  10. patch:install 명령을 입력하고 적용할 패치에 패치 ID를 지정하여 컨테이너에 패치를 적용합니다. 예를 들면 다음과 같습니다.

    patch:install fuse-karaf-maintenance-patch-7.8.0.fuse-sb2-780040

2.3. 패치 롤백

설치된 핫픽스 패치를 롤백하고 다음과 같이 patch:rollback 명령을 사용하여 사전 패치 동작으로 복원할 수 있습니다.

절차

  1. patch:list 명령을 입력하여 가장 최근에 설치된 패치의 패치 ID를 가져옵니다.
  2. 업데이트된 번들을 롤백하려면 다음 명령을 입력합니다.

    karaf@root()> patch:rollback my-patch-x
    INFO : org.jboss.fuse.modules.patch.patch-management (2): Rolling back non-rollup patch "my-patch-x"
    removing overriden feature: hawtio-rbac/2.0.0.fuse-000117
    refreshing features
    Enter feature:info command to view the information about the feature.
    karaf@root()> feature:info hawtio-rbac
    Feature hawtio-rbac 2.0.0.fuse-000117
    Details:
          Installs the hawtio RBAC enabler bundle(s)
    Feature has no configuration
    Feature has no configuration files
    Feature has no dependencies.
    Feature contains followed bundles:
          mvn:io.hawt/hawtio-osgi-jmx/2.0.0.fuse-000117
    Feature has no conditionals.

2.4. Red Hat Fuse 애플리케이션 패치

새로운 patch-maven-plugin 메커니즘을 사용하여 Red Hat Fuse 애플리케이션에 패치를 적용할 수 있습니다. 이 메커니즘을 사용하면 서로 다른 Red Hat Fuse BOMS에서 제공하는 개별 버전을 변경할 수 있습니다(예: fuse-springboot-bomfuse-karaf-bom ).

2.4.1. patch-maven-plugin 정보

patch-maven-plugin 은 다음 작업을 수행합니다.

  • 현재 Red Hat Fuse BOM과 관련된 패치 메타데이터를 검색합니다.
  • BOMs에서 가져온 &lt ;dependencyManagement>에 버전 변경 사항을 적용합니다.

patch-maven-plugin 이 메타데이터를 가져온 후 플러그인이 선언된 프로젝트의 모든 관리 및 직접 종속 항목을 반복하고 CVE/patch 메타데이터를 사용하여 종속성 버전(동일한 경우)을 대체합니다. 버전이 교체되면 Maven 빌드가 계속되고 표준 Maven 프로젝트 단계를 통해 진행됩니다.

2.4.2. Red Hat Fuse 애플리케이션에 패치 적용

patch-maven-plugin 의 목적은 Red Hat Fuse BOM에 나열된 종속 항목의 버전을 애플리케이션에 적용하려는 패치의 패치 메타데이터에 지정된 버전으로 업데이트하는 것입니다.

절차

다음 절차에서는 애플리케이션에 패치를 적용하는 방법을 설명합니다.

  1. 프로젝트의 pom.xml 파일에 patch-maven-plugin 을 추가합니다. patch-maven-plugin 의 버전은 Fuse BOM의 버전과 동일해야 합니다.

    <build>
        <plugins>
            <plugin>
                <groupId>org.jboss.redhat-fuse</groupId>
                <artifactId>patch-maven-plugin</artifactId>
                <version>${version.org.jboss-redhat-fuse}</version>
                <extensions>true</extensions>
            </plugin>
        </plugins>
    </build>
  2. mvn clean deploy 또는 mvn validate 또는 mvn dependency:tree 명령 중 하나를 실행하면, 플러그인은 프로젝트 모듈을 통해 Red Hat Fuse BOMs 중 하나를 사용하는지 확인합니다. 지원되는 BOM은 다음 두 가지로 간주됩니다.

    • org.jboss.redhat-fuse:fuse-karaf-bom: Fuse Karaf BOM
    • org.jboss.redhat-fuse:fuse-springboot-bom: Fuse Spring Boot BOM
  3. 위의 BOM을 찾을 수 없는 경우 플러그인은 다음 메시지를 표시합니다.

    $ mvn clean install
    [INFO] Scanning for projects...
    [INFO]
    
    ========== Red Hat Fuse Maven patching ==========
    
    [INFO] [PATCH] No project in the reactor uses Fuse Karaf or Fuse Spring Boot BOM. Skipping patch processing.
    [INFO] [PATCH] Done in 3ms
  4. Fuse BOM이 둘 다 발견되면 다음 경고와 함께 patch-maven-plugin 이 중지됩니다.

    $ mvn clean install
    [INFO] Scanning for projects...
    [INFO]
    
    ========== Red Hat Fuse Maven patching ==========
    
    [WARNING] [PATCH] Reactor uses both Fuse Karaf and Fuse Spring Boot BOMs. Please use only one. Skipping patch processing.
    [INFO] [PATCH] Done in 3ms
  5. patch-maven-plugin 은 다음 Maven 메타데이터 값 중 하나를 가져옵니다.

    • Fuse Karaf BOM을 사용하는 프로젝트의 경우 org.jboss.redhat-fuse/fuse-karaf-patch-metadata/maven-metadata.xml 이 해결되었습니다. org.jboss.redhat-fuse:fuse-karaf-patch-metadata:RELEASE 좌표를 사용하여 아티팩트의 메타데이터입니다.
    • Fuse Spring Boot BOM 프로젝트를 사용하는 프로젝트의 경우 org.jboss.redhat-fuse/fuse-springboot-patch-metadata/maven-metadata.xml 이 확인됩니다. org.jboss.redhat-fuse:fuse-springboot-patch-metadata:RELEASE 좌표를 사용하여 아티팩트의 메타데이터입니다.

      Maven에서 생성한 메타데이터의 예

      <?xml version="1.0" encoding="UTF-8"?>
      <metadata>
        <groupId>org.jboss.redhat-fuse</groupId>
        <artifactId>fuse-springboot-patch-metadata</artifactId>
        <versioning>
          <release>7.8.1.fuse-sb2-781025</release>
          <versions>
            <version>7.8.0.fuse-sb2-780025</version>
            <version>7.7.0.fuse-sb2-770010</version>
            <version>7.7.0.fuse-770010</version>
            <version>7.8.1.fuse-sb2-781025</version>
          </versions>
          <lastUpdated>20201023131724</lastUpdated>
        </versioning>
      </metadata>

  6. patch-maven-plugin 은 현재 프로젝트에 적용할 수 있는 버전을 선택하기 위해 메타데이터를 구문 분석합니다. 이는 버전이 7.8.xxx 인 Fuse BOM을 사용하는 Maven 프로젝트에서만 가능합니다. 버전 범위 7.8, 7.9 이상과 일치하는 메타데이터만 적용할 수 있으며 최신 버전의 메타데이터만 가져옵니다.
  7. patch-maven-plugin 은 이전 단계에서 발견된 groupId,artifactIdversion 으로 식별된 패치 메타데이터를 다운로드할 때 사용할 원격 Maven 리포지토리 목록을 수집합니다. 이러한 Maven 리포지토리는 활성 프로필의 프로젝트의 < repositories > 요소와 settings.xml 파일의 리포지토리에도 나열됩니다.

    $ mvn clean install
    [INFO] Scanning for projects...
    [INFO]
    
    ========== Red Hat Fuse Maven patching ==========
    
    [INFO] [PATCH] Reading patch metadata and artifacts from 2 project repositories
    [INFO] [PATCH]  - local-nexus: http://everfree.forest:8081/repository/maven-releases/
    [INFO] [PATCH]  - central: https://repo.maven.apache.org/maven2
    Downloading from local-nexus: http://everfree.forest:8081/repository/maven-releases/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/maven-metadata.xml
    ...
  8. 선택적으로 오프라인 리포지토리를 사용하려는 경우 -Dpatch 옵션을 사용하여 jboss-fuse/redhat-fuse 프로젝트의 fuse-karaf/fuse-patch-repository 또는 fuse-springboot/fuse-springboot-patch-repository 모듈에서 생성하는 ZIP 파일을 지정할 수 있습니다. 이러한 ZIP 파일은 Maven 리포지토리 구조와 동일한 내부 구조를 갖습니다. 예를 들면 다음과 같습니다.

    $ mvn clean install -Dpatch=../../../test/resources/patch-3.zip
    [INFO] Scanning for projects...
    [INFO]
    
    ========== Red Hat Fuse Maven patching ==========
    
    [INFO] [PATCH] Reading metadata and artifacts from /data/sources/github.com/jboss-fuse/redhat-fuse/fuse-tools/patch-maven-plugin/src/test/resources/patch-3.zip
    Downloading from fuse-patch: zip:file:/tmp/patch-3.zip-1742974214598205745/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/maven-metadata.xml
    Downloaded from fuse-patch: zip:file:/tmp/patch-3.zip-1742974214598205745/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/maven-metadata.xml (406 B at 16 kB/s)
    Downloading from fuse-patch: zip:file:/tmp/patch-3.zip-1742974214598205745/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/7.8.0.fuse-sb2-781023/fuse-springboot-patch-metadata-7.8.0.fuse-sb2-781023.xml
    Downloaded from fuse-patch: zip:file:/tmp/patch-3.zip-1742974214598205745/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/7.8.0.fuse-sb2-781023/fuse-springboot-patch-metadata-7.8.0.fuse-sb2-781023.xml (926 B at 309 kB/s)
    [INFO] [PATCH] Resolved patch descriptor: /home/user/.m2/repository/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/7.8.0.fuse-sb2-781023/fuse-springboot-patch-metadata-7.8.0.fuse-sb2-781023.xml
    ...
  9. 메타데이터가 원격 리포지토리, 로컬 리포지토리 또는 ZIP 파일에서 제공되는지 여부에 따라 patch-maven-plugin 에 의해 분석됩니다. 가져온 메타데이터에는 CVE 목록이 포함되어 있으며 각 CVE에 대해 수정 사항이 포함된 버전과 함께 영향을 받는 Maven 아티팩트 목록(글러러 패턴 및 버전 범위에 의해 지정됨)이 있습니다. 예를 들면 다음과 같습니다.

    <?xml version="1.0" encoding="UTF-8" ?>
    
    <metadata xmlns="urn:redhat:fuse:patch-metadata:1">
        <product-bom groupId="org.jboss.redhat-fuse" artifactId="fuse-springboot-bom" versions="[7.8,7.9)" />
        <cves>
            <cve id="CVE-2020-xyz" description="Jetty can be configured to listen on port 8080"
                    cve-link="https://nvd.nist.gov/vuln/detail/CVE-2020-xyz"
                    bz-link="https://bugzilla.redhat.com/show_bug.cgi?id=42">
                <affects groupId="org.eclipse.jetty" artifactId="jetty-*" versions="[9.4,9.4.32)" fix="9.4.32.v20200930" />
                <affects groupId="org.eclipse.jetty.http2" artifactId="http2-*" versions="[9.4,9.4.32)" fix="9.4.32.v20200930" />
            </cve>
        </cves>
        <fixes />
    </metadata>
  10. 마지막으로 현재 프로젝트의 모든 관리 종속 항목을 반복할 때 패치 메타데이터에 지정된 수정 사항 목록을 참조합니다. 일치하는 이러한 종속 항목(및 관리되는 종속 항목)은 수정된 버전으로 변경됩니다. 예를 들면 다음과 같습니다.

    $ mvn clean install -U
    [INFO] Scanning for projects...
    [INFO
    
    ========== Red Hat Fuse Maven patching ==========
    
    [INFO] [PATCH] Reading patch metadata and artifacts from 2 project repositories
    [INFO] [PATCH]  - local-nexus: http://everfree.forest:8081/repository/maven-releases/
    [INFO] [PATCH]  - central: https://repo.maven.apache.org/maven2
    Downloading from local-nexus: http://everfree.forest:8081/repository/maven-releases/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/maven-metadata.xml
    Downloading from central: https://repo.maven.apache.org/maven2/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/maven-metadata.xml
    Downloaded from local-nexus: http://everfree.forest:8081/repository/maven-releases/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/maven-metadata.xml (363 B at 4.3 kB/s)
    [INFO] [PATCH] Resolved patch descriptor: /home/user/.m2/repository/org/jboss/redhat-fuse/fuse-springboot-patch-metadata/7.8.0.fuse-sb2-780032/fuse-springboot-patch-metadata-7.8.0.fuse-sb2-780032.xml
    [INFO] [PATCH] Patch metadata found for org.jboss.redhat-fuse/fuse-springboot-bom/[7.8,7.9)
    [INFO] [PATCH]  - patch contains 1 CVE fix
    [INFO] [PATCH] Processing managed dependencies to apply CVE fixes... (https://nvd.nist.gov/vuln/detail/CVE-2020-xyz, https://bugzilla.redhat.com/show_bug.cgi?id=42_
    [INFO] [PATCH] - CVE-2020-xyz: Jetty can be configured to expose itself on port 8080
    [INFO] [PATCH]   Applying change org.eclipse.jetty/jetty-*/[9.4,9.4.32) -> 9.4.32.v20200930
    [INFO] [PATCH]    - managed dependency: org.eclipse.jetty/jetty-alpn-client/9.4.30.v20200611 -> 9.4.32.v20200930
    ...
    [INFO] [PATCH]    - managed dependency: org.eclipse.jetty/jetty-openid/9.4.30.v20200611 -> 9.4.32.v20200930
    [INFO] [PATCH]   Applying change org.eclipse.jetty.http2/http2-*/[9.4,9.4.32) -> 9.4.32.v20200930
    [INFO] [PATCH]    - managed dependency: org.eclipse.jetty.http2/http2-client/9.4.30.v20200611 -> 9.4.32.v20200930
    ...
    [INFO] [PATCH] Done in 635ms
    
    =================================================

패치 건너뛰기

프로젝트에 특정 패치를 적용하지 않으려면 patch-maven-plugin 에서 skip 옵션을 제공합니다. 이미 patch-maven-plugin 을 프로젝트의 pom.xml 파일에 추가했으며 버전을 변경할 필요가 없다고 가정하면 다음 방법 중 하나를 사용하여 패치를 건너뛸 수 있습니다.

  • 다음과 같이 프로젝트의 pom.xml 파일에 skip 옵션을 추가합니다.
<build>
    <plugins>
        <plugin>
            <groupId>org.jboss.redhat-fuse</groupId>
            <artifactId>patch-maven-plugin</artifactId>
            <version>${version.org.jboss-redhat-fuse}</version>
            <extensions>true</extensions>
            <configuration>
                <skip>true</skip>
            </configuration>
        </plugin>
    </plugins>
</build>
  • 또는 다음과 같이 mvn 명령을 실행할 때 -DskipPatch 옵션을 사용합니다.
$ mvn dependency:tree -DskipPatch
[INFO] Scanning for projects...
[INFO]
[INFO] ------< org.jboss.redhat-fuse:cve-dependency-management-module1 >-------
[INFO] Building cve-dependency-management-module1 7.8.0.fuse-sb2-780033
[INFO] --------------------------------[ jar ]---------------------------------
...

위 출력에 표시된 것처럼 patch-maven-plugin 이 호출되지 않아 패치가 애플리케이션에 적용되지 않습니다.

3장. Maven을 로컬로 설정

일반적인 Fuse 애플리케이션 개발에서는 Maven을 사용하여 프로젝트를 빌드하고 관리합니다.

다음 주제는 Maven을 로컬로 설정하는 방법을 설명합니다.

3.1. Maven 설정 준비

Maven은 Apache의 무료 오픈 소스 빌드 툴입니다. 일반적으로 Maven을 사용하여 Fuse 애플리케이션을 빌드합니다.

절차

  1. Maven 다운로드 페이지에서 Maven의 최신 버전을 다운로드합니다.
  2. 시스템이 인터넷에 연결되어 있는지 확인합니다.

    프로젝트를 빌드하는 동안 기본 동작은 Maven이 외부 리포지토리를 검색하고 필요한 아티팩트를 다운로드하는 것입니다. Maven은 인터넷을 통해 액세스할 수 있는 리포지토리를 찾습니다.

    Maven이 로컬 네트워크에 있는 리포지토리만 검색하도록 이 동작을 변경할 수 있습니다. 즉 Maven은 오프라인 모드에서 실행할 수 있습니다. 오프라인 모드에서 Maven은 로컬 리포지토리에서 아티팩트를 찾습니다. 3.3절. “로컬 Maven 리포지토리 사용”을 참조하십시오.

3.2. Maven에 Red Hat 리포지토리 추가

Red Hat Maven 리포지토리에 있는 아티팩트에 액세스하려면 해당 리포지토리를 Maven의 settings.xml 파일에 추가해야 합니다. Maven은 사용자의 홈 디렉터리의 .m2 디렉터리에서 settings.xml 파일을 찾습니다. 사용자가 settings.xml 파일이 지정되지 않은 경우 Maven은 M2_HOME/conf/ settings.xml 에서 시스템 수준 settings.xml 파일을 사용합니다.

사전 요구 사항

Red Hat 리포지토리를 추가할 settings.xml 파일의 위치를 알고 있습니다.

절차

settings.xml 파일에서 다음 예와 같이 Red Hat 리포지토리의 리포지토리 요소를 추가합니다.

<?xml version="1.0"?>
<settings>

  <profiles>
    <profile>
      <id>extra-repos</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <repositories>
       <repository>
            <id>redhat-ga-repository</id>
            <url>https://maven.repository.redhat.com/ga</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>redhat-ea-repository</id>
            <url>https://maven.repository.redhat.com/earlyaccess/all</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
        <repository>
          <id>jboss-public</id>
          <name>JBoss Public Repository Group</name>
          <url>https://repository.jboss.org/nexus/content/groups/public/</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
            <id>redhat-ga-repository</id>
            <url>https://maven.repository.redhat.com/ga</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
            <id>redhat-ea-repository</id>
            <url>https://maven.repository.redhat.com/earlyaccess/all</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </pluginRepository>
        <pluginRepository>
          <id>jboss-public</id>
          <name>JBoss Public Repository Group</name>
          <url>https://repository.jboss.org/nexus/content/groups/public</url>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>

  <activeProfiles>
    <activeProfile>extra-repos</activeProfile>
  </activeProfiles>

</settings>

3.3. 로컬 Maven 리포지토리 사용

인터넷 연결 없이 컨테이너를 실행 중이고 오프라인에서 사용할 수 없는 종속성이 있는 애플리케이션을 배포해야 하는 경우 Maven 종속성 플러그인을 사용하여 애플리케이션의 종속 항목을 Maven 오프라인 리포지토리로 다운로드할 수 있습니다. 그런 다음 이 사용자 지정 Maven 오프라인 리포지토리를 인터넷 연결이 없는 시스템에 배포할 수 있습니다.

절차

  1. pom.xml 파일이 포함된 프로젝트 디렉터리에서 다음과 같은 명령을 실행하여 Maven 프로젝트의 리포지토리를 다운로드합니다.

    mvn org.apache.maven.plugins:maven-dependency-plugin:3.1.0:go-offline -Dmaven.repo.local=/tmp/my-project

    이 예에서는 프로젝트를 빌드하는 데 필요한 Maven 종속 항목 및 플러그인이 /tmp/my-project 디렉터리로 다운로드됩니다.

  2. 이 사용자 지정 Maven 오프라인 리포지토리를 인터넷 연결이 없는 모든 시스템에 내부적으로 배포합니다.

3.4. 환경 변수 또는 시스템 속성을 사용하여 Maven 미러 설정

애플리케이션을 실행하는 경우 Red Hat Maven 리포지토리에 있는 아티팩트에 액세스해야 합니다. 이러한 리포지토리는 Maven의 settings.xml 파일에 추가됩니다. Maven은 다음 위치에서 settings.xml 파일을 확인합니다.

  • 지정된 URL을 찾습니다.
  • if not found looks for ${user.home}/.m2/settings.xml
  • if not found looks for ${maven.home}/conf/settings.xml
  • 찾을 수 없는 경우 ${M2_HOME}/conf/settings.xml
  • 위치를 찾을 수 없는 경우 비어 있는 org.apache.maven.settings.Settings 인스턴스가 생성됩니다.

3.4.1. Maven 미러 정보

Maven은 원격 리포지토리 세트를 사용하여 현재 로컬 리포지토리에서 사용할 수 없는 아티팩트에 액세스합니다. 리포지토리 목록에는 거의 항상 Maven Central 리포지토리가 포함되어 있지만 Red Hat Fuse의 경우 Maven Red Hat 리포지토리도 포함되어 있습니다. 불가능하거나 다른 원격 리포지토리에 액세스할 수 없는 경우 Maven 미러 메커니즘을 사용할 수 있습니다. 미러는 특정 저장소 URL을 다른 저장소 URL로 대체하므로 원격 아티팩트를 검색할 때 모든 HTTP 트래픽을 단일 URL로 전달할 수 있습니다.

3.4.2. settings.xml에 Maven 미러 추가

Maven 미러를 설정하려면 Maven의 settings.xml:에 다음 섹션을 추가합니다.

<mirror>
      <id>all</id>
      <mirrorOf>*</mirrorOf>
      <url>http://host:port/path</url>
</mirror>

위 섹션이 settings.xml 파일에 없는 경우 미러가 사용되지 않습니다. XML 구성을 제공하지 않고 글로벌 미러를 지정하려면 시스템 속성 또는 환경 변수를 사용할 수 있습니다.

3.4.3. 환경 변수 또는 시스템 속성을 사용하여 Maven 미러 설정

환경 변수 또는 시스템 속성을 사용하여 Maven 미러를 설정하려면 다음을 추가할 수 있습니다.

  • MAVEN_MIRROR_URL 이라는 환경 변수 bin/setenv 파일
  • mavenMirrorUrl 이라는 시스템 속성 etc/system.properties 파일

3.4.4. Maven 옵션을 사용하여 Maven 미러 URL 지정

환경 변수 또는 시스템 속성에 지정된 대체 Maven 미러 URL을 사용하려면 애플리케이션을 실행할 때 다음 maven 옵션을 사용합니다.

  • -DmavenMirrorUrl=mirrorId::mirrorUrl

    for example, -DmavenMirrorUrl=my-mirror::http://mirror.net/repository

  • -DmavenMirrorUrl=mirrorUrl

    for example, -DmavenMirrorUrl=http://mirror.net/repository. 이 예에서 <mirror>의 <id>는 단지 미러일 뿐입니다.

3.5. Maven 아티팩트 및 좌표 정보

Maven 빌드 시스템에서 기본 빌딩 블록은 아티팩트 입니다. 빌드 후 아티팩트의 출력은 일반적으로 JAR 또는 WAR 파일과 같은 아카이브입니다.

Maven의 핵심 측면은 아티팩트를 찾고 해당 아티팩트 간의 종속성을 관리하는 기능입니다. Maven 좌표는 특정 아티팩트의 위치를 식별하는 값 집합입니다. 기본 조정에는 다음과 같은 세 가지 값이 있습니다.

groupId:artifactId:version

Maven은 패키지 값으로 기본 조정을 늘리거나 패키징 값과 분류자 값을 모두 사용하는 경우가 있습니다. Maven 조정에는 다음 양식 중 하나가 있을 수 있습니다.

groupId:artifactId:version
groupId:artifactId:packaging:version
groupId:artifactId:packaging:classifier:version

값에 대한 설명은 다음과 같습니다.

groupdId
아티팩트 이름의 범위를 정의합니다. 일반적으로 패키지 이름의 전체 또는 일부를 그룹 ID로 사용합니다. 예: org.fusesource.example.
artifactId
그룹 ID를 기준으로 아티팩트 이름을 정의합니다.
버전
아티팩트의 버전을 지정합니다. 버전 번호는 최대 4개의 부분( n.n.n.n.n)을 가질 수 있습니다. 여기서 버전 번호의 마지막 부분은 숫자가 아닌 문자를 포함할 수 있습니다. 예를 들어 1.0-SNAPSHOT 의 마지막 부분은 영숫자 하위 문자열인 0-SNAPSHOT 입니다.
패키지
프로젝트를 빌드할 때 생성되는 패키지 엔터티를 정의합니다. OSGi 프로젝트의 경우 패키지는 번들 입니다. 기본값은 Cryostat 입니다.
분류자
동일한 POM에서 빌드되었지만 콘텐츠가 다른 아티팩트를 구분할 수 있습니다.

아티팩트의 POM 파일의 요소는 다음과 같이 아티팩트의 그룹 ID, 아티팩트 ID, 패키징 및 버전을 정의합니다.

<project ... >
  ...
  <groupId>org.fusesource.example</groupId>
  <artifactId>bundle-demo</artifactId>
  <packaging>bundle</packaging>
  <version>1.0-SNAPSHOT</version>
  ...
</project>

이전 아티팩트에 대한 종속성을 정의하려면 POM 파일에 다음 종속성 요소를 추가합니다.

<project ... >
  ...
  <dependencies>
    <dependency>
      <groupId>org.fusesource.example</groupId>
      <artifactId>bundle-demo</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>
  </dependencies>
  ...
</project>
참고

들은 특정 종류의 JAR 파일일 뿐이고, Cryostat는 기본 Maven 패키지 유형이므로 이전 종속성에서 번들 패키지 유형을 지정할 필요가 없습니다. 종속성에서 명시적으로 패키징 유형을 지정해야 하는 경우 type 요소를 사용할 수 있습니다.

법적 공지

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.