본문 바로가기

시스템/Linux

yum이 패키지를 찾지 못하는 이유

Redhat 계열 OS를 사용할 경우 yum이나 rpm으로 패키지를 설치하게 되는데 아무래도 yum으로 설치하는 경우가 더 많다.


yum install <package> 명령어를 통해 패키지를 설치하게 되는데 이 가끔 분명히 존재하는 패키지임에도 yum이 찾지 못하는 경우가 있다.


나의 경우 세가지 경우에서 패키지를 찾지 못하는 상황이 있었는데 더 다양한 상황이 있을 수 있다는 점을 염두해두자.



1. epel-release 미설치


epel은 Extra Packages for Enterprise Linux의 약자이다.


말 그대로 yum 에서 기본적으로 제공하는 패키지가 아닌 번외 패키지라 할 수 있다.


대표적으로 Apache 웹서버는 기본 패키지이고 Nginx는 epel에 속하는 패키지이다.


OS를 설치하고 아무런 작업 없이 yum install nginx 명령어를 날리면 패키지를 찾을 수 없다는 메세지를 만나게 되는데


이 경우가 epel-release를 설치해주지 않은 경우에 만나는 상황이다.


설치는 간단하다.


yum install -y epel-release를 설치한 다음 원하는 패키지를 검색하거나 설치하면 된다.




2. yum.repo.d 에 <package>.repo 파일 미등록


패키지는 누구든지 배포 할 수 있다.


그렇다면 어떻게 다른 사람이 yum 명령어를 통해서 내 패키지를 검색하거나 설치하게 할 수 있을까?



(1) 엄청난 패키지를 만들어서 redhat에서 제발 관리를 할 수 있게 해 달라고 애원하게 만든다.


(2) 그럴리는 없으니 그냥 내 패키지를 다운받을 수 있는 저장소의 주소를 알려준다.



대부분 2번에 해당될 것이다.


그럼 이 주소를 저장해야 할까?


바로 /etc/yum.repo.d/ 디렉토리 아래에 모여있다.  (CentOS 기준)


디렉토리에 들어가 보면 xxx.repo라는 이름을 가진 파일이 여러개 있을 것이다.


우리가 일반적으로 yum을 날렸을때 가장 먼저 참조하는 파일이 CentOS-Base.repo이다


이 저장소에서 찾아봤는데 없다면 차례로 repo 확장자를 가진 파일의 주소를 참조하면서 패키지가 있는지 찾게된다.


주로 자신들만의 패키지를 배포하는 업체들이 repo파일을 배포한다.



3. OS 버전


OS버전에 따라 같은 패키지 명을 검색해도 버전이 다른 패키지가 나올 수도 있고 아예 나오지 않는 경우가 있다.


대표적으로 CentOS 6.x 버전과 7.x 버전에서는 기본설치되는 Apache의 버전이 2.2.x 와 2.4.x 버전으로 구분된다.


이러한 이유는 OS 버전마다 참조하는 저장소가 다른데 6.x 버전이 참조하는 저장소의 Apache는 2.2.x 버전이 등록되어 있고


7.x 버전이 참조하는 저장소의 Apache는 2.4.x 버전이 등록되어 있기 때문이다. 


이렇듯 OS 버전마다 변경되거나 추가, 삭제되는 패키지가 있기에 yum이 패키지를 찾지 못할수도 있다.


이 경우 소스코드를 다운받아서 컴파일설치하거나 rpm에서 설치하는 대안이 있다.