2014-02-26 3 views
0

솔라리스 11의 패키징 방식에 대해 많은 고민을하고 있습니다. yum 유형 패키징 방식이 있다는 것을 알고 있지만 패키지를 전달한 다음 설치 또는 업그레이드 할 수있는 방법이 rpm -irpm -U 일 것으로 예상됩니다.Solaris 패키지 업그레이드

지금은 패키지를 만드는 방법을 추적했습니다 (예 : pkgmkpkgtrans).

pkgadd -d foo_1.0.pkg

그러나 나는 "foo_2.0.pkg"로이 패키지를 업그레이드하는 방법을 알아낼 수 없습니다 감안할 때이 I는 다음과 같이 설치할 수있는 "foo_1.0.pkg"파일을 만들 수 있습니다 :

[email protected] # pkgadd -d foo_2.0.pkg 

The following packages are available: 
    1 foo  foo 
      (x86) private_build 

Select package(s) you wish to process (or 'all' to process 
all packages). (default: all) [?,??,q]: all 

Processing package instance <foo> from </root/foo_2.0.pkg> 

foo(x86) private_build 

Current administration requires that a unique instance of the <foo> 
package be created. However, the maximum number of instances of the 
package which may be supported at one time on the same system has 
already been met. 

No changes were made to the system. 

내가 뭘 잘못하고 있니? pkg update을 사용해야하는 것으로 보입니다.하지만 이는 내 pkg을 repo에 출시해야 함을 의미합니다.

답변

3

먼저 Solaris 11 패키지 (IPS)를 사용하지 않고 기존 SVR4 패키지를 사용하고 있습니다.

후자의 경우 사용자 지정 패키지를 업그레이드 할 수 없습니다. 유일한 방법은 단순히 이전 패키지를 제거하고 최신 패키지를 설치하는 것입니다. 이는 rpm -U이 어쨌든 두포에서 수행하는 작업입니다.

pkgrm foo 
pkgadd -d foo_2.0.pkg foo 
+0

예, 맞습니다. IPS를 사용해야합니다. 명확하지 않지만 솔라리스 10과 11을 모두 지원해야합니다. 둘 모두에 대해 하나의 프로세스 만 갖고 싶습니다. 따라서 레거시 프로세스가 필요합니다. 'rpm -U'에 대해서''remove then add ''를하는 것은 사실이라고 생각하지 않지만 대신 오버레이라고 생각합니다. 내 응용 프로그램은 응용 프로그램 디렉토리에 상태를 기록하는 메모리 DB를 사용하므로 업그레이드시 오버레이하여 상태를 유지하려고합니다. 이것은'pkgrm'과'pkgadd'가 필요하다면 분명히 어색하게됩니다. "업데이트"개념이 없다면 "상태"를 복원하기 위해 수동 프로세스가 필요할 것입니다. – mlathe

+0

맞습니다.'rpm -U'는 처음으로 새 버전을 설치 한 다음 오래된 파일을 제거합니다.어쨌든, 상태 파일이 패키지에 의해 전달되지 않았지만 나중에 응용 프로그램에 의해 생성되면, 상태 파일은'pkgrm' 명령에 의해 보존 될 것이라고 나는 믿습니다. – jlliagre

+0

아 ... 네 말이 맞아. 내 postremove 스크립트는 설치 디렉토리의 "rm -rf"를 수행합니다. 당신이 말한 것처럼 그것이 "국가"를 떠날 것임을 확인합니다. 하나의 질문이지만 왼쪽에있는 "상태"파일 (로그, 임시 파일, DB 등)과 관련하여 공통된 흐름이 있습니다. postremove 스크립트는 파일이 남아 있다고 사용자에게 알려야합니까? 스크립트가 대화식이어야하고 파일을 제거해야하는지 여부를 묻는 것이 좋습니까? 가장 좋은 방법은 무엇입니까? – mlathe

0

동일한 문제가 있었지만 설정 파일을 cmd에 전달하여 해결할 수있었습니다. 이것은 "echo |"와 함께 사용할 때 스크립트에서 특히 유용합니다. 확인 프롬프트도 무시하므로 config 파일은/var/sadm/install/admin/default 파일에있는 기본 설치 등록 정보를 덮어 씁니다. 키는 인스턴스 = 덮어 쓰기 행입니다. 나는 다른 프롬프트를 피하기 위해 다른 것들도 변경했다. 대체 솔루션으로 기본 파일을 직접 변경할 수 있으며 추가 구성 파일을 참조하지 않아도됩니다.

myprog1.0 (또는 2.0)이 이미 설치된 상태에서 다음 명령을 실행하십시오. /opt/myprog/install.conf 파일의

echo | pkgadd -a /opt/myprog/install.conf -d myprog2.0 

내용 :

mail= 
instance=overwrite 
partial=nocheck 
runlevel=nocheck 
idepend=nocheck 
rdepend=nocheck 
space=ask 
setuid=ask 
conflict=nocheck 
action=nocheck 
networktimeout=60 
networkretries=3 
authentication=quit 
keystore=/var/sadm/security 
proxy= 
1

$의 UPDATE

이 변수는 대부분의 설치 환경에서 존재하지 않습니다. 존재하는 경우 (값이 yes 인 경우), 이름, 버전 및 아키텍처가 같은 PKG가 이미 시스템에 설치되어 있거나 설치 PKG가 설치된 PKG를 겹쳐 쓸 것임을 의미합니다. 그런 다음 원래 BASEDIR이 사용됩니다. 그래서이 변수는 모든 업데이트를 위해 사전 설치 또는 사후 설치 스크립트에서 사용할 수 있습니다.