Puppet 및 Kerberos에 대한 서비스에서는 스텐실을 사용하여 구성 파일을 제공합니다.
Puppet은 많은 시스템의 구성을 관리하는 데 사용되는 툴킷입니다. Oracle Solaris에서 Puppet 응용 프로그램은 SMF에서 관리됩니다.
system/management/puppet 패키지를 설치하면 두 개의 SMF 서비스 인스턴스인 puppet:master 및 puppet:agent가 제공됩니다. 이러한 인스턴스는 기본적으로 사용 안함 으로 설정됩니다.
이러한 인스턴스를 사용으로 설정한 후 다음 명령은 puppet:master 및 puppet: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은 /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:agent1 및 puppet: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_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/:properties 및 svc:/application/puppet:master/:properties로 확장됩니다. 여기서 .*(또는 %2)는 모든 인스턴스와 일치해야 합니다. 그런 다음 인스턴스 이름은 구성 파일의 블록에 레이블을 지정하는 데 사용됩니다. 다음에 나타나는 .*(또는 %3)는 %1 서비스 인스턴스에 대한 config 등록 정보 그룹의 모든 등록 정보와 일치합니다. 스텐실은 서비스 인스턴스에서 등록 정보 이름과 해당 등록 정보의 값을 구성 파일에 쓰도록 svcio에 알립니다.
초기 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 명령을 사용합니다.
스텐실을 사용하는 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