yum 으로 패키지 관리하기
설치 (install)
패키지를 설치하는 명령은 install 이며 설치할 패키지 명을 적어주면 된다. install 명령은 설치하려는 패키지가 의존하고 있는 패키지가 현재 시스템에 없을 경우 해당 패키지까지 자동으로 설치해 준다.
아파치 웹 서버에서 HTTPS 서비스를 서비스를 제공할 수 있게 해주는 mod_ssl 패키지의 경우 아파치 웹 서버(httpd) 패키지가 필요하므로 "yum install mod_ssl" 명령어를 실행할 경우 자동으로 의존성을 확인하여 httpd 도 같이 설치하게 된다.
설치시 패키지명에 * 를 지정하면 해당 패키지명으로 시작하는 모든 패키지를 설치하게 된다. 예로 다음 명령은 "httpd", "httpd-devel", "httpd-manual" 패키지를 모두 다 설치한다.
# yum install httpd*
삭제 (remove)
erase 명령 또는 remove 명령으로 설치한 패키지를 삭제할 수 있으며 설치와 마찬가지로 삭제시 의존성있는 패키지까지 자동으로 삭제하게 된다. 예로 httpd 패키지를 삭제할 경우 httpd 에 의존하는 "httpd-devel", "httpd-manual", "mod_ssl" 패키지도 같이 삭제된다.
다음은 "yum install httpd" 명령으로 httpd 패키지를 삭제하는 화면으로 의존하는 패키지들의 목록을 출력하고 같이 삭제된다고 알려주고 있으며 y 를 입력할 경우 총 4개의 패키지가 삭제된다.
업데이트 (update)
버그를 수정했거나 보안 취약점을 해결한 버전이 출시되었을 경우 update 명령으로 패캐지를 업데이트할 수 있다. update 명령뒤에 패키지명을 줄 경우 해당 패키지만 업데이트하지만 패키지명이 생략되면 전체 시스템을 업데이트하게 된다.
전체 시스템을 업데이트할 경우 OS의 마이너 버전이 변경될 수 있으므로 주의해야 한다. 예로 CentOS 6.4을 설치한 후에 "yum update" 명령어를 실행한 후 재부팅하면 본 책을 작성하는 시점의 최종 버전인 6.5로 OS 의 버전이 갱신된다.
시스템 업데이트는 마이너 버전끼리만 가능하며 메이저 버전으로는 업데이트 되지 않으므로 6.5 버전에서 "yum update" 를 수행해도 7.0 으로 메이저 버전이 변경되지는 않는다.
다음은 mod_ssl 의 업데이트를 설치하는 예제이며 업데이트가 없을 경우 아래와 같이 업데이트할 패키지가 없다고 표시된다.
업데이트 확인 (check-update)
업데이트할 패키지가 있는지 먼저 확인하고 그 결과에 따라 어떻게 할 지 결정하고 싶을 때 "check-update" 명령어를 사용하면 업데이트 가능한 패키지가 있는지 확인할 수 있다. "update" 와 마찬가지로 패키지가 생략되면 시스템에 설치된 전체 패키지중에 업데이트 가능한 패키지들의 목록을 출력한다.
캐쉬 정리 (clean)
yum 은 빠른 처리를 위해 메타 데이타와 패키지 정보, 플러그인 정보등을 캐쉬해 놓으며 clean 명령어를 사용하면 캐쉬된 데이타를 삭제한다. clean 명령어 뒤에 어떤 하위 명령어를 사용해야 할 지 알아 보기 위해 "yum help clean" 명령을 실행해 보자.
clean 명령어 뒤에 headers, packages 등 정리할 캐쉬 종류를 지정할수 있으며 모든 캐쉬 데이타를 삭제할 경우 all 을 적어주면 된다는 것을 알수 있다. 다음은 패키지 정보와 메타 데이타를 정리하는 clean 명령어 사용 예제이다.
# yum clean packages metadata
저장소 목록보기 (repolist)
현재 yum 에 등록된 저장소의 목록을 확인하려면 /etc/yum.repos.d 디렉터리내의 .repo 확장자를 갖는 파일의 갯수를 셀 수도 있겠지만 repolist 명령을 사용하면 더 손쉽게 저장소 목록을 볼 수 있으며 해당 저장소에 등록된 패키지 갯수까지 확인해 볼 수 있다. repolist 명령은 all, enabled, disabled 세 개의 하위 명령어가 있고 생략할 경우 기본 명령은 enabled로 이 경우 /etc/yum.repos.d 디렉터리내 .repo 파일중에 enabled=1 로 설정된 저장소만 표시한다.
다음은 CentOS 를 설치한 후 저장소 목록이다.
패키지 검색 (search)
늘 설치하려는 패키지의 정확한 이름을 기억하고 있지는 않을 것이다. "search" 명령을 사용하면 저장소에 원하는 패키지가 있는지 확인할 수 있다. search 명령은 기본적으로 패키지의 정보중 이름과 요약 항목에서 사용자가 입력한 검색어를 대소문자 구분없이 찾지만 해당되는 패키지가 없을 경우 패키지의 설명(description) 항목에서도 검색을 진행한 후에 결과를 출력해 준다.
정확한 검색을 위해 여러 단어를 사용할 수 있다. "search 문자열1 문자열2" 와 같이 입력하면 두 개의 문자열이 모두 있는 패키지를 찾게 되므로 PHP 용 MySQL 모듈을 찾고 싶을 경우 다음과 같이 "yum search mysql php" 을 입력하면 된다.
목록 보기 (list)
list 명령을 사용하면 다양한 방식으로 패키지들의 개략적인 정보 목록을 출력할 수 있다. 먼저 "yum help list" 명령어로 사용 가능한 하위 명령어 목록을 확인해 보자.
list 명령어는 all, installed,updates 등의 하위 명령어를 사용할 수 있는 것을 확인할 수 있다. 대문자인 PACKAGE 는 자체가 하위 명령이 아니고 PACKAGE 항목에 정보를 확인할 패키지의 이름을 주면 되며 * 표를 사용할 수 있다.
다음 "yum list httpd*" 명령은 httpd 로 시작되는 모든 패키지의 정보를 출력하며 설치된 항목은 "Installed Packages" 에 표시하며 설치 가능한 패키지들은 "Available Packages" 항목에 표시한다.
많이 사용하는 list 의 하위 명령어를 더 살펴 보자. 현재 시스템에 설치한 모든 패키지 목록을 표시하려면 "installed" 하위 명령어를 사용하면 된다. "updates" 하위 명령어는 "yum check-update" 와 동일한 의미를 갖게 되며 "recent" 는 저장소에 가장 최근에 추가된 패키지의 목록을 출력한다.
정보 보기 (info)
info 명령어를 사용하면 패키지의 자세한 정보를 볼 수 있으며 rpm 의 info 명령어와는 다르게 패키지의 설치 여부와 저장소 정보도 같이 표시된다. 다음은 httpd 패키지의 정보를 보는 예제로 설치한 패키지는 Repo 항목이 "installed" 로 표시되며 "From Repo" 항목에는 설치한 저장소명인 updates 가 표시된다.
제공되는 패키지 찾기 (provides)
rpm 의 질의 옵션중 특정 경로에 있는 파일이 속한 패키지를 찾는 옵션인 -f, --file 옵션을 기억하고 있을 것이다. yum 은 "provides" 명령어를 통해 어떤 파일이 어떤 패키지에 있는지 찾을 수 있다.
패키지에 대한 메타 데이타를 갖고 있으므로 rpm 과 달리 로컬에 설치되어 있지 않았어도 파일 경로를 입력하면 패키지를 찾아 준다. 경로는 절대 경로를 입력하거나 또는 별표를 입력하여 포함되는 단어가 있을 경우 일치하도록 할 수도 있다.
/etc/httpd/conf/httpd.conf 파일이 어떤 패키지에서 제공되는지 확인하기 위해 "yum provides '*/httpd.conf'" 명령어를 실행하여 패키지를 찾아 보자.
의도와는 다르게 piranha 라는 패키지가 결과에 포함 되었는데 그 원인은 /etc/sysconfig/ha/conf/ 에도 같은 이름의 파일이 존재하기 때문이다. 이럴 경우 "yum provides '/etc/http*/httpd.conf'" 와 같이 경로 필터를 설정하면 원하는 결과를 얻을 수 있다.
로컬 설치 (localinstall)
어떤 소프트웨어들은 rpm 으로만 제공하고 별도의 yum 저장소를 제공하지 않는 경우가 있다. 이런 소프트웨어는 "rpm -ivh" 로 설치하지 말고 localinstall 명령어를 사용하여 설치하면 yum 의 트랜잭션과 히스토리 기능같은 yum 의 장점을 활용할 수 있으며 패키지 관리가 더 용이하므로 rpm 을 바로 사용하는 것 보다는 yum 을 사용하는 것을 권장한다.
설치시 rpm으로 패키징한 제조사의 서명이 없거나 또는 서명을 검증할 공개키가 없어서 검증 에러가 날수 있으므로 공개키를 구해서 추가하거나 신뢰하는 벤더가 제공하는 rpm 이라면 --nogpgcheck 옵션으로 전자서명 검증을 건너 뛸 수 있다.
다음은 서브버전 1.8 패키지인 subversion-1
.8.5-1.x86_64.rpm,
를 다운로드해서 "yum localinstall mod_dav_svn* subversion* serf*" 명령으로 설치하는 예제이다. subversion-tools-1
.8.5-1.x86_64.rpm,
mod_dav_svn-1
.8.5-1.x86_64.rpm,serf-1.3.2-2.x86_64.rpm
그룹 관리 (grouplist)
yum 은 패키지를 용도에 따라 그룹으로 묶어 놓았으므로 그룹 단위로 패키지를 관리할 수 있다. 그룹 관련 명령어들은 모두 group 으로 시작하며 바로 뒤에 주요 명령어인 install, list, info, remove 명령어를 붙이면 그룹 단위로 해당 명령을 수행하게 된다.
먼저 전체 패키지 그룹의 목록을 보기 위해서 "yum grouplist "를 실행하면 다음과 같이 "설치된 그룹"과 "설치된 언어 그룹", 그리고 "설치 가능한 그룹"과 "설치 가능한 언어 그룹" 이 표시된다.
패키지 그룹에 대한 자세한 정보를 보려면 groupinfo 명령을 사용하면 되며 그룹명에 공백이 있을 경우 제대로 인식할 수 있게 따옴표로 감싸 주어야 한다.
yum groupinfo "웹 서버" 명령으로 웹 서버 패키지 그룹에 대한 정보를 확인해 보자.
그룹내 패키지는 필수 패키지(웹서버 그룹에서는 httpd가 해당된다.), 기본 패키지, 옵션 패키지로 나뉘어 진다.
groupinstall 명령어를 사용하면 패키지 그룹을 설치할 있으며 이때 그룹내 필수 패키지와 기본 패키지는 설치하지만 옵션 패키지들은 설치하지 않으며 이는 전 절에서 설명한 yum.conf 의 "group_package_types" 항목의 기본 설정이다.
예를 들면 yum groupinstall "웹 서버" 명령은 필수 패키지인 httpd와 기본 패키지인 crypto-utils, httpd-manual, mod_perl 등은 설치하지만 옵션 패키지인 certmonger, memcached 등은 설치하지 않으므로 옵션 패키지가 필요하다면 install 명령어에 개별 패키지명을 입력하여 설치해야 한다.
패키지 그룹을 삭제하려면 groupremove 명령어를 사용하면 되며 groupinstall 과는 달리 옵션 패키지도 모두 삭제하게 된다. 이는 옵션 패키지들은 필수 또는 기본 패키지에 의존성이 있기 때문이다.
yum 플러그인
yum 은 플러그인으로 기능을 확장할 수 있으며 기본적으로 CentOS 의 빠른 미러 사이트를 찾아주는 fastestmirror 과 보안 기능을 제공하는 yum security 플러그인 두 개가 기본 설치되어 있다. 위에서 익힌 search 명령어를 활용하여 "yum search yum plugin" 을 실행하면 전체 yum 플러그인 목록을 확인할 수 있으니 플러그인 설명을 보며 필요한 플러그인이 있다면 설치해 보기 바란다.
기본 설치되지 않는 플러그인중에 유용한 플러그인은 패키지의 변경 이력을 볼 수 있는 changelog 플러그인과 패키지를 설치하지 않고 다운로드만 해주는 downloadonly 플러그인이다.
두 플러그인의 사용법을 간단하게 알아 보기 위해 먼저 플러그인을 설치하자.
# yum install yum-plugin-changelog yum-plugin-downloadonly -y
changelog 플러그인
패키지의 변경 이력을 볼 수 있는 플러그인으로 rpm 명령어의 질의 모드의 --changelog 옵션과 유사하다고 볼 수 있다.사용법은 changelog 뒤에 날짜를 입력하면 그 날짜 이후의 변경 내역을 출력하며 all 이라고 하면 모든 변경 이력을 출력한다. 날짜는 다음과 같이 YYYY-MM-DD 형식으로 입력하는게 간편하다. 다음은 "yum changelog 2014-05 openssl" 명령어로 openssl 패키지의 2014년 5월 이후의 변경 이력을 확인하는 방법이다.
downloadonly 플러그인
패키지를 설치하지 않고 rpm 을 다운로드만 해주는 플러그인으로 사용하려면 install 이나 update 명령어에 --downloadonly 옵션을 붙여서 yum 을 실행하면 된다.
# yum install postfix -y --downloadonly
다운로드 받은 패키지는 yum.conf 의 cachedir 항목에 지정된 디렉터리에 저장되며 64비트의 CentOS 6 을 사용하는 경우 "/var/cache/yum/x86_64/6/updates/packages/" 에 저장된다.