목차로 이동페이지 탐색으로 이동: 이전 페이지 [액세스 키 p]/다음 페이지 [액세스 키 n]
documentation.suse.com / SUSE Manager로 고급 패치 라이프싸이클 관리
SUSE Manager 2.1, 3.0. 3.1, 3.2

SUSE Manager로 고급 패치 라이프싸이클 관리

다중 상황 환경에서 SUSE Manager를 사용해 업데이트를 관리하기 위한 방법 및 접근 방식

Author
Jeff Price, SUSE 수석 아키텍트
날짜: 2018-07-11
본 문서에서는 회사가 자주 요청되는 기능을 제공할 때 이를 지원하도록 SUSE Manager 구현을 설정 및 구성하는 방법에 대해 설명합니다. 다루는 주제는 정해진 기간에 따라 패치 세트를 자동으로 생성하고 보관하는 방법, 다양한 상황 및 환경에서 일관되게 패치를 프로모션하고 제공하는 방법, 패치 싸이클에서 제외해야 하는 패치를 처리하기 위한 예외 프로세스입니다. 또한 기록 패치 세트를 이용한 환경 생성, 평생 호스트 채널 구독 조작의 필요성 최소화, 사용자 정의 하위 채널을 통한 서비스 팩 마이그레이션 지원에 대해 설명합니다.

1 개요

현재 많은 조직에서 시스템 관리자가 지속적으로 겪을 수 있는 가장 큰 어려움 중 하나는 시스템을 패치된 상태로 안전하게 유지하는 것입니다. 독점 및 오픈 소스 소프트웨어 회사는 자체 소프트웨어 제품에서 발견된 결함을 수정하는 업데이트를 제공하느라 항시 애쓰고 있습니다.

이러한 압박 외에 PCI-DSS(Payment Card Industry Data Security Standard), SOX(Sarbanes-Oxley), HIPAA(Health Insurance Portability and Accountability Act), FIPS 140(Federal Information Processing Standard)과 같은 적합성 계획의 요구사항을 따라야 하는 어려움도 있습니다. 이러한 표준은 대부분 패치 빈도나 기간을 지시하는 규칙을 포함하고 있고, 이러한 일정은 특정 패치의 심각도 수준 때문에 수정되는 경우가 많습니다.

대기업이든 소기업이든 광범위한 컴퓨터 인프라를 기반으로 끊임없이 변하는 응용 프로그램 상황에 의존하고 있습니다. 이러한 응용 프로그램은 물리 및 가상 호스트를 포함하고 복잡한 응용 프로그램 스택이 있을 수 있습니다. 또한 특정 커널 버전 종속성이나 엄격한 가동 시간 요구사항이 있을 수 있고, 특정 런타임 환경(예: Java)과 연결될 수도 있습니다. 이 응용 프로그램은 특정 Linux OS 릴리스에서만 인증을 받을 수 있습니다. 또는 일련의 특별한 구성 요구사항이 있을 수 있습니다. 이러한 호스트를 나머지 호스트와 별도로 설정하는 추가 강화 또는 플랫폼 요구사항이 있을 수 있습니다.

이 외에도 많은 회사가 변경 사항 테스트 또는 유효성 검사를 고려하여 프로덕션을 미러링하는 개발 또는 QA 상황과 같은 중복된 호스트 환경을 조성해 왔습니다. 이는 관리하고 패치하고 보고할 완결된 호스트 세트가 최소 한 개 더 있음을 의미합니다. 이로 인해 분기별로(중요 취약점의 경우 더 자주) 모든 호스트에 패치를 적용할 것을 자주 요구하는 엄격한 패치 일정을 충족해야 하는 어려움이 가중됩니다.

이 모든 문제를 해결하고 복잡한 엔터프라이즈 Linux 환경에 대한 제어권을 다시 확보하는 방법이 있을까요?

1.1 SUSE 솔루션

SUSE Manager는 자동 소프트웨어 관리, 시스템 프로비저닝, 모니터링과 같은 동급 최고의 Linux 서버 관리 기능을 제공합니다. 또한 서버 패치 적용 및 관리를 표준화하고 자동화하여 통합 Linux 관리 인프라를 제공합니다. 이러한 작업을 더 빠르게 수행하면서도 오류는 더 드물게 발생하므로 IT 직원의 생산성이 향상되고 서버 작동 중지 시간이 줄어듭니다.

1.1.1 용어 정의

본 문서에서는 몇 가지 Linux 호스트 그룹 중 하나를 기술하기 위해 상황(landscape)이라는 단어를 사용합니다. 이 단어는 엔터프라이즈 소프트웨어 배포와 관련해 호스트의 역할/품질을 정의하는 방식으로 흔히 사용됩니다. 예를 들면 프로덕션(PROD), 개발(DEV), 품질 보증(QA), 사용자 수락/테스트(UAT) 등이 있습니다.

환경(environment)이라는 단어도 사용합니다. 본 문서에서 환경은 기업(CORP), 스토어(STORE) 또는 NPE(Non-Production Environment) 같은 Linux 호스트의 물리적 분리로 정의됩니다.

끝으로 조직(organization)이라는 단어가 사용됩니다. SUSE Manager는 조직이라는 개념을 포함하고 있으며, 조직을 SUSE Manager Server 초기 설치 중에 생성되는 기본 조직 아래 배치된 별도의 관리 환경으로 정의합니다. 이것은 여러 하위 배치(예: LDAP OU - 중첩이 없는 플랫 OU 구조로 제한됨)가 포함된 단일 상위(예: LDAP O)입니다. SUSE Manager의 조직에는 일반적으로 웹 UI를 통해 조직을 관리하는 데 필요한 별도의 인증서가 있습니다. SUSE Manager가 관리하는 모든 Linux 호스트는 단일 조직에 등록되어 이 조직에만 표시됩니다. 본 문서를 읽으면서 이러한 정의에 유념하십시오.

1.2 예시 시나리오

Chameleon Corporation은 세계 최대의 파충류 및 양서류 반려동물 매장으로서, 본사는 예멘에 있습니다. 5개국에 LizardsRU, UnVeiledInc, Chameleo-rama라는 이름으로 1,500개 이상의 매장이 운영되고 있습니다.

자체 Linux 호스트에 대한 패치 및 보안 업데이트를 관리하기 위한 Chameleon Corporation의 요구사항은 다음과 같습니다. 적합성 제약 조건으로 인해 이 회사의 패치 라이프싸이클(타이밍 및 제공)은 기업 보안 정책, 호스트 환경/상황, 미래 관리 필요에 따라 달라집니다.

다음은 이러한 요구사항을 개괄적으로 요약한 것입니다.

  1. 게시된 보안 정책에는 사용 가능한 최신 업데이트, 버그 수정, 분기별 향상으로 모든 Linux 시스템을 패치해야 한다고 명시되어 있습니다. 분기는 Q1: 1월 1일~3월 31일, Q2: 4월 1일~6월 30일, Q3: 7월 1일~9월 30일, Q4: 10월 1일~12월 31일로 정의되어 있습니다.

  2. 또한 게시된 보안 정책에는 패치 릴리스 후 1개월 이내에 중요 보안 업데이트(7 이상의 CVSS 점수)로 모든 Linux 시스템을 패치해야 한다고 명시되어 있습니다. 이를 통해 기존 패치 배포와 겹칠 수 있는 두 번째 일정이 도입됩니다.

  3. 회사에는 기업, 스토어, NPE라는 세 가지 호스트 환경이 있습니다. 이러한 호스트 환경은 SUSE Manager 조직을 사용해 분할됩니다. 각 SUSE Manager 조직은 신뢰로 인해 기본 SUSE Manager 조직의 소프트웨어 채널을 파악할 수 있습니다. 하지만 관리 호스트는 자체 환경에 따라 자연스럽게 그룹화되고 관리됩니다.

  4. 각 환경에는 최소한 DEV, UAT, PROD라는 세 가지 상황이 있습니다. 어떤 환경에는 이 외에도 다른 상황(예: SIT, DIT 등)이 있지만 앞서 언급한 상황과 유사하게 처리됩니다. 패치 라이프싸이클 프로모션은 필요에 따라 패치를 추가 단계로 이동하는 작업을 처리합니다.

  5. 패치 예외 프로세스가 있는 이유는 배포에서 패치(예: 커널 업데이트)를 제거하는 작업을 처리해야 할 필요가 종종 있기 때문입니다. 어떤 호스트에는 특정 커널 버전에 의존하는 하드웨어 드라이버나 타사 소프트웨어가 있을 수 있습니다. 이 예외 프로세스는 상황에 따라 처리됩니다.

요약하자면, 이러한 요구사항에서는 배포할 수 없지만(예외) 적합성을 위해 추적하고 교정하고 재도입해야 하는 패치의 저장소 위치를 처리하는 방법과 함께 세 가지 SUSE Manager 조직에서 세 가지 이상의 상황에 걸쳐 두 가지 패치 일정이 필요함을 강조합니다.

SUSE Manager는 이러한 복잡성을 매우 원활하게 처리할 수 있으며, 설정을 통해 이러한 요구사항을 유연하게 제공할 수 있습니다. 그뿐만 아니라 자동화를 적용하여 일부 측면을 지원할 수 있고, 게시된 회사 정책을 충족하는 패치를 일관되게 제공하는 절차를 개발할 수 있습니다.

1.3 기능

본 문서에서는 회사가 이와 같이 자주 요청되는 기능을 제공할 수 있도록 SUSE Manager 구현을 설정 및 구성하는 방법에 대해 설명합니다.

  • 패치 세트를 분기별로(또는 다른 기간에 따라) 자동 생성하고 보관

  • 다양한 상황 및 환경에 걸쳐 일관되게 패치를 프로모션하고 제공하는 방법

  • 패치 싸이클에서 제외해야 하는 패치를 처리하기 위한 예외 프로세스

  • 기록 패치 세트를 이용한 환경 생성

  • 평생 호스트 채널 구독 조작의 필요성 최소화

  • 사용자 정의 하위 채널을 통한 서비스 팩 마이그레이션 지원

이러한 기능 중 다수는 상황(DEV 및 PROD 또는 Sandbox, DEV, QA, UAT, PRE-PROD, PROD 등)의 수 증가 또는 감소, 제공 일정 빈도 증가 또는 감소와 같은 요구사항 변경을 충족하기 위해 조정될 수 있습니다. 본 문서를 읽으면서 이를 유념하십시오. SUSE Manager는 매우 유연한 제품으로서, 많은 고객이 견고한 시스템 및 패치 관리 프레임워크를 생성하고 배포할 수 있도록 지원해 왔습니다. 요구사항이 여기서 설명하는 것과 다를 수 있지만, SUSE Manager의 유연성을 통해 지속적인 필요와 변화하는 필요를 충족할 수 있습니다.

1.4 지침

본 안내서는 SUSE Manager 2.1에 기반을 둔 것이지만 SUSE Manager 3.0에서도 사용할 수 있습니다. 본 문서에서는 Salt Minion의 세부 사항은 강조하지 않을 것이며, 이 문제가 변경되는 경우 채널 조직 및 패치 조작이 어떻게 처리되는지에 대해서도 다루지 않을 것입니다.

새로 설치할 필요는 없지만, 사용자에게 작동하는 SUSE Manager 환경과 몇 가지 등록 호스트, 그리고 용어 및 기능에 대한 올바른 지식이 있다고 가정합니다. https://documentation.suse.com/suma/3.2/에서 볼 수 있는 SUSE Manager 문서는 자주 업데이트되는 훌륭한 정보원입니다. 이 문서를 참조하면 혼란스러워 보이는 모든 프로세스를 명확히 이해할 수 있습니다. 본 문서에 자세히 설명된 여러 가지 구현 단계는 SUSE 제품 문서에 있는 절차, 기능 또는 단계별 방법에 따른 향상된 예시입니다.

참고
참고: 구현 테스트

일부 고급 기능(예: spacecmd 또는 XMLRPC API 사용)에 대해 더 자세히 설명하겠지만 완전한 설명은 아닐 수 있습니다. 있는 그대로 사용하거나 특정 환경이나 필요에 맞게 수정할 수 있는 몇 가지 코드 예시를 부록에 포함할 것입니다. 하지만 이 예시는 보증 없이 제공되며 모든 구현에 완벽하게 맞을 것으로 기대해서는 안 됩니다. 프로덕션 사용 전에 특정 구현을 항상 테스트하십시오.

다음 섹션에서는 시나리오 섹션에 정의된 요구사항을 충족하기 위해 SUSE Manager를 설정하는 방법에 대해 설명합니다. 먼저 이 요구사항을 충족하기 위해 개발된 아키텍처(및 구성 요소)에 대해 기술하고, 이어서 이를 직접 생성할 수 있는 단계에 대해 설명합니다. 본 안내서의 각 구성 요소는 여기에 설명된 특정 시나리오에서 다른 구성 요소와 함께 사용되어 포괄적인 솔루션을 제공하지만, 개별적으로 사용하면 자체 솔루션 요구 사항을 충족하는 데 도움이 될 수 있습니다.

2 구현

함께 살펴볼 것은 다음과 같습니다. 우리는 SUSE Manager를 설정하고 패치 라이프싸이클 관리에 도움이 될 일련의 절차, 프로세스 및/또는 도구(스크립트)를 생성해야 합니다. 이 작업에는 우리가 사용하는 SUSE Linux Enterprise Server의 여러 버전을 위해 SUSE가 제공한 업데이트 채널에서 패치 아카이브 채널을 생성(최적의 자동 생성 포함)하는 과정이 포함됩니다. 이 패치 아카이브는 SUSE의 패치 프로모션을 위한 원본이지만 과거에 배포된 패치 세트에 기반을 둔 테스트 환경을 설정하기 위한 원본일 수도 있습니다. 이를 사용해 모든 이전 패치 세트에 패치된 호스트로 가득 찬 랩을 생성하는 등의 방법을 통해 오류 상황을 해결할 수 있습니다. 또한 시간이 표시된 패치 세트로 정의된 적합성을 입증하고 적합성에 대한 명확한 뷰를 시각화할 수 있습니다.

또한 일련의 소프트웨어 채널을 생성해야 합니다. 이 채널은 우리가 배포하기로 결정하면 업데이트를 수신합니다. 각 상황은 오직 이전에 검증된 상황으로부터 업데이트를 수신해야 합니다. 따라서 DEV에 배치되어 시스템에서 테스트를 받습니다. 그런 다음, QA로 이동하여 거기서 테스트를 받습니다. 끝으로 PROD로 이동합니다. 분기마다 모든 것이 다시 시작되고, 우리는 예외 발생 시 이를 처리합니다. 각 예외는 적합성에 대한 명확한 뷰를 보장하기 위해 모든 예외를 교정하여 패치가 최대한 빨리 재도입되게 한다는 항상적인 목표에 따라 확립된 다른 프로세스로 추적됩니다.

분기별 배포를 가로막는 다른 요인으로 분기별 1회보다 더 자주 배포해야 하는 중요 보안 패치 릴리스를 들 수 있습니다. 이러한 추가 일정을 처리하려면 모든 중요 패치와 그 배포를 추적하기 위한 추가 채널을 생성해야 합니다. 중요 패치로 간주해야 할 패치는 CVSS 점수가 7.1 이상이거나 기업 보안 조직이 규정한 CVE입니다. 우리가 현재 관리하는 SUSE Linux Enterprise Server 버전은 SUSE Linux Enterprise Server 11 SP3와 SUSE Linux Enterprise Server 12 두 가지입니다. 우리는 서비스 팩 마이그레이션을 지원하기 위해 SUSE Manager를 사용할 계획이므로 우선 SUSE Linux Enterprise Server 11 SP4 처리를 위한 설정 작업을 하는 것이 가장 좋습니다. 또한 우리는 SUSE Linux Enterprise Server 11 SP3의 32비트 및 64비트 Intel/AMD 버전을 유지하고 있으므로 이 두 버전을 모두 처리해야 합니다.

우리가 관리해야 할 환경은 기업(CORP)과 스토어(STORE) 두 가지입니다. 우리는 별도의 SUSE Manager 조직을 생성하여 시스템 관리자에게 그들이 담당하고 있는 호스트에 대한 독점적인 뷰를 허용하였습니다. 각 SUSE Manager 조직에는 그들이 패치 테스트/프로모션에 사용하는 세 가지 상황(DEV, QA, PROD)이 있습니다.

호스트가 적절하고 가장 적합한 영구적 역할에 등록되게 하기 위해 활성화 키 및 부트스트랩은 각 SUSE Manager 조직(각 환경)과 각 상황에 대해 생성되어야 합니다. 예를 들어 부트스트랩 스크립트는 SUSE Linux Enterprise Server 11 SP3(64비트) DEV 호스트를 해당되는 조직에 등록하고 다시 조작할 필요가 없어야만 하는 적절한 기본 및 하위 채널을 추가합니다. 자동화가 기본 설정되어 있습니다. 앞서 언급했듯이 스크립트나 일정이 지정된 작업을 사용하면 솔루션이 크게 향상되고 관리 직원의 부담이 경감됩니다.

2.1 아키텍처

아키텍처 및 채널의 개괄적 윤곽은 다음과 같습니다.

참고
참고: 접두어 사용

여기에 나열된 모든 기본 채널의 경우 이것은 SUSE 벤더 채널의 복제 트리일 수 있습니다. 따라서 이름에 접두어-가 포함됩니다. 이를 통해 다음과 같은 채널 생성 섹션에 설명된 서비스 팩 처리를 지원할 수 있습니다.

  • SUSE Manager 조직

    • 기본값(기본) - 1

      • 32비트 아카이브 채널(공용)

        • Q2 - 06-30-2015 - i586용 SLES 11 SP3 업데이트

        • Q3 - 09-30-2015 - i586용 SLES 11 SP3 업데이트

      • 64비트 아카이브 채널(공용)

        • Q2 - 06-30-2015 - x86_64용 SLES 11 SP3 업데이트

        • Q3 - 09-30-2015 - x86_64용 SLES 11 SP3 업데이트

        • Q2 - 06-30-2015 - x86_64용 SLES 12 업데이트

        • Q3 - 09-30-2015 - x86_64용 SLES 12 업데이트

      • SUSE 기본 채널 내 복제 세트 또는 하위 채널

      • 기본: i586용 SLES 11 SP3 풀

        • DEV - 현재 패치 세트 - i586용 SLES 11 SP3 업데이트

        • QA - 현재 패치 세트 - i586용 SLES 11 SP3 업데이트

        • PROD - 현재 패치 세트 - i586용 SLES 11 SP3 업데이트

        • 패치 예외(구독 금지) - SLES 11 SP3 i586

        • 보안 ASAP 예외 - SLES 11 SP3 i586

      • 기본: x86_64용 SLES 11 SP3 풀

        • DEV - 현재 패치 세트 - x86_64용 SLES 11 SP3 업데이트

        • QA - 현재 패치 세트 - x86_64용 SLES 11 SP3 업데이트

        • PROD - 현재 패치 세트 - x86_64용 SLES 11 SP3 업데이트

        • 패치 예외(구독 금지) - SLES 11 SP3 x86_64

        • 보안 ASAP 예외 - SLES 11 SP3 x86_64

      • 기본: x86_64용 SLES 12 SP3 풀

        • DEV - 현재 패치 세트 - x86_64용 SLES 12 업데이트

        • QA - 현재 패치 세트 - x86_64용 SLES 12 업데이트

        • PROD - 현재 패치 세트 - x86_64용 SLES 12 업데이트

        • 패치 예외(구독 금지) - SLES 12 x86_64

        • 보안 ASAP 예외 - SLES 12 x86_64

      • 패치 예외 채널(위와 동일)

        • 기본 채널당 - 각 업데이트 채널에 채널 한 개:

          • 예제:

            • 패치 예외(구독 금지) - SLES 11 SP3 i586

            • 보안 ASAP 예외 - SLES 11 SP3 i586

    • 기업(CORP) - 2

      • 모든 공용 채널은 여기에 표시됨

      • 개인 채널은 조직별로 공유할 수 있음

    • 스토어(STORE) - 3

      • 모든 공용 채널은 여기에 표시됨

      • 개인 채널은 조직별로 공유할 수 있음

2.2 자동화 및 프로세스 설계

자동화에는 아카이브 채널에 대한 자동 채널 복제 생성이 포함됩니다. 특정 회사의 사용 사례 및 제품 사용에 최적화하기 위해 스크립트(cron 및 Bash)와 구성 파일의 조합을 사용합니다. 아카이브 생성은 다음과 같이 사용자 정의 cron 작업에 의해 트리거됩니다. 날짜에 대한 기준은 정확한 설정을 좌우하는 요인입니다. 예를 들어 분기별 일정은 특정 분기의 첫날 또는 마지막 날에 근거하여 구현할 수 있습니다. 트리거 시점이 분기 이라면 달력의 3번째 및 9번째 달(3월 및 9월)에서는 30일을, 6번째 및 12번째 달(6월 및 12월)에서는 31일을 고려해야 합니다. 이를 위해서는 다음과 같은 두 개의 crontab 입력이 필요합니다(cron 구문).

0 0 30 6,9 * /path/to/archive-create-script
00 0 31 3,12 * /path/to/archive-create-script

예를 들어 다음과 같이 해당 분기에 대한 트리거가 달의 첫 번째 날에 발생한다면 하나의 crontab 항목만 필요합니다.

0 0 1 1,4,7,10 * /path/to/archive-create-script

또한 실제 archive-create-script에는 이것이 실행된 분기를 파악할 수 있는 자체 로직과 SUSE Manager 채널 복제 등에 정확한 구문을 제공할 수 있는 포맷 로직이 필요합니다. 또한 스크립트는 각 아키텍처와 SUSE Linux Enterprise Server 버전을 통해 반복되어 회사의 선택에 따라 아카이브 전체 세트를 만들어야 합니다. 패치 세트가 특정 상황 안으로 이동하는 시점을 관리자가 정확하게 명시적으로 정의할 수 있도록 패치 프로모션 프로세스가 생성됩니다. 아울러 어디에서 이동하는지 그 출발점에 대한 정의도 마찬가지로 중요합니다. 가장 손쉬운 방법은 SUSE Manager에 공개된 XMLRPC API를 활용하는 스크립트를 사용하는 것입니다. API에는 mergePackagesmergeErrata라는 이름의 softwareChannel 메소드가 포함되어 있습니다. 이 두 가지 메소드를 원본 채널 및 대상 채널로 호출하여 한 채널에서 빠르게 컨텐트를 수신하여 다른 채널로 차이점을 병합할 수 있습니다.

최종 프로세스에서는 프로모션 프로세스에서 패치를 제거하기 위한 워크플로를 정의하여 패치가 추적되도록 저장합니다. 이 패치 예외는 예외 사유가 교정되므로 나중에 패치 배포 달력으로 재도입될 수 있습니다. 패치를 제거하는 예외 프로세스 외에도 비상사태의 요구에 따라 패치를 추가하는 유사한 프로세스가 있습니다.

비상 패치는 현재 SUSE 업데이트 채널에서 상시 제공되는 경우가 많지만 아카이브 채널에는 아직 도입되지 않았을 수 있습니다. 분기별 아카이브 채널 생성 작업이 트리거되면 제공되는 모든 패치는 아카이브 세트의 일부가 됩니다. 하지만 다른 특정 시점에는 이것이 패치 릴리스 전에 발생했을 수 있습니다. 또는 이 최근 패치가 포함된 새 아카이브를 생성하는 데 최대 석 달이 걸릴 수 있습니다. 패치를 검색하여 대상 채널에 복사하는 메소드를 생성해야 합니다. 이렇게 하면 SUSE가 중요한 패치를 릴리스해도 분기가 끝날 때까지는 아카이브 채널이 사본을 받을 수 없는 경우에 대처할 수 있습니다.

이러한 비상 패치를 제자리에 복사해도 아카이브 채널의 일반 배포 또는 생성에 영향을 미치지 않습니다. 그다음 아카이브 채널 생성에도 이 패치가 포함되어 있습니다. 따라서 (나중에 동일한 패치를 병합하는 경우) 중복된 패치와 함께 비상 패치 채널을 사용해도 이 패치를 이미 설치한 시스템과의 충돌이 전혀 발생하지 않습니다.

더 자세한 설명은 아래의 2.4절 “예외 및 에스컬레이션 채널”에서 보실 수 있습니다.

2.3 패치 프로모션 싸이클

패치와 패치에 포함된 패키지가 SUSE에서 취득되는 방식, 다운로드 후에 이동하는 곳, SUSE Manager 내에서 정렬되는 방식을 이해하는 것이 고급 패치 라이프싸이클 시스템을 설정하는 데 가장 중요합니다. 기본적으로 SUSE Manager는 자체 채널 세트를 SUSE Linux Enterprise Server 및 확장의 특정 버전 및 아키텍처를 기준으로 정렬합니다.

예를 들어 SUSE Linux Enterprise Server 11 SP3 x86_64용 SUSE Manager 안에 있는 기본 채널 세트에는 채널이라고 하는 상위 또는 기본 채널이 포함되어 있습니다. 이 채널에는 기능적 측면에서 SUSE Linux Enterprise Server 11 SP3 64비트용 설치 DVD와 동일한 패키지가 포함되어 있습니다. 이 풀 채널 아래에는 SUSE Manager 도구 채널이라고 하는 SUSE Manager 클라이언트 패키지용 채널과 이 경우 x86_64용 SUSE Linux Enterprise Server 11 SP3 업데이트라고 하는 업데이트 채널이 포함된 모든 하위 채널이 있습니다.

관리 호스트가 구독하는 일반 채널 세트에는 상위 채널(풀), SUSE Manager 도구 채널과 업데이트 채널이 최소 한 개씩 포함됩니다. SUSE Linux Enterprise Server 11 SP2와 같은 경우 여기에는 SUSE Linux Enterprise Server 11 SP1 풀, SP1 업데이트 채널, SP2 코어 채널, SP2 업데이트, SP2 확장 스토어, SP2 SUSE Manager 도구 채널이 포함됩니다.

참고
참고: 장기 서비스 팩 지원(LTSS)

SUSE Linux Enterprise Server SP1 및 SP2는 자체 LTSS 단계에 있기 때문에 SUSE에서 생성되는 비 LTSS 업데이트가 더 이상 없습니다. 따라서 회사가 보유할 수 있는 모든 SP1 또는 SP2 호스트는 LTSS를 구매하고 LTSS 업데이트 채널을 사용해 추가 패치 및 지원을 받아야 합니다. 자세한 내용은 http://www.suse.com/lifecycle에서 보실 수 있습니다.

다음은 패치 프로모션 프로세스를 설명하는 그래픽입니다.

패치 프로모션 프로세스
그림 1: 패치 프로모션 프로세스

2.4 예외 및 에스컬레이션 채널

배포 싸이클에서 패치를 지연 또는 제거할 몇 가지 이유가 있을 수 있습니다. 패치는 하나 또는 여러 시스템의 안정성 관련 문제를 유발하거나, 현재 또는 이전 상황의 테스트 싸이클을 통과하지 못하거나, 패치 싸이클 내에서 배포하지 않아야 할 다른 이유가 몇 가지 있을 수 있습니다. 다른 한편으로는 일정에 앞서 중요 패치(보안 취약점 또는 약화시키는 버그에 적용되는 패치)를 배포해야 할 이유가 있을 수 있습니다. 이 패치는 그 중요성 때문에 다음 분기별 패치 싸이클을 기다리지 않고 최대한 빨리 테스트를 거쳐 배포해야 합니다.

이러한 예외 패치의 주기적 제거 또는 추가를 처리하려면 이 패치를 적절히 추적할 수 있는 프로세스를 생성해야 합니다. 이 예외는 추적되는 동안 보관, 회계, 보고를 위한 자체 채널 컨테이너로 복사됩니다.

이 채널은 패치 예외에 상응하는 SUSE Linux Enterprise Server 버전에 대해 아카이브 기본 채널 또는 복제된 기본 채널 내에서 생성할 수 있습니다(권장 사항).

패치를 제외하는 프로세스는 먼저 패치 (및 연결된 패키지)를 예외 채널에 복사한 후, 현재 배포 상황에서 패치 (및 연결된 패키지)를 제거하는 것입니다. 선택 사항으로 현재 분기의 아카이브 채널에서 제거할 수도 있지만, 패치가 다음 분기의 아카이브에도 포함되리라는 것을 인식하는 것이 중요합니다. SUSE 업데이트 채널에서 패치를 제거하고 싶을 수 있지만, 그럴 경우 적합성을 잘못 처리하거나 잘못 보고하는 결과로 이어지는 경우가 많습니다. 먼저 예외의 이유를 추적하여 해결하는 것이 훨씬 더 낫습니다. 이런 방식으로 패치를 패치 배포 워크플로로 재도입하여 잠재적 보안 문제 또는 코드 결함(패치는 이러한 문제를 수정하기 위해 생성됨)을 교정할 수 있습니다.

2.4.1 보안 에스컬레이션 채널 및 프로세스 정의

보안 패치 추가 프로세스는 제외 프로세스와 유사합니다. 주된 차이점은 패치가 생성되었으나 프로모션 싸이클에 아직 사용되지 않은 경우 패치를 SUSE 업데이트 채널이나 최신 아카이브에서 보안 예외 채널로 복사해야 한다는 것입니다. 이 새로운 중요 보안 패치가 배포 단계 중에 릴리스되었다고 가정하면(현재 분기의 패치를 이미 프로모션하고 있는데 새 패치가 나온 경우) 이 새 패치는 아직 아카이브에 표시되지 않았을 것입니다.

또 다른 가정은 일반 패치 세트처럼 상황을 통해 이 새 패치를 프로모션하는 방식으로 테스트할 필요가 있는 경우입니다. 하지만 필요하다면 어느 단계로든 직접 복사할 수 있습니다. 이 보안 패치를 최초 상황(예: DEV - 현재)으로 복사하고 일반적인 배포-테스트-프로모션 싸이클에 따라 프로덕션으로 가져오면 됩니다. 패치의 중요성에 따라 클라우드 테스트를 위한 일반 일정을 더 빨리 진행하거나 드물게는 용인되는 위험을 가정하여 완전히 우회할 수 있습니다.

2.5 구성 요소

다음은 SUSE Manager 2.1을 사용해 고급 패치 라이프싸이클 관리를 지원하기 위해 생성할 것들을 나열한 것입니다.

채널

  1. 아카이브 채널

  2. 현재 업데이트 채널

  3. 예외 채널(패치 제외 또는 보안-ASAP)

  4. 선택 사항인 SP-마이그레이션 복제 세트

활성화 키/부트스트랩

  1. 조직당/SLES당 버전 활성화 키

  2. 조직당/SLES당 버전 등록 부트스트랩

스크립트

  1. 아카이브 생성 스크립트

  2. 아카이브 원본 목록 제어 파일

  3. 병합 도구 파이썬 스크립트

Crontab 항목/자동화

  1. 분기별(또는 기타 빈도) 아카이브 생성 호출

2.6 채널

위 아키텍처 섹션에서 설명한 것처럼 패치 프로모션 프로세스를 지원하기 위해 몇 가지 사용자 정의 채널을 생성할 것입니다. 이 채널은 (SUSE 업데이트 채널의 복제로 생성된) 아카이브를 저장하고 예외 패치도 저장합니다. 각 상황에 대해 프로모션된 패치를 보유할 사용자 정의 채널이 생성됩니다. 싸이클마다 패치가 프로모션되면서 이 채널에는 갈수록 더 많은 컨텐트가 저장됩니다.

예를 들어 1분기(Q1) 동안 아카이브 채널에는 159개의 패치가 저장되고, 이 패치는 SUSE Linux Enterprise Server 11 SP4용 DEV 업데이트 채널로 병합됩니다. SUSE가 지속적으로 패치를 릴리스하는 과정에서 다음 분기(예: Q2)의 아카이브가 생성되면 이 아카이브에는 모든 Q1 패치와 130개의 추가 패치를 합해 총 289개의 패치가 저장됩니다. 병합 기능은 130개의 새 패치 (및 연결된 패키지)를 받아들여 그다음 패치 싸이클이 진행되는 동안 DEV 업데이트 채널에 추가합니다.

각각 새 패치 싸이클은 특정 상황의 현재 업데이트 채널에서 사용 가능한 패치를 업데이트합니다. 이러한 방식으로 각 후속 패치 프로모션은 새 업데이트를 추가하고, 이 업데이트는 채널을 구독하는 모든 호스트에 적용할 수 있습니다.

예외 채널은 개별 패치를 관리하고, 개별 패치를 상황 업데이트 채널 중 하나, 또는 아카이브 채널 중 하나에서 복사하는 방식으로 채워집니다. 패치는 예외 채널로 복사한 후 업데이트 채널 또는 아카이브에서 제거할 수 있습니다.

2.6.1 채널 생성

아카이브 채널:

사용자 정의 채널은 SUSE Manager에서 비어 있는 채널 또는 복제로 생성됩니다. 기술적으로는 복제 채널도 빈 상태로 생성할 수 있지만, 이 경우 SUSE 업데이트 채널, 패치, 그리고 패치가 참조하는 패키지가 원본인 컨텐트로 아카이브 채널을 생성합니다. 각 아카이브 채널은 빈 기본 채널에 상주합니다. 기본 채널은 SUSE Manager가 관리하는 각 프로세서 아키텍처(IA-32, x86_64, s390x, PPC 등)에 대해 생성됩니다. 기본 채널에는 다양한 버전의 SUSE Linux Enterprise Server에 부합하는 여러 아카이브가 있지만 모두 동일한 프로세서 아키텍처입니다.

기본 아카이브 채널 생성:

SUSE Manager가 관리하는 호스트가 사용하는 각 프로세서 아키텍처에 대해 32비트 아카이브 채널64비트 아카이브 채널이라는 빈 채널을 생성합니다.

  1. 웹 UI에서 [채널]을 클릭하고 하위 메뉴인 [소프트웨어 채널 관리]를 클릭한 후 [+채널 생성]을 클릭합니다.

  2. 채널 레이블은 반드시 아키텍처-패치-아카이브-채널 형식으로 보관해야 합니다. 예를 들어 64비트 채널 레이블은 x86_64-패치-아카이브-채널로 표시해야 합니다.

    중요
    중요: 채널에 레이블 지정

    이 채널에 적절한 레이블을 지정하지 않으면 예시 아카이브 스크립트가 (수정 없이는) 제대로 작동하지 않게 됩니다. SUSE Manager는 채널 레이블에 대해 문자(숫자는 안 됨)로 시작하고 공백이 없는 소문자로 이루어져야 한다는 등 매우 엄격한 요건을 적용합니다.

    x86_64로 시작하는 레이블을 생성하는 이 예시에서는 32비트 채널이 i586 또는 이와 비슷한 것일 수 있습니다.

  3. 이 아카이브 채널은 상위 채널이므로 상위가 없습니다.

  4. 이 채널에 적절한 아키텍처를 선택합니다(예: 64비트인 경우 x86_64, 32비트인 경우 IA-32).

  5. 이 채널에 대해 공용 라디오 버튼을 선택하여 모든 조직에 표시되게 합니다.

  6. 배포한 SUSE Linux Enterprise Server의 각 아키텍처 유형에 대해 이를 반복합니다.

복제 아카이브 채널을 생성합니다.

사용되는 SUSE Linux Enterprise Server의 각 버전에 대해 복제 채널을 생성합니다.

  1. 웹 UI에서 [채널]을 클릭하고 하위 메뉴인 [소프트웨어 채널 관리]를 클릭한 후 [채널 복제]를 클릭합니다.

  2. 원본으로 아카이브를 생성하고자 하는 SUSE Linux Enterprise Server 버전의 SUSE “업데이트” 채널을 선택합니다.

  3. 모든 컨텐트/패치에 대해 라디오 버튼을 선택해야 합니다.

  4. 시간/날짜와 아카이브에 포함된 것(예: Q3 - 2015년 9월 30일 - x86_64용 SLES 11 SP3의 아카이브)을 알 수 있도록 채널에 적절한 이름을 지정합니다.

  5. 다음 예시와 같이 적절한 구문을 사용해 레이블을 생성합니다.

    q3-09-30-2015-archive-sles11sp3-x86_64
  6. 중요: 복제를 포함할 적절한 기본 아카이브 채널을 선택합니다.

  7. 요약 및 설명 필드에 채널에 대한 적절한 설명을 입력합니다.

  8. 완료 후 [채널 생성]을 클릭합니다.

  9. 아래로 스크롤하여 공용 라디오 버튼을 선택하고 채널 업데이트를 클릭합니다.

  10. 각 아키텍처의 SUSE Linux Enterprise Server 각각에 대해 이를 반복합니다.

선택 사항: 다음과 같이 spacewalk-clone-by-date를 사용해 날짜가 과거인 아카이브 채널을 생성할 수 있습니다.

spacewalk-clone-by-date 유틸리티와 함께 사용할 수 있는 예시 원본 파일의 부록을 참조하십시오. 다음과 같이 이 구성 파일을 사용해 특정 날짜 범위의 복제 채널을 채널 컨텐트용 필터로 생성할 수 있습니다.

  1. 이 유틸리티는 다음 구문으로 호출됩니다.

    spacewalk-clone-by-date -c "config file"
  2. 날짜가 과거로 되어 있는 각 아카이브 채널에 대해 이를 반복하여 구성 파일이 적절한 날짜와 채널 원본/대상 이름에 부합하도록 수정하십시오.

2.6.1.1 업데이트 및 예외 채널로 서비스 팩 마이그레이션 지원

서비스 팩 마이그레이션 기능 이용 시 일관성 있는 예상 동작을 허용하는 채널 세트를 관리하는 방법으로 널리 용인되는 것이 몇 가지 있습니다. 이 기능은 특정 호스트의 소프트웨어 탭에서 찾으실 수 있습니다. 이 기능을 이용해 한 번 클릭하는 방식으로 특정 호스트의 서비스 팩을 업데이트할 수 있습니다. 본 문서에 설명된 패치 라이프싸이클 메소드를 사용하는 경우 서비스 팩 마이그레이션 기능 사용 시 몇 가지 어려움을 겪을 수 있습니다. 서비스 팩 마이그레이션을 수행하기 위해 특정 호스트를 선택하면 UI는 마이그레이션 작업을 위해 구독할 필수 하위 채널 세트를 제안(지시)합니다. 이러한 필수 하위 채널(UI에서 회색으로 표시)은 특정 버전의 SUSE Linux Enterprise Server에 대해 SUSE가 제공하는 업데이트 채널을 일반적으로 포함합니다.

다음 스크린샷을 참조하십시오.

서비스 팩 마이그레이션
그림 2: 서비스 팩 마이그레이션

여기에 설명된 패치 라이프싸이클 프로세스를 사용할 수 있게 허용하려면, 그리고 서비스 팩 마이그레이션의 기능을 사용하려면 회사에서 사용 중인 SUSE Linux Enterprise Server 제품 버전의 전체 복제 세트를 생성하는 것이 제일 나은 방법입니다. 이것은 때로 복제 트리라고 하며 softwarechannel_clonetree라는 동일한 이름의 spacecmd 명령을 사용해 쉽게 생성할 수 있습니다.

전체 복제 트리는 기본/상위 채널(일반적으로 풀이라고 함)과 현재 그 아래에 있는 모든 하위 채널을 포함합니다. 예를 들어 SUSE Linux Enterprise Server 11 SP3 풀 x86_64 채널을 원본으로 사용하는 경우 자체 접두어를 복제 트리 명령에 제공하면 풀과 모든 하위의 사본을 만들어 모든 채널 이름 및 레이블의 첫머리에 접두어를 추가합니다.

아래에 있는 원본 SUSE Linux Enterprise Server 11 SP3 x86_64 채널과 그 옆에 접두어 버전 Chameleon_Co-가 있는 복제 트리의 이미지를 참조하십시오.

Chameleon Corporation의 전체 소프트웨어 채널 목록
그림 3: Chameleon Corporation의 전체 소프트웨어 채널 목록

spacecmd softwarechannel_clonetree라는 명령은 원본 및 접두어 정보를 직접 제공하여 직접 호출하거나 spacecmd 셸 자체 내에서 명령을 호출하여 대화식으로 호출할 수 있습니다.

예:

spacecmd -u <SMadmin> -- softwarechannel_clonetree -s sles11-sp3-pool-x86_64 -p "my_company-"
참고
참고: <SMadmin>

<SMadmin>을 SUSE Manager webUI 관리자 사용자 이름으로 교체하십시오!

이 명령을 실행하면 접두어가 my_company인 SUSE Linux Enterprise Server 11 SP3 x86_64 채널의 전체 세트가 생성됩니다.

SUSE Linux Enterprise Server 각 버전에 이 프로세스를 반복합니다. 이어서 서비스 팩 마이그레이션 기능을 사용할 때 대상 버전인 SUSE Linux Enterprise Server의 자사 버전을 선택하고 호스트가 있는 상황에 적절한 하위 채널을 선택할 수 있습니다(아래 설명 참조).

그런 다음, 모든 패치/패키지를 제거하여 복제된 업데이트 채널을 수정하고, 이어서 병합 스크립트 프로세스를 사용해 현재 패치 세트를 필수 업데이트 채널로 병합하면 됩니다. 이렇게 하면 서비스 팩 마이그레이션 작업을 수행해도 현재 프로모션된 자신의 패치 세트를 그대로 유지할 수 있습니다. 아니면 SP 마이그레이션이 항상 필수 업데이트 하위 채널의 최신 패키지로 업데이트됩니다.

패키지가 227개인 SUSE Linux Enterprise Server 11 SP4의 Q3 패치 아카이브, 패키지가 234개인 SP4의 SUSE 업데이트 채널, 패키지가 없는 SP4 업데이트의 Chameleon Corporation 버전을 보여주는 아래 스크린샷을 참조하십시오.

SUSE 및 Chameleon Corporation의 소프트웨어 채널 목록 일부 보기
그림 4: SUSE 및 Chameleon Corporation의 소프트웨어 채널 목록 일부 보기

앞으로 나올 섹션에서는 사용자 정의 현재 업데이트 생성과 병합 스크립트 사용 방법에 대해 설명하겠습니다. 자체 프로모션 패치 세트를 사용한 서비스 팩 마이그레이션의 경우 프로덕션 채널의 현재 패치 아카이브를 업데이트 채널로 병합하여 마이그레이션 작업에 사용되게 하거나 업데이트 채널을 항상 빈 상태로 두고 현재 업데이트 채널을 선택 사항인 하위 채널 선택에 추가하십시오.

업데이트 채널과 입력된 현재 업데이트를 통해 서비스 팩 마이그레이션이 예상대로 이루어지고 프로덕션으로 간주되는 것이 무엇이든 그것보다 새로운 패키지 버전으로 시스템을 패치하지 않도록 보장할 수 있습니다. 사용자 정의 업데이트 채널 및 병합 스크립트 프로세스에 관해서는 앞으로 나올 섹션에서 자세히 설명드리겠습니다.

현재 업데이트 채널:

이제 관리 호스트가 상황에 따라 구독할 현재 업데이트 채널을 생성합니다(예: DEV - 현재 업데이트 - SLES 11 SP3 x86_64용 또는 PROD - 현재 업데이트 - SLES 12 x86_64용). SUSE Linux Enterprise Server 각 버전의 상황 채널 전체 세트가 있고, 새로 시작할 빈 채널이 있습니다. 다음과 같이 채널을 생성한 후 이 채널을 복제하는 옵션 기능을 사용해 필요한 입력 양을 줄입니다.

  1. [소프트웨어 채널 관리] 하위 메뉴에서 [채널 생성]을 클릭합니다.

  2. SUSE Linux Enterprise 풀 채널 중 하나에 채널을 생성합니다. 자체 복제 세트가 없다면 이 풀 안에 생성합니다.

  3. 채널을 공용으로 수정합니다.

  4. 이 새 채널(업데이트 없음)을 남아 있는 상황에 각각 현재 업데이트 채널로 복제하고 각각에 적절한 상황 접두어(예: DEV - , TEST - , PROD - 등)를 붙입니다.

  5. 결국 관리하고자 하는 각 SUSE Linux Enterprise Server 버전에 전체 상황 세트가 있는 상태가 되어야 합니다. SUSE Linux Enterprise Server 11 SP1 및 SP2 채널에 유념하십시오. 이로 인해 전체 집합이 두 배(LTSS 사용 시 네 배)가 됩니다. 하지만 SP1 및 SP2 업데이트 채널은 더 이상 업데이트되고 있지 않으므로 현재는 정적 채널로 구독할 수 있습니다. (2.3절 “패치 프로모션 싸이클”에서 LTSS에 관한 메모를 참조하십시오.)

“현재 업데이트” 채널의 예시 스크린샷
그림 5: 현재 업데이트 채널의 예시 스크린샷

예외 채널:

이제 병합되는 SUSE Linux Enterprise Server의 각 버전에 대해 두 개의 예외 채널을 생성합니다. 아키텍처(예: 아카이브 채널 기반)에 고유한 혼합 채널을 생성하는 것이 가능할 수 있지만 어떤 배포에서 패치 예외가 발생한 것인지 추적하는 일은 번거로울 수 있습니다. 여러 버전의 SUSE Linux Enterprise Server에서 패치/패키지를 혼합하는 경우 이러한 패치를 추적하여 해결한 후 패치 워크플로로 재도입하기가 더 어렵습니다. 패치의 출처인 SUSE Linux Enterprise Server의 버전에 대해서만 예외 채널에 패치를 배치하는 것이 훨씬 더 쉽습니다. 다음과 같이 패치 예외보안 ASAP 예외 채널을 생성합니다.

  1. [소프트웨어 채널 관리] 하위 메뉴에서 [채널 생성]을 클릭합니다.

  2. SUSE Linux Enterprise Server 풀 채널 중 하나에 패치 예외 - 구독 금지 채널을 생성합니다. 자체 복제 세트가 없다면 이 풀 안에 생성합니다. 이 채널은 상황 채널 옆에 상주합니다.

  3. 채널을 공용으로 수정합니다.

  4. 위와 같이 보안 ASAP 예외 채널을 생성합니다. 이 채널 역시 상황 및 패치 예외 채널 옆에 상주합니다.

  5. SUSE Linux Enterprise Server 11 SP1 및 SP2의 경우 유념할 점은 이들이 동일한 SP1 풀 기본 채널에 상주하므로 각 서비스 팩에 예외 및 보안 예외 채널이 있다는 것입니다.

“예외” 채널의 예시 스크린샷
그림 6: 예외 채널의 예시 스크린샷

2.7 활성화 키/부트스트랩

일반적으로 호스트가 설치되어 있는 SUSE Linux Enterprise Server의 특정 버전에 할당된 활성화 키 세트를 이미 생성해 놓으셨을 것입니다. 시스템 그룹, 여러 가지 하위 채널, 소프트웨어 패키지 등과 같이 키에 할당된 다른 특성이 있을 수 있습니다. 선택에 따라 기존 활성화 키를 수정하여 재사용하거나 이 구현에 대해 새 키를 생성할 수 있습니다. 이 예시에서는 새 키를 생성한다고 가정합니다.

  1. [시스템] 메뉴에서 왼쪽 패널에 있는 하위 메뉴인 [활성화 키]를 클릭합니다.

  2. 오른쪽 상단 모서리에 있는 [키 생성]을 클릭합니다.

  3. 이 조직 내에 활성화 키를 생성합니다(필요한 경우 다른 조직에 로그인하여 키를 생성하는 것을 잊지 마십시오). 적절한 자격, 소프트웨어 패키지, 구성 채널을 할당합니다.

  4. 이 키로 등록할 상황 호스트에 따라 활성화 키의 이름을 지정합니다.

    예:

    활성화 키 생성 스크린샷
    그림 7: 활성화 키 생성 스크린샷
  5. 중요: 하위 채널 탭을 클릭하십시오. 그러면 이 키에 해당되는 상황에 따라 적절한 현재 업데이트 채널을 할당할 수 있습니다.

    예:

    하위 채널 스크린샷
    그림 8: 하위 채널 스크린샷
  6. 적절한 SUSE Manager 도구 채널과 해당 SUSE Linux Enterprise Server의 버전에 대한 요구 사항을 충족하는 데 필요한 기타 채널을 선택합니다.

  7. 보안 ASAP 예외 채널은 활성 하위 채널로 선택되고 패치 예외(구독 금지) 채널은 선택되지 않습니다. 이것이 중요한 이유는 패치 예외 채널로 복사된 모든 패치/패키지는 호스트에게 표시되지 않아야 하지만, 보안 ASAP 예외 채널에 복사된 패치/패키지는 언제나 호스트에게 즉시 표시되어야 하기 때문입니다.

활성화 키는 부트스트랩 스크립트로 호출되는데, 등록 부트스트랩과 활성화 키 사이에 일대일 관계를 맺는 경우가 많습니다. 새 활성화 키를 생성했건 상황별 현재 업데이트 채널을 가리키기 위해 기존 활성화 키를 수정했건 간에 활성화 키를 호출하는 부트스트랩 스크립트가 있어야 합니다.

모든 새 호스트는 이 부트스트랩을 사용해 등록하고 SUSE Manager로 관리됩니다. 주요 이점 중 한 가지는 채널 할당을 변경할 필요가 없다는 것입니다. 왜냐하면 호스트가 적절한 상황 업데이트 채널에 할당되어 패치 싸이클마다 프로모션될 때 새 업데이트를 수신하기 때문입니다. 다음 섹션인 2.8절 “스크립트”에서는 프로모션에 대해 살펴보겠습니다.

2.8 스크립트

패치/패키지 병합 스크립트:

패치/패키지 병합 스크립트는 한 채널에서 다른 채널로 패치 및 관련 패키지를 프로모션하는 데 사용됩니다. 먼저 아카이브 채널에서 첫 단계(상황)(예: DEV)로 컨텐트를 병합하는 데 사용됩니다. 이어서 컨텐트가 최종 단계에 도달할 때까지 한 단계에서 다음 단계로 컨텐트를 프로모션하는 데 사용됩니다. 그런 다음, SUSE Linux Enterprise Server의 각 버전(예: 11 SP1, SP2 등)과 각 기업 환경(예: STORE, CORP 등)에 대해 이 프로세스가 반복됩니다.

끝으로 각 패치 달력 싸이클(분기별/월별 등)에 대해 전체 프로세스가 반복됩니다.

채널 아카이브 생성 스크립트/채널 아카이브 원본 목록 구성 파일:

이 스크립트 및 연결된 원본 목록 구성 파일은 수동으로 또는 crontab 항목에 의해 호출됩니다. 이 스크립트는 원본 목록 파일을 사용해 SUSE Linux Enterprise Server의 버전과 아카이브를 생성할 대상 아키텍처를 파악합니다. 앞서 설명한 것처럼 아카이브 채널은 다양한 SUSE Linux Enterprise Server 업데이트 채널의 특정 시점 복제로 생성됩니다.

정확한 아카이브 채널이 생성되게 하려면 원본 파일에 몇 줄을 추가하기만 하면 됩니다. 각 줄에는 세 개의 필드가 있는데, 첫 번째는 아키텍처, 두 번째는 원본 채널, 세 번째는 대상 채널 텍스트입니다. 스크립트는 원본 목록을 구문 분석하고 아키텍처를 기준으로 아카이브용 대상 상위 채널을 구성한 후 대상 채널 및 레이블 등을 구성합니다.

이 스크립트는 원본 목록의 각 항목에 대해 spacecmd 함수인 softwarechannel_clonesoftwarechannel_setorgaccess를 호출합니다. 또한 현재 달력 분기를 계산하고, 아카이브를 생성하고, 이 아카이브를 공개적으로 표시합니다. 전체 스크립트에 대한 부록을 참조하십시오.

2.9 Crontab 항목/자동화

아카이브 생성 스크립트에 대한 일정 기반 트리거(분기 말)

달력 분기를 특정 달의 마지막 날에 생성할지(돌이켜 보기), 아니면 달의 시작 시점(분기 마지막 날을 하루 경과한 날)에 생성할지 결정해야 합니다. 아카이브 채널은 특정 SLES 버전의 SUSE 업데이트 채널을 복제하는 방식으로 생성되므로 이 결정이 컨텐트에 영향을 미칠 수 있습니다.

분기가 바뀌어도 일관성이 유지될 것이므로 어떻게 하든 상관없습니다. cron 구문을 설명하기 위해 둘 중에 더 어려운 것, 즉 분기 말에 아카이브 스크립트를 호출하는 방법을 보여드리겠습니다. 이것이 더 어려운 이유는 간단합니다. 즉 cron 항목이 두 개 있어야 해당되는 달의 30일(6월 및 9월)과 31일(3월 및 12월)을 모두 처리할 수 있기 때문입니다.

crontab 항목은 아카이브 생성 스크립트를 가리키며 3월, 6월, 9월, 12월에 실행됩니다. cron 항목은 다음과 같습니다.

0 0 30 6,9 * /path/to/the/archive/script
0 0 31 3,12 * /path/to/the/archive/script

경로는 실제 archive-channel-create-script.sh(또는 이와 유사한 것)를 가리킵니다. 이것은 /usr/sbin/에 배치될 수 있고 실행 가능한 상태로 만들어야 합니다(chmod +x).

또한 이 스크립트는 Bash 셸 스크립트 내에서 spacecmd 명령을 호출하고 있음을 아는 것이 매우 중요합니다. Spacecmd는 셸 내부 또는 셸 외부에서 조정된 명령 해석기로 호출할 수 있는 파이썬 기반 셸입니다. 이러한 호출을 통해 광범위한 명령 세트를 사용할 수 있게 됩니다.

spacecmd을 호출하면 호출하는 사용자의 홈 디렉토리에 .spacecmd 디렉토리가 저장됩니다. .spacecmd 디렉토리에는 spacecmd 실행 시 메시지 받는 것을 피하는 데 활용 가능한 인증서 세트를 저장할 수 있는 구성 파일이 있습니다. 이 파일을 사용해 인증서를 저장하면 cron 작업이 실행되고 인증서가 통과될 때까지 기다리는 것을 멈추지 않습니다.

crontab 항목은 아카이브 생성 스크립트를 가리키며 3월, 6월, 9월, 12월에 실행됩니다. cron 항목은 다음과 같습니다.

[spacecmd]

server=localhost

username=admin

password=suse1234

nossl=0

이 인증서를 저장하면 사용자 이름 또는 비밀번호를 전달하지 않고도 SUSE Manager 루트 사용자의 spacecmd 작업이 실행되므로 아카이브 생성을 위한 cron 작업이 실패하는 일 없이 적절한 때에 실행됩니다.

3 사용자 워크플로

본 안내서에서는 SUSE Manager를 활용해 다음과 같은 이점을 제공하는 패치 라이프싸이클 관리에 대한 접근 방식을 설명합니다.

  • 패치 아카이브 채널 자동 생성:

    • 이 채널은 분기별로 (또는 더 자주) 생성할 수 있고, 조직은 이 채널을 이용해 과거 패치 세트에 근거하여 테스트 환경을 생성할 수 있습니다(예: 두 달력 분기 전의 사용 가능 패치를 사용해 랩 생성).

  • 다음과 같이 현재 업데이트 채널의 정적 세트를 활용하므로 호스트 구독을 변경할 필요가 없습니다.

    • API/스크립트를 사용하면 업데이트를 패치 아카이브에서 구독된 호스트 채널로 병합할 수 있어 채널을 끊임없이 복제하고 호스트 구독을 수정하지 않아도 됩니다.

    • 다중 상황 환경은 프로모션 프로세스를 사용해 패치 세트 테스트/유효성 검사 중 각 단계를 거쳐 업데이트를 병합할 수 있습니다.

  • 패치 배포에서 제외해야 하는 패치에 대한 예외 처리:

    • 패치 예외 채널과 이 채널에 패치/패키지를 복사하는 프로세스를 생성한 다음, 패치/패키지를 업데이트 채널에서 제거하면 패치 예외를 추적할 수 있습니다. 이 채널을 모든 호스트 채널 구독에서 제외하여 모든 패치/패키지 컨텐트가 보이거나 설치 가능한 상태가 되지 않게 해야 합니다.

    • 패치 예외 프로세스를 개발하여 모든 예외의 교정을 추적함으로써 갈수록 향후 계속 늘어나는 패치 버킷을 관리하는 과정에서 발생할 수 있는 복잡성을 미연에 방지해야 합니다.

  • 더 높은 우선순위로 배포해야 하는 패치에 대한 보안 ASAP 예외 처리:

    • (패치 예외 채널과 달리) 보안 ASAP 예외 채널은 항상 구독된 상태여야 합니다. 이 채널을 구독한 호스트는 필요에 따라 추가되는 패치/패키지(예: 일반 패치 일정과 별도로 배포할 만큼 충분히 중요하다고 간주되는 보안 패치)를 얻을 수 있습니다. 이 채널은 새 아카이브에서 복사하거나 SUSE(벤더) 업데이트 채널 중 하나에서 직접 복사할 수 있습니다.

3.1 프로세스 워크플로 예시

다음은 패치 프로모션 및 예외 프로세스를 위한 워크플로로 제안할 수 있는 몇 가지 예시입니다. 이 예시는 특정 운영 그룹의 기존 프로세스 세트에 더 적합하게 수정할 수 있습니다.

워크플로 1: 패치 프로모션 프로세스

패치 프로모션 프로세스는 다음 샘플 단계를 따릅니다.

표 1: 패치 프로모션 프로세스
해결 방법프로세스참고
검토기존 달력을 참조해 패치 배포 시작일을 정합니다.일반적으로 시작일은 새 분기가 시작될 때 발생하지만 배포 빈도 및 확정된 기간에 따라 달라집니다.
선택패치 배포에 대한 SUSE Manager 조직과 환경 대상을 파악합니다.이 예시의 시나리오에서는 이것이 CORP, STORE, NPE 중 하나가 될 수 있고, SUSE Manager 조직의 사용 여부에 따라 관리자가 호스트를 보려면 로그인해야 할 수 있습니다.
선택패치가 적용될 SUSE Linux Enterprise Server 버전을 선택합니다.패치 프로모션은 각 SUSE Linux Enterprise Server 버전에 대해 수행됩니다. 각 버전에는 패치가 프로모션되면서 거치는 자체 상황 채널 세트가 있습니다(DEV, TEST, QA, PROD 등).
병합현재 아카이브를 초기 상황 (또는 선택한 상황)으로 병합합니다.스크립트 병합 유틸리티 사용: 원본 채널(이 경우 아카이브) 및 대상 채널(시리즈를 시작할 DEV - 현재)을 선택합니다.
배포현재 상황에서 구독한 호스트로 패치를 배포합니다.패치가 병합되면 현재 채널을 구독한 호스트의 상태에 어느 패치가 현재 사용 가능한지 표시됩니다. 적절한 패치 명령을 실행하여 이 패치를 배포합니다.
테스트최근에 배포된 패치를 수신한 호스트에 대한 테스트를 조율하거나 해당 팀/LOB에게 평가를 시작하라고 알립니다.패치를 배포한 후 패치 배포의 성공 여부를 검증하기 위해 테스트 또는 검토 기간을 시작해야 합니다. 배포의 확실한 성공을 위해 조정 작업은 비즈니스 파트너와 함께 수행해야 합니다.
평가이전에 한 병합/배포의 결과를 평가하고 다음 상황으로 나아갑니다. 최종 상황인 경우 완료되었음을 보고합니다.패치 세트를 최종 상황에 이를 때까지 계속해서 각 상황으로 병합하고 배포합니다. 완료되었음을 보고합니다. 모든 호스트는 녹색 상태로 표시되어야 합니다.

워크플로 2: 패치 예외 프로세스

패치 예외 프로세스는 다음 샘플 단계를 따릅니다. 다시 말씀드리지만 이 예시는 특정 운영 그룹의 기존 프로세스 세트에 더 적합하게 수정할 수 있습니다.

다음 표를 참조하십시오.

표 2: 패치 예외 프로세스
해결 방법프로세스참고
식별패치 세트에서 잠재적으로 제거하기 위한 예외로 식별하려는 패치를 찾아냅니다.SUSE Manager에서 검색 도구를 사용해 패치를 검색하거나 특정 아카이브 또는 상황 채널에 있는 패치를 찾아냅니다.
사본SUSE Manager의 채널 관리 기능 사용: SUSE Linux Enterprise Server 특정 버전용 예외 채널을 선택하고 식별된 패치를 (이전 단계의) 원본에서 이 채널에 추가합니다.

패치 채널의 원본과 패치 예외 채널의 대상이 중요합니다. 이 단계는 SUSE Linux Enterprise Server의 다양한 버전에 반복할 수 있습니다. 패치의 잠재적 원본은 다음과 같은 채널일 수 있습니다.

  1. 아카이브 채널

  2. 상황 채널

  3. SUSE 업데이트 채널

제거SUSE Manager의 채널 관리 기능 사용: 이전 단계에서 추가한 패치를 찾기 위해 패치 목록을 나열합니다. 패치를 찾은 후 현재 단계 (또는 여러 단계)에서 패치를 제거합니다.패치를 찾은 후 상황 채널에서 제거하면 구독한 호스트가 패치를 확인하고 적용 가능성을 보고하는 작업을 하지 못하게 됩니다.
추적티켓을 제출하거나 확립된 프로세스를 시작하여 이 패치 예외를 추적합니다.추적의 목표는 교정을 위한 예외 및 시도가 있음을 계속 인지하여 패치가 패치 배포 싸이클에 재도입되게 하는 것입니다.
교정예외를 교정하는 작업을 합니다.특정 예외에 대해 수정이 식별/생성되었다면 패치를 배포 워크플로에 재도입할 수 있습니다.
메모예외는 단일 배포 싸이클 동안만 지속되어야 합니다. 다음 아카이브에도 이와 동일한 패치가 포함된다는 장점이 있습니다.예외는 항상 임시 조건이어야 합니다. 패치를 배포할 수 없는 이유를 수정하기 위한 작업을 항상 수행해야 합니다. 예외가 있는 한 적합성이 위험에 처할 수 있기 때문입니다.

워크플로 3: 보안 패치 ASAP 프로세스

보안 예외 프로세스가 이전 패치 예외 프로세스와 다른 점은 패치가 패치 배포 싸이클에 추가된다는 것입니다(현재 진행 중인 배포 중에 추가될 수 있음). 더 명확한 설명을 위해 또 하나의 프로세스 테이블과 몇 개의 SUSE Manager 인터페이스 스크린샷을 여기에 포함하였습니다.

다음 표를 살펴보십시오.

표 3: 보안 패치 ASAP 프로세스
해결 방법프로세스참고
식별특정 상황 또는 패치 세트에 대한 잠재적 추가를 위해 보안 예외로 식별하려는 패치를 찾습니다. SUSE Manager에서 검색 도구를 사용해 패치를 찾거나 SUSE Linux Enterprise Server의 특정 버전용 특정 업데이트 채널에서 패치를 찾습니다.
사본SUSE Manager의 채널 관리 기능을 사용해 SUSE Linux Enterprise Server 특정 버전용 예외 채널을 선택하고 식별된 패치를 원본(이전 단계의 SUSE 업데이트 채널일 수 있음)에서 이 채널에 추가합니다.

보안 패치(SUSE 업데이트 채널)의 원본과 패치의 대상(보안 예외 ASAP 채널)이 핵심입니다. 이 단계는 SLES의 다양한 버전에 반복할 수 있습니다. 패치의 잠재적 원본은 다음과 같은 채널일 수 있습니다.

  1. 아카이브 채널

  2. 상황 채널

  3. SUSE 업데이트 채널

배포보안 예외 패치(여러 개일 수 있음)를 선택된 상황으로 배포하여 구독한 호스트에 배포합니다.보안 패치가 상황 채널에 추가되면 "현재" 채널을 구독한 호스트의 상태에 어느 패치가 현재 사용 가능한지 표시됩니다. 적절한 패치 명령을 실행하여 이 패치를 배포합니다.
추적티켓을 제출하거나 확립된 프로세스를 시작하여 이 보안 패치 예외를 추적합니다.추적의 목표는 보안 패치 예외가 배포되었음을 계속 인지하는 것입니다. 이 패치는 다음 분기별 자동 생성 중에 일반 아카이브의 일부가 됩니다.
보고보안 예외는 일반적으로 적합성 문제를 처리하기 위해 발생합니다. 배포 시 적합성 (감사) 보고서를 생성할 수 있습니다.보안 예외는 일반 일정으로의 에스컬레이션으로 처리됩니다. 일반 작업 측면에서 보안 예외는 다음 아카이브의 일부가 되고 기본 일정의 일부로 배포됩니다. 그 결과 그다음 일반 배포에는 이 패치가 포함될 필요가 없습니다(이미 배포되어 있을 것이기 때문).

다음 스크린샷에서는 패치를 보안 ASAP 예외 채널, 특히 SLES 11 SP1 x86_64 버전에 추가하는 기능을 보여줍니다.

보안 ASAP 예외 채널에 패치 추가
그림 9: 보안 ASAP 예외 채널에 패치 추가

이 스크린샷에서 특정 채널(이 경우 DEV - 현재 - x86_64용 SLES11-SP1-LTSS-업데이트)의 나열/제거 기능을 확인할 수 있습니다. 이 인터페이스에서는 패치가 채널에서 제거되어 표시되지 않으며 잠재적으로 예외 프로세스의 일부로 배포됩니다.

보안 ASAP 예외 채널에 패치 추가
그림 10: 보안 ASAP 예외 채널에 패치 추가

4 부록

4.1 Spacewalk-Clone-By-Date 구성 파일 샘플

이 샘플은 텍스트 파일로 저장되며 다음과 같이 -c 플래그를 사용하여 입력 구성 파일을 표시하는 방식으로 spacewalk-clone-by-date 유틸리티와 함께 사용됩니다.

spacewalk-clone-by-date -c Q3-2015-sles11sp3-x86_64-archive.conf

이 샘플에서는 기본 채널 원본인 sles11-sp3-pool-x86_64와 대상 기본 채널(대상)인 cc_patch_archives_channel_64bit를 지정하고 existing-parent-do-not-modify : true라는 지시어를 사용합니다. 이를 통해 어떤 기본 채널의 하위 채널을 완전히 다른 기본 채널로 복제하도록 유틸리티에 지시합니다. 채널 이름은 다를 수 있습니다. 따라서 이 예시에서는 여러분의 사례에서 할 수정 작업이 필요할 수 있습니다. 예: 아래의 Q3-2015-sles11sp3-x86_64-archive.conf 컨텐트.

{
 "username":"SMadmin",
 "to_date": "2015-09-30",
 "skip_depsolve":false,
 "security_only":false,
 "use_update_date":false,
 "no_errata_sync":false,
 "dry_run":false,
 "channels":[
       {
         "sles11-sp3-pool-x86_64": {
            "label": "cc_patch_archives_channel_64bit",
            "existing-parent-do-not-modify": true
         },
         "sles11-sp3-updates-x86_64": {
            "label": "09_30_2015_q3_archive-sles11-sp3-updates-x86_64",
            "name": "Q3-2015 Patch Archive - 09-30-2015 - SLES11-SP3-Updates for x86_64",
            "summary": "Q3 - 2015 - Patch Archive Set (9-30-2015) - SUSE Linux Enterprise Server 11 SP3 x86_64",
            "description": "Q3 - 2015 - Patch Archive Set (9-30-2015) - SUSE Linux Enterprise Server 11 SP3 x86_64"
         }
        }
       ]
}
참고
참고: 채널 패치 컨텐트 검토

spacewalk-clone-by-date 유틸리티를 사용할 때는 생성 후 채널 패치 컨텐트를 검토하여 채널에 적절한 종료일에 대한 패치가 포함되게 하십시오. 잘못된 기간에 있는 채널에 추가 패치가 포함되는 경우가 때로 있는데 이러한 패치는 수동으로 삭제할 수 있습니다.

4.2 파이썬을 사용한 샘플 패치/패키지 병합 스크립트

이 스크립트에는 MANAGER_URL에 설정된 SUSE Manager 서버 URL이 정의되어 있습니다. 이 스크립트는 SUSE Manager 관리자 ID 및 비밀번호를 요구하는 메시지를 표시합니다. 이어서 원본 및 대상 채널을 요청합니다. 그런 다음, 스크립트는 채널을 확인하고 계속 진행할 것인지 묻습니다. 긍정적인 응답(Y)을 입력하면 스크립트는 원본 채널의 패치 및 패키지를 대상 채널로 병합할 수 있습니다.

#!/usr/bin/python
import xmlrpclib
import sys
import getpass

MANAGER_URL = "https://suma01.chameleoncorp.com/rpc/api"
MANAGER_LOGIN = raw_input("Please Enter the SUSE Manager Login Name: ")
MANAGER_PASSWORD = getpass.getpass("Please Enter the Password: ")

MERGE_SOURCE = raw_input("Enter the SOURCE channel label to Merge FROM: ")
MERGE_TARGET = raw_input("Enter the TARGET channel label to Merge INTO: ")

print("This tool is going to take all packages and errata from the SOURCE")
print("Channel : " + MERGE_SOURCE)
print("and merge it into the TARGET ")
print("Channel : " + MERGE_TARGET)

def query_yes_no(question, default="yes"):
    """Ask a yes/no question via raw_input() and return their answer.

    "question" is a string that is presented to the user.
    "default" is the presumed answer if the user just hits <Enter>.
        It must be "yes" (the default), "no" or None (meaning
        an answer is required of the user).

        The "answer" return value is True for "yes" or False for "no".
        """
        valid = {"yes": True, "y": True, "ye": True,
                 "no": False, "n": False}
        if default is None:
            prompt = " [y/n] "
        elif default == "yes":
            prompt = " [Y/n] "
        elif default == "no":
            prompt = " [y/N] "
        else:
            raise ValueError("invalid default answer: '%s'" % default)

        while True:
            sys.stdout.write(question + prompt)
            choice = raw_input().lower()
            if default is not None and choice == '':
                return valid[default]
            elif choice in valid:
                return valid[choice]
            else:
                sys.stdout.write("Please respond with 'yes' or 'no' "
                                 "(or 'y' or 'n').\n")

query_yes_no("Is this information correct?")

client = xmlrpclib.Server(MANAGER_URL, verbose=0)
key = client.auth.login(MANAGER_LOGIN, MANAGER_PASSWORD)

client.channel.software.mergePackages(key, MERGE_SOURCE, MERGE_TARGET)
client.channel.software.mergeErrata(key, MERGE_SOURCE, MERGE_TARGET)

client.auth.logout(key)

4.3 아카이브 채널 생성 자동화를 위한 샘플 Crontab 항목

다음은 아카이브 채널 생성 스크립트를 실행하여 각 분기에 대해 채널이 생성되는 결과를 얻는 데 사용할 수 있는 몇 가지 샘플 cron 항목입니다. 이 예시에는 분기 말까지 수신되는 모든 패치를 복제하기 위한 항목이 두 개 있습니다. 단일 항목을 사용해 분기 시작 시점에 생성할 수 있지만 이를 처리하기 위해 아카이브 스크립트에서 계산을 수정할 때 주의해야 합니다. 현재 아래의 예시 아카이브 채널 생성 스크립트는 현재 날짜를 보고 몇 분기인지 알아냅니다. 4분기에 스크립트를 실행하면 생성된 아카이브에 4분기 아카이브라는 이름이 지정됩니다.

분기 말에 대한 cron 항목: (예: 6월 및 9월의 30일과 3월 및 12월의 31일):

0 0 30 6,9 * /path/to/the/archive/script
0 0 31 3,12 * /path/to/the/archive/script

4.4 SUSE Manager 2.1 및 3.0을 위한 샘플 아카이브 채널 생성 스크립트

아래 스크립트는 아카이브 채널 소스 파일(4.6절 “샘플 아카이브 채널 원본 목록 파일” 참조)을 이용해 SUSE 업데이트 채널의 분기별 아카이브를 생성합니다. 이 예시 스크립트는 Bash로 작성되지만 spacecmd를 호출하여 복제를 완료하고 새 아카이브를 공용(다른 조직에 액세스 가능)으로 설정합니다.

이 스크립트는 실행하는 데 약간의 시간이 걸립니다. 복제 명령은 빠르게 완료되지만 실제 복제 채널은 org-access 명령이 액세스하여 완료할 때까지 얼마간 시간이 지나야 안정화됩니다. 이 채널을 수동으로 테스트하려면 참을성이 있어야 합니다. 스크립트를 일반 crontab 유형으로 실행하면 오래지 않아 완료됩니다.

#!/bin/bash

        ####################################################################
        #    SUMA Archive Channel Creation Script - Called from Cron       #
        #                                                                  #
        #    This script creates quarterly archives of SUSE Manager        #
        #    channels from SUSE Updates channels. It takes a list          #
        #    of source channels from the archive-sources.lst file          #
        #    that should be located in the same directory as this          #
        #    script. Each entry in that file will be used as a             #
        #    source channel to create an archive for patches/updates       #
        #    in the appropriate archive channel.                           #
        #                                                                  #
        # REQUIRES:                                                        #
        #                1. cron entries for each quarter :                #
        #     e.g. 30th of months June and Sept. and 31st of months March  #
        #       and December:                                              #
        #                0 0 30 6,9 * /path/to/this/script                 #
        #                0 0 31 3,12 * /path/to/this/script                #
        #                                                                  #
        #                2. archive-sources.lst :                          #
        #     A list of the architecture, the source updates channel       #
        #     for each distro and the suffix of the target channel         #
        #     version and architecture (1 per line - no line-feed at EOF)  #
        #   Example:                                                       #
        #  S390x,sles11-sp3-updates-s390x,SLES11-SP3-Updates for s390x     #
        #  ppc64,sles11-sp4-updates-ppc64,SLES11-SP4-Updates for PPC       #
        #  x86_64,sles11-sp3-updates-x86_64,SLES11-SP3-Updates for x86_64  #
        #         etc.                                                     #
        #                                                                  #
        ####################################################################
        #                                                                  #
        #       Created by - Jeff Price, SUSE Consulting - 2015            #
        #                                                                  #
        ####################################################################

## date strings
month=`date +%m`
year=`date +%Y`
fdate=`date +%m-%d-%Y`
## set quarter
if [ $month -le 3 ]
then
   quar=1
elif [ $month -gt 3 ] && [ $month -lt 7 ]
then
   quar=2
elif [ $month -gt 6 ] && [ $month -lt 10 ]
then
   quar=3
elif [ $month -gt 9 ]
then
   quar=4
fi

## Create archives using source list

while read line
do
        arch=`echo "$line" | awk -F, '{print $1}'`
        src_ch=`echo "$line" | awk -F, '{print $2}'`
        trg_ch=`echo "$line" | awk -F, '{print $3}'`
## set archive channel

target_parent=$arch"-patch-archives-channel"
source_channel=$src_ch
target_channel_name="Q"$quar" "$year" - "$fdate" - Archive of "$trg_ch
target_summary="Q"$quar"-"$year" Archive Set "$trg_ch
target_channel_label="q"$quar"-"$year"-archive-"$src_ch

## Debug Output
echo "Architecture: " $arch
echo "Source Channel: "$src_ch
echo "Target Channel Archive Suffix: "$trg_ch
echo "Target Archive Parent Channel: "$target_parent
echo "Source Channel (again): "$source_channel
echo "Target Channel Name: "$target_channel_name
lctn=`echo $target_channel_name|tr '[:upper:]' '[:lower:]'`
echo "lowercase target name: "$lctn
echo "Target Channel Label: "$target_channel_label
echo "Target Channel Summary and Description: "$target_summary

/usr/bin/spacecmd -d -- softwarechannel_clone -s “‘$src_ch’” -n
“‘$target_channel_name’” -l “‘$target_channel_label’” -p “‘$target_parent’” - g
/usr/bin/spacecmd -d -- softwarechannel_setorgaccess
“‘$target_channel_label’” -e
done < ./archive-sources.lst

4.5 SUSE Manager 3.1 및 3.2를 위한 샘플 아카이브 채널 생성 스크립트

아래 스크립트는 아카이브 채널 소스 파일(4.6절 “샘플 아카이브 채널 원본 목록 파일” 참조)을 이용해 SUSE 업데이트 채널의 분기별 아카이브를 생성합니다. 이 예시 스크립트는 Bash로 작성되지만 spacecmd를 호출하여 복제를 완료하고 새 아카이브를 공용(다른 조직에 액세스 가능)으로 설정합니다.

이 스크립트는 실행하는 데 약간의 시간이 걸립니다. 복제 명령은 빠르게 완료되지만 실제 복제 채널은 org-access 명령이 액세스하여 완료할 때까지 얼마간 시간이 지나야 안정화됩니다. 이 채널을 수동으로 테스트하려면 참을성이 있어야 합니다. 스크립트를 일반 crontab 유형으로 실행하면 오래지 않아 완료됩니다.

#!/bin/bash

        ####################################################################
        #    SUMA Archive Channel Creation Script - Called from Cron       #
        #                                                                  #
        #    This script creates quarterly archives of SUSE Manager        #
        #    channels from SUSE Updates channels. It takes a list          #
        #    of source channels from the archive-sources.lst file          #
        #    that should be located in the same directory as this          #
        #    script. Each entry in that file will be used as a             #
        #    source channel to create an archive for patches/updates       #
        #    in the appropriate archive channel.                           #
        #                                                                  #
        # REQUIRES:                                                        #
        #                1. cron entries for each quarter :                #
        #     e.g. 30th of months June and Sept. and 31st of months March  #
        #       and December:                                              #
        #                0 0 30 6,9 * /path/to/this/script                 #
        #                0 0 31 3,12 * /path/to/this/script                #
        #                                                                  #
        #                2. archive-sources.lst :                          #
        #     A list of the architecture, the source updates channel       #
        #     for each distro and the suffix of the target channel         #
        #     version and architecture (1 per line - no line-feed at EOF)  #
        #   Example:                                                       #
        #  S390x,sles11-sp3-updates-s390x,SLES11-SP3-Updates for s390x     #
        #  ppc64,sles11-sp4-updates-ppc64,SLES11-SP4-Updates for PPC       #
        #  x86_64,sles11-sp3-updates-x86_64,SLES11-SP3-Updates for x86_64  #
        #         etc.                                                     #
        #                                                                  #
        ####################################################################
        #                                                                  #
        #       Created by - Jeff Price, SUSE Consulting - 2015            #
        #       Updated for SUMA 3.1 & 3.2 - Levin Forrest,            #
        #       Lenovo Consulting - 2018                                   #
        #                                                                  #
        ####################################################################

## date strings
month=`date +%m`
year=`date +%Y`
fdate=`date +%m-%d-%Y`
## set quarter
if [ $month -le 3 ]
then
   quar=1
elif [ $month -gt 3 ] && [ $month -lt 7 ]
then
   quar=2
elif [ $month -gt 6 ] && [ $month -lt 10 ]
then
   quar=3
elif [ $month -gt 9 ]
then
   quar=4
fi

## Create archives using source list

while read line
do
        arch=`echo "$line" | awk -F, '{print $1}'`
        src_ch=`echo "$line" | awk -F, '{print $2}'`
        trg_ch=`echo "$line" | awk -F, '{print $3}'`
## set archive channel
## Note the target_parent requires this EXACT channel already created
target_parent=$arch"-patch-archives-channel"
source_channel=$src_ch
target_channel_name="Q"$quar" "$year" - "$fdate" - Archive of "$trg_ch
target_summary="Q"$quar"-"$year" Archive Set "$trg_ch
target_channel_label="q"$quar"-"$year"-archive-"$src_ch

## Debug Output
echo "Architecture: " $arch
echo "Source Channel: "$src_ch
echo "Target Channel Archive Suffix: "$trg_ch
echo "Target Archive Parent Channel: "$target_parent
echo "Source Channel (again): "$source_channel
echo "Target Channel Name: "$target_channel_name
lctn=`echo $target_channel_name|tr '[:upper:]' '[:lower:]'`
echo "lowercase target name: "$lctn
echo "Target Channel Label: "$target_channel_label
echo "Target Channel Summary and Description: "$target_summary

## removed double quotes from $src_ch to allow spacecmd to parse correctly
## removed single quotes from $target_channel_label and $target_parent to allow spacecmd to parse correctly
## only $target_channel_name should have single quotes as this variable contains spaces
/usr/bin/spacecmd -d -- softwarechannel_clone -s $src_ch -n "'$target_channel_name'" -l "$target_channel_label" -p "$target_parent" -g
## removed double quotes from $target_channel_label to allow spacecmd to parse correctly
/usr/bin/spacecmd -d -- softwarechannel_setorgaccess $target_channel_label -e
## added full directory structure to archive-sources location to allow call from crontab
done < /usr/sbin/archive-sources.lst

4.6 샘플 아카이브 채널 원본 목록 파일

이 파일은 앞 섹션에 있는 아카이브 채널 생성 스크립트가 호출하여 사용합니다(4.4절 “SUSE Manager 2.1 및 3.0을 위한 샘플 아카이브 채널 생성 스크립트” 참조). “readline”이라는 기능이 사용되므로 파일에는 데이터와 함께 줄만 있어야 합니다. 모든 빈 라인은 데이터로 소싱되므로 위의 아카이브 채널 생성 스크립트에 오류가 발생합니다.

첫 번째 필드는 원본 상위 아카이브 채널을 정의하는 아키텍처입니다. 바로 이 곳에 새 아카이브가 하위 채널로 배치됩니다. 두 번째 필드는 패치/패키지의 출처인 원본 채널 레이블입니다. 마지막 필드는 대상 채널 이름 지정에 사용됩니다. 이 필드는 채널 이름을 구성하는 텍스트의 일부이자 채널 요약/설명 필드의 일부입니다.

s390x,sles11-sp3-updates-s390x,SLES11-SP3-Updates for s390x
x86_64,sles11-sp4-updates-x86_64,SLES11-SP4-Updates for x86_64
i586,sles11-sp3-updates-x86_64,SLES11-SP3-Updates for x86_64

4.7 spacecmd 자동화 인증

이 아카이브 스크립트 예시는 Bash로 작성되었고 spacecmd 셸을 호출합니다. spacecmd와 SUSE Manager XMLRPC API 일반 작업에는 인증서가 필요합니다. cron에서 아카이브 스크립트가 성공적으로 실행되려면 필요 시 적절한 사용자 인증서를 전달하는 방법이 필요합니다. 다행히도 사용자 인증서 페어를 저장하는 방법이 있습니다.

spacecmd 유틸리티/셸이 최초로 호출되면 spacecmd를 호출하는 사용자의 홈 디렉토리에 디렉토리가 한 개 생성됩니다. 이 디렉토리는 .spacecmd라고 합니다(예: /root/.spacecmd/). 이 디렉토리에는 config라는 파일이 있고, 사용자가 이후 spacecmd를 호출할 때 사용될 파라미터를 이 파일에 저장할 수 있습니다. 이 파라미터는 다음과 같습니다(여러분의 사용자 이름 및 비밀번호로 교체하십시오).

[spacecmd]
server=localhost
username=admin
password=susemgr
nossl=0

이 인증서가 저장되고 나면 사용자 이름 또는 비밀번호를 입력하라는 메시지를 받지 않고도 명령 줄에서 spacecmd 셸을 호출하거나 spacecmd 명령을 호출할 수 있어야 합니다.

6 GNU Free Documentation License

Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.

The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or non-commercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others.

This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software.

We have designed this License to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference.

This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language.

A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them.

The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque".

Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only.

The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text.

A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3.

You may also lend copies, under the same conditions stated above, and you may publicly display copies.

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects.

If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages.

If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public.

It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document.

You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version:

  1. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission.

  2. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement.

  3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

  4. Preserve all the copyright notices of the Document.

  5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

  6. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below.

  7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

  8. Include an unaltered copy of this License.

  9. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence.

  10. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission.

  11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

  12. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles.

  13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

  14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

  15. Preserve any Warranty Disclaimers.

If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles.

You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard.

You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one.

The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version.

You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers.

The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work.

In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements".

You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects.

You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document.

A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document.

If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/.

Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

Copyright (c) YEAR YOUR NAME.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
 Free Documentation License".

If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts". line with this:

with the Invariant Sections being LIST THEIR TITLES, with the
Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.

If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.