32.2. RPM 사용하기

RPM에는 다음과 같은 다섯가지 기본 작업 모드가 있습니다 (패키지 개발 제외): 설치 모드, 제거 모드, 업그레이드 모드, 질의 모드, 검증 모드. 이 섹션에서는 각 모드에 대한 개요를 설명해 보겠습니다. 만일 보다 자세한 사항이나 옵션을 원하신다면, rpm --help 명령을 시도해 보십시오. RPM에 대한 보다 많은 정보를 원하시면 32.5 절을 미리 읽어보시기 바랍니다.

32.2.1. RPM 패키지 찾기

RPM을 사용하시기 전에 어디서 RPM을 찾을 것인지를 아셔야 합니다. 인터넷으로 검색하시면 많은 RPM 저장소(repository)를 찾으실 수 있지만, Red Hat이 개발한 RPM 패키지를 구하신다면 다음의 위치에서 찾으실 수 있습니다:

32.2.2. 설치하기

RPM 패키지는 일반적으로 foo-1.0-1.i386.rpm와 같은 파일명을 가지고 있습니다. 이 파일명에는 패키지명 (foo), 버전 (1.0), 배포판 (1)과 구조 (i386)가 포함됩니다. 패키지를 설치하시려면 루트로 로그인하신 후 쉘 프롬프트에서 다음과 같은 명령을 입력하시면 됩니다:

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

만일 설치가 성공적이라면, 다음과 같은 화면이 출력됩니다:

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [100%]

여러분이 보시듯이 RPM은 패키지 이름을 출력 후 패키지 설치가 진행되는 상황을 연속적인 해시(#) 표시를 사용하여 보여줍니다.

RPM 4.1 버전부터는 패키지를 설치하거나 업그레이드시 패키지의 서명을 확인합니다. 만일 패키지 서명 검증 작업이 실패한다면, 다음과 같은 오류 메시지가 나타날 것입니다:

error: V3 DSA signature: BAD, key ID 0352860f

만일 새로?? 헤더-전용 서명일 경우, 다음과 같은 메시지가 나타납니다:

error: Header V3 DSA signature: BAD, key ID 0352860f

서명을 검증하는데 필요한 적절한 키가 설치되어 있지 않다면, NOKEY라는 항목이 포함된 메시지가 나타날 것입니다. 예:

warning: V3 DSA signature: NOKEY, key ID 0352860f

패키지의 서명을 확인하는 방법에 대한 보다 많은 정보를 원하신다면 32.3 절을 참조하시기 바랍니다.

참고알림
 

커널 패키지를 설치하신다면, rpm -ivh 명령을 사용하셔야 합니다. 보다 자세한 사항은 30 장을 참조하시기 바랍니다.

패키지를 설치하는 과정은 매우 간단하지만, 가끔씩 오류 메시지가 나타날 수도 있습니다.

32.2.2.1. 이미 설치된 패키지

만일 동일한 버전의 패키지가 이미 설치되어 있다면, 다음과 같은 메시지가 나타납니다:

Preparing...                ########################################### [100%]
package foo-1.0-1 is already installed

그래도 패키지를 계속 설치하기를 원하신다면, --replacepkgs 옵션을 사용할 수 있습니다. 이 옵션은 RPM에게 오류를 무시하도록 지시합니다:

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

만일 RPM에서 설치된 파일이 삭제되었거나 RPM에서 원래 설정 파일 설치하실 경우, 이 옵션이 유용하게 사용됩니다.

32.2.2.2. 파일간 충돌

다른 패키지에 의해서 이미 설치된 파일을 포함하는 패키지나 동일 패키지의 이전 버전을 설치하려고 하시면, 다음과 같은 메시지가 나타날 것입니다:

Preparing...                ########################################### [100%]
file /usr/bin/foo from install of foo-1.0-1 conflicts with file from package bar-2.0.20

RPM이 이러한 오류를 무시하도록 지시하기 위해서는, 다음과 같이 --replacefiles 옵션을 사용하십시오:

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

32.2.2.3. 해결되지 않은 의존성 문제

RPM 패키지가 다른 패키지에 "의존"할 경우가 있습니다. 즉 다른 패키지가 설치되어야 RPM 패키지가 제대로 실행될 수 있다는 것을 의미합니다. 만일 해결되지 않은 의존성이 가진 패키지를 설치 시도하시면, 다음과 같은 메시지가 나타날 것입니다:

Preparing...                ########################################### [100%]
error: Failed dependencies:
        bar.so.2 is needed by foo-1.0-1
    Suggested resolutions:
        bar-2.0.20-3.i386.rpm

공식 Red Hat을 설치하신다면, 이러한 패키지 간의 의존성 문제를 해결해 주셔야 합니다. 요청된 패키지를 Red Hat Linux CD-ROM이나 Red Hat FTP 사이트 (또는 미러 사이트)에서 찾으신 후 다음과 같이 명령에 첨가하여 사용하십시오:

rpm -ivh foo-1.0-1.i386.rpm bar-2.0.20-3.i386.rpm

두 패키지가 성공적으로 설치되었다면, 다음과 같이 출력될 것입니다:

Preparing...                ########################################### [100%]
   1:foo                    ########################################### [ 50%]
   2:bar                    ########################################### [100%]

의존성 문제를 해결하도록 요청되지 않는 경우에는 --redhatprovides 옵션을 사용하여 필요한 패키지를 알아보실 수 있습니다. 이 옵션을 사용하기 위해서는 rpmdb-redhat 패키지를 설치하셔야 합니다.

rpm -q --redhatprovides bar.so.2

bar.so.2 파일을 포함한 패키지가 rpmdb-redhat 패키지에서 설치된 데이터베이스에 존재한다면, 패키지의 이름이 화면에 출력될 것입니다:

bar-2.0.20-3.i386.rpm

의존성 문제를 해결하지 않고 설치를 계속 진행하시려면 --nodeps 옵션을 사용하십시오. (패키지가 적절히 작동하지 않을 가능성이 있으므로 좋은 생각이 아닙니다).

32.2.3. 제거하기

패키지 제거하기는 설치하기 만큼이나 간단합니다. 쉘 프롬프트에서 다음 명령을 입력하십시오:

rpm -e foo

참고알림
 

위의 예시에서는 원래 패키지 파일 이름인 foo-1.0-1.i386.rpm을 사용하지 않고 패키지 이름foo를 사용하였습니다. 패키지를 제거하기 위해서는, foo를 원래 패키지의 이름으로 교체해 주시기 바랍니다.

만일 제거하려는 패키지에 또 다른 설치된 패키지가 의존하고 있는 경우 패키지를 제거시 의존성 오류가 발생할 수 있습니다. 예를 들면:

Preparing...                ########################################### [100%]
error: removing these packages would break dependencies:
        foo is needed by  bar-2.0.20-3.i386.rpm

RPM이 이러한 오류를 무시하고 계속 패키지 삭제 작업을 진행하도록 하시려면, --nodeps 옵션을 사용하시면 됩니다. (하지만 이 방법은 패키지가 적절히 작동하지 않을 가능성이 있으므로 좋은 생각이 아닙니다).

32.2.4. 업그레이드하기

패키지 업그레이드는 설치하기와 유사합니다. 쉘 프롬프트에서 다음 명령을 입력하십시오:

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

위의 업그레이드 명령을 사용하시면 RPM은 자동으로 foo 패키지의 이전 버전을 제거한 후 새로운 버전으로 업그레이드합니다. 패키지를 설치하실 때 -U 옵션을 사용하시기 바랍니다. 이 옵션은 이미 설치된 이전 버전이 없는 경우에도 작용합니다.

RPM은 설정 파일을 사용하여 지능화된 패키지 업그레이드를 수행합니다. 따라서 다음과 같은 메시지를 보여줄 경우가 있습니다:

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

이 메시지는 여러분이 수정하신 설정 파일은 패키지에 있는 새로운 설정 파일과 "이후 버전 호환성"이 없을 수도 있기 때문에 RPM은 원래 파일을 저장하고 새로운 설정 파일을 설치했다는 것을 의미합니다. 시스템이 계속해서 제대로 기능할 수 있도록 하기 위해서는, 여러분은 되도록 빨리 두가지 설정 파일 사이의 차이점을 조사하고 문제를 해결하셔야 합니다.

업그레이드는 제거하기와 설치하기의 조합이라고 할 수 있습니다. 따라서 RPM 업그레이드 과정에서 패키지 삭제 오류 또는 설치 오류가 발생할 가능성이 있으며, 더불어 다음과 같은 문제가 발생할 수도 있습니다. 예를 들어 만일 여러분이 이전 버전 번호를 가진 패키지로 업그레이드를 시도한다고 판단되면, RPM은 다음과 같은 메시지가 보여줍니다:

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

RPM이 이 오류 메시지를 무시하고 계속 업그레이드 작업을 진행하도록 하시려면, 다음과 같이 --oldpackage 옵션을 사용하십시오:

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

32.2.5. 다시 읽기

패키지를 다시 읽기는 패키지 업그레이드와 유사합니다. 쉘 프롬프트에서 다음 명령을 입력하십시오:

rpm -Fvh foo-1.2-1.i386.rpm

RPM의 다시 읽기 옵션을 사용하시면, 명령 행에서 지정된 패키지 버전을 시스템 상에 이미 설치된 패키지 버전에 대조하여 검사합니다. 이미 설치된 패키지의 최신 버전이 RPM의 다시 읽기 옵션에 의해 처리되면, 해당 패키지는 최신 버전으로 업그레이드됩니다. 하지만 동일한 이름의 패키지가 이미 설치되어 있지 않다면, RPM의 다시 읽기 옵션은 패키지를 설치하지 않습니다. 이것이 RPM 업그레이드 옵션과의 차이점입니다. 업그레이드 옵션은 이전 버전의 패키지가 이미 설치되어 있지 않은 경우에도 패키지를 설치합니다.

RPM의 다시 읽기 옵션은 단독 패키지나 패키지 그룹에서 작용합니다. 많은 패키지들을 다운로드받으신 후 시스템 상에 이미 설치된 패키지만을 업그레이드할 계획이라면, 다시 읽기 옵션을 사용하시기를 권장합니다. 다시 읽기 옵션을 사용하시면, 이전에 RPM을 사용하여 다운로드 받은 그룹 중에서 원치않은 패키지를 직접 삭제하실 필요가 없습니다.

이러한 경우에 간단히 다음과 같은 명령을 사용할 수 있습니다:

rpm -Fvh *.rpm

RPM은 자동으로 이미 설치된 패키지만을 업그레이드합니다.

32.2.6. 질의

rpm -q 명령을 사용하여 설치된 패키지의 데이터베이스에 대한 질의를 수행할 수 있습니다. rpm -q foo 명령을 입력하시면, 다음과 같이 패키지명, 버전과 설치된 패키지 foo의 배포 번호가 출력될 것입니다:

foo-2.0-1

참고알림
 

위의 예시에서 패키지 이름으로 foo를 사용했다는 것에 주의해 주십시오. 패키지에 대한 질의를 수행하기 위해서는 foo를 실제 패키지 이름으로 교체하셔야 합니다.

패키지명을 지정하는 대신 여러분은 다음과 같은 옵션을 -q와 함께 사용하여 질의를 수행할 패키지를 지정할 수 있습니다. 이러한 옵션들은 패키지 지정 옵션이라고 불립니다.

질의된 패키지 정보가 표시될 형식을 지정하는데는 여러가지 방법이 있습니다. 다음에 나온 옵션들은 패키지 정보가 표시될 형식을 선택하는데 사용됩니다. 이러한 옵션들은 정보 선택 옵션이라고 불립니다.

파일 목록을 보기에 익숙한 ls -l 형식으로 출력하기 위해서는 파일 목록 보기 명령에 -v 옵션을 추가하여 사용할 수 있습니다.

32.2.7. 검증

패키지 검증은 패키지에 설치된 파일에 저장된 내용과 원래 패키지의 내용을 비교합니다. 검증 옵션을 사용하시면, 여러가지 정보들, 즉 개별 파일의 크기, MD5 sum, 권한, 유형, 소유권, 그룹 소유권 등을 빅하게 되며 어떠한 변화가 있을 경우 출력합니다.

rpm -V 명령은 패키지를 검증합니다. 패키지 검증에 사용할 수 있는 옵션은 패키지를 질의에 사용된 패키지 선택 옵션과 같습니다. 검증의 간단한 예로서 rpm -V foo는 foo 패키지에 저장된 모든 파일들과 원래 설치된 파일을 비교합니다. 예로 들면:

만일 검증 결과 아무런 변화가 없다면 출력되는 것이 없습니다. 비교 결과 문제점이 발견되면 결과를 출력합니다. 출력 결과는 8글자의 문자열을 출력하고 다음에 c 가 나오면 설정 파일임을 뜻하며 다음에는 파일 이름을 차례로 한줄로 출력합니다. 처음의 각 8글자들은 RPM 데이터베이스와 각 특성을 비교한 결과를 출력하게 됩니다. 점 한개 (.)는 아무 이상이 없다는 것을 의미합니다. 만일 비교 결과 문제점이 발견되면 다음과 같은 문자가 나타납니다:

이상과 같은 결과가 출력되면, 여러분은 패키지를 제거하거나 재설치할 것인지 또는 다른 방식으로 문제를 해결할 것인지를 잘 결정하셔야 합니다.