RPM패키지는 어떻게 만드나요?

글쓴이: 익명 사용자 / 작성시간: 월, 2002/07/08 - 3:23오후
솔라리스의 소스를 가지고 리눅스로 포팅 작업을 하고 있슴다.
솔라리스에서는 패키지를 만들어서 pkgadd라는 것을 통해 인스톨한다고 알고
있습니다. 물론 거기에 필요한 파일(prototype,respfile등등)들이 부가적으
로 존재하게 되겠지요.
리눅스에서는 pkgadd라는 유틸이 존재하지 않고 RPM형식으로 패키지를 작성
하여 쉽게 관리하고자 하는데 방법을 알길이 없군요..
어딘선가 RPM패키지를 만들기 위해서는
1. /usr/src/redhat/이하의 디렉토리를 이용하고...
2. Spec파일의 정의가 필요하고...
위와 같은 방법이 동원된다고 정보를 뒤져서 얻어 들었지만...
막상..해보니까 잘 모르겠군요...
<가장 이해 안가는 부분> 1.Spec 파일을 작성하는 부분.
제가 머리가 딸려서 그러니 쉽게 설명해 주시면..대단히 감사하겠습니다.
Forums:
Re: RPM패키지는 어떻게 만드나요?
http//www-903.ibm.com/developerworks/kr/linux/
에 보시면
RPM을 이용한 소프트웨어 패키지, Part 1 Red Hat Linux 7.1에서
RPM 사용하기(기술자료)
RPM을 이용한 소프트웨어 패키지, Part 2 Root 없는 구현, 소프트
웨어 패치, RPM 배포(기술자료)
라고 있습니다..참조하세여.
rpm 만드는 것은 매우 쉽습니다.
저는 아주 용량이 적은 프로그램의 SRPM 파일을 받아다가 분석을 해서
만들었었는데 금방하실수 있습니다.
Re^2: RPM패키지는 어떻게 만드나요?
대단히 감사합니다.
근데...제가 패키지화 하고자 하는 것이 몇개의 디렉토리와 실행파일
그리고...텍스트파일인데....
그것도 가능한건가요?
결국...abc ------------ directory1---abc1
|______ directory2---sh1
|______ abc.txt
|______ binary.bin
이런식의 정보를 패키지로 묶어서 설치하고 삭제가 rpm에선 가능하다는 건가
요?
(내용중에...컴파일이란 말이 언급되어서리...궁금해서)
Re^3: RPM패키지는 어떻게 만드나요?
Summary GNU indent
Name indent
Version 2.2.6
Release 2
Source0 %{name}-%{version}.tar.gz
License GPL
Group Development/Tools
BuildRoot %{_builddir}/%{name}-root
%description
The GNU indent program reformats C code to any of a variety of
formatting standards, or you can define your own.
%prep
%setup -q
%build
./configure
make
%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
/usr/local/bin/indent
%doc /usr/local/info/indent.info
%doc %attr(0444,root,root) /usr/local/man/man1/indent.1
%doc COPYING AUTHORS README NEWS
만약에 이런식으로 만든다면 저같은 경우는 다른것은 다 빼고 %files 밑에
다가 제가 패키징할 파일이름을 써주었습니다.
쉽게 ls 를 /usr/local/ls 로 카피를 하시고 만들어 보시기 바랍니다.
Re^4: RPM패키지는 어떻게 만드나요?
죄송합니다. 도대체 이해가 잘 되지 않아서...
제가 구현하고자 하는 소스를 간단하게 올립니다. 지금까지 도움으로도 충분히
감사한데도 제가 염치가 없어서...죄송합니다.
<<<< 쉘 스크립트 소스 코드 >>>> # 패키지화할 디렉토리(로컬에 있슴돠)에 심볼릭 링크를 걸어 둔다. if [ ! -h bin ] then ln -s ../../bin fi if [ ! -h lib ] then ln -s ../../lib fi
CurrentDir="`pwd`"
# 변수 정의 부분
TARNAME="ttt-10.0.tar" <- 위에서 링크로 걸어 둔 파일들을 압축할 파일명
SPECNAME="ttt.spec" <- 스펙명
RPMNAME="ttt-10.0-1.rpm" <- rpm명
SOURCES_PATH="/usr/src/redhat/SOURCES"
RPMS_PATH="/usr/src/redhat/RPMS/$HOSTTYPE"
SPECS_PATH="/usr/src/redhat/SPECS"
# 1.현재의 디렉토리를 압축하기 시작한다.<- 이것이 패키지 소스가 된다.
tar -cvf ../$TARNAME $CurrentDir
gzip ../$TARNAME
# 2. 위의 1에 의해 생성된 패키지를 /usr/src/redhat/SOURCES로 옮겨놓는
다.
mv ../$TARNAME.gz $SOURCES_PATH/$TARNAME.gz
# 3. 미리 작성한 스펙파일을 /usr/src/redhat/SPECS으로 옮겨 놓는다.
mv $CurrentDir/$SPECNAME $SPECS_PATH/$SPECNAME
# 4. rpm패키지를 생성한다.
rpm -ba $SPECS_PATH/$SPECNAME
<<< 스펙 파일 내용 >>> Summary xxx Name ttt Version 10.0 Release 1 Source0 %{name}-%{version}.tar.gz License Commercial Group Applications
%description
aaa
%prep
%setup -q
%install
make install
%files
%defattr(-,root,root)
==================================================================
위의 쉘 스크립트를 실행시키면...다음과 같은 에러 화면이 뜹니다.
source/FJSVswsts/StorageMGR/SE/5.1/pkg/Linux/bin
source/FJSVswsts/StorageMGR/SE/5.1/pkg/Linux/lib
에러 File /usr/src/redhat/SPECS/FJSVswsts.spec does not appear to
be a specfile.
==================================================================
이상입니다.
패키지 제작은 바이너리만 하는 것은 아닌 것 같은데...스펙파일을 보면
%build라는 섹션이 있고...제가 압축하여 패키지로 만들고자 하는 파일들은
일반 파일(텍스트파일)도 있고..이미 컴파일되어 바이너리로 된 파일도 있는
데...그냥 원하는 위치에 설치하면 되는 거 아닌가 싶은데...무지 복잡하게
생각되네요.
<<<짧은 저의 지식>>>
1.패키지는 관련있는 파일(텍스트,디렉토리,이진파일등)을 뭉쳐 놓은 것이다.
2.설치라 함은 원하는 위치에 관련 패키지를 풀어 놓는 것이다.
3.rpm이라는 것은 설치/제거/갱신등..패키지 관리를 위해 레드헷사에서 만든
유틸리티이다.
등
댓글 달기