초기 리눅스는 윈도우즈와는 달리 setup.exe 와같은 프로그램이 없었다. 윈도우즈의 경우에는 프로그램을 사용하기위해서는 '설치'라는 과정을 거쳐야 한다. 그리고 프로그램이 필요가 없어졌을 경우에는 '삭제(uninstall)'을 통해서 깔끔하게 프로그램을 제거할 수 있다. 이러한 설치와 제거의 과정은 그저 파일을 적당한 위치에 복사는 것을 벋어나 OS내에 프로그램정보를 기록하고 제어할수 있도록 일종에 OS에 융합되는 면이 많이 있다.
하지만 리눅스에서는 이러한 설치와 삭제가 필요가 없었다. 왜냐하면 컴파일한 바이너리를 그져 적당한 디렉토리에, 더 엄밀히 말하면 사용자가 넣고 싶은 곳 어디서든지 있기만하면 실행이 가능하기 때문이다. 윈도우즈와는 달리 리눅스는 OS에 융합되거나 하지 않는다. 라이브러리(Library)만 제대로 갖추고 있다면 프로그램이 동작하는데에는 아무런 문제가 없다.
그런데 리눅스의 경우에 일일이 모든 컴파일된 바이너리와 라이브러리들을 적당한 곳에 넣을려면 힘이든다. 수백대의 컴퓨터가 있다고 한다면 어떻게 해야할지 모를일이다. 이런것들을 마치 압축하듯이 하나의 패키지로 모아놓은 파일로 제작을 해놓는다. 그리고 특정한 명령어를 통해서 OS에 배포되도록 만들어놓기도 하는데 RedHat 계열이 바로 이러한 시스템을 사용한다.
RPM(Redhat Package Management)는 미리 컴파일된 바이너리를 미리 압축된 파일로 만들어놓은 패키지이다. 확장자가 rpm 이라면 바로 이것을 말하는 것이다. rpm은 단순하게 미리 압축된 파일이이 아니라 쿼리를 통해서 각종 정보를 조회할수 있으며 미리 설치된 파일이 포함된 패키지, 의존성 패키지등을 검사할 수 있다.
RPM(Redhat Package Management)
RPM은 Redhat에서 개발한 패키지 관리/제작 프로그램이다. 관리만 하는것이 아니라 제작도 할수 있다. 다음과 같이 해보자.
[code bash]
]# rpm -qf /bin/bash
bash-3.2-24.el5
[/code]
위 명령은 '/bin/bash' 프로그램이 속한 패키지가 무엇인지를 알려준다. '-q'는 '질의한다(query)'는 것이고 '-f'은 파일에 대한 정보를 지정하는 것이다. 따라서 '-qf'라면 '파일에대한 정보를 질의한다'가 되어서 파일이 어느 패키지에 속해있는지를 알려준다.
이제 rpm 파일을 하나 다운로드받아서 좀더 자세한 사용법을 알아보자.
[code bash]
]# wget ftp://mirror.khlug.org/centos/5.5/os/x86_64/CentOS/gftp-2.0.18-3.2.2.x86_64.rpm
[/code]
rpm -qlp
-p는 '설치된 또는 설치되지 않은 <패키지화일>에 대하여 질문을 수행하도록하는 옵션이다. -l은 파일안에 파일리스트를 보여주는 것으로 이 리스트들이 실제로 시스템에 설치가 된다.
[code bash]
]# rpm -qlp gftp-2.0.18-3.2.2.x86_64.rpm
/usr/bin/gftp
/usr/bin/gftp-gtk
/usr/bin/gftp-text
/usr/share/applications
/usr/share/applications/net-gftp.desktop
/usr/share/doc/gftp-2.0.18
/usr/share/doc/gftp-2.0.18/COPYING
/usr/share/doc/gftp-2.0.18/ChangeLog
/usr/share/doc/gftp-2.0.18/README
/usr/share/doc/gftp-2.0.18/TODO
[/code]
rpm -qip
-i는 패키지 이름, 버전, 설명 등의 정보를 출력한다. rpm 은 단순한 파일 리스트의 목록이 아니다. 각종 정보를 포함하는데 이경우가 바로 이것이다.
[code bash]
]# rpm -qip gftp-2.0.18-3.2.2.x86_64.rpm
Name : gftp Relocations: (not relocatable)
Version : 2.0.18 Vendor: CentOS
Release : 3.2.2 Build Date:
Install Date: (not installed) Build Host: builder3.centos.org
Group : Applications/Internet Source RPM: gftp-2.0.18-3.2.2.src.rpm
Size : 2709888 License: GPL
Signature : DSA/SHA1, 2007년 04월 04일 (수) 오전 09시 23분 21초, Key ID a8a447dce8562897
URL : http://gftp.seul.org/
Summary : X 윈도우 시스템에 사용되는 다중 스레드 FTP 클라이언트.
Description :
gFTP는 X Window System에서 사용되는 다중 스레드 FTP 클라이언트입니다.
gFTP는 다음과 같은 기능을 지원합니다: 동시 다운로드, 중단된 파일 전송을 복구,
다중 파일 다운로드를 위한 파일 전송 대기열, 전체 디렉토리/하부 디렉토리 다운로드하기 지원,
FTP 사이트로의 빠른 접속을 위한 책갈피 메뉴, 원격 디렉토리 목록 캐싱, 로컬과 원격 chmod,
끌어다 놓기 (drag and drop), 접속 관리자와 기타 등등.
그래픽모드의 FTP 클라이언트가 필요하시면 gftp를 설치하십시오.
[/code]
rpm -qRp
패키지의 의존성을 알려준다. 사실 이것은 정보가 부족하다. 의존성이 걸린 패키지들을 알려주는 것이라기 보다는 의존성이 걸린 라이브러리 목록을 알려준다.
[code bash]
]# rpm -qRp gftp-2.0.18-3.2.2.x86_64.rpm
/bin/sh
libatk-1.0.so.0()(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libcairo.so.2()(64bit)
libcrypto.so.6()(64bit)
libdl.so.2()(64bit)
libgdk-x11-2.0.so.0()(64bit)
libgdk_pixbuf-2.0.so.0()(64bit)
libglib-2.0.so.0()(64bit)
libgmodule-2.0.so.0()(64bit)
libgobject-2.0.so.0()(64bit)
libgthread-2.0.so.0()(64bit)
libgtk-x11-2.0.so.0()(64bit)
libm.so.6()(64bit)
libnsl.so.1()(64bit)
libpango-1.0.so.0()(64bit)
libpangocairo-1.0.so.0()(64bit)
libpthread.so.0()(64bit)
libpthread.so.0(GLIBC_2.2.5)(64bit)
libssl.so.6()(64bit)
libutil.so.1()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rtld(GNU_HASH)
[/code]
의존성이 걸린 패키지 목록이 나올줄 알았는데, 라이브러리 목록이 나오는데 이걸 보고 의존성을 알 사람이 몇이나 될까.
rpm -qa
현재 시스템에 설치된 모든 패키지들을 보여준다.
패키지 설치
rpm 파일만 있으면 패키지를 설치할 수 있다. 그런데 문제가 하나 있다. 패키지를 설치하기 전에 설치에 필요한 의존성 패키지가 설치가 되어 있어야 한다. 의존성은 그 프로그램이 실행하기 필요한 라이브러리 및 또다른 프로그램들을 말한다. 윈도우즈 설치에서도 가끔 .NET Framework 설치가 필요하다고 해서 나오는데 이와 같은 이치이다.
[code bash]
]# rpm -ivh gftp-2.0.18-3.2.2.x86_64.rpm
[/code]
출력되는 메시지들을 잘 살펴봐야 한다. 에러메시지 없었다면 정상적으로 패키지가 설치가 된다.
패키지 삭제
패키지를 삭제하기 위해서는 설치된 패키지 이름을 알아야 한다. 그전에 어떤 파일을 삭제하고 싶은지에 대해서 결정을 해야 한다. 그것만 알게되면 패키지를 알수 있게 된다.
[code bash]
]# rpm -qf /usr/bin/gftp
gftp-2.0.18-3.2.2
]# rpm -evv gftp-2.0.18-3.2.2
[/code]
패키지를 삭제할때도 의존성을 해결해야 한다. gftp 가 다른 패키지에 의존성으로 걸려있다면 의존성 에러로 삭제가 되지 않을 것이다. 그럴때에는 의존성이 걸려있는 패키지를 먼저 삭제를 해야 한다.
rpm 은 기존의 컴파일 설치 방법을 벗어나 설치하는 바이너리 파일들을 일목요연하게 쉽고 빠르게 해주었다. 컴파일 설치를 어려움을 느꼈던 초보자들에게 많은 도움을 줬었다. 그런데 설치나 삭제시에 발생하는 의존성 문제는 초보자 뿐만 아니라 숙련된 사람에게까지 짜증을 불러일으킬만 했다. 의존성을 해결해주기 방법을 제시하지 않았기에 사람이 일일이 찾아서 해결해줘야만 했다.
0 개의 댓글:
댓글 쓰기