|
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 |
다음과 같은 명령어로 소스 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 |
기존의 것을 삭제하고 업그레이드하며 패키지 이름을 보여준다.
root@wow:~# rpm -Uv gcc-2.95.3-7.i686.rpm 설치할 패키지를 준비하고 있습니다... gcc-2.95.3-7 |
기존의 것을 삭제하고 업그레이드하며 그 설치 진행과 과정 # 표시로 자세히 보여준다.
root@wow:/usr/src/redhat/RPMS/i386# rpm -Uvh hanterm-xf-p19-16wl.i386.rpm Preparing... ########################################### [100%] 1:hanterm-xf ########################################### [100%] |
기존의 것을 삭제하고 처음 설치한다.
root@wow:/usr/src/redhat/RPMS/i386# rpm -i hanterm-xf-p19-16wl.i386.rpm |
의존성관계에 있는 다른 패키지가 설치되어 있지 않다해도 강제 설치한다
root@wow:/usr/src/redhat/RPMS/i386# rpm -Uvh hanterm-xf-p19-16wl.i386.rpm --nodeps Preparing... ########################################### [100%] 1:hanterm-xf ########################################### [100%] |
버전을 무시하고 강제로 설치한다.
rpm 버전을 다운 그레이드 할때 사용한다. (이때는 다른 패키지에 문제가 없는가를 주의 해야 한다)
root@wow:/usr/src/redhat/RPMS/i386# rpm -Uvh hanterm-xf-p19-16wl.i386.rpm --force --nodeps Preparing... ########################################### [100%] 1:hanterm-xf ########################################### [100%] |
아래와 같이 삭제를 하는 동안에 상세한 설명을 보여준다.
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 |
실제로 삭제를 하지 않고 잘지워지는가 연습을 하는 옵션이다.
의존성에 관여하지 않고 지우는 옵션이다.
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 |
질의한 패키지가 설치 되어 있는지 알아본다.
root@wow:~# rpm -qa | grep sysv tksysv-1.3-2 ntsysv-1.2.22-1 |
질의한 패키지를 찾을 때 대소문자를 구분하지 않는다.
root@wow:~# rpm -qa | grep -i sysv SysVinit-2.78-15 tksysv-1.3-2 ntsysv-1.2.22-1 |
모듈이 설치 되어 있는 패키지 알아보기
root@wow:~# rpm -q --whatprovides module-info kernel-2.4.2-3 kernel-2.4.16-7wl |
패키지 정보 알아보기
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. |
패키지 목록 알아보기
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 |
패키지 목록 자세한 정보 알아보기
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 |
/etc/ 밑에 설치 되는 설정 화일만 알아보기
root@wow:/aaa/RPMS# rpm -qc hpoj /etc/ptal-start.conf /etc/ptal-stop.conf /etc/rc.d/init.d/hpoj |
문서 화일을 보는 옵션이다.
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 |
패키지가 필요한 모듈 (의존성)
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# |
패키지 덤프 화일 보기
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 |
패키지가 설치 되기전 또는 설치 된후에 실행되는 스크립트를 알아본다.
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 |
패키지의 정보를 알아볼때 문자열을 출력해준다.
root@wow:/aaa/RPMS# rpm -q --queryformat 'This is a test\n' dump This is a test |
문자열 출력시에 사용되는 태그 값을 알아 본다.
root@wow:/aaa/RPMS# rpm --querytags HEADERIMAGE HEADERSIGNATURES HEADERIMMUTABLE |
화일과 관련된 설정 화일을 알아본다.
root@wow:/aaa/RPMS# rpm -qcf /bin/bash /etc/bashrc /etc/skel/.bash_logout /etc/skel/.bash_profile /etc/skel/.bashrc |
원하는 패키지로 부터 패키지 정보와 설치되는 곳의 정보를 알아본다.
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 |
의존성 걸린 패키지 알아내기
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 |
md5 체크를 한다.
root@wow:/aaa/RPMS# rpm -K big-cursor-3.0-0wl.i386.rpm big-cursor-3.0-0wl.i386.rpm: md5 OK |
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 |
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 |
설치된 패키지 검사하기. 설치 후 어떤 파일이 어떻게 바꼈는지 알 수 있다.
root@wow:/usr/src/redhat/RPMS/i386# rpm -V setup S.5....T c /etc/printcap S.5....T c /etc/profile |
설치된 모든 패키지를 검사하여 의존성에 문제가 있는 것을 찾아낸다.
root@wow:/usr/src/redhat/RPMS/i386# rpm -Va --nofiles Unsatisfied dependencies for hanterm-xf-p19-16wl: ttfonts-ko |
변수명과 정의 한 부분과의 간격은 탭(4) 3칸이동 으로 이동한다.
소스나 스펙 화일을 수정하지 않을시는 wow 을 붙이지 않는다
리릴즈 버전은 수정을 할때 마다 하나씩 올려준다.
소스는 어디에서 구했는지 url 을 꼭 적어 준다.
빌드 머신 호스트 이름 : wow
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 ........................ ........................ |
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 : 상세한 설명을 적어 둔다. |
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 ... 이런식으로 쭉 적어 주면 된다.
이부분은 /usr/src/redhat/BUILD 디렉토리에 소스를 화일을 푼다.
컴파일 시키는 소스가 있다면 ./configure 와 make 를 해주는 부분이다.
make install 을 해주는 부분이다.
일반적으로 매크로가 정의 되어 있는 부분은 이용해서 사용한다.
예) make prefix=$RPM_BUILD_ROOT%{prefix} install
꾸러미 빌드중 임시 디렉토리가 생성 되는 데 이 빌드 디렉토리를 삭제한다.
/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 화일을 작성해 넣어야 합니다.
spec 화일에서는 또한 if 문을 사용할수가 있어 여러개의 spec 화일 만들 필요없이 if 문을 사용해서 꾸러미를 만들수가 있다.
예제
gcc_i386=1 %if%{gcc_i386} 루틴 ( 0 일때 ) %else 루틴 ( 1 일때 ) %endif |
rpm 설치시 필요한 패키지 및 화일
rpm 을 만들때만 필요
%prep 에 있는 곳만 실행한다.
rpm -bp gqview.spec Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.64362 ................. |
%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 ....................... |
%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 ................................ |
%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 ...................... |
%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 ........................... |
소스 rpm (src.rpm) 을 만들어 준다.
root@wow:/usr/src/redhat/SPECS# rpm -bs anaconda.spec Wrote: /usr/src/redhat/SRPMS/anaconda-7.1-8wl.src.rpm |
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 |
필요한 패키지를 축출한다.
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 |
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 |
패치 화일 지정 하기
꾸러미 이름 - 내용 - wow - 내용 . patch
예) anaconda-wow-raid.patch
기본 패치 옵션 : diff -Nur
지미안 패치 옵션 : diff Ncr
예) diff -Nur gaim-0.56-orig/src/test.c gaim-0.56/src/test.c > gaim-test-wow-fontset.patch
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 ................................. |
패치를 적용하고 빌드를 해준다.