2022 데이터 사이언스/Linux

19. 프로그램 설치(2): rpm

gool 2022. 5. 31. 21:24
rpm 명령어로 패키지를 이용하여 프로그램 및 서비스를 관리한다. 

 

 

 

rpm(redhat package manager)을 활용하여 패키지 기반의 프로그램 설치를 할 수 있다.

패키지는 프로그램을 나누어 놓은 조각을 말한다.

 

Linux는 kernel부터 시작하여 모든 구성이 패키지로 이루어져 있으며,

패키지는 다른 패키지와 의존 관계에 놓여있는 경우가 많다.

따라서 패키지 설치/삭제 과정에서 의존성 관련 오류가 굉장히 자주 발생한다.

 

rpm은 redhat에서 처음 도입했고, 모든 redhat 기반의 Linux에서 rpm 명령어를 사용한다.

rpm 명령어는 CentOS 뿐 아니라 redhat 기반 다른 계열의 Linux에서도 사용 가능하다.

참고하자면, debian 기반의 Linux에서는 rpm이 아닌 dpkg 명령어를 사용한다.

 

 

 

rpm 명령어 형식

 

1) 패키지 설치

 

rpm -ivh 패키지명-버전.아키텍처.rpm

  • v : 작업의 대상이 되는 목록 출력
  • h : # 기호를 이용하여 설치 진행도를 시각적으로 알려주는 역할(hash 옵션)

 

 

2) 설치된 패키지 확인

 

rpm -qa | grep 패키지명

 

패키지 확인 자체는 rpm -qa 만으로 가능하지만,

설치된 패키지의 개수가 너무 많이 확인이 힘들기 때문에 grep 명령어를 사용한다.

grep 명령어를 사용하면 원하는 내용만 출력할 수 있어 매우 자주 사용된다.

 

예를 들어 vim이라는 단어가 들어간 패키지만을 출력하고자 할때 다음과 같이 사용할 수 있다.

 

 

 

3) 패키지 삭제

 

rpm -e 패키지명[-버전.아키텍처]

 

같은 패키지를 버전만 다르게 설치한 경우,

대상에 패키지명만 넣으면 지워지지 않기 때문에 삭제하고자 하는 버전과 아키텍처까지 적어준다.

 

 

 

패키지 이름의 구조

 

vim-filesystem-7.4.629-7.el7.x86_64

<---------------->|<-------------->|<------>

     패키지명            버전      아키텍처

 

 

1) 패키지명

 

패키지의 이름은 한 단어 또는 ' - ' 기호로 이어진 여러 단어의 조합으로 구성된다.

숫자만 단독으로 나오는 경우는 없기 때문에 버전과 구별이 가능하다.

 

한 단어인 경우 해당 패키지로 설치되는 프로그램 혹은 서비스의 이름이 곧 패키지명이다.

여러 단어라면 첫 번째 단어가 설치되는 프로그램이나 서비스의 이름이고,

이어지는 단어들은 프로그램이나 서비스의 세부 역할을 의미한다.

 

 

2) 버전

 

7.4.629-7.el7

  • 7 (major; 주 버전) : 예를 들어 Windows 7 - 8 - 10 - 11 업데이트 되며 인터페이스 크게 변경
  • 4 (minor; 보조 버전) : 기능에 있어 어느정도 규모 있는 업데이트가 생긴 경우
  • 629 (patch; 패치 버전)
  • 7 (release; 배포 버전) : major, minor, patch 포함 하나의 묶음이 몇 번째 배포인지
  • el7 (os; 운영체제 버전) : 숫자 1이 아닌 알파벳 l

 

* 오탈자 등 약간의 수정이 생긴 경우 배포 버전 up

 

* 운영체제 버전 예시

  • el7 : CentOS 7.x
  • el7_9 : CentOS 7.9
  • centos : CentOS all version
  • <생략> : all OS

 

 

3) 아키텍처

 

아키텍처는 하드웨어 쪽으로 깊이 들어가야 하는 개념이기 때문에 간단하게 설명한다.

CPU의 성능과 관련된 내용으로, CPU가 한 번에 몇 bit의 연산을 처리할 수 있는지를 나타낸다.

아키텍처는 CPU의 bit 수에 따라 달라진다.

  • 32bit : i386(386컴퓨터 이상에서 동작), i586(Pentium급), i686(Pentium pro급)
  • 64bit : x86_64 하나만 존재

 

* 아키텍처 부분에 'noarch'가 들어간 경우 32bit CPU64bit CPU에서 모두 사용 가능

 

 

 

의존성 오류

 

간단히 rpm 명령어를 사용해보면 의존성 오류를 쉽게 맞닥뜨릴 수 있다.

의존성 오류는 rpm을 다루면서 무조건적으로 보게 되는 오류이다.

 

 

 

1) 의존성 오류 확인 방법

 

의존성 오류는 항상 A is needed by B (B에게 A가 필요하다) 형식으로 나타난다.

 

(1) 패키지 설치

(설치하려는 패키지가 B에 위치)

B를 설치하기 위해 A가 필요하다.

 

(2) 패키지 삭제

(삭제하려는 패키지가 A에 위치)

B에게 A가 필요하기 때문에 A를 삭제할 수 없다.

 

 

 

2) 해결 방법

 

먼저, 의존성 오류 메시지를 읽고 아래와 같이 오류 내용을 바로잡을 수 있다.

  • 설치할 때는 A를 먼저 설치
  • 삭제할 때는 B를 먼저 삭제

 

또는, 의존성 오류를 무시하는 보조 옵션 --nodeps를 사용할 수 있다.

 

패키지 설치 시 A 패키지가 존재하지 않아 먼저 설치가 불가능하거나,

패키지 삭제 시 B 패키지가 먼저 지울 수 없는 중요 패키지인 경우에 사용한다.

 

의존성 오류를 무시하다보면 프로그램이나 운영체제가 정상적으로 동작하지 않을 수 있다.

따라서 --nodeps 옵션은 웬만하면 사용하지 않는 것이 좋다.

 

 

 

3) 의존성 오류 메시지에 패키지명이 아닌 다른 내용이 출력되는 경우

 

(1) 파일의 절대경로 (ex: /usr/bin/vi)

패키지에 포함된 파일을 의존성 오류에서 요구하는 경우로, 일반적으로 패키지 삭제 시 출력된다.

파일명 위치에 패키지명을 넣어서 의존성 오류를 읽으면 된다.

vim 패키지 예시의 경우, /usr/bin/vi 자리에 vim-minimal을 대입하여 메시지를 이해하면 된다.

 

(2) lib~~~.so.숫자(~~~)

설치/삭제 시 모두 출력되며, ~~~ 부분의 내용으로 패키지명을 유추해야 하는 경우이다.

해당 의존성 오류를 구글링하여 패키지명을 확인하는 방식으로 해결할 수 있다.

 

(3) pkgconfig(~~~)

~~~ 부분의 내용으로 패키지명을 유추해야 하며, 주로 패키지 설치 시 출력된다.

마찬가지로 구글링을 통해 패키지명을 확인하면서 해결하면 된다.

 

* 2, 3번에 해당하는 의존성 오류 메시지는 rpm 패키지 설치 부분에서 자세히 다룰 예정이다.

 

 

 

그러면 앞서 발생한 의존성 오류를 해결해보자.

 

 

B에 해당하는 sudo 패키지를 먼저 삭제한 후 vim-minimal을 삭제하면 오류가 발생하지 않는다.

이번에는 바로 삭제를 진행했지만, 원래는 sudo가 지워도 되는 패키지인지 미리 확인해야 한다.

 

vim-minimal을 삭제한 후 나머지 vim 패키지도 차례로 지워준다.

의존성 오류를 확인하기 위해 vim-minimal을 먼저 삭제했지만,

rpm으로 패키지를 설치하거나 삭제할때는 위에서부터 차례로 진행하는 것이 정석이다.

 

 

실습을 통해 삭제한 vim은 vi 에디터 프로그램 패키지이다.

vim 관련 패키지가 존재하지 않아 vi 명령이 실행되지 않는 것을 확인할 수 있다.

 

 

 

 

'2022 데이터 사이언스 > Linux' 카테고리의 다른 글

18. 프로그램 설치(1): tar  (0) 2022.05.31
17. 권한(4): 특수 권한  (0) 2022.05.30
16. 권한(3): 소유권과 권한 적용  (0) 2022.05.30
15. 권한(2): 웹 서버와 http  (0) 2022.05.30
14. 권한(1): 허가권  (0) 2022.05.29