2014-09-17 3 views
4

나는 이걸로 얼마 동안 고민하고 있습니다. 그래서 프로젝트를위한 .specs 파일을 작성했는데 모든 것이 잘되었습니다. rpm이 만들어지면 설치가 순조로 웠습니다.하지만 이제는 설치 경로를 설정하기 위해 커스텀 글로벌 환경 변수를 사용해야하기 때문에 몇 가지 문제가 있습니다.rpm & rpmbuild - % files 섹션의 글로벌 환경 변수 사용

이 같은 % 파일 섹션을 줄 것이다 :

%files 
%defattr(-,root,root) 
$INSTALLPATH/Crystal/bin/Crystal.jar 

크리스탈 내 프로젝트 이름이며, INSTALLPATH는 수출 명령 줄에 ENV 덕분에 정의된다. 그런 다음, Crystal.specs -ba buildrpm을 실행했을 때 다음과 같은 오류가 있습니다 :

error: File must begin with "/" : $INSTALLPATH/Crystal/bin/Crystal.jar 

나는 그런으로 된 .rpmmacros 파일 내부에 매크로를 정의하는 것을 시도했다 : % _installpath의 $의 INSTALLPATH

그리고 내 사양 파일에서 할 때 echo % {_ installpath} .rpmmacros에서 설정 한 값을 얻습니다. 하지만 % 파일에서 사용하면 :

%files 
%defattr(-,root,root) 
%{_installpath}/Crystal/bin/Crystal.jar 

나는 다시 같은 오류가 발생합니다!

error: File must begin with "/" : $INSTALLPATH/Crystal/bin/Crystal.jar 

또한 specs 파일을 사용하여 변수를 정의하려고 시도했지만 동일한 슬픈 결과가있었습니다. 내 변수/매크로가 $ INSTALL을 참조한다면, % 파일은 그것을 받아들이지 않을 것입니다. 하지만이 env 변수를 사용해야합니다!

내가 생각할 수있는 전부입니다. 누구나 단서가 있니? 어떤 도움이라도 대단히 감사하겠습니다.

미리 감사드립니다.

답변

4

%files 섹션은 쉘 변수를 확장하지 않습니다. 그렇게 할 수는 없습니다.

내가 볼 수있는 몇 가지 옵션이 있습니다. 당신은

  • 은 (%install 동안 또는 무슨 일이 -이 - 당신을) 파일의 목록이있는 파일을 생성 할 수 있습니다 다음 %files -f files.lst

  • 과 함께 RPM 매크로 정의시 $INSTALLPATH을 확장하여 사용

    # For RPM >= 4.7.0 
    %_installpath %{getenv:INSTALLPATH} 
    # For RPM < 4.7.0 
    %_installpath %{lua:print(os.getenv("INSTALLPATH"))} 
    
+0

예, 그게 전부입니다. 나는 첫 번째 해결책을 사용했다. 고마워요! – Rinita

+0

@Etan Reisner :'% files' 섹션에서 셸 변수를 사용할 수 있습니다. 아주 흉측하고 읽을 수는 없겠지만, 스펙의 다른 곳과 같은 방식입니다. 예 : '% (echo $ INSTALLPATH/Crystal/bin/Crystal.jar) '를 사용하면 OP가 원하는 것을 얻을 수 있습니다. – doktor5000

+0

@ doktor5000 쉘 변수를 확장하는'% files' 섹션이 아닙니다. ('% files' 섹션이 그렇게하지 않는다고 생각합니다.) 그것은'% (...)'매크로를 사용했기 때문에'rpm'이 수동으로 구문 분석 할 때 확장을 수행합니다. 하지만 그렇습니다. (아마도) 효과가 있었을 것입니다 ... '% (...)'확장이 올바른 매크로 범위에서 수행된다고 가정하십시오. –