이전 - 다음

9. RPM을 사용한 패키지 관리

레드햇 패키지 관리자(RPM)는 누구나 사용이 가능하며 레드햇 리눅스뿐만 아니라 다른 유닉스 시스템에도 사용이 가능하다. 레드햇 사는 다른 업체들이 RPM을 분석하는 것과 업체 고유의 프로그램을 만드는데 이를 사용하는 것을 장려한다. 또한 RPM은 GPL상에서 재 배포가 가능하다.

RPM은 사용자에게 현재까지 나온 프로그램 중 가장 쉽게 여러 가지 시스템의 유지 보수를 위한 많은 기능을 제공한다. 프로그램을 설치, 제거, 판올림하는 모든 과정을 명령행 상에서 처리하며, 상세한 메시지를 통해 사용자가 시스템의 상황을 이해하기 쉽도록 도와준다. RPM은 설치된 패키지와 패키지에 속해 있는 파일의 데이터베이스를 구축하여 사용자가 설치된 패키지의 이상 유무를 확인할 수 있도록 하는 기능을 가지고 있다. 또한 판올림하는 동안 설정 파일을 별도의 방식으로 관리하기 때문에 사용자가 설정한 내용을 안전하게 보호해 준다. 이러한 것은 tar.gz로 묶여진 패키지로는 절대로 불가능한 일이다.

개발자 측면에서 RPM은 실행 파일 패키지만 만드는 것이 아니라 프로그램의 소스 코드를 사용자가 살펴볼 수 있도록 하는 소스 파일 패키지를 만들 수 있다.

이 과정은 꽤 간단하며, 하나의 설정 파일과 패키지 개발자의 추가적인 패치를 가지고 패키지를 만들도록 되어 있다. 원래의 원본 소스, 패키지 개발자의 추가적인 패치, 그리고 패키지 생성 명령으로 이루어진 이런 구조는 새로 버전이 올라간 소프트웨어에 대한 패키지의 관리를 쉽게 해준다.

9.1 RPM의 설계 목적

RPM을 어떻게 사용하는지 알기 위해서 RPM의 설계 목표를 알아두는 것이 도움이 된다.

판올림 가능

사용자가 시스템 전체를 다시 설치할 필요 없이 시스템의 구성 요소를 개별적으로 판올림할 수 있는 기능을 제공한다. 사용자가 RPM에 기반한 운영체제( 예를 들어 레드햇 리눅스)의 새로운 버전을 얻었다면, 사용자는 전체의 시스템을 다시 설치 할 필요가 없다. 사용자는 RPM을 사용하여 지능적이고 완전 자동화된 시스템 판올림을 수행 할 수 있다. 또한 패키지 내의 설정 파일은 판올림이 진행되는 동안 보호되기 때문에 사용자 고유의 설정 내용을 잃어버리지 않게 된다.

강력한 패키지 정보 질의

RPM은 매우 편리한 질의 선택 사항을 가지고 있다. 사용자는 전체의 패키지 데이터베이스를 통해 원하는 패키지나 파일을 찾을 수 있다. 또한 쉽게 어떤 파일이 어떤 패키지에 속해 있는지 또는 그것이 어디서 만들어 졌는지 등을 알 수 있다. 하나의 RPM 패키지가 포함하는 파일은 압축돼서 묶여 있다. 이 패키지 압축 파일은 유용한 패키지 정보와 패키지의 파일 목록을 포함하는 헤더를 가지고 있는데 이것을 통해 사용자는 개별적인 패키지의 정보를 쉽고 빠르게 알 수 있다.

시스템 점검

RPM의 또 다른 기능은 패키지를 점검 기능이다. 사용자는 어떤 패키지를 위한 중요한 파일을 실수로 지웠는지 알고 싶다면 간단히 패키지를 점검 할 수 있다. 이 점검을 통해 어떤 처음 설치된 상황과 다른지 아닌지를 알 수 있다. 만약 필요하다면 해당 패키지를 다시 설치하면 된다. 여기서도 사용자가 변경한 설정 파일은 설치가 진행되는 동안 보존된다.

원본 소스의 보호

RPM은 패키징을 할 때 소프트웨어 개발자의 원래 소스를 보호하면서 패키지 관리자의 소스 변경은 따로 적용하는 중요한 기능을 가지고 있다. RPM은 사용자에게 패키지를 만들 수 있는 프로그램 개발자의 원본 소스 파일, 패키지 개발자의 추가 패치 파일, 패키지를 생성시킬 때 필요한 스크립트 파일 등의 모든 파일을 제공한다. 이것은 몇 가지 이유에서 매우 큰 장점이다. 예를 들어 어떤 프로그램의 새 버전이 나왔을 때, 이것을 컴파일 하기 위해 시스템에 맞게 처음부터 다시 원본 소스를 직접 뜯어고칠 필요는 없다. 사용자는 필요한 부분을 알기 위해 패치 파일을 살펴보기만 하면 된다. 알맞게 생성된 소프트웨어를 얻기 위해 만들어지는 기본 컴파일용 원본 소스와 이것에 대한 변경 내용을 분리해서 저장하는 것은 이러한 과정을 보기 쉽게 해준다.

이러한 기능은 개발자를 위한 중요한 기능일 지 모른다. 하지만 이것은 사용자에게 높은 품질의 소프트웨어를 제공한다. 이러한 개념은 BOGUS 배포판에서 비롯된 것이다.

9.2 RPM의 사용

PRM은 기본적으로 5가지의 기본 사용 방법이 있다. 설치와 제거, 판올림과 패키지 정보 알아내기, 그리고 패키지 점검이다. 이 장은 각각의 모드에 대해 개괄적으로 살펴본다. 좀더 자세한 설명이 필요하다면 rpm --help를 실행하거나 man 페이지, 또는 RPM에 관련된 책을 살펴보기 바란다.

9.2.1 설치

RPM 패키지는 일반적으로 foo-1.0-1.i386.rpm과 같은 식의 이름을 가진다. 이런 이름은 패키지 이름(foo), 버전(1.0), 패키징 버전(1), 시스템 구조(i386)의 정보를 포함한다. 패키지를 설치하는 것은 다음과 같이 간단히 할 수 있다.

# rpm -ivh foo-1.0-1.i386.rpm

foo ############################################

화면에서 보다시피 RPM은 패키지 이름을 출력한다(설치에 있어서 반드시 파일 이름이 필요한 것은 아니다). 그리고 패키지 설치의 진행상황이 우물 정(#)자 표시로 화면에 나타나며 설치가 된다. 패키지의 설치는 간단하게 되어 있다. 하지만 사용자는 상황에 따라 몇 가지 오류 메시지에 직면하게 될 수 있다.

이미 패키지가 설치 됐을 때

패키지가 이미 설치된 상태에서 다시 설치한 경우 다음과 같은 오류 메시지를 보게 된다.

# rpm -ivh foo-1.0-1.i386.rpm

foo package foo-1.0-1 is already installed

error: foo-1.0-1.i386.rpm cannot be installed

사용자가 꼭 다시 설치를 하기를 원한다면 --placepkgs 선택 사항을 명령행에서 사용하면 된다. 이것은 RPM에게 위와 같은 오류를 무시하라고 하는 명령이다.

파일의 충돌

다른 패키지에서 이미 설치된 패키지의 파일과 똑같은 이름의 파일을 포함한 패키지를 설치하려고 할 때 사용자는 아래와 같은 오류 메시지를 받게 된다.

# rpm -ivh foo-1.0-1.i386.rpm

foo /usr/bin/foo conflicts with file from bar-1.0-1

error: foo-1.0-1.i386.rpm cannot be installed

이러한 오류 메시지를 무시하려면, 명령행에서 --replacefiles 선택 사항을 추가하면 된다.

의존성 오류

RPM은 패키지와 패키지 사이에 의존성을 설정할 수 있다.. 이런 의존성이란 어떤 패키지가 제대로 작동하기 위해서 다른 패키지가 필요한 경우를 말한다. 만약 의존성 문제가 해결되지 않은 상태에서 패키지를 설치하게 되면 사용자는 다음과 같은 메시지를 보게 된다.

# rpm -ivh bar-1.0-1.i386.rpm

failed dependencies:

foo is needed by bar-1.0-1

이러한 오류 메시지를 해결하기 위해서는 필요한 패키지를 먼저 설치해야 한다. 어떻게든 강제로 패키지를 설치하려고 한다면, 명령행에서 --nodeps 선택 사항을 추가하라 그러나 이것은 별로 좋은 일은 아니다. 대부분 패키지가 제대로 실행이 되지 않을 것이다.

9.2.2 제거

패키지의 제거는 설치하는 것처럼 간단하다.

# rpm -e foo

명령을 내릴 때 설치용 패키지 파일의 이름을 사용하는데 아니라 패키지 이름인 "foo" 을 사용한다는데 주의한다.

가끔 패키지를 제거하는 동안 의존성 오류가 발생하기도 한다. 이것은 제거하려는 패키지에 의존성이 걸려 있는 다른 패키지가 있을 경우에 일어난다. 예를 들어 아래와 같은 메시지를 받게 된다.

# rpm -e foo

removing these packages would break dependencies:

foo is needed by bar-1.0-1

이 경우 "bar" 패키지가 "foo"패키지에 의존성이 걸려 있는 경우이다. 이때 어떻게든 제거를 하려고 한다면 --nodeps 선택 사항을 쓰면 된다. 이것 역시 설치의 경우와는 반대로 제거한 패키지에 의존하고 있는 패키지가 정상적으로 동작하지 않게 된다.

9.2.3 판올림

판올림 역시 설치와 같이 간단하다.

# rpm -Uvh foo-2.0-1.i386.rpm

foo ####################################

위에서 본 설치와 다른 점은 RPM이 자동적으로 구 버전의 foo 패키지를 제거한다는 점이다. 사실 맨 처음 설치 할 때도 -U 선택 사항을 써서 설치할 수 있다. 이 선택 사항은 이전 버전의 설치된 패키지가 없으면 일반적인 설치를 수행하기 때문이다.

RPM은 지능적인 설정 파일에 대한 판올림을 수행하기 때문에 사용자는 설치 도중 다음과 같은 메시지를 보게 된다.

saving /etc/foo.conf as /etc/foo.conf.rpmsave

이렇게 이전 버전의 설정 파일을 버전이 올라간 패키지에서 바로 사용하지 않는 이유는 버전이 올라간 패키지의 설정 파일의 방식이 이전 버전의 방식과 호환이 되지 않는 경우가 있기 때문이다. 그래서 RPM은 사용자가 변경을 가한 설정 파일을 따로 저장한다. 그리고 새로운 설정 파일을 설치한다. 사용자는 새로운 설정 파일과 이전 설정 파일과의 차이점을 살펴 본 다음, 전에 사용했던 기능을 정상적으로 사용할 수 있도록 새로운 설정 파일에 이전 설정 파일의 내용을 참고해서 변경을 가해 주면 된다.

판올림은 실제로는 제거와 설치의 조합이기 때문에 사용자에게 설치나 제거 모드에서 발생할 수 있는 오류가 똑같이 발생할 수 있고, 여기에 한 가지가 더 추가된다.

만약 사용자가 현재 설치된 버전보다 이전 버전의 패키지로 판올림을 시도하면 다음과 같은 메시지를 보게 된다.

# rpm -Uvh foo-1.0-1.i386.rpm

foo package foo-2.0-1 (which is newer) is already installed

error: foo-1.0-1.i386.rpm cannot be installed

어떻게든 이런 식으로 판올림을 하고 싶다면 역시 명령행에서 --oldpackages 선택 사항을 추가하면 된다.

9.2.4 패키지 정보 알아내기

설치된 패키지의 데이터베이스로부터 정보를 알아내는 것은 rpm -q 명령을 사용한다.

이런 rpm -q foo와 같은 간단한 사용법은 이미 설치된 패키지 foo의 이름과 버전, 패키징 버전을 아래와 같이 알려준다.

# rpm -q foo

foo-2.0-1

패키지 정보를 알아내는데 있어서 패키지 이름을 사용하는 대신에 -q 선택 사항에 추가적인 선택 사항을 붙여 현재 알고 있는 내용만으로 사용자가 알고 싶은 해당 패키지의 정보를 알아낼 수 있다..

이것들을 패키지 선택 사항이라고 한다.

-a : 현재 설치된 모든 패키지를 알아내는데 사용된다.

-f <파일>: <파일>을 포함한 패키지가 무엇인지 알아낸다.

-F: 이 선택 사항은 파일 이름이 표준 입력으로 들어온다는 것 빼고는 -f 와 같다.

(예: find /usr/bin | rpm -qF)

-p <패키지 파일> : 설치 유무에 관계없이 패키지 파일 안에 있는 패키지 정보를 알아 내는 데 쓰임

-P : -p 선택 사항과 동일 입력만 표준 입력으로부터 받음

(예: find /mnt/cdrom/RedHat/RPMS | rpm -qP)

정보를 알아내고자 하는 패키지에 대해서 어떤 정보를 보여줄 것인지를 결정하는 여러 가지 방법이 있다. 이러한 선택 사항은 사용자가 관심 있는 정보를 선택하는데 사용된다. 이 선택 사항들은 정보 선택 사항이라고 한다.

-i : 패키지 이름, 패키지에 대한 짤막한 설명, 패키징 버전, 크기, 패키징 날짜, 설치된 날짜, 패키징한 업체 등의 정보를 보여준다.

-l : 패키지가 가지고 있는 파일의 목록을 보여준다.

-s : 설치된 패키지에 있는 모든 파일의 상태를 보여준다. 상태는 이상 없음(normal)과 사라짐(missing)의 두 가지로 보여준다.

-d : 패키지에서 문서(man pages, info pages, README...등등)로 표시된 파일의 목록을 보여 준다.

-c : 설정 파일로 표시된 파일의 목록을 보여준다. 이 파일들은 설치된 이후에 사용자가 패키지를 시스템에 따라 용도에 맞도록 변경할 수 있는 파일(sendmail.cf, passwd, inittab 등)들이다.

파일의 목록을 보여주는 선택 사항들에는 -v 선택 사항을 덧붙일 수 있는데 이것은 ls -l로 디렉토리 파일 목록을 볼 때와 비슷한 방식으로 파일 목록을 출력한다.

9.2.5 패키지 검증

패키지 검증은 패키지 파일이 가지고 있는 파일들의 정보와 설치된 패키지의 파일이 가진 정보를 이상이 없는지 비교해 보는 것이다. 패키지의 각각의 파일에 대해서 그룹, 소유자, 파일 형식, 허가권, MD5 체크섬, 크기를 비교한다.

rpm -V 명령은 패키지를 점검한다. 여기에 추가적으로 위에서 설명한 패키지 선택 사항을 붙여 점검하고 싶은 패키지를 기술함으로써 패키지 이름 외에 다른 정보로도 패키지를 점검할 수 있다. 가장 간단한 사용은 rpm -V foo와 같은 방법이다. 이 명령은 해당 패키지에 대해서 패키지가 처음 설치됐을 때와 같은 상태로 있는지 패키지의 모든 파일을 점검한다.

예를 들면

패키지가 포함하는 있는 파일 중에 어떤 특정 파일을 검증할 때는:

rpm -Vf /bin/vi

설치된 모든 패키지에 대해 점검할 경우에는

rpm -Va

설치할 패키지 압축 파일이 이미 설치된 패키지의 어떤 파일과 중복되는지 검증할 경우에는

rpm -Vp foo-1.0-1.i386.rpm

이 명령은 사용자의 시스템에 있는 RPM 데이터베이스가 손상을 입은 것 같을 때 유용하다.

모든 것이 검증에서 이상이 없으면 무소식이 희소식이라고 아무 것도 출력하지 않는다. 만약 점검에서 RPM 데이터베이스에 있는 정보와 설치된 파일의 정보가 서로 어긋나는 경우, 이러한 내용을 출력한다. 이 출력의 형식은 여덟 글자의 문자열로 점검 상태를 표시하고 다음에 해당 파일 이름을 표시한다. 각각의 필드에 표시된 문자에 따라 어떤 정보들이 차이가 나는지를 보여주는데 여덟 글자의 각각의 필드에 따라 어떤 정보가 차이가 난다는 것을 보여준다. "."은 점검을 이상 없이 통과했다는 표시이고 다음의 문자들이 나타나는 경우 해당 파일의 정보 중 어떤 것이 변경이 됐는지를 알 수 있다.

5 MD5 체크섬

S 파일 크기

L 심볼릭 링크

T 파일의 최종 변경 시간

D 장치

U 사용자

G 그룹

M 파일 허가권이나 파일 형식 등의 모드

만약 어떤 내용이라도 출력이 된다면 해당 패키지를 제거하고 다시 설치하든지, 또는 다른 방법으로 문제를 어떻게든 바로잡을지를 결정하는 것은 신중하게 판단해야 한다.

9.3 RPM을 사용한 유용한 팁

RPM은 사용자의 시스템을 진단하고 문제를 해결하고 관리하는데 매우 유용한 도구이다. 모든 선택 사항을 이해하는 가장 좋은 방법은 예제를 살펴보는 것이다.

사용자가 실수로 어떤 파일들을 지웠다고 가정해 보자, 하지만 사용자는 자신이 지운 것을 확실히 알지 못한다. 사용자가 전체의 시스템을 점검하고, 없어진 파일이 무엇인지 알고 싶다면 다음과 같이 입력하면 된다.

rpm -Va

어떤 파일이 없어지거나 변경됐다면, 사용자는 대개 설치를 하거나 제거하고 다시 설치를

해야 할 것이다.

알지 못하는 파일을 실행시키려고 하는 상황을 가정해 보자. 이 파일이 어느 패키지에 속해 있는 파일인지 찾기 위해서는 다음과 같이 입력한다.

rpm -qf /usr/X11R6/xjewel

출력은 아마도 다음과 같을 것이다.

xjewel-1.6-1

자, 이제 위에서 배운 두 가지 예제를 조합해 보자. /usr/bin/paste 파일이 문제가 있다고 가정해 보자. 이 파일을 포함한 패키지를 점검해 보고 싶지만 이 프로그램을 포함한 패키지를 알지 못할 경우

rpm -Vf /usr/bin/paste

위와 같이 입력하면 해당 패키지에 대한 검증을 할 것이다.

어떤 프로그램을 사용하는데 있어서 그것에 대한 좀더 많은 정보를 찾기를 원한다면 다음과 같이 입력하면 해당 프로그램(예를 들어 ispell)을 포함한 패키지가 가지고 있는 문서 파일을 찾을 수 있다.

rpm -qdf /usr/bin/ispell

이 명령에 대한 출력은

/usr/man/man4/ispell.4

/usr/man/man4/english.4

/usr/man/man1/unsq.1

/usr/man/man1/tryaffix.1

/usr/man/man1/sq.1

/usr/man/man1/munchlist.1

/usr/man/man1/ispell.1

/usr/man/man1/findaffix.1

/usr/man/man1/buildhash.1

/usr/info/ispell.info.gz

/usr/doc/ispell-3.1.18-1/README

이런 식으로 나올 것이다.

새로운 koules RPM을 구했지만 이것이 무엇인지 모를 때, 이것에 대한 어떤 정보를 알아내기 위해서는 다음과 같이 입력한다.

rpm -qip koules-1.2-2.i386.rpm

이 명령에 대한 결과는

Name : koules Distribution: Red Hat Linux Colgate

Version : 1.2 Vendor: Red Hat Software

Release : 2 Build Date: Mon Sep 02 11:59:12 1996

Install date: (none) Build Host: porky.redhat.com

Group : Games Source RPM: koules-1.2-2.src.rpm

Size : 614939

Summary : SVGAlib action game; multiplayer, network

Description :

This arcade-style game is novel in conception and

excellent in execution. No shooting, no blood, no guts,

no gore. The play is simple, but you still must develop

skill to play. This version uses SVGAlib to run on a

graphics console.

또한 koules RPM이 설치하는 파일이 어떤 것인지 알고 싶으면 다음을 입력한다.

prm -qlp koules-1.2-2.i386.rpm

그러면

/usr/man/man6/koules.6

/usr/lib/games/kouleslib/start.raw

/usr/lib/games/kouleslib/end.raw

/usr/lib/games/kouleslib/destroy2.raw

/usr/lib/games/kouleslib/destroy1.raw

/usr/lib/games/kouleslib/creator2.raw

/usr/lib/games/kouleslib/creator1.raw

/usr/lib/games/kouleslib/colize.raw

/usr/lib/games/kouleslib

/usr/games/koules

이렇게 설치될 파일 목록이 나온다.

이런 것들은 몇 가지 예에 지나지 않는다. 시스템을 사용함에 따라 점점 더 많은 RPM의 용도를 알게 될 것이다.

9.4 다른 RPM 자료를 찾을 수 있는 곳

RPM에 대한 좀더 상세한 정보는 매뉴얼 페이지, 도움말 화면(rpm --help)을 참고하라. 그리고 RPM에 대한 문서는 다음의 URL에서 구할 수 있다.

http://www.rpm.org/

Maximum RPM이라고 하는 RPM에 대한 책이 ps 파일로 레드햇사의 홈페이지와 서점에서 구할 수 있다. 이 책은 일반 사용자와 패키지 개발자 양 측면에서 RPM에 대한 상세한 정보를 포함하고 있다. 이 책은 또한 http://www.rpm.org/에서 온라인으로 볼 수 있다. RPM에 관련된 주제를 토론하는 메일링 리스트가 있다. 이것은 rpm-list@redhat.com로 불리며

http://www.redhat.com/support/mailing-lists/에 지금까지의 내용이 보관이 되어 있다. 이 메일링 리스트에 가입하려면 rpm-list-request@redhat.com로 제목에 subscribe라고 적어서 전자우편을 보낸다.


이전 - 다음