개요

yum 은 Yellowdog Updater, Modified 의 약자로 python 으로 작성한 대화형 패키지 관리 시스템으로 wikipedia 에 따르면 Duke 대학교에서 사용하는 Red Hat Linux 시스템의 관리를 편하게 하기 위해 만들어 졌다고 한다.


기존 rpm 의 문제점을 개선하기 위해 중앙 패키지 저장소를 두고 저장소를 통해 패키지를 검색하고 설치할 수 있으며 패키지간의 의존성까지 처리하여 rpm 을 바로 사용할 때에 비해 훨씬 손쉽게 패키지를 관리할 수 있으며 plugin 방식을 도입하여 yum 의 기능을 확장할 수 있게 설계하였다.

yum은 rpm 을 기반으로 하는 패키지 관리 시스템이므로 패키지의 설치, 삭제, 관리등 패키지 관리 기능은 rpm을 사용하고 있으며 중앙 저장소를 통한 패키지 설치/관리/삭제와 의존성을 해결하는 것에 집중하고 있다.


RHEL 이나 CentOS 같이 yum 을 패키지 관리자로 사용하는 리눅스 배포판은 전용 저장소를 제공하고 있으며 이외에 배포판에 포함되지 않은 패키지나 포함된 버전보다 최신 버전의 패키지를 제공하는 써드파티 저장소도 있다.

대표적인 써드파티 저장소로는 페도라 리눅스의 저장소인 EPEL(Extra Packages for Enterprise Linux - https://fedoraproject.org/wiki/EPEL) 저장소와 PHP 와 다른 패키지의 최신 버전을 제공하는 REMI 저장소(http://rpms.famillecollet.com/)와 웹 개발 패키지의 최신 안정 버전을 제공하기 위한 WebTatic 저장소(https://webtatic.com/) 등이 있다.

rpm 으로 패키지를 제공하는 개발사의 경우 전용 저장소를 제공하는 경우도 많이 있으며 MySQL은 5.5 부터는 yum 저장소를 제공하고 있으며 Application 성능 측정 도구인 NewRelic 이나 MySQL 기술 지원 업체인 Percona 등도 별도의 저장소를 통해 자사의 패키지를 설치하고 업데이트할 수 있도록 지원하고 있다.


그러면 yum 을 설정하고 저장소를 등록하고 설정하는 방법에 대해서 알아 보자.

yum 설정

yum.conf

yum 의 동작 방식은 /etc/yum.conf 파일을 통해 설정할 수 있으며 이 파일에는 하나의 [main] 섹션을 반드시 갖고 있어야 한다. 메인 섹션에는 yum의 동작을 지정하는 설정을 name=value 형식으로 기술하며 # 으로 시작되는 줄은 주석으로 처리된다.

일반적으로는 yum.conf 을 수정할 일이 거의 없지만 어떤 내용이 있는지 알면 yum 의 동작을 이해하는데 도움이 되므로 어떻게 구성되어 있는지 살펴 보자.

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
CODE
  • assumeyes
    패키지 설치나 삭제등 프롬프트를 띄우고 사용자의 선택을 받아야 하는 작업이 있을 경우 동작을 설정한다. value 에는 0 또는 1 을 지정할 수 있으며 0 일 경우 모두 사용자의 선택을 기다리며 1 일 경우 질문없이 진행한다. 당연하게 0 이 기본 설정이며 1로 설정할 경우 yum -y 로 실행한 것과 동일하다. 
  • cachedir
    yum 이 다운로드 받는 패키지를 어디에 저장할 지 여부를 설정하는 옵션으로 $basearch 는 "x86_64" 같은 시스템의 아키텍처 문자열로 치환되며(uname -m 과 동일) $releasever 는 RHEL이나 CentOS 의 메인 릴리스 버전(6 등)으로 치환된다. 64비트의 CentOS 6.5 를 설치했을 경우 cachedir 은 "/var/cache/yum/x86_64/6/" 이다.
  • keepcache
    0 또는 1로 설정 가능하며 0 으로 설정할 경우 패키지 설치가 성공하면 헤더와 패키지의 캐쉬를 유지하지 않으며 1이면 캐쉬를 유지한다. 0이 기본 값이다.
  • debuglevel
    디버깅을 위해 자세한 정보를 출력하는 옵션으로 정보 출력의 단계에 따라 0 부터 10까지 설정이 가능하다. 숫자가 클 수록 자세한 정보를 출력하며 0 으로 설정할 경우 정보를 출력하지 않으며 2가 기본 값이다.
  • logfile
    yum 이 로깅을 남길 로그 파일의 절대 경로를 설정하며 기본 값은 /var/log/yum.log 이다.
  • exactarch
    0 또는 1로 설정할 수 있으며 1로 설정했을 경우 업데이트시 이미 설치된 패키지와 아키텍처가 일치할 경우에만 업데이트하며 1이 기본 설정이다.
  • obsoletes
    업데이트 명령에만 영향을 미치는 설정으로 0 또는 1로 설정할 수 있으며 1로 설정했을 경우 쓸모없게 된 패키지는 업데이트 하지 않는다. 전체 배포판의 버전을 업그레이드하는 경우에 유용하며 1이 기본 설정이다.
  • gpgcheck
    1로 설정되었을 경우 GNU PG 로 전자 서명한 서명값의 유효성 및 위변조 여부를 검사하며 0 일 경우 검사하지 않는다. 신뢰받는 벤더가 배포한 패키지가 맞는지 확인하기 위해서는 1로 설정하는 게 좋으며 1이 기본 설정이며 gpgcheck 는 개별 저장소마다 별도로 설정이 가능하다.
  • plugins
    yum 은 플러그인을 통해 기능을 확장할 수 있으며 1 로 설정했을 경우 yum 의 플러그인을 사용할 수 있고 0 일 경우 사용할 수 없으며 1이 기본 설정이다.
  • installonly_limit
    대부분의 패키지는 새 버전이 나오면 설치하고 예전 버전을 덮어 쓰고 최신 버전 하나만 갖고 있게 되지만 예전 버전을 계속 갖고 있어야 하는 패키지들이 있다. 예로 리눅스 커널이 업데이트 되었다고 가정해 보자. 새로운 커널로 부팅했을 때 예상하지 못한 문제가 생겨서 예전 커널로 부팅해야 할 경우가 발생할 수 있으므로 커널 패키지는 예전 버전을 계속 남겨두어야 한다. installonly_limit 는 이렇게 새 버전을 설치해도 예전 버전을 갖고 있어야 하는 패키지가 동시에 갖고 있을 예전 버전의 최대 갯수를 지정하며 RHEL 6은 3, CentOS 6 은 5로 지정되어 있다.
  • bugtracker_url
    CentOS 에만 있고 RHEL 에는 없는 설정으로 버그가 발생했을 경우 보고할 URL 이다.
  • distroverpkg
    현재 사용하고 있는 배포판의 버전을 확인하기 위한 패키지를 설정하며 "yum whatprovides centos-release" 명령어로 결과를 확인할 수 있다. 
  • group_package_types
    설정 파일에는 없는 항목으로 yum 의 그룹 관련 명령어중 groupinstall,, groupremove 의 동작에 영향을 미치는 설정으로 mandatory, default,optional 세 가지의 설정이 가능하며 콤마를 구분자로 하여 여러 개를 지정할 수 있다. 그룹내 패키지들은 Mandatory, Default, Optional 로 분리되어 있으며 mandatory, default 로 설정되어 있으면 groupinstall 명령어 수행시 mandatory, default 패키지만 설치한다. 기본 설정은 "mandatory, default " 이다.


yum 저장소 설정

yum 저장소의 정보는 /etc/yum.repos.d/ 디렉터리 밑에 "저장소명.repo" 형식으로 저장되어 있으며 yum.conf 처럼 대괄호로 섹션 이름을 지정하고 섹션마다 name=value 형식으로 개별 설정을 할 수 있게 되어 있다.

CentOS 의 경우 /etc/yum.repos.d/CentOS-Base.repo 라는 파일에 기본 저장소의 정보가 기록되어 있으며 내용은 다음과 같다.

  • [base] 
    저장소를 식별할 수 있는 id 로 여기에서는 "base" 가 된다. yum 의 명령어중에 저장소 목록을 보거나 특정 저장소를 지정하여 패키지를 설치하는등의 저장소 관련 작업을 할 경우 필수 옵션으로 저장소의 id 를 넘겨주어야 하며 그 때 이 id 를 사용하면 된다.
  • name
    저장소의 이름으로 $releasever 는 CentOS 의 버전인 6 으로 치환된다.
  • baseurl
    패키지를 설치하거나 업데이트시 사용할 기본 저장소의 URL 을 지정하며 fastestmirror 를 사용하여 동적으로 저장소를 찾지 않고 고정된 URL 의 저장소를 사용할 경우 mirrorlist 를 주석 처리하고 baseurl 을 설정해 주면 된다.
  • mirrorlist
    RHEL 은 레드햇이 제공하는 중앙 저장소의 URL 이 고정되어 있지만 CentOS 는 나라별로 미러 사이트들이 다르므로 빠른 속도로 저장소에 접속하려면 CentOS 를 설치한 국가에 따라 저장소 URL이 달라져야 한다. mirrorlist 가 설정되어 있으면 fastestmirror 라는 yum 플러그인이 동작하여 가장 빠른 미러 사이트를 찾아서 저장소 URL 을 변환해 준다.
  • enabled
    1로 설정되어 있으면 이 저장소를 사용하겠다는 의미이며 0 일 경우 사용하지 않겠다는 의미이다. --enablerepo, --disablerepo 옵션으로 실행 시점에 사용 여부를 변경할 수 있다.
  • gpgcheck
    yum 으로 패키지 설치시 GPG(GNU Privacy Guard)  서명 검증을 할 지 여부이며 yum.conf 처럼 기본 설정은 서명 검증하는 모드인 1이며 0일 경우 서명 검증을 하지 않는다.
  • gpgkey
    gpgcheck 를 할 경우 사용할 서버의 공개키 경로를 설정한다. 일반적으로 저장소를 제공하는 측에서 GPG 키를 같이 배포하므로 저장소 추가시 공개키를 같이 받아서 설정해 주면 된다.

위에서 본 바와 같이 저장소 설정 파일은 텍스트 파일이므로 새로운 저장소 정보가 필요할 경우 위 설정을 참고하여 에디터로 작성후에 /etc/yum.repos.d 디렉터리내에 .repo 확장자를 갖는 파일로 저장하면 된다.

또는 yum 저장소를 통해 소프트웨어를 배포하는 회사의 경우 저장소 정보를 rpm 형식의 파일로 배포하는 경우가 많으므로 이 파일을 설치해도 되며 후자의 경우 rpm 패키지에 gpgkey 도 같이 배포하므로 .repo 파일을 편집하고 gpgkey 를 구해야 하는 과정이 없으므로 편리하다. 

주요 명령어와 옵션

yum 은 yum command option 형식으로 사용하며 option 은 생략할 수 있지만 명령은 생략할 수 없으며 명령은 대쉬 문자를 사용하지 않고 옵션만 대쉬 문자를 사용한다.

많이 쓰이는 주요 옵션들은 다음과 같다.

옵션은 대쉬 문자로 시작하므로 명령어와 확연히 구분되므로 어느 위치에 있어도 된다. 다음 구문은 모두 동일한 의미이다.

yum install -y package
# yum -y install package
# yum install package -y

도움말을 보는 명령어인 "help"는 yum help 를 입력하면 yum 의 전체 명령어와 옵션 목록을 나열하며 help 뒤에 명령어를 입력하면 명령어의 하위 명령어들을 출력한다.

다음은 등록된 저장소 목록을 표시하는 명령인 repolist 의 하위 명령을 보는 help 실행 예제로 대괄호 안에 있는 문자열인 "[all|enabled|disabled]"은  repolist 명령은 all, enabled, disable 세 가지 하위 명령어를 사용할 수 있다는 의미이다.

yum help repolist


repolist [all|enabled|disabled]

Display the configured software repositories

이제 yum 의 개요와 용법에 대해서 대략적으로 살펴 보았으니 yum 명령어를 사용하여 패키지를 관리하는 방법에 대해서 알아 보도록 하자.