2. RPM 사용하기

2.1. 패키지 디렉토리

rpm 만들때 사용하는 디렉토리는 다음과 같습니다.

/usr/src/redhat/BUILD : 꾸러미 만들때 압축 되어 있는 소스를 풀고, 패치를 적용해서 컴파일 하는 것

/usr/src/redhat/RPMS : 꾸러미가 만들어 지는 곳

/usr/src/redhat/SOURCES : 원본 소스, 패치, 아이콘 화일이 있는 곳

/usr/src/redhat/SPECS : 꾸러미를 만드는데 사용이 되는 명세표 화일이 있는 곳

/usr/src/redhat/SRPMS : 소스 꾸러미가 저장 되는 곳

   /usr/src/redhat/RPMS/athlon
  		 i386
		 i486
		 i586
		 i686
		 noarch
  

2.2. 소스 rpm 풀어서 rpm 만들기

다음과 같은 명령어로 소스 rpm 을 풉니다.

      [root@nalabi nalabi]# rpm -ivh xinitrc-3.6-2wl.src.rpm 
      1:xinitrc                ########################################### [100%]
  

그럼 다음과 같이 소스가 설치 됩니다.

      /usr/src/redhat/SOURCES/xinitrc-3.6.tar.gz
      /usr/src/redhat/SPECS/xinitrc.spec
  

다음과 같이 소스를 압축을 풉니다.

      [root@nalabi SOURCES]# tar xvfz xinitrc-3.6.tar.gz
  

소스를 수정하거나, spec 화일을 수정을 합니다.

수정을 한후 다음과 같이 spec 화일이 있는 곳이나, 경로를 지정해서 rpm 화일을 만듭니다.

      rpm -ba xinitrc.spec
  

그럼 역시 다음과 같은 곳에 rpm 이 만들어 집니다.

      /usr/src/redhat/RPMS/noarch/xinitrc-3.6-2wl.noarch.rpm
  

2.3. 설치하기

2.3.1. -U 옵션

기존의 것을 삭제하고 업그레이드하며 아무 메시지도 보여주지 않는다.

root@wow:~# rpm -U cpp-2.95.3-7.i686.rpm

2.3.2. -Uv 옵션

기존의 것을 삭제하고 업그레이드하며 패키지 이름을 보여준다.

root@wow:~# rpm -Uv gcc-2.95.3-7.i686.rpm
설치할 패키지를 준비하고 있습니다...
gcc-2.95.3-7

2.3.3. -Uvh 옵션

기존의 것을 삭제하고 업그레이드하며 그 설치 진행과 과정 # 표시로 자세히 보여준다.

root@wow:/usr/src/redhat/RPMS/i386# rpm -Uvh hanterm-xf-p19-16wl.i386.rpm 
Preparing...                ########################################### [100%]
   1:hanterm-xf             ########################################### [100%]

2.3.4. -i

기존의 것을 삭제하고 처음 설치한다.

root@wow:/usr/src/redhat/RPMS/i386# rpm -i hanterm-xf-p19-16wl.i386.rpm

2.3.5. --nodeps

의존성관계에 있는 다른 패키지가 설치되어 있지 않다해도 강제 설치한다

root@wow:/usr/src/redhat/RPMS/i386# rpm -Uvh hanterm-xf-p19-16wl.i386.rpm --nodeps
Preparing...                ########################################### [100%]
   1:hanterm-xf             ########################################### [100%]

2.3.6. --force

버전을 무시하고 강제로 설치한다.

rpm 버전을 다운 그레이드 할때 사용한다. (이때는 다른 패키지에 문제가 없는가를 주의 해야 한다)

root@wow:/usr/src/redhat/RPMS/i386# rpm -Uvh hanterm-xf-p19-16wl.i386.rpm  --force --nodeps
Preparing...                ########################################### [100%]
   1:hanterm-xf             ########################################### [100%]

2.4. 지우기

2.4.1. -evv 옵션

아래와 같이 삭제를 하는 동안에 상세한 설명을 보여준다.

root@wow:~# rpm -evv FlashPlayer
D: opening db index       /var/lib/rpm/Packages  mode=0x82
D: locked  db index       /var/lib/rpm/Packages
D: opening db index       /var/lib/rpm/Name  mode=0x82
D: opening db index       /var/lib/rpm/Requirename  mode=0x82
D: getting list of mounted filesystems
D: opening db index       /var/lib/rpm/Basenames  mode=0x82
D: opening db index       /var/lib/rpm/Group  mode=0x82
D: opening db index       /var/lib/rpm/Providename  mode=0x82
D: opening db index       /var/lib/rpm/Conflictname  mode=0x82
D: opening db index       /var/lib/rpm/Triggername  mode=0x82
D: opening db index       /var/lib/rpm/Depends create mode=0x82
D: will remove files test = 0
D:    file: /usr/lib/mozilla/plugins/libflashplayer.so action: remove
D:    file: /usr/lib/mozilla/plugins/ShockwaveFlash.class action: remove
D: running postuninstall script (if any)
D:   ---       1042 FlashPlayer-5.0r48-0wl
D: removing "FlashPlayer" from Name index.
D: removing 2 entries from Basenames index.
D: removing "Applications/Internet" from Group index.
D: removing 3 entries from Requirename index.
D: removing 2 entries from Providename index.
D: closed  db index       /var/lib/rpm/Depends
D: closed  db index       /var/lib/rpm/Triggername
D: closed  db index       /var/lib/rpm/Conflictname
D: closed  db index       /var/lib/rpm/Providename
D: closed  db index       /var/lib/rpm/Requirename
D: closed  db index       /var/lib/rpm/Group
D: closed  db index       /var/lib/rpm/Basenames
D: closed  db index       /var/lib/rpm/Name
D: closed  db index       /var/lib/rpm/Packages

2.4.2. --test

실제로 삭제를 하지 않고 잘지워지는가 연습을 하는 옵션이다.

2.4.3. --nodeps

의존성에 관여하지 않고 지우는 옵션이다.

2.4.4. rpm 이 아래와 같이 중복으로 설치 되어 있을 경우 해결 방법

root@wow:/home/work/test# rpm -qa | grep tux
tux-2.1.0-2
tux-2.1.0-2

root@wow:/home/work/test# rpm -e tux 
error: "tux" specifies multiple packages
root@wow:/home/work/test# rpm -e tux --allmatches

2.5. 패키지 정보 알아내기

2.5.1. -q

질의한 패키지가 설치 되어 있는지 알아본다.

root@wow:~# rpm -q ntsysv     
ntsysv-1.2.22-1

2.5.2. -qa

설치 되어 있는 모든 패키지를 알아본다.

root@wow:~# rpm -qa 
gsm-devel-1.0.10-2
.......

2.5.3. -qa | grep

질의한 패키지가 설치 되어 있는지 알아본다.

root@wow:~# rpm -qa | grep sysv
tksysv-1.3-2
ntsysv-1.2.22-1

2.5.4. -qa | grep -i

질의한 패키지를 찾을 때 대소문자를 구분하지 않는다.

root@wow:~# rpm -qa | grep -i sysv
SysVinit-2.78-15
tksysv-1.3-2
ntsysv-1.2.22-1

2.5.5. -qa | wc -l

현재 설치 되어 있는 총패키지 수

nalabi@wow:~/wowmake$ rpm -qa | wc -l 
    646

2.5.6. -qf

설치 되어 있는 화일이 어느 패키지에 속해 있는지 알아본다.

root@wow:~# rpm -qf /bin/ls       
fileutils-4.0.36-4

2.5.7. -q --whatprovides module-info

모듈이 설치 되어 있는 패키지 알아보기

root@wow:~# rpm -q --whatprovides module-info
kernel-2.4.2-3
kernel-2.4.16-7wl

2.5.8. -qi

패키지 정보 알아보기

root@wow:~# rpm -qi setup                   
Name        : setup                        Relocations: (not relocateable)
Version     : 2.4.7                             Vendor: (none)
Release     : 1wl                           Build Date: Fri Jun 22 13:18:38 2001
Install date: Mon Sep  3 21:08:45 2001      Build Host: jhkim.wowlinux.com
Group       : System Environment/Base       Source RPM: setup-2.4.7-1wl.src.rpm
Size        : 28589                            License: public domain
Summary     : A set of system configuration and setup files.
Description :
The setup package contains a set of important system configuration and
setup files, such as passwd, group, and profile.

2.5.9. -ql

패키지 목록 알아보기

root@wow:~# rpm -ql setup  
/etc/csh.cshrc
/etc/csh.login
/etc/exports
/etc/filesystems
/etc/group
/etc/host.conf
/etc/hosts.allow
/etc/hosts.deny
/etc/inputrc
/etc/motd
/etc/passwd
/etc/printcap
/etc/profile
/etc/profile.d
/etc/protocols
/etc/securetty
/etc/services
/usr/share/doc/setup-2.4.7
/usr/share/doc/setup-2.4.7/uidgid
/var/log/lastlog

2.5.10. -qlv

패키지 목록 자세한 정보 알아보기

root@wow:~# rpm -qlv setup 
-rw-r--r--    1 root    root              380 Jul 26  2000 /etc/csh.cshrc
-rw-r--r--    1 root    root              517 Mar 28  2001 /etc/csh.login
-rw-r--r--    1 root    root                0 Jan 13  2000 /etc/exports
-rw-r--r--    1 root    root               46 Jun 28  2000 /etc/filesystems
-rw-r--r--    1 root    root              290 Jan 13  2000 /etc/group
-rw-r--r--    1 root    root               17 Jul 24  2000 /etc/host.conf
-rw-r--r--    1 root    root              161 Jan 13  2000 /etc/hosts.allow
-rw-r--r--    1 root    root              347 Jan 13  2000 /etc/hosts.deny
-rw-r--r--    1 root    root              546 Apr  8  2001 /etc/inputrc
-rw-r--r--    1 root    root                0 Jan 13  2000 /etc/motd
-rw-r--r--    1 root    root              508 Jun 22  2001 /etc/passwd
-rw-r--r--    1 root    root              289 Jan 13  2000 /etc/printcap
-rw-r--r--    1 root    root              627 Jan 30  2001 /etc/profile
drwxr-xr-x    1 root    root               48 Jun 22  2001 /etc/profile.d
-rw-r--r--    1 root    root             5809 Jan 30  2001 /etc/protocols
-rw-------    1 root    root              114 Mar 29  2000 /etc/securetty
-rw-r--r--    1 root    root            17639 Mar  1  2001 /etc/services
drwxr-xr-x    1 root    root               72 Jun 22  2001 /usr/share/doc/setup-2.4.7
-rw-r--r--    1 root    root             1179 Feb 16  2001 /usr/share/doc/setup-2.4.7/uidgid
-rw-r--r--    1 root    root                0 Jun 22  2001 /var/log/lastlog

2.5.11. -qc

/etc/ 밑에 설치 되는 설정 화일만 알아보기

root@wow:/aaa/RPMS# rpm -qc hpoj
/etc/ptal-start.conf
/etc/ptal-stop.conf
/etc/rc.d/init.d/hpoj

2.5.12. -qdf

문서 화일을 보는 옵션이다.

root@wow:/aaa/RPMS# rpm -qdf /sbin/dump
/usr/share/doc/dump-0.4b21/CHANGES
/usr/share/doc/dump-0.4b21/COPYRIGHT
/usr/share/doc/dump-0.4b21/KNOWNBUGS
/usr/share/doc/dump-0.4b21/MAINTAINERS
/usr/share/doc/dump-0.4b21/README
/usr/share/doc/dump-0.4b21/REPORTING-BUGS
/usr/share/doc/dump-0.4b21/THANKS
/usr/share/doc/dump-0.4b21/TODO
/usr/share/doc/dump-0.4b21/dump.lsm
/usr/share/man/man8/dump.8.gz
/usr/share/man/man8/rdump.8.gz
/usr/share/man/man8/restore.8.gz
/usr/share/man/man8/rrestore.8.gz

2.5.13. -q -requires

패키지가 필요한 모듈 (의존성)

root@wow:/aaa/RPMS# rpm -q -requires dump
rmt  
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
ld-linux.so.2  
libc.so.6  
libcom_err.so.2  
libe2p.so.2  
libext2fs.so.2  
libreadline.so.4.1  
libtermcap.so.2  
libc.so.6(GLIBC_2.0)  
libc.so.6(GLIBC_2.1)  
libc.so.6(GLIBC_2.1.3)  
rpmlib(CompressedFileNames) <= 3.0.4-1
root@wow:/aaa/RPMS# 

2.5.14. -ql --dump

패키지 덤프 화일 보기

root@wow:/aaa/RPMS# rpm -ql --dump dump
/etc/dumpdates 0 982172352 d41d8cd98f00b204e9800998ecf8427e 0100664 root disk 1 0 3393 X
/sbin/dump 50140 982172354 6c57678dd26a765ed08e1391d037677f 0100755 root root 0 0 3406 X
/sbin/rdump 4 982172352  0120777 root root 0 0 20372 dump
/sbin/restore 72348 982172354 ff8ae2e4631de1fccd822de888722491 0100755 root root 0 0 7715 X
/sbin/rrestore 7 982172352  0120777 root root 0 0 7713 restore
/usr/share/doc/dump-0.4b21 4096 982172354  040755 root root 0 0 20376 X
/usr/share/doc/dump-0.4b21/CHANGES 27209 979411835 7a851ca3e9ee5f2e028572c85b640639 0100644 root root 0 1 20373 X
/usr/share/doc/dump-0.4b21/COPYRIGHT 2080 975944595 963d90fbeea4272f49e9f88cb01df1b6 0100644 root root 0 1 3409 X
/usr/share/doc/dump-0.4b21/KNOWNBUGS 652 943143432 dd0e6e2b7d193bac42caadc819069c89 0100644 root root 0 1 506 X
/usr/share/doc/dump-0.4b21/MAINTAINERS 527 975944595 d2122fbfa2d61bea97213a9a6a5290ca 0100644 root root 0 1 20352 X
/usr/share/doc/dump-0.4b21/README 353 939648664 7ea33b6ab167e746b61d06c695f9922f 0100644 root root 0 1 2562 X
/usr/share/doc/dump-0.4b21/REPORTING-BUGS 2491 975944595 a553ad81c2415f876a03a3019e6bd0b2 0100644 root root 0 1 3411 X
/usr/share/doc/dump-0.4b21/THANKS 2997 977397292 477772fd2b8cc709d8f8b1640e8b2a6e 0100644 root root 0 1 3394 X
/usr/share/doc/dump-0.4b21/TODO 1613 959884208 056f7dde4660874f9537fedc46289c2a 0100644 root root 0 1 3412 X
/usr/share/doc/dump-0.4b21/dump.lsm 611 979411835 3ab7a18193ddfeb5d7a784008a44b006 0100644 root root 0 1 3413 X
/usr/share/man/man8/dump.8.gz 6112 982172351 1898b0f6d96c9efb471ab9258b204536 0100644 root root 0 1 20374 X
/usr/share/man/man8/rdump.8.gz 9 982172353  0120777 root root 0 1 20285 dump.8.gz
/usr/share/man/man8/restore.8.gz 6292 982172351 f7aa2c9dca172530ff21acaa434a9712 0100644 root root 0 1 20377 X
/usr/share/man/man8/rrestore.8.gz 12 982172353  0120777 root root 0 1 7720 restore.8.gz

2.5.15. -q -scripts

패키지가 설치 되기전 또는 설치 된후에 실행되는 스크립트를 알아본다.

root@wow:/aaa/RPMS# rpm -q -scripts XFree86
preinstall script (through /bin/sh):
# here, we put things that we have moved around (like directories)
# that need to be cleaned up prior to the RPM's installation.
# Ugly. Necessary.
if [ ! -L /usr/X11R6/lib/X11/xkb/compiled ]; then
   if [ -d /usr/X11R6/lib/X11/xkb/compiled ]; then
      mkdir -p /var/lib/xkb 2>/dev/null
      mv -f /usr/X11R6/lib/X11/xkb/compiled/* /var/lib/xkb 2>/dev/null || :
      rmdir /usr/X11R6/lib/X11/xkb/compiled 2> /dev/null
      ln -sf ../../../../../var/lib/xkb /usr/X11R6/lib/X11/xkb/compiled 2>/dev/null || :
   fi
fi
postinstall script (through /bin/sh):
for dir in lbxproxy proxymngr rstart xserver ; do
  [ ! -L /usr/X11R6/lib/X11/$dir -a ! -d /usr/X11R6/lib/X11/$dir ] &&
     ln -snf ../../../../etc/X11/$dir /usr/X11R6/lib/X11/$dir || :
done

2.5.16. -q --queryformat

패키지의 정보를 알아볼때 문자열을 출력해준다.

root@wow:/aaa/RPMS# rpm -q --queryformat 'This is a test\n' dump
This is a test

2.5.17. --querytags

문자열 출력시에 사용되는 태그 값을 알아 본다.

root@wow:/aaa/RPMS# rpm --querytags
HEADERIMAGE
HEADERSIGNATURES
HEADERIMMUTABLE

2.5.18. -qcf

화일과 관련된 설정 화일을 알아본다.

root@wow:/aaa/RPMS# rpm -qcf /bin/bash
/etc/bashrc
/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc

2.5.19. -qpil

원하는 패키지로 부터 패키지 정보와 설치되는 곳의 정보를 알아본다.

root@wow:/aaa/RPMS# rpm -qpil setup-2.4.7-2wl.noarch.rpm
Name        : setup                        Relocations: (not relocateable)
Version     : 2.4.7                             Vendor: (none)
Release     : 2wl                           Build Date: Thu Apr 11 17:04:15 2002
Install date: (not installed)               Build Host: localhost
Group       : System Environment/Base       Source RPM: setup-2.4.7-2wl.src.rpm
Size        : 28659                            License: public domain
Summary     : A set of system configuration and setup files.
Description :
The setup package contains a set of important system configuration and
setup files, such as passwd, group, and profile.
/etc/csh.cshrc
/etc/csh.login
/etc/exports
/etc/filesystems
/etc/group
/etc/host.conf
/etc/hosts.allow
/etc/hosts.deny
/etc/inputrc
/etc/motd
/etc/passwd
/etc/printcap
/etc/profile
/etc/profile.d
/etc/protocols
/etc/securetty
/etc/services
/usr/share/doc/setup-2.4.7
/usr/share/doc/setup-2.4.7/uidgid
/var/log/lastlog

2.5.20. -qf

화일로 패키지 알아내기

rpm -qf /usr/bin/X11/mkfontdir
XFree86-xfs-4.0.3-5

2.5.21. -q --whatrequires

의존성 걸린 패키지 알아내기

rpm -q  --whatrequires  xmms
xmms-gnome-1.2.4-2wl
xmms-devel-1.2.4-2wl
xmms-esd-1.2.4-2wl
xmms-gl-1.2.4-2wl
xmms-mikmod-1.2.4-2wl

2.6. 비교하기

2.6.1. -K

md5 체크를 한다.

root@wow:/aaa/RPMS# rpm -K big-cursor-3.0-0wl.i386.rpm 
big-cursor-3.0-0wl.i386.rpm: md5 OK

2.6.2. -Kv

md5 체크를 해서 자세하게 보여준다.

root@wow:/aaa/RPMS# rpm -Kv big-cursor-3.0-0wl.i386.rpm 
big-cursor-3.0-0wl.i386.rpm:
MD5 sum OK: 00e39f57b2d202fbf17366430a7592c4

2.6.3. -Kvv

md5 체크를 해서 좀더 자세하게 보여준다.

root@wow:/aaa/RPMS# rpm -Kvv big-cursor-3.0-0wl.i386.rpm 
D: Expected size:         8647 = lead(96)+sigs(100)+pad(4)+data(8447)
D:   Actual size:         8647
big-cursor-3.0-0wl.i386.rpm:
MD5 sum OK: 00e39f57b2d202fbf17366430a7592c4

2.7. 검사하기

2.7.1. -V

설치된 패키지 검사하기. 설치 후 어떤 파일이 어떻게 바꼈는지 알 수 있다.

root@wow:/usr/src/redhat/RPMS/i386# rpm -V setup
S.5....T c /etc/printcap
S.5....T c /etc/profile

2.7.2. -Va --nofiles

설치된 모든 패키지를 검사하여 의존성에 문제가 있는 것을 찾아낸다.

root@wow:/usr/src/redhat/RPMS/i386# rpm -Va --nofiles 
Unsatisfied dependencies for hanterm-xf-p19-16wl: ttfonts-ko

2.8. spec 화일

2.8.1. spec 화일 정책

변수명과 정의 한 부분과의 간격은 탭(4) 3칸이동 으로 이동한다.

소스나 스펙 화일을 수정하지 않을시는 wow 을 붙이지 않는다

리릴즈 버전은 수정을 할때 마다 하나씩 올려준다.

소스는 어디에서 구했는지 url 을 꼭 적어 준다.

빌드 머신 호스트 이름 : wow

2.8.2. 매크로 정의

spec 화일에서 사용하는 변수나 매크로 정의는 /usr/lib/rpmrc 에 정의 되어 있다.

/etc/rpmrc 의 화일에 자신이 정의한 매크로를 만들어 사용할수 있다.

rpm --showrc 를 하면 spec 화일을 만들때 사용되는 매크로를 볼수 있다.
abi@wow:~/wowmake$ rpm --showrc | more 
ARCHITECTURE AND OS:
build arch            : i386
compatible build archs: athlon i686 i586 i486 i386 noarch
build os              : Linux
compatible build os's : Linux
install arch          : athlon
install os            : Linux
compatible archs      : athlon i686 i586 i486 i386 noarch
compatible os's       : Linux
........................
........................

2.8.3. 다음은 스펙정보의 예제 이다.

Summary:        GNU Compiler Collection
Name:           gcc
Version:        2.95.3
Release:        1wow

License:        GPL
URL:            http://gcc.gnu.org/
Source:         http://gcc.gnu.org/gcc-2.95/%{name}-%{version}.tar.gz
Group:          Development/Languages
Requires:       glibc
BuildRoot:      /var/tmp/%{name}-%{version}

Vendor:         WOWLiNUX co., Ltd <http://www.wowlinux.com>
Distribution:   WOWLiNUX 7.3 DeBak
Packager:       Kim Yong Il <nalabi@formail.org>

%description
A compiler aimed at integrating all the optimizations and features
necessary for a high-performance and stable development environment.

%package -n cpp
Summary: The C Preprocessor.
Group: Development/Languages
Prereq: /sbin/install-info

%description -n cpp
Cpp (or cccp) is the GNU C-Compatible Compiler Preprocessor.
.......................
......................


0) define		: 변수를 사용한다. name 이라는 변수를 gcc 로 치환을 해서 사용한다.
1) Summary		: 간단하게 요약을 해주는 부분
2) Name			: 꾸러미 이름을 지정한다	
3) Version		: 꾸러미 버전을 나타낸다.
4) Release		: 발표한 수를 나타낸다.
5) License		: 허가증을 적어 준다.
6) Group		: 어디에 묶여 있는지를 나타낸다. 
7) Source		: 원본 화일이 어디 있는지 적어 둔다.
8) URL			: 꾸러미 홈페이지를 적어 둔다.
9) Distribution		: 배포본을 나타낸다.
10) Vendor		: 매각인을 표시한다.
11) Packager		: 꾸러미 만든 사람을 적어둔다.
12) description		: 상세한 설명을 적어 둔다.

2.8.4. 소스 부분

Source: gcc-2.95.3.tar.gz

or

Source: http://gcc.gnu.org/gcc-2.95/gcc-2.95.3.tar.gz

이와 같이 Source 라는 부분에 /usr/src/redhat/SOURCES 에 놓여져 있는 소스 이름을 적어 준다.

또는 그 소스를 구한 곳의 전체 경로를 적어 주어도 된다.

rpm spec 화일은 마지만 소스 화일 이름과 버전 만을 참고 해서 꾸러미를 만들어 준다.

또한 원본 화일이 여러개가 있는 경우는 Source0, Source1 ... 이런식으로 쭉 적어 주면 된다.

2.8.5. setup

이부분은 /usr/src/redhat/BUILD 디렉토리에 소스를 화일을 푼다.

2.8.6. patch

%patch -p0 라는 형식으로 패치를 적용한다.

또한 패치가 여러개일 경우는 %patch0 -p0, %patch1 -p0 ... 과 같이 사용한다.

2.8.7. build

컴파일 시키는 소스가 있다면 ./configure 와 make 를 해주는 부분이다.

2.8.8. install

make install 을 해주는 부분이다.

일반적으로 매크로가 정의 되어 있는 부분은 이용해서 사용한다.

예) make prefix=$RPM_BUILD_ROOT%{prefix} install

2.8.9. clean

꾸러미 빌드중 임시 디렉토리가 생성 되는 데 이 빌드 디렉토리를 삭제한다.

2.8.10. files

/var/tmp/패키지이름-버전 디렉토리이 일반적으로 생기는데 여기서 임시로 바이너리및 패키지에 필요한 화일 들은 생성한다

여기에 생성된 화일들을 rpm 으로 묶어 준다.

%{_prefix}/bin/gcc 이런식으로 적어주면 /var/tmp 에 있는 바이너리 gcc 가 rpm 으로 묶인다.

%doc AUTHORS COPYING ChangeLog INSTALL NEWS README THANKS TODO 이와같이 하면 해당 문서들이

/usr/doc/이름-버전-릴리즈 라는 디렉토리로 묶인다.

%config /etc/sendmail.cf 를 지정하면 설치할때 .prmsave 가 붙어서 백업 됩니다.

%dir /usr/lib/sendmai 로 해주면 단지 그 디렉토리만 포함 합니다.

또한 %files -n cpp 하면

cpp 라는 또하나의 화일이름으로 rpm 이 만들어집니다.

이와같이 하면 한번의 rpm 꾸러미 생성 명령으로 여러개의 prm 을 만들어 낼수 있습니다.

또한 이명령을 사용할려면 %package -n cpp 이라고 정의를 해놓고 필요한 spec 화일을 작성해 넣어야 합니다.

2.8.11. if

spec 화일에서는 또한 if 문을 사용할수가 있어 여러개의 spec 화일 만들 필요없이 if 문을 사용해서 꾸러미를 만들수가 있다.

예제
gcc_i386=1

%if%{gcc_i386}
루틴 ( 0 일때 )
%else
루틴 ( 1 일때 )
%endif

2.8.12. Requires

rpm 설치시 필요한 패키지 및 화일

2.8.13. Buildprereq

rpm 을 만들때만 필요

2.9. rpm 만들기

2.9.1. -bp

%prep 에 있는 곳만 실행한다.

rpm -bp gqview.spec 
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.64362
.................

2.9.2. -bc

%prep, %build 에 있는 곳만 실행한다.

rpm -bc gqview.spec 
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.58496
........................
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.58496
.......................

2.9.3. -bi

%prep, %build, %install 에 있는 곳만 실행한다.

rpm -bi  gqview.spec 
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.75805
........................
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.34175
............................
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.74757
................................

2.9.4. -bb

%prep, %build, %install, package (bin) 에 있는 곳만 실행한다.

rpm -bb  gqview.spec 
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.75805
........................
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.34175
............................
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.74757
................................
Wrote: /usr/src/redhat/RPMS/i386/gqview-0.10.1-2wl.i386.rpm
......................

2.9.5. -ba

%prep, %build, %install, package (bin, src) 에 있는 spec 화일에 있는 모든 것을 실행한다.

rpm -bb  gqview.spec 
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.75805
........................
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.34175
............................
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.74757
................................
Wrote: /usr/src/redhat/SRPMS/gqview-0.10.1-2wl.src.rpm
Wrote: /usr/src/redhat/RPMS/i386/gqview-0.10.1-2wl.i386.rpm
...........................

2.9.6. -bs

소스 rpm (src.rpm) 을 만들어 준다.

root@wow:/usr/src/redhat/SPECS# rpm -bs anaconda.spec
Wrote: /usr/src/redhat/SRPMS/anaconda-7.1-8wl.src.rpm

2.9.7. --rebuild

소스 rpm 을 가지고 다시 빌드를 하는 방법

rpm --rebuild gqview-0.10.1-2wl.src.rpm 

2.10. rpm2cpio 사용하기

2.10.1. cpio -t

rpm에 묶여 있는 바이너리를 보여준다.

root@wow:/home/work/debak/skipjack# rpm2cpio syslinux-1.52-2.i386.rpm | cpio -t  
./usr/bin/syslinux
./usr/share/doc/syslinux-1.52
./usr/share/doc/syslinux-1.52/COPYING
./usr/share/doc/syslinux-1.52/NEWS
./usr/share/doc/syslinux-1.52/README
./usr/share/doc/syslinux-1.52/distrib.doc
./usr/share/doc/syslinux-1.52/keytab-lilo.doc
./usr/share/doc/syslinux-1.52/pxelinux.doc
./usr/share/doc/syslinux-1.52/syslinux.doc
156 blocks
	

2.10.2. cpio -E list --quiet -iumd

필요한 패키지를 축출한다.

list 라는 화일 목록에 축출할 화일이름들을 적어 넣은다음 cpio 명령어에서 list 라는 화일 이름을 부르면 된다.

root@wow:/home/work/debak/skipjack/imsi# l
합계 44
-rw-r--r--    1 root     root           19  4월 24 09:24 list
-rw-r--r--    1 root     root        37073  4월 24 08:54 syslinux-1.52-2.i386.rpm
root@wow:/home/work/debak/skipjack/imsi# cat list           
./usr/bin/syslinux
root@wow:/home/work/debak/skipjack/imsi# rpm2cpio syslinux-1.52-2.i386.rpm |( cpio -E list --quiet -iumd)
root@wow:/home/work/debak/skipjack/imsi# l
합계 48
-rw-r--r--    1 root     root           19  4월 24 09:24 list
-rw-r--r--    1 root     root        37073  4월 24 08:54 syslinux-1.52-2.i386.rpm
drwx------    3 root     root         4096  4월 24 09:31 usr
root@wow:/home/work/debak/skipjack/imsi# l usr/bin/syslinux 
-rwxr-xr-x    1 root     root        15132  6월 25  2001 usr/bin/syslinux

2.10.3. cd imsi; cpio -E ../list --quiet -iumd

imsi 라는 디렉토리를 말들어서 그곳에 모아 둘수도 있다.

rpm2cpio syslinux-1.52-2.i386.rpm |( cd imsi; cpio -E ../list --quiet -iumd)

# l imsi/usr/bin/syslinux 
-rwxr-xr-x    1 root     root        15132  6월 25  2001 imsi/usr/bin/syslinux

2.11. 3.7 패치 적용하기

root@wow:/usr/src/redhat/BUILD# l
total 17
drwxr-xr-x   25 root     root         2344 Apr 15 11:45 anaconda-7.1
drwxr-xr-x   25 root     root         2344 Apr 11 22:55 anaconda-7.1-orig

anaconda-7.1 디렉토리는 변경 화일이고, anaconda-7.1-orig 은 원래 화일이다.

diff -Nur anaconda-7.1-orig/ anaconda-7.1 > anaconda-wow-raid.patch

root@wow:/usr/src/redhat/SPECS# vi anaconda.spec
.................................
Patch20: anaconda-raid.patch
.................................
%prep
.................................
# Reiserfs with raid Patch
%patch20 -p1
.................................

패치를 적용하고 빌드를 해준다.