This content is submitted by a BigAdmin user. It has not been reviewed for technical accuracy by Sun Microsystems, though it may have been lightly edited to improve readability. If you find an error or would like to comment on the article, please contact the submitter or use the comment field at the bottom of the article.
Community submissions may not follow Sun trademark guidelines. For information on Sun trademarks, please see http://www.sun.com/suntrademarks/.
Derek Olsen, 2008년 1월
소개
이 기술 팁에서는 pkgman에 대해 설명합니다. pkgman은 패키지 관리 유틸리티로, SPARC 또는 x86 플랫폼용 Solaris 8, 9 또는 10 운영 체제를 실행하는 호스트에서 원하는 상태로 패키지를 관리하는 데 사용할 수 있습니다. 이 기술 팁에서는 GTK+라는 멀티 플랫폼 툴킷을 설치하여 Sunfreeware.com에서 사용할 수 있는 그래픽 사용자 인터페이스를 만들 수 있도록 pkgman을 사용하는 방법에 대해 알아 봅니다.
Solaris 호스트에 패키지를 추가하거나 호스트에서 패키지를 제거하는 작업은 사소한 일입니다. 하지만 고유 패키지 요구 사항이 있는 여러 Solaris OS 버전을 실행하는 많은 호스트가 있는 경우에는 이러한 작업이 성가실 수도 있습니다.
호스트가 점프스타트되고, 일부 추가 소프트웨어 패키지를 설치하기 위해 요청이 발생한 후에는 어떻게 됩니까? 해당 소프트웨어를 임의의 위치에서 이미 사용 중인지 표시하기 위해 확인할 수 있는 인가된 소스가 있습니까? 요청에 대한 해결 방법이 대답하는 사람에 따라 다릅니까? 동일한 버전의 패키지 인스턴스가 설치되어 호스트 구성 범위를 제한하는지 어떻게 확인합니까? 업그레이드 즉, 개발, 테스트 및 프로덕션을 통한 PostgreSQL의 업그레이드를 고려해야 할 경우 어떻게 됩니까? 이 작업 수행에 대해 문서화된 절차가 있습니까? 여러분은 문서화된 절차를 보유하고 있을 수도 있습니다. 저는 pkgman을 구축하는 데 시간을 낭비하고 있습니다.
Solaris 관리자로서의 제 경험을 비추어 보면 개인적으로 위의 문제에 대한 적절한 솔루션을 찾기 위해 고생했으며, 저와 비슷하게 고생하는 다른 이들을 만났습니다. 패키지를 관리하는 이전 접근 방법에 대한 문제는 솔루션과 관련된 복잡성이었습니다. 이 복잡성으로 인해 저는 새 패키지, 업그레이드 패키지 또는 리콜 패키지를 쉽게 롤아웃할 수 있는 유일한 사람이 되었습니다. 분명히 저는 때때로 휴가나 병가를 쓰고 싶었지만 일에 몰두했습니다.
이 문서는 pkgman을 설치하고 구성하는 방법을 제공하여 패키지 관리를 목적으로 작성되었습니다. Sunfreeware.com에서 GTK+(2.12.0) 패키지 설치는 예제의 핵심입니다. GTK+ 패키지 설치는 pkgman이 여러분의 일에서 사용하는 데 가치가 있는 중요한 것인지에 대한 아이디어를 제공하는 실제로 훌륭한 예제입니다.
pkgman의 요구 사항
각 업무에는 업무에서 작동해야 할 특정 매개 변수가 있으므로 pkgman의 요구 사항을 사용하여 시작합니다.
Ruby 버전 1.8.X는 pkgman을 실행하는 데 필요합니다( 저는 2008년 1월에 Ruby 1.9.X에 대한 테스트를 계획했습니다).
setup 스크립트는 pkgman 배포를 위해 접두어로 /usr/local을 사용합니다. 따라서 실행 파일은 /usr/local/bin으로 이동하며, 구성 파일은 /usr/local/etc로 이동합니다. setup 스크립트도 사용 중인 호스트에서 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+ 패키지 설치
이제 /usr/local/bin/pkgman.rb에서(또는 입력한 위치 어디에서든) pkgman을 사용할 수 있으므로 우리는 패키지를 설치하는 중요한 작업에 초점을 맞출 수 있게 됩니다!
여러분이 패키지를 다운로드하기 위해 사용하는 최고의 sunfreeware.com 미러 확인을 원할 수도 있습니다. 사용할 수 있는 미러 목록을 확인하십시오.
대역폭 비용에 대해 신중을 기하기 위해 로컬 사이트에 패키지를 다운로드한 다음 HTTP를 통해 로컬로 패키지를 사용할 수 있도록 설정해야 합니다. 이 기록 시점에서(2007년 12월) GTKk+를 실행하기 위해 다운로드해야 할 소프트웨어 패키지와 버전은 다음과 같습니다.
이러한 패키지에는 libgcc에서 공유된 개체가 필요하다는 것에 주의하십시오. 이 예에서 저는 libgcc 소프트웨어가 이미 설치되어 있다고 가정합니다.
libgcc를 설치해야 하는 경우에는 config 파일을 설정하는 방법을 살펴본 후 libgcc 패키지 레코드에서 추가할 수 있습니다.
필요한 패키지를 다운로드하고나면 HTTP를 통해 해당 패키지를 사용할 수 있도록 설정해야 합니다. 또한 pkgman이 현재 압축된 패키지를 지원하지 않으므로 패키지의 압축을 해제해야 합니다. 압축된 파일 처리를 추적할 수 있도록 강화 요청이 존재합니다.
gzip으로 압축된 패키지를 압축 해제하기 위해 gzip으로 압축된 패키지가 있는 디렉토리에서 다음 명령을 사용할 수 있습니다.
for f in `ls *gz`; do gunzip $f; done
pkgman.yaml 구성 파일 구성
이제 pkgman.yaml 구성 파일을 구성하려고 합니다.
이 문서 섹션이 클러스터되지 않도록 유지하기 위해 설치한 pkgman.yaml 파일에서 주석을 제거했습니다. 구성 파일에는 스크립트 설정과 같이 설치하거나 제거해야 하는 패키지 정보가 들어 있습니다. 스크립트 설정은 패키지 위치와 활동을 기록하는 방법과 같은 항목으로 구성됩니다.
값 default를 hosts 키에 사용할 것입니다. hosts 키에 지원되는 값은 추가 정보 파일에 자세히 나와 있습니다.
설정 섹션과 패키지 레코드를 한데 묶기 위해 현재 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로만 이동하며, 터미널에는 아무 것도 전송되지 않습니다.
이제 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을 실행하려는 것을 나타냅니다. 드라이런 모드에서는 시스템이 변경되지 않습니다. 드라이런 모드를 사용하면 pkgman을 실제로 실행하기 전에 설치하거나 호스트에서 제거하는 패키지를 볼 수 있습니다.
-f 인수는 필수 사항이며, pkgman.yaml 파일 위치 앞에 표시됩니다. 파일은 로컬 파일 시스템에 있거나, HTTP를 통해 사용할 수 있습니다. 일부 사이트에서는 호스트로 파일을 밀어내는 데 cfengine 또는 이와 비슷한 것을 사용하지 않습니다. 따라서 저는 HTTP를 통한 pkgman.yaml 파일 사용이 유용하다고 판단했습니다.
이제 실제로 pkgman을 실행하여 이것이 구성 파일을 가리키도록 하겠습니다. 후!
다음 첫 번째 예에서 pkgman을 드라이런 모드로 실행하겠습니다. /var/adm/messages에 모든 것이 전송되는 기본 로깅 구성을 사용합니다. 원하는 모든 패키지가 설치되어야 하는 것으로 플래그가 지정되는 것을 볼 수 있습니다.
다음 예에서는 계속 진행하여 드라이런 플래그가 없이 pkgman을 실행하여 실제 설치를 수행하겠습니다. 로깅 결과물에서 모든 항목이 제대로 기록된 것 처럼 보입니다
[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을 드라이런 모드에서 한 번 더 실행하여 어떤 결과가 발생하는지 살펴보겠습니다.
이 때, pkgman.yaml 파일의 "로깅" 항목을 변경합니다. 이 행은 이전에 :logging: syslog를 읽었지만 지금은 :logging: console을 읽습니다. 따라서 수행해야 할 작업이 있는 경우 해당 작업은 터미널에 보고됩니다.
보시는 바와 같이 모든 항목이 제대로인 것처럼 표시됩니다. 이제 GTK+가 설치된 호스트와 필수/의존 패키지를 설치했습니다.
여러분은 GTK+를 설치할 다른 호스트에서 패키지 설치를 쉽게 반복할 수 있어야 합니다.
JumpStart 사후 설치 스크립트
Flash 아카이브를 사용하는 JumpStart 사후 설치 스크립트의 다음 부분은 JumpStart에 pkgman을 통합한 방법을 보여 줍니다.
저는 JumpStart를 사용하여 원하는 OS 클러스터를 설치한다고 말씀드렸지만 이는 일부 사실이 아닙니다. 제 Flash 아카이브를 만들기 전에 OS에 Ruby 패키지를 추가하기 때문입니다.
설치 재부트가 완료되면 pkgman을 실행합니다. 일부 패키지가 대체 루트 설치를 사용하기 위해 만들어졌기 때문입니다. 사전 설치 또는 사후 설치 스크립트에서 하드코드된 경로는 작동하지 않을 수도 있습니다.
또한 사후 설치 스크립트에서 일부 다른 설정 작업을 수행하므로 pkgman 실행을 포함시키는 것은 논리적으로 타당합니다. Flash 설치 중 /etc/flash/reboot에 있는 스크립트는 처음 부트 중에 실행됩니다. 프로세스는 스크립트 실행 후 재부트 디렉토리와 그 내용을 제거합니다. 이는 임시 init 스크립트를 만드는 작업보다 훨씬 낫습니다.
초기 사후 JumpStart pkgman 실행이 완료되고 나면 이후 pkgman 실행은 cfengine에 의해 트리거됩니다. 특정 트리거 파일이 호스트(/etc/.run_pkgman)에 있는 경우 pkgman을 실행하도록 cfengine을 구성했습니다.
패키지 수정을 배포해야 하는 경우 대상 호스트가 제 cfengine 그룹과 연결되는 경우가 있습니다. 예를 들어 GTK+ 패키지를 Solaris 워크스테이션에 밀어넣으려고 하는 경우 cfengine을 사용하여 cfengine "워크스테이션" 그룹에 있는 모든 호스트의 트리거 파일과 접촉합니다.
저는 트리거 파일 접촉과 같은 일회성 작업을 위해 전용 cfengine 파일을 사용합니다. 모든 워크스테이션에서 pkgman을 트리거하기 위해 일회성 작업에 사용되는 cfengine 파일에 다음을 추가합니다. cfengine 변경 사항을 밀어넣고 나서 작업을 삭제해야 됩니다.
Derek는 오랜 시간동안 일하고 있는 UNIX/Linux 시스템 관리자입니다. 몇 년에 걸쳐 사용자 정의 JumpStart 설치, 패키지 관리 및 구성 관리에 필요한 매력적인 특수 항목을 개발하고 있습니다. Portland, Oregon(미국)에서 상주하여 일하고 있으며, 여가 시간에는 Solaris OS와 관련된 일로 배회하고, 맥주를 마시거나, 그가 강아지를 키우고 있는 것이지 그 반대가 아님을 스스로 납득시킵니다.
The information and links on this page have been provided by a BigAdmin user. The submitter is solely responsible for such information and links. Sun is not responsible for the availability of external sites or resources, and does not endorse and is not responsible or liable for any content, advertising, products, or other materials on or available from such sites or resources. Sun will not be responsible or liable, directly or indirectly, for any actual or alleged damage or loss caused by or in connection with use of or reliance on the information posted here, or goods or services available on or through any external site or resource.
Comments (latest comments first)
Discuss and comment on this resource in the BigAdmin Wiki
Unless otherwise licensed, code in all technical manuals herein (including articles, FAQs, samples) is provided under this License.