리눅스/OpenSUSE

Zypper 명령 - 주요 개념

씨실과 날실 2020. 7. 19. 09:00


Zypper은 Zypp 시스템 관리 라이브러리를 위한 명령행 인터페이스입니다.


명령 구문

zypper [--global-opts] command [--command-opts] [command-arguments]
zypper subcommand [--command-opts] [command-arguments]
zypper help command


Zypper [--전역 옵션] [명령] [명령 옵션] [명령 인수]

Zypper [하위명령] [명령 옵션] [명령 인수]

Zypper help [명령]


설명

zypper는 ZYpp 시스템 관리 라이브러리 (libzypp)에 대한 명령행 인터페이스입니다. 소프트웨어 설치, 업데이트, 제거, 리포지토리 관리, 그외 다양한 쿼리 수행 등에 사용할 수 있습니다.


주요 개념

시스템 패키지

시스템에 설치된 패키지 세트는 때때로 저장소 @System 또는 시스템 패키지로 표시됩니다.

일반적으로 설치 가능한 패키지를 제공하는 사용 가능한 리포지토리와는 달리 @System 저장소는 삭제할 수 있는 패키지를 제공합니다.

사용 가능한 리포지토리에서 제공되지 않은 설치된 패키지는 unwanted, orphaned 또는 dropped로 표시됩니다.


리포지토리(저장소)

Libzypp는 저장소 관련 작업을 할 때 리포지토리의 메타 데이터를 기반으로 작동합니다. 이 메타 데이터는 패키지 및 RPM 패키지에서 추출된 패키지 관련 정보 및 패치 정보, 패턴 정의 등과 같은 데이터를 포함하고 있습니다.

이러한 데이터는 RPM 파일과 함께 repositories라는 폴더에 저장됩니다. 리포지토리는 HTTP 또는 FTP 서버, DVD 또는 로컬 디스크의 폴더 등 다양한 저장 매체에 배치할 수 있습니다.

zypper에는 리포지토리를 조작하기 위한 특수한 명령들이 있습니다. 또한 그외 많은 명령과 옵션은 저장소를 인수로 사용합니다.


GPG 확인

GPG 검사를 비활성화하지 않는 것이 좋습니다. 서명 데이터를 통해 수신자는 데이터 서명 이후 뎅;터의 수정이 발생하지 않았음을 확인합니다.

서명이 아예 없는 데이터나 잘못된(알 수 없는 서명 포함) 서명을 가진 데이터를 다운받으면 시스템이 손상될 수 있습니다.

Zypp는 GPG 서명을 확인하여 저장소 메타 데이터의 진위 여부를 확인합니다. 리포지토리 메타 데이터가 신뢰할 수 있는 키로 서명되었음이 확인되고, 이 리포지토리의 패키지가 메타 데이터에서 제공된 체크섬과 일치하면 설치가 허용됩니다.

서명되지 않은 리포지토리를 사용하고자할 경우 해당 저장소의 안전성을 사용자가 스스로 확인해야 하며 해당 저장소를 사용함으로써 입게 되는 각종 문제는 스스로가 책임져야 합니다.

리포지토리 메타 데이터가 서명되지 않은 경우, 패키지를 설치하기 전에 다운로드된 각각의 rpm 패키지 GPG 서명을 확인해야 합니다.

서명되지 않은 리포지토리의 패키지에는 유효한 GPG 서명이 필요합니다. 서명되지 않은 패키지를 사용할 경우 확인해야합니다.

이상은 /etc/zypp/zypp.conf의 설정에 의해 기본값으로 정의된 동작입니다.

addrepo 및 modifyrepo 명령은 각각의 리포지토리에 대한 동작을 조정하는 추가 옵션을 제공합니다.
예를 들어 특정 리포지토리의 서명되지 않은 패키지 설치를 위해 서명 확인을 무시할 수 있습니다.
그러나 그렇게 하려면 먼저 공격자가 패키지 데이터를 수정할 수 없도록 해야 합니다.


자원 식별자 (Resource Identifiers - URI)

리포지토리 또는 기타 리소스 (RPM 파일, .repo 파일)의 위치를 지정할 때 libzypp에서 지원하는 모든 유형의 URI를 사용할 수 있습니다. 또한 Zypper는 addrepo 명령에서 지정한 openSUSE 빌드 서비스 (OBS) 저장소를 식별하는 특수 URI를 승인합니다. 이 URI는 obs://project/[platform] 형식입니다.


Refresh

리포지토리를 새로 고침하면 필요한 경우 매체에서 패키지의 메타 데이터를 로컬 캐시(일반적으로 /var/cache/zypp/raw/alias 디렉토리 아래)에 다운로드하고 이렇게 내려 받은 메타 데이터를 바탕으로 .solv 캐시 파일을 /var/cache/zypp/solv/alias 디렉터리 안에 작성합니다.

메타 데이터는 자동으로 또는 사용자 요청에 따라 새로 고쳐집니다. 리포지토리에 자동 새로 고침이 활성화되어 있고 메타 데이터가 오래된 것으로 보고되면 데이터베이스에서 메타 데이터를 읽기 직전에 자동 새로 고침이 수행됩니다. 자동 새로 고침이 비활성화되면 리포지토리는 사용자 요청 시에만 새로 고쳐집니다.

zypper refresh를 호출하여 새로 고침을 요청할 수 있습니다.

새로 고침 작업을 수행하기 전에 저장소 메타 데이터에서 변경 사항이 있는지 확인합니다. 하나 또는 두 개의 메타 데이터 색인 파일을 다운로드하고 캐시된 파일과 원격 파일의 체크섬을 비교하여 변경여부를 확인합니다. 파일이 다르면 리포지토리 메타 데이터가 오래된 것으로 보아 새로 고침합니다.

특정 시간 (분 단위) 동안 저장소 내 패키지 최신 정보 확인 (및 자동 새로 고침)을 지연(보류)하려면 ZYpp 구성 파일 (/etc/zypp/zypp.conf)의 repo.refresh.delay 속성값을 수정하십시오.

즉, zypper는 색인 파일을 다운로드하여 확인하지 않으며 인터넷 액세스나 루트 권한 없이 검색 또는 정보 확인 등과 같은 작업을 수행할 수 있습니다.


서비스

서비스는 리포지토리의 한 수준 위에 있으며 리포지토리를 관리하거나 일부 특수 작업을 수행하는 데 사용됩니다. Libzypp는 현재 RIS(Repository Index Service) 및 플러그인 서비스를 지원합니다.

RIS(Repository Index Service)는 다른 리포지토리 목록을 포함하는 특수한 유형의 리포지토리입니다. 이 목록은 일부 URI 매개 변수 또는 사용자 이름에 따라 서버에 의해 동적으로 생성되거나 정적일 수 있습니다. 이러한 서비스가 시스템에 추가되면 zypper는 시스템에서 이러한 저장소를 추가, 수정 또는 제거하여 현재 목록에 반영합니다.

자세한 내용은 서비스 관리 및 URL : https://en.opensuse.org/openSUSE:Standards_Repository_Index_Service 섹션을 참조하십시오.


패키지 유형

Zypper는 여러 유형의 자원 객체와 함께 작동합니다. 작업 수행이 가능한 유형은 패키지, 패치, 패턴, 제품 등이며, 기본적으로 다른 객체에 의존하는 모든 종류의 객체를 지원합니다.

- 패키지

일반적인 RPM 패키지를 의미합니다.

- 패치

릴리스된 패치는 영향을 받거나 취약한 버전의 패키지 모음과 충돌합니다. 영향을 받거나 취약점이 있는 버전이 설치되어 있으면 패치와 충돌이 발생하고  패치는 필수 설치, 옵션 설치로 분류되며 만약 패치가 잠긴 경우 불필요한 것으로 분류됩니다.

패치를 설치하여 해당 패키지를 새 버전으로 업데이트하여 충돌을 해결합니다.

패키지를 업데이트할 때 zypper는 항상 최신 버전을 목표로 합니다. 문제를 해결하거나 기능을 개선하기 위해 릴리스된 패치는 시스템에 설치되어 있는 패키지를 참조하는지 여부에 따라 적용되거나 불필요한 것으로 분류됩니다.

패치는 범주와 심각도로 분류됩니다.

범주에 일반적으로 사용되는 값은 보안, 권장, 옵션, 기능, 문서 또는 yast(security, recommended, optional, feature, document or yast)입니다.

심각도에 일반적으로 사용되는 값은 중요, 중요, 보통, 낮음 또는 미지정(critical, important, moderate, low or unspecified)입니다.

patch 명령은 기본적으로 선택적 패치 (범주 옵션 또는 기능)를 적용하지 않습니다. 실제로 모든 선택적 패치를 필요한 것으로 간주하려면 patch —with-optional을 지정해주어야 합니다. install 명령을 사용하여 특정 패치를 적용할 수 있습니다 (예 : zypper install patch:openSUSE-2014-7).

- 패턴

일부 기능을 설치하려면 패키지 그룹이 필요하거나 권장됩니다.

- 제품

제품을 설치하는 데 필요한 패키지 그룹을 의미합니다.

-소스코드 패키지

소스 코드 패키지 (.src.rpm). 이 유형은 검색 및 설치 명령에서 작동합니다.

- 애플리케이션

이 유형은 libzypp-17.7.0부터 더 이상 지원하지 않습니다.


위 유형들은 install, info 또는 search와 같은 여러 명령에서 --type 옵션의 인수로 사용할 수 있습니다. 또한 명령은 해석 가능 파일을 KIND : NAME으로 지정할 수 있습니다. (예 : patch:openSUSE-2014-7).


패키지 종속성

패키지는 다양한 방법으로 서로 의존합니다. 패키지는 일반적으로 다른 패키지를 요구하거나 권장할 수 있으며 반대로 충돌할 수도 있습니다.

패키지는 특정 하드웨어 또는 언어 설정을 지원할 수 있습니다.

Zypper는 종속성 solver를 사용하여 사용자의 요청을 충족시키기 위해 어떤 패키지를 설치해야하는지 확인합니다.

사용자가 직접 특정 버전의 패키지를 요청하지 않으면 solver가 합리적인 버전을 선택합니다. 작업을 해결할 때 solver의 일반적인 태도는 요청된 패키지의 최신 버전을 설치하고 필요에 따라 종속성을 추가 설치하거나 기존 종속성을 업데이트하는 것입니다.

이상은 종속성 처리에 대한 기본값입니다. 그러나 이 작업에 대하여 두 가지 다른 모드를 사용할 수 있습니다.

기존 설치된 패키지 유지 중점(Installed) 모드에서 solver는 설치된 패키지에서 필요한 만큼만의 약간의 변경 사항을 적용하는 데 중점을 둡니다.

종속성이 시스템에 대한 변경을 덜 필요로 하는 경우 즉 기존 시스템 환경의 유지를 필요 하는 경우 요청된 패키지의 이전 버전을 선택하는 것이 유효합니다. 이런 경우 solver는 이미 설치된 패키지를 업데이트하는 것을 피하려고합니다.

업데이트 중점(Update) 모드에서 solver는 요청된 패키지 및 모든 종속성을 가능한 한 많이 업데이트하는 데 중점을 둡니다. 이 모드에서 단일 패키지를 설치하면 시스템 마이너 업데이트가 빈번히 발생할 수 있습니다.

단일 명령의 경우 --solver-focus MODE 스위치를 사용하여 중점 모드를 설정할 수 있습니다. 유효한 모드는 작업, 설치 또는 업데이트(Job, Installed or Update)입니다. 시스템의 기본 모드를 변경하려면 [/etc/zypp/zypp.conf:solver.focus]를 원하는 값으로 설정하십시오.

자동 설치 패키지

사용자의 요청을 해결하기 위해 종속성 solver가 추가한 패키지는 '자동으로 설치'된 것으로 기억됩니다. 사용자가 설치한 패키지가 더 이상 없을 경우 나중에 제거할 수 있습니다 (예 : zypper remove --clean-deps).
S + tatus + 열에서 search 명령은 사용자 설치 패키지 (i+)와 자동 설치 패키지(i)를 구분합니다.


패키지 파일 충돌

두 패키지가 이름은 같지만 내용이 다른 파일을 설치하려고 하면 파일 충돌이 발생합니다. 이전 버전을 지우지 않고 최신 버전의 패키지를 설치하는 경우, 관련이 없는 두 패키지가 각각 동일한 이름의 파일을 설치하는 경우에 발생할 수 있습니다.

파일 충돌을 검사하려면 설치중인 각 패키지의 전체 파일 목록에 액세스해야하므로 zypper는 모든 패키지를 미리 다운로드 한 경우에만 파일 충돌을 확인할 수 있습니다 (--download-in-advance 참조). --dry-run을 수행하는 경우 패키지가 다운로드되지 않으므로 파일 충돌 검사는 패키지 캐시에서 사용할 수 없는 패키지를 건너뜁니다. 의미 있는 파일 충돌 검사를 받으려면 --dry-run을 --download-only와 함께 사용하십시오.

파일 충돌의 원인은 대개 패키지 설계가 부실하거나 패키지 제작자 간 조율이 미흡하기 때문으로 해결이 쉽지 않습니다. --replacefiles 옵션을 사용하면 zypper가 충돌하는 파일을 강제로 교체할 수 있습니다. 그럼에도 불구하고 파일이 교체된 패키지가 손상될 수 있습니다.