더북(TheBook)

실전! 패키지 설치하기

앞서 소개한 매니페스트 예제(site.pp)에서는 파일 내에 노드와 클래스, 리소스를 모두 선언했지만 일반적으로는 매니페스트를 분리해서 모듈 형태로 사용합니다. 시스템에 패키지를 설치하는 과정을 따라해 보면서 매니페스트를 어떻게 작성하는지 살펴봅시다.

설정 대상 시스템을 노드로 지정해서 매니페스트 파일 puppet/manifests/site.pp에 선언하고 리소스를 클래스로 묶어 기능별로 puppet/modules 디렉터리에 저장합니다. 여기에서는 gkrellm 패키지를 설치하는 모듈 sys_info를 구현해보겠습니다. 패키지 설치와 관련된 리소스와 클래스는 또 다른 매니페스트 파일 puppet/modules/sys_info/manifests/init.pp에 선언합니다(그림 10-3).

그림 10-3 sys_info 모듈의 매니페스트 디렉터리 구조

먼저 설치할 패키지 버전 정보를 확인해야 합니다. apt-cache policy 명령으로 gkrellm 패키지 버전을 확인할 수 있습니다.

shinjaehun@losttemple:~$ apt-cache policy gkrellm
gkrellm:
  설치: (없음)
  후보: 2.3.5-5
  버전 테이블:
  2.3.5-5 0
        500 http://ftp.daum.net/ubuntu/ trusty/universe i386 Packages

mkdir 명령으로 매니페스트 모듈을 저장할 디렉터리를 만들고 sys_info 모듈의 매니페스트 파일 ‘init.pp’를 vi로 생성합니다.

shinjaehun@losttemple:~$ sudo mkdir -p /etc/puppet/modules/sys_info/manifests
shinjaehun@losttemple:~$ sudo vi /etc/puppet/modules/sys_info/manifests/init.pp
Tip

디렉터리를 생성하는 명령 mkdir의 옵션 -p는 하위 디렉터리까지 함께 생성하기 위해 사용했습니다.

sys_info 클래스를 다음과 같이 작성합니다. 먼저 package 리소스를 사용해서 패키지를 설치( ensure)합니다. apt-cache policy 명령으로 확인했던 패키지 버전을 명시해주면 해당 버전의 패키지를 설치할 것입니다. exec 리소스로 패키지 설치 후 설치한 프로그램의 스크립트( command)를 실행합니다. 패키지를 설치하고 gkrellm 실행 스크립트인 /usr/bin/gkrellm을 백그라운드로 실행하기 위해 &를 붙였습니다.

require는 리소스 사이의 실행 순서를 결정하는 키워드로 패키지 설치 전에 스크립트를 실행하는 실수를 하지 않기 위해 exec 리소스에 포함시켜야 합니다. exec 리소스를 실행하기 전에 package 리소스( Package[‘gkrellm’])를 먼저 실행할 것입니다. 지정한 package 리소스는 대문자로 시작합니다.

class sys_info {
       package { 'gkrellm' :
            ensure => '2.3.5-5',
       }

       exec { 'gkrellm' :
            command => '/usr/bin/gkrellm &',
            require => Package['gkrellm'],
       }
}
Tip

require 속성의 Package[‘gkrellm’], 행이 대문자 P로 시작된다는 사실에 주의하기 바랍니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.