리눅스에서 소프트웨어를 제거하거나 업그레이드할 때 의존성 문제로 곤란해진 경험이 한 번쯤은 있을 것입니다. RPM 기반 배포판(RHEL, CentOS, Fedora 등)을 다루는 사람이라면 누구나 흔히 말하는 '지옥의 의존성(dependency hell)', 즉 'rpm 지옥'을 겪어본 적이 있을 겁니다. 이런 상황에 빠졌을 때 도움이 될 만한 유용한 팁을 소개합니다.
설치된 RPM 패키지의 의존 파일 확인하기
설치된 RPM 패키지가 어떤 파일과 라이브러리에 의존하는지 확인하는 방법을 살펴보겠습니다.
예시: sendmail 제거 시 발생하는 의존성 오류
예를 들어 리눅스 시스템에서 sendmail 패키지를 업그레이드하거나 삭제하려고 한다고 가정해 보겠습니다. 다음과 같이 제거 명령을 실행했을 때 의존성 관련 오류가 발생할 수 있습니다.
# rpm -e sendmail-8.13.1-3.2
이럴 때 해당 패키지가 어떤 파일들에 의존하고 있는지 파악하면 문제 해결에 큰 도움이 됩니다. 아래 명령어를 사용해 보세요.
의존성 목록 조회 명령어
# rpm -qR sendmail-8.13.1-3.2
실행 결과 예시는 다음과 같습니다.
/bin/bash
/bin/mktemp
/bin/sh
/usr/sbin/alternatives
/usr/sbin/useradd
bash >= 2.0
chkconfig >= 1.3
config(sendmail) = 8.13.1-3.2.el4
cyrus-sasl
fileutils
gawk
libc.so.6
libc.so.6(GLIBC_2.0)
libc.so.6(GLIBC_2.1)
...
명령어 옵션 정리
- -q: 패키지 정보를 조회(query)합니다.
- -R: 해당 패키지가 필요로 하는 의존성(requires) 목록을 출력합니다.
이제 sendmail 패키지가 의존하는 파일과 라이브러리 목록을 확인할 수 있습니다. 어떤 패키지나 라이브러리가 제거를 막고 있는지 파악했다면, 불필요한 의존 패키지를 먼저 정리하거나 --nodeps 옵션 사용 여부를 신중하게 검토한 후 작업을 진행하면 됩니다.
참고로 반대 상황, 즉 특정 파일이 어느 패키지에 속해 있는지 확인하려면 # rpm -qf /경로/파일명 명령어를 활용하면 됩니다. 이 두 가지 명령만 익혀두면 RPM 의존성 문제를 훨씬 수월하게 해결할 수 있습니다.