강좌
클라우드/리눅스에 관한 강좌입니다.
자격증 분류

리눅스마스터1급: 리눅스 패키지관리자 RPM에 대하여

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터1: 리눅스 패키지관리자 RPM에 대하여

 



RPM(레드햇 패키지 관리자)

 

 

RPMRedHat Package Manager의 약자이다.

 

 

 

 

이름에서 알 수 있듯이 RPMRedHat 사에서 리눅스를 조금 더 편리하게 사용할 수 있도록 하기 위해 만든 패키지 프로그램이다.

 

 

 

초기의 리눅스에서는 모든 패키지를 tar(Targzip으로 묶인 소스 파일)을 가져다가 일일이 컴파일하여 설치해야 했기 때문에 리눅스를 사용하는데 많은 어려움이 있었다.

 

 

 

그래서 프로그램의 설치와 관리를 용이하게 하기 위해 이 프로그램을 만들게 된 것이다.

 

 

 

 

RPM은 누구든지 사용 가능한 오픈 패키징 시스템(open packaging system)이기 때문에, 현재는 RedHat 사에서 발표되는 리눅스(레드햇 리눅스 엔터프라이즈 시리즈와 Fedora)뿐만 아니라 CentOS, SULinux, Asianux 등 여러 배포판에서 이 프로그램을 도입하고 있다.

 

 

 

 

RPM은 기본적으로 X 윈도우용 프로그램이 아니라 콘솔용 프로그램이기 때문에, RPM은 콘솔에서 일일이 명령을 내려서 사용해야 한다.

 

 

 

그리고 RPM 프로그램의 사용을 용이하게 하기 위해서 이 프로그램을 이용한 X 윈도우용 프로그램들이 개발되었다.

 

 

 

 

RPM의 설치 과정은 윈도우즈의 여러 번의 확인 과정을 거치는 설치 과정에 비하여 더 간단하고, 설치된 프로그램의 확인, 프로그램 정보 확인 및 업그레이드 등의 관리 또한 용이하다.

 

 

 

 

게다가 프로그램 삭제 시 윈도우즈에 비해 조금 더 완전한 파일 삭제가 가능하다.

 

 

 

 

 

1) RPM의 원리와 기본 개념

 

 

RPM은 리눅스에서 제공되는 바이너리 패키지이다.

 

 

 

이 패키지의 필요성, 원리, 기본 개념들을 안다면 패키지 관리뿐만 아니라 다음의 RPM 패키지 만드는 방법을 익히는 데 도움이 될 것이다.

 

 

 

 

RPM은 왜 필요한가?

 

 

RPM이 필요한 것인지 알아보겠다(RPM Document Project에 있는 글을 인용하였다).

 

프로그램을 설치할 때 필요한 것이 무엇인가 알아보자.

 

 

 

프로그램의 정확한 명칭들과 저장장치 내부 중 설치되어야 할 적합한 장소

 

 

일정한 규약에 의하여 정의되어야 할 설정 파일(configuration file)

 

 

사용자가 프로그램을 사용하여 작업할 수 있는 적절한 공간과 그 명칭

프로그램이 동작하기 위한 다른 프로그램의 명세서

 

 

사용자가 프로그램을 이해할 수 있게 하기 위한 각종 문서들과 문서의 설치

 

 

하나의 프로그램이 동작하기 위한 수많은 파일의 관리

 

 

 

프로그램이란 것은 상당히 많은 요소에 의해서 구성이 되어 사용된다는 것을 알 수 있다.

 

 

 

 

RPM의 원리와 개념

 

 

여기에서는 RPM의 기본 원리와 RPM 패키지에서의 기본적인 개념들에 대해서 알아보도록 할 것이다.

 

 

 

 

이것은 RPM 패키지를 관리하는데 있어 단순하게 주어진 사항에 따라서 하는 것에 비해 여러 가지로 도움이 될 것이다.

 

 

 

 

 

RPM원리

 

 

RPM은 같은 종류의 시스템에서 패치한 부분까지를 포함한 바이너리 프로그램을 그대로 다른 시스템에서 사용하게 하는 것이다.

 

 

 

 

, 특정 시스템에 이미 최적화되어 컴파일 된 소스들을 묶어서 같은 종류의 다른 시스템에서 그대로 풀어서 사용하는 것이다.

 

 

 

 

따라서 소스코드를 RPM 파일로 만들기 위한 설정 파일인 spec 파일에는 원래 소스인 foobar-1.1-1.tar.gz 파일을 푸는 과정과 그것에서 makefile을 실행하여 컴파일 하는 과정이 들어가 있으며, 이 컴파일은 /tmp 아래에서 진행이 된다.

 

 

 

 

 

SRPMRPM의 구분

 

 

SRPMS는 소스파일이라고도 하는데, foobar-1.0-1.tar.gzfoobar-1.0-1.spec 파일 및 이에 관한 patch 파일 등 rpm을 만드는 데 있어 재료가 된 파일들을 함께 묶어 놓은 것이다.

 

 

 

그리고 RPM은 바이너리 파일이라 하는데 프로그램의 실행 파일들이 묶여있기 때문이다.

 

 

 

 

 

spec 파일

 

 

“rpmbuild ba foobar-1.0-1.spec” 명령을 내리면 rpmbuildspec 파일을 읽어 들여서 프로세스를 하여 특정 디렉토리(SULinux의 경우 /usr/src/sulinux) 아래의 SRPMRPM 디렉토리에 SRPM 파일과 RPM 파일을 생성한다.

 

 

 

 

spec 파일은 앞부분에 만들어진 파일들에 대한 정보가 들어가고, %Prep 이후부터 스크립트 명령이 시작된다.

 

 

 

그런데 주의할 점은 이 파일이 스크립트 파일이므로 혹시 다른 명령어가 들어 있지 않은지 항상 확인하라는 것이다.

 

 

 

만약 ‘rm -rf /' 등과 같은 명령어가 들어가 있다면 시스템을 다시 설치해야 하는 일도 생기게 될 수 있다.

 

 

 

RPM의 경우는 기본적으로 root 권한으로 실행된다.

 

 

 

왜냐하면, 설치될 디렉토리들이 root만 접근할 수 있는 곳들이기 때문이다.

 

 

 

그래서 spec 파일에 악성 코드가 들어가게 되면 그대로 시스템이 잘못될 가능성이 크다.

 

 

 

 

spec 파일은 SRPM에서 얻을 수 있으며, foobar-1.1-1.tar.gz과 같은 파일만 있을 때에는 직접 편집하여 사용하면 된다.

 

 

 

 

 

리눅스마스터1: 리눅스 패키지 구조에 대하여

 

 

 

RPM 패키지 구조

 

 

프로그램은 업데이트된다.

 

 

 

특히 리눅스에서 프로그램은 다른 운영체제에 비해 자주 업데이트된다.

 

 

 

그러므로 파일 구분을 잘하지 않으면 문제가 발생할 수 있다.

 

 

 

그러므로 RPM을 사용하여 설치하는 패키지 역시 관리의 용이성을 위하여 일정한 규칙을 가지고 파일 이름에 버전을 명시한다.

 

 

 

다음과 같은 방법으로 RPM 패키지의 이름을 구성한다.

 

 

 

다음은 Apache와 커널의 RPM 파일의 예이다.

 

 

 

 

 

Apache 패키지 파일 : httpd-2.2.15-29.el6.centos.x86_64.rpm

 

 

리눅스 커널 패키지 파일 : kernel-4.6.32-431.el6.x86_64.rpm

 

 

 

패키지 이름

-

패키지 버전

-

릴리즈 버전

.

-

.

아키텍처 버전

.

rpm

httpd

-

2.2.15

-

29

.

el6.centos

.

x86_64

.

rpm

kernel

-

4.6.32

-

431

.

el6

.

x86_64

.

rpm

 

 

패키지 이름

 

패키지 이름은 제작자에 의해 붙여진 이름으로 대부분은 특정 서비스를 나타내는 이름이거나 특정 라이브러리를 의미하는 이름으로 붙이는 것이 관례이다.

 

 

 

위에서 첫 번째 패키지의 이름은 httpd이며 두 번째 패키지의 이름은 kernel이다.

 

 

 

 

 

패키지 버전

 

 

패키지의 버전을 의미한다.

 

 

 

버전이 높을수록 최근에 배포된 것을 의미한다.

 

 

 

첫 번째 Apache 패키지의 버전은 2.2.15이며, 두 번째 kernel 패키지의 버전은 4.6.32이다.

 

 

 

 

 

릴리즈 버전

 

 

동일한 패키지 이름의 동일한 패키지 버전을 업데이트하여 배포할 때마다 새롭게 붙이는 버전이다.

 

 

 

릴리즈 버전 또한 높을수록 최근에 배포한 패키지임을 의미한다.

 

 

 

릴리즈 버전을 붙이는 이유는 주로 동일한 패키지에서 버그를 수정하였거나 간단히 업그레이드하였을 경우에 패키지 버전을 높이지 않고 릴리지 버전만 높여서 재배포하기 때문이다.

 

 

 

위 예에서 httpd의 경우 2.2.15 버전 내에서 29번째 재배포 버전임을 의미한다.

 

 

 

 

한편, 공식적인 것은 아니지만 RPM 명칭에 패키징된 배포판의 정보를 함께 제공하는 것이 일반화되어 있다.

 

 

 

RPM은 다양한 리눅스 배포판에서 패키징되어 배포되므로 패키지 사이의 의존관계, 설치 디렉토리 등이 다를 수 있기 때문이다.

 

 

 

경우에 따라서는 릴리즈 일자를 함께 적는 경우도 있다.

 

 

 

httpd의 경우는 레드햇 엔터프라이즈 리눅스 6 버전(el6)CentOS(centos) 용으로 다시 패키징했음을 표시하고 있다.

 

 

 

 

 

아키텍처 버전

 

 

패키지의 설치가 가능한 컴퓨터 아키텍쳐를 의미한다.

 

 

 

위의 예는 x86_64가 기재되어 있는데, 이것은 인텔 계열 또는 AMD 계열 64비트 CPU에 최적화되어 있는 RPM 패키지임을 의미한다.

 

 

 

이와 같은 것에는 알파시스템 아키텍쳐를 의미하는 alpha, 스팍시스템 아키텍쳐를 의미하는 sparc sparc64, 인텔 아키텍쳐를 의미하는 i386, i586, i686, PowerPC 아키텍쳐를 의미하는 ppc64 등이 있다.

 

 

 

noarch는 특정 아키텍쳐를 의미하지 않을 때 붙이는 것이다.

 

 

 

만약 이것 대신에 src가 기술되어 있는 것은 SRPM 파일임을 뜻한다.

 

 

 

즉 소스코드가 포함된 파일이다.

 

 

 

 

 

rpm

 

 

파일의 마지막에는 .rpm 확장자를 표기하여 RPM 파일임을 나타낸다.

 

 

 

 

 

 

 

 

플랫폼과 RPM

RPM은 플랫폼에 따라 다르게 패키징된다.

 

 

 

물론, 시스템의 구성에 따라서도 패키징이 달라진다.

 

 

 

후자의 경우 RPM에서 필요로 하는 시스템의 파일 이름들이 다른 경우에 다른 배포판의 RPM이 설치가 되지 않을 수도 있다.

 

 

 

또한, 작동도 불안정할 수 있다.

 

 

 

이에 대해, 플랫폼 자체가 다르다면 RPM 파일에서 설치한 프로그램이 제대로 작동되지 않는 것은 당연한 일이다.

 

 

 

컴파일 환경이 다르기 때문이다.

 

 

 

그러므로 i386으로 명명된 rpm의 경우 Alpha CPU 혹은 Sparc CPU ix86 계열의 CPU가 아닌 시스템에서는 동작하지 않는다.

 

 

 

 

 

 

 

 

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  81 명