2014-12-27 6 views
2

RPM 패키지를 사용하여 설치하려는 Java 파일과 함께 매우 간단한 tar.gz 파일이 있습니다. 이 사양 파일을 만들었습니다.RPM 사양 파일에 대상 디렉토리 설정

Name:   test 
Version:  1.0 
Release:  1%{?dist} 
Summary:  test installation script 

Group:   Utilities 
License:  GPL 
URL:   http://oracle-base.com/articles/linux/linux-build-simple-rpm-packages.php 
Source0:  test-1.0.tar.gz 
BuildArch:  x86_64 
BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) 

#BuildRequires: 
#Requires:  

%description 
test installation script 

%prep 
%setup -c /opt/test 


%build 
#%%configure 
#make %{?_smp_mflags} 


%install 
rm -rf $RPM_BUILD_ROOT 
#make install DESTDIR=$RPM_BUILD_ROOT 

#install -d $RPM_BUILD_ROOT/opt/agent 


%clean 
rm -rf $RPM_BUILD_ROOT 


%files 
%defattr(-,root,root,-) 
%doc 

%changelog 

대상 파일을 추출해야하는 대상 디렉토리를 어떻게 구성 할 수 있는지 명확하지 않습니다. 내가 누락 된 부분을 말해 줄 수 있니?

+0

은'URL' 태그는 일반적으로 포장되는 프로젝트의 URL (URL 아닌 대한 [페도 위키 RPM 워드 프로세서 (https://fedoraproject.org/wiki/How_to_create_an_RPM_package#SPEC_file_overview) 참조 (사용 RPM 패키지 구축에 대한 페이지)의. 즉, 그 가이드의 "오류"입니다. –

답변

2

RPM 패키지의 빌드 프로세스는 빌드 디렉토리 내에서 완전히를 운영해야하며, 어떤 방식으로해야 하지 터치 호스트 시스템.

그래서 %setup -c /opt/test은 올바르지 않으므로 호스트 시스템에 디렉토리가 생성됩니다. 대신 간단히 %setup -q을 사용하고 기본 매크로가 기본 빌드 디렉토리에서 소스 타볼을 추출하도록해야합니다. (만약 당신의 타르볼이 최상위 디렉토리를 가지고 있지 않다면 그것은 "tar-bomb"입니다. 그러면 -c 플래그를 상대 경로와 함께 사용하여 현재 디렉토리의 최상위 디렉토리로 만듭니다.

빌드 할 소스가 없다면 %build 섹션이 전혀 필요하지 않습니다.

%install 섹션은 로컬 빌드 디렉토리에서 buildroot의 최종 디렉토리로 파일을 복사하기위한 것입니다. 링크 된 가이드) 파일을 $RPM_BUILD_ROOT/opt/test 또는 $RPM_BUILD_ROOT 아래의 다른 경로로 복사해야합니다.

이러한 경로 (witho 그러면 $RPM_BUILD_ROOT 접두어)가 %files 섹션에 나열되어야합니다.

페도라 프로젝트는 유용 할 RPM을 빌드 할 때 somedocumentation을 가지고 있습니다. Maximum RPM 책은 오래되고 다소 오래되었지만 여전히 유용한 정보원입니다.

2

다른 대답은 이미 % setup -c 명령의 문제점과 RPM 작성의 일반 원칙을 설명했습니다.

난 당신이 RPM 빌드 스크립트가 작동하는 방법을 이해하는 데 도움이 될 수있는 다음을 추가 할 것입니다 :

%install 
rm -rf $RPM_BUILD_ROOT 
#make install DESTDIR=$RPM_BUILD_ROOT 

위의 조각은, 골격 사양 파일에서, 당신에게 큰 단서를 제공합니다. 여기서해야 할 일은 $ RPM_BUILD_ROOT 아래에 설치 이미지를 만드는 것입니다. 당신은, 예를 들어,/옵션/테스트 파일을 설치하려면

그래서, 당신은 아마 그런 짓을 할 것 :

%install 
rm -rf $RPM_BUILD_ROOT 
mkdir -p $RPM_BUILD_ROOT/opt/test/bin 
cp <something> $RPM_BUILD_ROOT/opt/test/bin/something 

RPM을 빌드 스크립트는 본질적으로 무엇을 만들 예정이다 $ RPM_BUILD_ROOT 아래의 설치 이미지. rpm을 실행하여 패키지를 만들고 $ RPM_BUILD_ROOT의 내용을 설치하는 바이너리 설치 가능 rpm 파일을 생성합니다.

또한 설치가 완료된 모든 개별 파일을 나열하는 % 파일 섹션이 온 전성 검사로 필요합니다. rpm은 $ RPM_BUILD_ROOT에 나열된 파일 만 패키지합니다.

그래서, 당신의 일반적인 지침은 다음과 같습니다

설정 섹션에서
  • 는, 현재 작업 디렉토리로 타르볼의 압축을 풉니 다. rpm은 빌드를위한 스크래치 디렉토리를 생성한다. 기본적으로 % setup은 파일을 압축 해제합니다. 설치 섹션에서

  • , 당신은 $의 RPM_BUILD_ROOT 현재 작업 디렉토리에서 원하는 것을 복사합니다. 이것은 설치 이미지가됩니다.

+0

감사합니다. 내가 사이의 관계를 이해하려고 노력 마르스/책을 읽고 있었다 (목록/build_root 구조/설치 DIRS 파리) 및 모든 자원에 분명히 무슨 일이 일어나고 있는지 언급하지 않았다. "이미지 $의 RPM_BUILD_ROOT에서"말하는 나를 이해했다 것이었다. – egelev