2003년 5월 23일 금요일

RPM (Redhat Package Management)

http://www.redhat.com/docs/books/max-rpm/max-rpm.pdf
(이 문서는 2000년에 나온 문서로 최근 문서와는 내용이 약간 다른 부분이 있다.
개념을 잡기 위해서만  읽도록 하자.)
---------------------
man rpm

rpm 설치하기 : rpm -ivh 파일명       (kernel rpm의 경우는 이것을 주로 쓴다.)
------------------------------------------------------------------------
[ilashman@sonata i386]$ sudo rpm -ivh mondy2-20030624-1.i386.rpm --prefix=/home/ilashman/test --nodeps
준비 중...                  ########################################### [100%]
   1:mondy2                 ########################################### [100%]
[ilashman@sonata i386]$
--------------------------------------------------------------------------

rpm 설치 or 업그레이드 하기 : rpm -Uvh 파일명 (기타 다른 rpm의 경우 이것을 주로 쓴다.)

이미 설치된 package 보기 : rpm -qa |grep package명

설치된 package 한 개의 정보 보기 : rpm -qi 설치된 package명

rpm 파일의 정보보기 : rpm -qip 파일명
rpm 파일 내에 들어 있는 파일들 list : rpm -q -p 파일명 -l

rpm 제거하기 : rpm -e package명


특정 파일이 어느 package에 들어 있는 지 알아보기 : rpm -qf 파일명
ex)
[ilashman@sonata test]$ rpm -qf /bin/ls
coreutils-4.5.3-19

------------------------
/usr/share/doc/rpm-4.2 아래 있는 문서들이 rpm 4.2(최근버젼)에 해당하는 문서들이다.

rpm을 build하기 위해서는 다음 디렉토리를 만든다.
~/redhat/BUILD
~/redhat/RPMS
~/redhat/SOURCES
~/redhat/SPECS
~/redhat/SRPMS

~/.rpmmacros 파일에
-----------------------------------
%_topdir    /home/ilashman/redhat
-----------------------------------
이 내용을 삽입한다.

SOURCES 디렉토리에 프로그램명_버젼.tar.gz 파일을 복사한다.
(mondy2_20030624.tar.gz)

SPECS 디렉토리에 프로그램명.spec 파일을 만든다. (mondy2.spec)
-----------------------------------------------------
#
# 2003/05/31 by Hyunsung Joo <ilashman@neowiz.com>
#
# spec file for mondy application
#

Summary: Mondy2, Server Monitoring Client on the SNMP, RRDTool, PHP
Name: mondy2
Version: 20030624
Release: 1
License: Commercial
Group: Utilities/System
Vendor: Neowiz Corporation
Packager: Hyunsung Joo <ilashman@neowiz.com>
Source: %{name}_%{version}.tar.gz
Prefix: /usr/local
BuildRoot: /tmp/mondy_build

%description
Mondy2 is a simple and easy Web-based monitoring client.
Mondy2 requires Perl, Apache + PHP + RRDTool, snmp.

%prep
%setup -q -n %{name}

%build

%install
./configure.pl --prefix=$RPM_BUILD_ROOT%{prefix}

rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT
make install

%clean
rm -rf $RPM_BUILD_ROOT

%pre

%post

%files
%{prefix}/mondy2

%changelog
--------------------------------------------------------------------
sudo rpmbuild -ba mondy2.spec  (빌드 명령을 수행)
정상적으로 완료되면 RPMS 디렉토리와 SRPMS 디렉토리에 rpm, srpm파일이 생긴다.
(rpm 4.0.4 version에서는 rpm -ba 명령도 되었으나 deprecate되고 이제는 rpmbuild -ba 명령을 써야한다.)

------
RPM build 과정 해설
0. SOURCES에 있는 파일 중 Source: tag에 기술된 파일을  ~/redhat/BUILD로 복사
1. %prep 부분을 수행
    %setup (~/redhat/BUILD에 자동으로 tar.gz 파일의 압축을 풀고 그 안으로 들어가 줌)
2. %build 수행
     컴파일할 내용이 있을 때 make를 이용하여 컴파일할 수 있음.
     컴파일할 필요가 있다면 make라고 적어줄 것. (다른 옵션은 쓸 수 없다.)
3. %install
   ~/redhat/BUILD에서 ./configure.pl, make install script를 수행하여 $RPM_BUILD_ROOT의 하위에 프로그램들을 설치
4. $RPM_BUILD_ROOT를 root로 생각하고 %files에 기술된 파일들을 rpm으로 묶어줌.
5. %clean
6. package 완성

RPM install 과정 해설
1. %pre 부분 실행
2. rpm에 저장된 파일(build 당시 $RPM_BUILD_ROOT하위에 있던 것)들을
   /에 깔아줌.
3. %post 부분 실행

---------
--prefix 옵션 사용하기 (relocation)
rpm -ivh 파일명.rpm --prefix=/home/ilashman/local  

Prefix: /usr/local  (--prefix 옵션을 주지 않았을 때 default로 잡을 prefix)

%{prefix} 매크로 : shell script에 prefix로 치환되서 적히게 된다.

주의) 매우 비슷하게 생긴 %{_prefix} 매크로는 --prefix or Prefix: 들과는 관계없이 항상 /usr 로 치환된다.
---------

댓글 없음:

댓글 쓰기