소개

이 테크 팁은 SPARC 혹은 x86 플랫폼에서의 솔라리스 8, 9, 10을 운용하고 있는 서버에서 패키지의 상태를 원하는 상태로 유지할 수 있도록 하는데에 사용할 수 있는 패키지 관리 유틸리티 pkgman 에 대해 설명 합니다. GUI 생성을 위한 멀티 플랫폼 툴킷인 GTK+ 를 pkgman 을 이용하여 설치할 것입니다.

참고 : 이 글의 예제는 솔라리스10을 이용합니다.


순서

이 글은 아래와 같은 주제들을 다룹니다:


배경지식

솔라리스 호스트에서 패키지를 추가하거나 제거하는 일은 간단한 일입니다. 그러나 만약 서로 다른 패키지 요구사항을 가진 서로 다른 버전의 솔라리스를 다수 가지고 있다면 이러한 작업은 꽤 귀찮아 집니다.

호스트가 점프스타트된 이후 추가적인 소프트웨어 패키지 설치 요청이 들어 오면 어떤 일이 벌어질 까요? 해당 소프트웨어를 이미 사용중인지를 알아볼 수 있는 믿을만한 소스를 가지고 있나요? 혹은 요청에 대한 응답이 누가 그것을 응답하느냐에 따라 다른가요? 여러분은 어떻게 동일한 버전의 패키지 인스턴스가 여러분의 설정안에서 지속적으로 설치되도록 보장할 수 있을까요? 롤링업그레이드가 필요하다면, 예를 들어 PostgreSQL 이 개발, 테스트 및 프로덕션을 거친다면 어떨까요? 이러한 작업을 위한 문서화된 절차가 있나요? 만약 그렇다면 필자는 pkgman 을 만드는데 시간을 소비한 것이 됩니다.

필자의 솔라리스 관리자로써의 경험으로 비우처 볼때 개인적으로 이전의 문제에 대한 우아한 해결책을 위해 씨름해 왔고 비슷한 문제를 겪은 사람들을 많이 만나 보았습니다. 이전 필자의 접근 방식의 문제점은 너무 복잡하다는 것이었습니다. 결국 이러한 해결방식은 오직 필자만이 쉽게 패키지를 설치하고 업그레이드 하며 삭제 할 수 있었습니다. 당연히 휴가를 가고 싶거나 아플때에는 종종 쉬고 싶었기 때문에 필자는 다시 칠판으로 돌아왔습니다.

이 문서의 목표는 pkgman 을 설치하고 설정함으로써 패키지를 관리하는 법을 보여주는 것입니다. Installing the GTK+ (2.12.0) package from Sunfreeware.com 에서 GTK+ (2.12.0) 패키지를 설치 하는 것이 예제의 핵심입니다. GTK+ 패키지 설치는 매우 훌륭하고 실전적인 예제로써 pkgman 을 어떻게 이용할지에 대한 아이디어를 제공할 것입니다.


pkgman
요구사항

일단 pkgman 의 요구사항 부터 시작할 것입니다.

  • Ruby 버전 1.8.X 이 pkgman 을 실행하는데에 필요 합니다
  • 설치하려는 솔라리스 패키지가 반드시 데이타 스트림 포맷 내에 존재 해야 합니다.
  • 설치하려는 패키지는 HTTP 를 통해서 로컬로 접근이 가능해야 합니다.


pkgman
설치하기

요구사항을 모두 만족시켰다면 pkgman 설치 단계로 넘어가 봅시다:

http://code.google.com/p/pkgman/downloads/list 의 다운로드 리스트에서 "latest stable version" 이라고 표시된 tarball 을 다운로드 합니다. 타볼의 이름은 pkgman-<release number>.tar.gz 입니다.

타볼을 풉니다. pkgman-<release number> 이라는 디렉토리가 생겼을 것입니다.

이와 같은 방법 대신에 subversion 을 이용해서 pkgman 저장소를 체크아웃할 수도 있습니다. 다음의 커맨드를 이용해서 pkgman 디렉토리에 pkgman subversion 저장소를 체크아웃 해 봅시다:

svn checkout http://pkgman.googlecode.com/svn/trunk/ pkgman

pkgman 디렉토리의 루트 디렉토리로 이동합니다.

셋업 스크립트는 /usr/localpkgman 배치의 접두사로 이용 합니다. 그러므로 실행파일들은 /usr/local/bin 로 가게 되고 설정 파일들은 /usr/local/etc 로 가게 됩니다. 설정 스크립트는 또한 여러분 호스트의 Ruby 경로와 매칭되도록 파일들을 수정합니다.

ruby setup.rb
---> bin
<--- bin
---> conf
<--- conf
---> bin
<--- bin
---> conf
<--- conf
rm -f InstalledFiles
---> bin
mkdir -p /usr/local/bin/
install pkgman.rb /usr/local/bin/
<--- bin
---> conf
mkdir -p /usr/local/etc/
install pkgman.yaml /usr/local/etc/
<--- conf

만약 pkgman 을 다른 디렉토리에 설치하려면 아래와 같이 작업합니다. 여기서 필자는 디렉토리의 접두사를 /usr/local 에서 홈 디렉토리로 변경했습니다:

ruby setup.rb all --prefix=$HOME
---> bin
<--- bin
---> conf
<--- conf
---> bin
<--- bin
---> conf
<--- conf
rm -f InstalledFiles
---> bin
mkdir -p /users/deet/bin/
install pkgman.rb /users/deet/bin/
<--- bin
---> conf
mkdir -p /users/deet/etc/
install pkgman.yaml /users/deet/etc/
<--- conf


GTK+ 패키지 설치하기

이제 pkgman/usr/local/bin/pkgman.rb (혹은 여러분이 설치한 곳) 에서 사용 가능합니다. 이제 패키지를 설치하는 작업에 집중해 봅시다.

일단 여러분은 sunfreeware.com 의 미러중에서 여러분에게 가장 잘 맞는 곳을 선택하길 원할 것입니다. 사용가능한 미러 사이트 리스트 를 확인하시기 바랍니다.

대역폭의 비용을 고려하여 패키지를 일단 로컬 사이트로 다운로드 하고 이후에 HTTP 를 통해서 로컬로 접근할 수 있도록 합니다. 이글을 쓰는 시점(2007년 12월)에서 GTK+ 를 위해 필요한 소프트웨어 패키지와 버전은 다음과 같습니다:

atk-1.18.0
cairo-1.4.10
expat-1.95.5
fontconfig-2.4.2
freetype-2.3.1
glib-2.14.1
gtk+-2.12.0
jpeg-6b
libiconv-1.11
libpng-1.2.23
pango-1.18.2
render-0.8
renderproto-0.9.3
tiff-3.8.2
xrender-0.8.3
zlib-1.2.3

이러한 패키지들은 libgcc 공유 오브젝트들을 요구함을 기억하시기 바랍니다. 이 예제에서 필자는 libgcc 가 이미 설치되어 있다고 가정합니다. libgcc 설치가 필요하다면 config 파일 설정하기 이후에 libgcc 를 설치할 수 있습니다.

필요한 패키지들을 다운로드 받은 다음에는 HTTP 로의 접근이 가능하도록 만들어야 합니다. 추가적으로 패키지의 압축을 해제해야 합니다. 왜냐하면 pkgman은 현재 압축된 패키지를 지원하지 않기 떄문입니다. 압축 파일들의 접근을 위한 ehancement request 가 존재 합니다.

gzip 으로 압축된 패키지들을 압축해제 하기 위해 다음의 커맨드를 이용합니다:

for f in `ls *gz`; do gunzip $f; done


pkgman.yaml
설정 파일 만들기

이제 우리는 pkgman.yaml 설정 파일을 만들어 보겠습니다.

필자는 pkgman.yaml 파일에서 모든 커멘트들을 제거했습니다. 설정 파일은 어떠한 패키지가 설치되어야 하고 제거되어야 하는지에 대한 정보를 담고 있습니다. 스크립트 설정은 패키지의 위치와 작업의 로그 방식에 대한 사항들로 구성되어 있습니다.

아래는 필자의 환경에서의 pkgman.yaml 파일 스크립트 설정 섹션 입니다:

---
-
:http_host: jumpstart
:http_port: 1080
:http_uri: /jumpstart/pkgs/sfw
:logging: syslog
:syslog_facility: daemon
:syslog_level: notice

대부분의 환경에서 여러분이 변경해야 할 것은 http_host, http_port, http_uri 키들 뿐입니다.

예를 들어 여러분의 사이트의 패키지 저장소에 접근 주소가 http://10.30.1.22/solaris/support/extras 이라면 여러분의 pkgman.yaml 설정을 아래와 같이 바꿔 줍니다:

---
-
:http_host: 10.30.1.22
:http_port: 80
:http_uri: /solaris/support/extras
:logging: syslog
:syslog_facility: daemon
:syslog_level: notice

이 시점에서 필자는 pkgman.yaml 파일에 다해 상세히 파고 들지는 않을것입니다. 그러나 추가 정보는 README 파일의 "CONFIG FILE" 섹션 http://pkgman.googlecode.com/svn/trunk/README 에서 살펴 보실 수 있습니다.

이제 설정 섹션은 완료 되었고 설치하고자 하는 각 패키지의 기록을 생성할 것입니다. 설치 레코드를 위해 우리가 필요한 정보는 패키지 이름, 버전, 파일 이름 그리고 어떠한 호스트에 레코드가 적용되었는지 입니다.

atk 소프트웨어 패키지 부터 시작해 봅시다. pkginfo 커맨드를 이용해서 패키지 이름을 알아낼 수 있습니다. 여기서 필자는 패키지 파일 atk-1.18.0-sol10-sparc-local 을 이용해서 패키지 이름과 버전을 알아내었습니다.

[root@jumpstart /jumpstart/pkgs/sfw]$ pkginfo -l -d \
atk-1.18.0-sol10-sparc-local |egrep '(PKGINST|VERSION)'
PKGINST: SMCatk
VERSION: 1.18.0

패키지 버전은 아래와 같이 pkgparam 커맨드를 이용해서도 알아낼 수 있습니다:

[root@jumpstart /jumpstart/pkgs/sfw]$ pkgparam -f \
atk-1.18.0-sol10-sparc-local
VERSION
1.18.0

이제 우리는 패키지 이름이 SMCatk, 그리고 버전이 1.18.0, 파일이름은 atk-1.18.0-sol10-sparc-local 라는 것을 알았습니다. 이제 우리는 이 정보를 pkgman.yaml 파일의 패키지 레코드 안에 넣을 것입니다.

SMCatk 패키지의 설치 레코드는 다음과 같이 기록될 것입니다:

-
:action: install
:name: SMCatk
:file: atk-1.18.0-sol10-sparc-local
:version: 1.18.0
:hosts: default

우리는 값 default 를 호스트 키로 사용할 것입니다. 호스트키에서 지원되는 값들은 README 파일 에 자세히 설명되어 있습니다.

설정 섹션과 패키지 레코드 섹션을 한대로 묶기 위해 현재 우리의 pkgman.yaml 파일을 살펴보도록 하겠습니다. 평이한 영어로 아래의 pkgman.yaml 파일은 소프트웨어 패키지 SMCatk 버전 1.18.0 이 pkgman 을 실행하고 있는 모든 호스트에 설치되어야 한다고 가르키고 있습니다. 패키지 파일 이름은 atk-1.18.0-sol10-sparc-local 이고 http://jumpstart:1080/jumpstart/pkgs/sfw/atk-1.18.0-sol10-sparc-local 에서 다운로드 가능합니다.

추가적으로 모든 출력들은 daemon.notice 우선순위로 syslog 에 로깅 됩니다. 만약 로깅이 "syslog," 소 설정되었으면 로그는 오직 syslog 로만 가고 터미널에는 아무것도 출력되지 않을 것입니다.

-
:http_host: jumpstart
:http_port: 1080
:http_uri: /jumpstart/pkgs/sfw
:logging: syslog
:syslog_facility: daemon
:syslog_level: notice
-
:action: install
:name: SMCatk
:file: atk-1.18.0-sol10-sparc-local
:version: 1.18.0
:hosts: default

이제 pkgman.yaml 파일에 남은 패키지들을 추가해야 합니다.

여러분이 패키지를 하나 고르고 패키지 레코드를 만들어서 여러분의 결과를 다음의 완료된 pkgman.yaml 파일과 비교해 보는 것은 어떨까요? 패키지의 순서는 중요하지 않습니다. 왜냐하면 모든 내용이 결국 비정렬된 배열 형태가 될 것이기 때문입니다.

-
:http_host: cfhost
:http_port: 80
:http_uri: /jumpstart/pkgs/sfw
:logging: syslog
:syslog_facility: daemon
:syslog_level: notice
-
:hosts: default
:file: atk-1.18.0-sol10-sparc-local
:version: 1.18.0
:name: SMCatk
:action: remove
-
:hosts: default
:file: cairo-1.4.10-sol10-sparc-local
:version: 1.4.10
:name: SMCcairo
:action: remove
-
:hosts: default
:file: expat-1.95.5-sol10-sparc-local
:version: 1.95.5
:name: SMCexpat
:action: remove
-
:hosts: default
:file: fontconfig-2.4.2-sol10-sparc-local
:version: 2.4.2
:name: SMCfontc
:action: remove
-
:hosts: default
:file: freetype-2.3.1-sol10-sparc-local
:version: 2.3.1
:name: SMCftype
:action: remove
-
:hosts: default
:file: glib-2.14.1-sol10-sparc-local
:version: 2.14.1
:name: SMCglib
:action: remove
-
:hosts: default
:file: gtk+-2.12.0-sol10-sparc-local
:version: 2.12.0
:name: SMCgtk
:action: remove
-
:hosts: default
:file: jpeg-6b-sol10-sparc-local
:version: 6b
:name: SMCjpeg
:action: remove
-
:hosts: default
:file: libiconv-1.11-sol10-sparc-local
:version: 1.11
:name: SMCliconv
:action: remove
-
:hosts: default
:file: libpng-1.2.23-sol10-sparc-local
:version: 1.2.23
:name: SMClibpng
:action: remove
-
:hosts: default
:file: pango-1.18.2-sol10-sparc-local
:version: 1.18.2
:name: SMCpango
:action: remove
-
:hosts: default
:file: render-0.8-sol10-sparc-local
:version: 0.8
:name: SMCrender
:action: remove
-
:hosts: default
:file: renderproto-0.9.3-sol10-sparc-local
:version: 0.9.3
:name: SMCrenpro
:action: remove
-
:hosts: default
:file: tiff-3.8.2-sol10-sparc-local
:version: 3.8.2
:name: SMCtiff
:action: remove
-
:hosts: default
:file: xrender-0.8.3-sol10-sparc-local
:version: 0.8.3
:name: SMCxrend
:action: remove
-
:hosts: default
:file: zlib-1.2.3-sol10-sparc-local
:version: 1.2.3
:name: SMCzlib
:action: remove


pkgman
이용하기

이제 우리는 pkgman 를 설치 했고 초기 설정 파일을 설정했습니다. 이제 무슨 작업을 할 수 있는지 살펴 봅시다.

첫째로 pkgman 의 커맨드라인 옵션과 그것의 의미하는 바에 대해 알아 봅시다.

[root@jtest ~]$ which pkgman
/usr/local/bin/pkgman
[root@jtest ~]$ pkgman
Usage: /usr/local/bin/pkgman [ -n ] -f pkgman.yaml
-f [ /path/to/pkgman.yaml | http://server/path/to/pkgman.yaml ]
-n Just print what would happen without making any changes
-h print usage and exit

-n 매개변수는 선택사항으로 pkgman 을 dry-run 모드로 실행할 것인지를 가르 킵니다. dry-run 모드에서는 시스템에 어떠한 변경도 이루어지지 않습니다. 실제 pkgman 을 실행하기 전에 어떠한 패키지가 설치 될 것이고 제거될 것인지 살펴 볼때 사용할 수 있습니다.

-f 매개변수는 필수 조건이고 이후에 pkgman.yaml 파일의 경로를 적어줘야 합니다. 파일은 로컬 파일 시스템 혹은 HTTP 를 이용한 접근이 가능해야 합니다. 몇몇 사이트들은 cfengine 혹은 유사한 툴을 이용해 파일을 호스트로 접근하도록 허락하지 않습니다. 그러므로 필자는 pkgman.yaml 파일을 HTTP 를 통해 접근 하는 것이 유용할 것으로 생각했습니다.

이제 실제로 pkgman 을 실행해 보고 이것을 우리의 설정 파일을 가르키도록 해 봅시다.

첫번째 예제에서 필자는 pkgman 을 dry-run 모드로 실행할 것입니다. 기본 로깅 설정을 사용 하는데 이것은 모든 메시지들이 /var/adm/messages 에 쌓이도록 합니다. 필요한 패키지들이 설치되도록 플래깅 되는지를 확인할 수 있습니다.

[root@jtest /]$ pkgman -n -f \
http://jumpstart:1080/jumpstart/pkgs/sfw/pkgman.yaml
[root@jtest ~]$ tail -16 /var/adm/messages
Dec 11 17:28:38 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCatk
Dec 11 17:28:39 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCcairo
Dec 11 17:28:40 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCexpat
Dec 11 17:28:41 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCfontc
Dec 11 17:28:42 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCftype
Dec 11 17:28:48 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCglib
Dec 11 17:29:07 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCgtk
Dec 11 17:29:08 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCjpeg
Dec 11 17:29:09 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCliconv
Dec 11 17:29:09 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMClibpng
Dec 11 17:29:11 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCpango
Dec 11 17:29:11 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCrender
Dec 11 17:29:11 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCrenpro
Dec 11 17:29:13 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCtiff
Dec 11 17:29:13 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCxrend
Dec 11 17:29:14 jtest pkgman[10407]: [ID 702911 daemon.notice] \
dryrun mode -
Install pkg SMCzlib

다시 맨 앞으로 돌아가서 실제로 pkgman 를 dry-run 플래그 없이 실행해 봅시다. 로깅 출력을 통해서 모든 작업이 정상적으로 돼었음을 알 수 있습니다.

[root@jtest /]$ pkgman -f \
http://jumpstart:1080/jumpstart/pkgs/sfw/pkgman.yaml
[root@jtest ~]$ tail -16 /var/adm/messages
Dec 11 17:33:40 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCatk> was successful.
Dec 11 17:33:44 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCcairo> was successful.
Dec 11 17:33:45 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCexpat> was successful.
Dec 11 17:33:51 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCfontc> was successful.
Dec 11 17:33:54 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCftype> was successful.
Dec 11 17:34:08 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCglib> was successful.
Dec 11 17:35:00 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCgtk> was successful.
Dec 11 17:35:02 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCjpeg> was successful.
Dec 11 17:35:04 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCliconv> was successful.
Dec 11 17:35:06 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMClibpng> was successful.
Dec 11 17:35:12 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCpango> was successful.
Dec 11 17:35:13 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCrender> was successful.
Dec 11 17:35:14 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCrenpro> was successful.
Dec 11 17:35:19 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCtiff> was successful.
Dec 11 17:35:21 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCxrend> was successful.
Dec 11 17:35:23 jtest pkgman[10494]: [ID 702911 daemon.notice] \
Installation of <SMCzlib> was successful.

pkgman 을 다시한번 dry-run 모드로 실행해서 무슨일이 발생할지 살펴 봅시다.

이번에는 pkgman.yaml 파일의 "logging" 항목을 변경하였 습니다. 이전 줄에서는 :logging: syslog 이였지만 이제는 :logging: console 로 변경하였습니다. 그러므로 완료된 작업들은 터미널로 보고가 될 것입니다.

[root@jtest ~]$ pkgman -n -f \
http://cfhost/jumpstart/pkgs/sfw/pkgman.yaml
[root@jtest ~]$

아무것도 리포팅 되지 않았습니다. 왜냐하면 필요한 패키지들이 이미 설치가 되었기 때문입니다. 의문을 가지는 사람들을 위해서 패키지 데이타베이스를 이중 확인해서 패키지가 실제로 설치 되었는지 알아 보겠습니다.

[root@jtest ~]$ pkginfo |grep SMC
application SMCatk atk
application SMCcairo cairo
application SMCexpat expat
application SMCfontc fontconfig
application SMCftype freetype
application SMCglib glib
application SMCgtk gtk+
application SMCjpeg jpeg
application SMClibpng libpng
application SMCliconv libiconv
application SMCpango pango
application SMCrender render
application SMCrenpro renderproto
application SMCtiff tiff
application SMCxrend xrender
application SMCzlib zlib

이제 모든 것이 정상적으로 끝난것 같습니다. 우리는 GTK+ 와 의존 패키지들을 모두 설치 완료하였습니다.

이제 GTK+ 설치가 필요한 다른 어떠한 호스트에서도 쉽게 패키지 설치 작업을 반복할 수 있을 것입니다.


점프스타트 후설치(Postinstallation) 스크립트

다음에 나올 필자의 점프스타트(플래시 어카이브 이용) 후설치 스크립트는 필자가 어떻게 pkgman 을 점프스타트와 통합시켰는지 보여 줍니다.

필자가 말했듯이 점프스타트를 이용해 필요한 OS 클러스터를 설치했지만 이것이 전부는 아닙니다. 왜냐하면 플래시 어카이브를 생성하기 전에 OS에 Ruby 패키지를 설치했기 때문입니다.

설치 재부팅이 완료된 후에 pkgman 을 실행했습니다. 왜냐하면 모든 패키지들이 설치된 것은 아니기 때문입니다. 하드 코딩된 전설치(preinstallation) 및 후설치 스크립트는 동작하지 않을 것입니다.

또한 후설치 스크립트에 추가적인 설정 작업을 추가 하였습니다. 왜냐하면 이것이 논리적으로 pkgman 을 실행하기에 가장 알맞은 장소이기 때문입니다. 플래시 설치 동안 /etc/flash/reboot 에 존재하는 모든 스크립트가 첫번째 부팅동안 실행됩니다. 프로세스는 재부팅 디렉토리를 제거하고 스크립트 실행 후에 그 내용들을 전부 제거 함으로써 임시 init스크립트를 생성하는 것 보다 훨씬 깔끔하게 작업을 수행 합니다.

************* start postinstall **************
#!/bin/sh

create_reboot_script()
{
mkdir -p /a/etc/flash/reboot
cat >/a/etc/flash/reboot/firstboot.sh <<_EOF
#!/bin/sh

PATH=/usr/bin:/bin:/usr/local/bin:/usr/sbin:/sbin
export PATH

logger -p daemon.notice "Running firstboot script"

logger -p daemon.notice "Executing pkgman"
/usr/local/bin/pkgman -f /usr/local/etc/pkgman.yaml

logger -p daemon.notice "rebooting"
init 6
_EOF

chown root:root /a/etc/flash/reboot/firstboot.sh
chmod 755 /a/etc/flash/reboot/firstboot.sh
}

create_reboot_script
************* end postinstall ****************

초기 post-JumpStart pkgman 실행이 완료 되면 이후의 pkgman 실행은 cfengine 에 의해 이루어 집니다. 필자는 cfengine 을 설정하여 호스트에 특정 파일을 감지하면(/etc/.run_pkgman) pkgman 을 실행하도록 하였습니다.

패키지 수정사항을 배치해야 할때 목표 호스트는 cfengine 그룹에 위치하게 됩니다. 예를 들어 GTK+ 패키지를 솔라리르 워크스테이션에 배치시켜야 한다면 "workstations" 그룹에 모든 호스트들에 트리거 파일을 만들때 cfengine 을 사용 합니다.

pkgman 실행을 조정하는 필자의 cfengine 파일의 부분입니다:

classes:
solaris::
run_pkgman = ( FileExists(/etc/.run_pkgman) )

shellcommands:
run_pkgman::
"/usr/local/bin/pkgman -f /usr/local/etc/pkgman.yaml"
"/usr/bin/rm /etc/.run_pkgman"

원타임 작업을 위해 종속된 cfengine 파일을 이용합니다. pkgman 을 모든 워크스테이션에서 트리거링 하려면 필자는 다음과 같은 cfengine 파일을 원타임 작업에 사용할 것입니다. cfengine 변경 사항을 적용한 다음에는 작업을 삭제할 것을 잊지 마시기 바랍니다.

shellcommands:
workstations::
"/usr/bin/touch /etc/.run_pkgman"


요약

pkgman 에 대한 투어를 끝내 봅시다. 우리의 목표는 GTK+ 패키지들을 sunfreeware.com 을 통해 설치 하는 것이었고 성공적으로 완료 했습니다.

필자는 이 예제를 통해서 여러분이 pkgman 이 한번 눈여겨 볼만한 것인지를 결정하는데에 충분한 정보를 준것으로 희망합니다. 더 자세한 정보는 README 파일 을 참고하시기 바랍니다.

추가적인 코멘트나 질문들은 someword@gmail.com 로 남겨주시기 바랍니다.

감사합니다.


저자에 관하여

Derek 은 꽤 긴시간동안 UNIX/리눅스 시스템 관리자를 해왔습니다. 수년동안 그는 커스텀 점프스타트 설치, 패키지 관리 및 설정 관리등에 매혹되어 있습니다. 그는 포틀랜드에서 살고 있습니다.


이 글의 영문 원본은
http://www.sun.com/bigadmin/content/sub ··· gman.jsp
에서 보실 수 있습니다.

"관리자코너" 카테고리의 다른 글

2008/03/11 13:35 2008/03/11 13:35

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/523

댓글을 달아 주세요

[로그인][오픈아이디란?]

◀ Prev 1  ... 145 146 147 148 149 150 151 152 153  ... 641  Next ▶