Oracle® Solaris 11.2의 시스템 서비스 관리

인쇄 보기 종료

업데이트 날짜: 2014년 7월
 
 

Oracle Solaris의 스텐실 서비스 예

Puppet 및 Kerberos에 대한 서비스에서는 스텐실을 사용하여 구성 파일을 제공합니다.

Puppet 스텐실 서비스

Puppet은 많은 시스템의 구성을 관리하는 데 사용되는 툴킷입니다. Oracle Solaris에서 Puppet 응용 프로그램은 SMF에서 관리됩니다.

Puppet 서비스의 상위 레벨 보기

system/management/puppet 패키지를 설치하면 두 개의 SMF 서비스 인스턴스인 puppet:masterpuppet:agent가 제공됩니다. 이러한 인스턴스는 기본적으로 사용 안함 으로 설정됩니다.

이러한 인스턴스를 사용으로 설정한 후 다음 명령은 puppet:masterpuppet:agent가 둘 다 계약 서비스임을 보여줍니다.

$ svcs -p puppet
STATE          STIME    FMRI
online         17:19:32 svc:/application/puppet:agent
               17:19:32     2565 puppet
online         17:19:32 svc:/application/puppet:master
               17:19:32     2567 puppet

다음 명령은 계약 서비스에서 시작된 프로세스에 대한 추가 정보를 보여줍니다.

$ ps -o pid,args -p 2565,2567
  PID COMMAND
 2565 /usr/ruby/1.9/bin/ruby /usr/sbin/puppet agent --logdest /var/log/puppet/puppet-
 2567 /usr/ruby/1.9/bin/ruby /usr/sbin/puppet master --logdest /var/log/puppet/puppet

ps 출력에 제시된 대로 puppet/var/log/puppet의 로그 파일에 쓰고 있습니다.

$ ls /var/log/puppet
puppet-agent.log  puppet-master.log
초기 Puppet 구성 파일

Puppet은 /etc/puppet/puppet.conf라는 구성 파일을 사용해야 합니다. /usr/sbin/puppet 응용 프로그램은 /etc/puppet/puppet.conf에서 구성 정보를 읽고 application/puppet 서비스 인스턴스의 등록 정보 세트에서는 읽지 않습니다. 필수 구성 파일을 제공하려고 각 puppet 인스턴스는 스텐실 파일과 configfile 등록 정보 그룹을 제공합니다. configfile 등록 정보 그룹은 지정된 구성 파일을 실행하고 만들도록 svcio 유틸리티에 알립니다. 스텐실 파일은 서비스 등록 정보 값의 데이터를 구성 파일에 올바른 형식으로 쓰는 데 사용됩니다.

다음 명령은 configfile 유형의 등록 정보 그룹에 있는 모든 puppet 서비스 등록 정보를 보여줍니다. 이 출력은 puppet 서비스의 인스턴스에 같은 configfile 등록 정보와 같은 값이 포함됨을 보여줍니다. 각 puppet 서비스 인스턴스는 구성 파일 경로, 구성 파일 모드 및 스텐실 파일 경로를 제공합니다.

$ svcprop -g configfile puppet
svc:/application/puppet:master/:properties/puppet_stencil/mode astring 0444
svc:/application/puppet:master/:properties/puppet_stencil/path astring /etc/puppet/puppet.conf
svc:/application/puppet:master/:properties/puppet_stencil/stencil astring puppet.stencil
svc:/application/puppet:agent/:properties/puppet_stencil/mode astring 0444
svc:/application/puppet:agent/:properties/puppet_stencil/path astring /etc/puppet/puppet.conf
svc:/application/puppet:agent/:properties/puppet_stencil/stencil astring puppet.stencil

다음 명령은 이러한 인스턴스 등록 정보가 상위 서비스에서 상속됨을 확인합니다.

$ svccfg -s puppet listprop -l all puppet_stencil
puppet_stencil          configfile  manifest
puppet_stencil/mode    astring     manifest              0444
puppet_stencil/path    astring     manifest              /etc/puppet/puppet.conf
puppet_stencil/stencil astring     manifest              puppet.stencil
$ svccfg -s puppet:agent listprop -l all puppet_stencil
$ svccfg -s puppet:master listprop -l all puppet_stencil

예를 들어 기반구조에 따라 puppet:agent1puppet:agent2 인스턴스가 필요할 수 있습니다. 이 경우 Puppet 구성 파일 수정에 표시된 대로 등록 정보 값을 사용자 정의하고 각 인스턴스에 대한 등록 정보를 추가합니다.

구성 파일 /etc/puppet/puppet.conf의 초기 컨텐츠는 다음과 같습니다.

# WARNING: THIS FILE GENERATED FROM SMF DATA.
#     DO NOT EDIT THIS FILE.  EDITS WILL BE LOST.
#
# See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html
# for details.
Puppet 스텐실 파일

스텐실 파일의 컨텐츠는 구성 파일에 기록되는 등록 정보 및 기타 정보를 사용자에게 알립니다. puppet_stencil/stencil 등록 정보의 값인 puppet.stencil 경로는 /lib/svc/stencils에 대한 상대적 위치입니다. 다음은 스텐실 파일 /lib/svc/stencils/puppet.stencil의 컨텐츠입니다.

# WARNING: THIS FILE GENERATED FROM SMF DATA.
#     DO NOT EDIT THIS FILE.  EDITS WILL BE LOST.
#
# See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html
# for details.
; walk each instance and extract all properties from the config PG
$%/(svc:/$%s:(.*)/:properties)/ {
$%{$%1/general/enabled:?
[$%2]
$%/$%1/config/(.*)/ {
$%3 = $%{$%1/config/$%3} }
}
}

스텐실 파일에서 svc:/$%s:(.*)/:properties(또는 %1)는 svc:/application/puppet:agent/:propertiessvc:/application/puppet:master/:properties로 확장됩니다. 여기서 .*(또는 %2)는 모든 인스턴스와 일치해야 합니다. 그런 다음 인스턴스 이름은 구성 파일의 블록에 레이블을 지정하는 데 사용됩니다. 다음에 나타나는 .*(또는 %3)는 %1 서비스 인스턴스에 대한 config 등록 정보 그룹의 모든 등록 정보와 일치합니다. 스텐실은 서비스 인스턴스에서 등록 정보 이름과 해당 등록 정보의 값을 구성 파일에 쓰도록 svcio에 알립니다.

Puppet 구성 파일 수정

초기 Puppet 구성 파일에서 확인한 대로 처음에는 리터럴 주석 행만 구성 파일에 기록됩니다. 스텐실 파일에서 general/enabled 등록 정보의 값을 테스트하면 등록 정보 값이 구성 파일에 기록되지 않습니다. 다음 명령은 기본적으로 general/enabled 등록 정보 값이 false임을 보여줍니다.

$ svcprop -p general/enabled puppet
svc:/application/puppet:master/:properties/general/enabled boolean false
svc:/application/puppet:agent/:properties/general/enabled boolean false

svcadm enable 명령을 사용하여 인스턴스를 사용으로 설정하면 general/enabled 등록 정보 값이 변경되지 않습니다. general/enabled 등록 정보 값을 true로 변경하고 인스턴스를 다시 시작하면 해당 인스턴스에 대한 config 등록 정보 그룹의 모든 등록 정보가 구성 파일에 기록됩니다.

$ svccfg -s puppet:agent setprop general/enabled=true
$ svcprop -p general/enabled puppet:agent
false
$ svcadm refresh puppet:agent
$ svcprop -p general/enabled puppet:agent
true
$ svcadm restart puppet:agent

다음 명령은 처음에 config 등록 정보 그룹의 유일한 등록 정보가 각 인스턴스에 대한 로그 파일 경로임을 보여줍니다.

$ svcprop -p config puppet
svc:/application/puppet:master/:properties/config/logdest astring /var/log/puppet/puppet-master.log
svc:/application/puppet:agent/:properties/config/logdest astring /var/log/puppet/puppet-agent.log

사용으로 설정된 인스턴스에 대한 config 등록 정보는 구성 파일의 인스턴스 이름으로 레이블이 지정된 블록에 추가되었습니다.

# WARNING: THIS FILE GENERATED FROM SMF DATA.
#     DO NOT EDIT THIS FILE.  EDITS WILL BE LOST.
#
# See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html
# for details.

[agent]

logdest = /var/log/puppet/puppet-agent.log

Puppet 구성 설명서에 따르면 구성 파일에는 [main], [agent][master] 블록이 포함될 수 있습니다. [main] 블록의 구성은 agent 및 master에 모두 적용됩니다. Puppet agent의 경우 [agent] 블록의 구성이 [main] 블록의 같은 구성을 대체합니다. Puppet master의 경우 [master] 블록의 구성이 [main] 블록의 같은 구성을 대체합니다. agent 및 master에 공통적인 구성에 대한 [main] 블록을 제공하려면 puppet:main 인스턴스와 해당 인스턴스에 대한 적절한 config 등록 정보를 만듭니다.

다음 명령은 Puppet 구성 파일에 구성을 추가하는 방법을 보여줍니다.

$ svccfg -s puppet:agent
svc:/application/puppet:agent> setprop config/report=true
svc:/application/puppet:agent> setprop config/pluginsync=true
svc:/application/puppet:agent> refresh
svc:/application/puppet:agent> exit
$ svcadm restart puppet:agent
$ cat /etc/puppet/puppet.conf
# WARNING: THIS FILE GENERATED FROM SMF DATA.
#     DO NOT EDIT THIS FILE.  EDITS WILL BE LOST.
#
# See puppet.conf(5) and http://docs.puppetlabs.com/guides/configuring.html
# for details.

[agent]

logdest = /var/log/puppet/puppet-agent.log
pluginsync = true
report = true

비슷한 명령을 사용하여 등록 정보를 제거하고 등록 정보 값을 변경할 수 있습니다. Chapter 4, 서비스 구성을 참조하십시오. main 인스턴스를 추가하려면 서비스 인스턴스 추가에 표시된 대로 svccfg add 명령을 사용합니다.

Kerberos 스텐실 서비스

스텐실을 사용하는 Oracle Solaris 서비스의 다른 예는 Kerberos입니다. 다음 명령은 configfile 등록 정보 그룹이 krb5_conf이고, 스텐실 파일이 /lib/svc/stencils/krb5.conf.stencil이고, 구성 파일이 /etc/krb5/krb5.conf임을 보여줍니다.

$ svcprop -g configfile svc:/system/kerberos/install:default
krb5_conf/disabled boolean true
krb5_conf/group astring sys
krb5_conf/mode integer 644
krb5_conf/owner astring root
krb5_conf/path astring /etc/krb5/krb5.conf
krb5_conf/stencil astring krb5.conf.stencil