퍼펫 관리 · 4 min read · Feb 07, 2026
우분투에서 퍼펫을 이용한 구성 자동화 및 중앙 집중 관리
우분투에서 퍼펫을 이용한 구성 자동화 및 중앙 집중 관리
저자: Kent Brede
http://reductivelabs.com/trac/puppet/wiki/InstallationGuide를 기반으로
소개
이 튜토리얼은 한 대의 머신에 퍼펫의 서버 구성 요소(puppetmaster)를 설치하고 다른 머신에 퍼펫 클라이언트(puppetd)를 설치하는 방법에 대한 단계별 가이드입니다. 그런 다음 퍼펫이 제대로 작동하는지 확인하기 위해 간단한 테스트를 수행합니다.
퍼펫에 익숙하지 않다면, 퍼펫은 네트워크에서 실행되는 다양한 *nix 버전의 중앙 집중 관리를 가능하게 하는 구성 자동화 도구입니다. 퍼펫은 파일, 패키지, 사용자, 서비스, 크론, 마운트 등과 같은 시스템의 중요한 측면을 중앙에서 관리할 수 있도록 지원합니다. 더 완전한 설명은 Reductive Labs를 방문하십시오.
배경
이 설치는 우분투 6.06 LTS 서버에서 수행되지만, 약간의 수정으로 대부분의 데비안/우분투 버전에서 작동해야 합니다.
이 글을 작성할 당시, 우분투용 현재 퍼펫 패키지는 Feisty에서 찾을 수 있습니다. 불안정한(Unstable) 버전에서 현재 데비안 패키지를 찾으십시오.
이 튜토리얼에서는 example.com을 도메인 이름으로 사용합니다. 서버는 호스트 이름 “puppet”과 IP 192.168.10.1을 부여받습니다. 클라이언트 호스트 이름은 “pclient”이며 IP는 192.168.10.2입니다.
1. 네트워크 요구 사항
DNS가 네트워크에 설정되어 있지 않은 경우, 서버와 클라이언트의 hosts 파일에 두 머신에 대한 항목이 포함되어 있는지 확인하십시오. 이 시나리오에서는 다음 항목이 /etc/hosts에 추가됩니다. 좋아하는 텍스트 편집기를 사용하여 아래와 유사한 네트워크 설정을 반영하는 줄을 추가하십시오.
192.168.10.1 puppet.example.com puppet
192.168.10.2 pclient.example.com pclient서버는 포트 8140에서 실행됩니다. 두 머신 간에 포트 8140을 차단하는 방화벽이 없는지 확인하십시오.
2. Apt 설정
필요한 많은 패키지가 universe 저장소에 있습니다. “sources.list”에서 다음 줄이 주석 처리되어 있지 않은 경우, 좋아하는 텍스트 편집기를 사용하여 서버에서 찾아서 주석을 제거하십시오.
puppet:# vim /etc/apt/sources.list
# deb http://us.archive.ubuntu.com/ubuntu/ dapper universe
# deb http://security.ubuntu.com/ubuntu dapper-security universe우리가 이전 버전의 우분투를 사용하고 있으므로, Feisty에서 퍼펫 패키지를 쉽게 가져올 수 있도록 apt를 구성합시다. 필요한 경우 소스를 조정하여 OS 버전을 반영하십시오. 이 섹션의 단계에 익숙하지 않은 경우, Apt-Howto의 3.10 섹션을 참조하십시오.
“sources.list”를 열고 다음 두 줄을 추가하십시오.
puppet:# vim /etc/apt/sources.list
deb http://us.archive.ubuntu.com/ubuntu/ feisty universe
deb http://security.ubuntu.com/ubuntu feisty-security universe소스 목록을 업데이트하십시오.
puppet:# apt-get update
“pclient”에서도 위와 동일한 단계를 수행하십시오.
다음으로, Feisty에서 퍼펫 설정에 필요한 패키지를 가져오도록 apt를 구성하되, 다른 모든 패키지는 Dapper 저장소에서 가져오도록 허용합니다. “preferences” 파일에 다음 줄을 추가하십시오.
서버에서:
puppet:# vim /etc/apt/preferences
Package: *
Pin: release a=dapper
Pin-Priority: 700
Package: facter
Pin: release a=feisty
Pin-Priority: 500
Package: puppet
Pin: release a=feisty
Pin-Priority: 500
Package: puppetmaster
Pin: release a=feisty
Pin-Priority: 500클라이언트에서:
pclient:# vim /etc/apt/preferences
Package: *
Pin: release a=dapper
Pin-Priority: 700
Package: facter
Pin: release a=feisty
Pin-Priority: 500
Package: puppet
Pin: release a=feisty
Pin-Priority: 5003. 소프트웨어 요구 사항
퍼펫 설치를 준비하기 위해 서버와 클라이언트 모두에 몇 가지 라이브러리와 패키지를 설치해야 합니다. 이 글을 작성할 당시, 이 세트를 먼저 설치하지 않으면 의존성 루프가 발생합니다.
puppet:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
pclient:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8
4. 클라이언트 설치
Feisty에서 퍼펫과 팩터를 설치합니다.
pclient:# apt-get -t feisty install facter puppet
5. 서버 설치
퍼펫, 팩터 및 퍼펫마스터를 설치합니다. 설치 후 스크립트가 서버를 시작하려고 시도하고 오류가 발생합니다. 걱정하지 마십시오. 6단계에서 매니페스트를 생성할 것입니다.
puppet:# apt-get -t feisty install facter puppet puppetmaster
…..
퍼펫 구성 관리 도구 마스터 서버 시작 중
매니페스트 /etc/puppet/manifests/site.pp가 존재해야 합니다 [실패]
6. 서버 준비
서버(puppetmasterd)는 실행되기 전에 매니페스트가 필요합니다. 클라이언트에 “tmp/testfile” 파일을 생성하도록 퍼펫에 지시하는 매니페스트를 작성합시다.
puppet:# vim /etc/puppet/manifests/site.pp
# 존재하지 않으면 "/tmp/testfile" 생성.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 644,
owner => root,
group => root
}
}
# 어떤 클라이언트에서 클래스를 실행할지 퍼펫에 지시
node pclient {
include test_class
}이제 퍼펫 서버를 시작하십시오.
puppet:# /etc/init.d/puppetmaster start
6. 클라이언트 준비
클라이언트는 기본적으로 네트워크의 “puppet”이라는 호스트 이름을 가진 서버에 연결합니다. 서버의 호스트 이름이 “puppet”이 아닌 경우, puppetd 구성 파일 “puppetd.conf”에 지시문을 삽입해야 합니다. 이 경우 필요하지 않지만, 시연 목적으로 그렇게 하겠습니다.
“/etc/puppet/puppetd.conf”를 좋아하는 텍스트 편집기로 열고 기존 파일에 “server = puppet.example.com”을 추가하십시오.
pclient:# vim /etc/puppet/puppetd.conf
[puppetd]
server = puppet.example.com
# 모든 로그 메시지가 올바른 디렉토리로 전송되도록 확인하십시오.
# 이 디렉토리는 퍼펫 사용자에 의해 쓰기 가능해야 합니다.
logdir=/var/log/puppet
vardir=/var/lib/puppet
rundir=/var/run7. 키 서명
두 시스템이 안전하게 통신하기 위해 서명된 SSL 인증서를 생성해야 합니다. 이 다음 단계에서는 서버와 클라이언트 머신 모두에 로그인해야 합니다.
클라이언트 측에서 실행합니다.
pclient:# puppetd –server puppet.example.com –waitforcert 60 –test
다음 메시지가 표시되어야 합니다.
err: 인증서 없음; 기능이 제한된 상태로 실행 중입니다.
info: pclient.example.con에 대한 새로운 인증서 요청 생성
info: 인증서 요청 중
warning: 이 SSL 세션에서 피어 인증서가 확인되지 않습니다
notice: 인증서를 받지 못했습니다
다음으로, 서버 측에서 클라이언트가 인증서 서명을 기다리고 있는지 확인하기 위해 다음 명령을 실행합니다.
puppet:# puppetca –list
pclient.example.con
그런 다음 인증서에 서명합니다.
puppet:# puppetca –sign pclient.example.com
서명된 pclient.example.com
모든 것이 잘 진행되었다면, pclient에서 다음 메시지를 볼 수 있어야 합니다.
info: 인증서 요청 중
warning: 이 SSL 세션에서 피어 인증서가 확인되지 않습니다
notice: –listen을 무시합니다 onetime 실행
info: /etc/puppet/localconfig.yaml에서 구성 캐시
notice: 구성 실행 시작
notice: //pclient/test_class/File[/tmp/testfile]/ensure: 생성됨
info: 상태 파일 생성 /var/lib/puppet/state/state.yaml
notice: 0.11초 만에 구성 실행 완료
8. 테스트
파일이 생성되었는지 확인하십시오.
pclient:# ls -l /tmp/testfile
-rw-r–r– 1 root root 0 2007-02-18 18:28 /tmp/testfile
테스트를 위해 매니페스트를 편집하고 퍼펫에 파일 모드를 수정하도록 지시합니다. “mode => 644,”를 “mode => 600,”으로 변경하십시오.
puppet:# vim /etc/puppet/manifests/site.pp
# 존재하지 않으면 "/tmp/testfile" 생성.
class test_class {
file { "/tmp/testfile":
ensure => present,
mode => 600,
owner => root,
group => root
}
}
# 어떤 클라이언트에서 클래스를 실행할지 퍼펫에 지시
node pclient {
include test_class
}클라이언트에서 퍼펫을 자세한 모드(-v)로 한 번만(-o) 실행합니다.
pclient:# puppetd -v -o
다음 메시지가 표시되어야 하며, 이는 /tmp/testfile의 모드가 644에서 600으로 변경되었음을 나타냅니다.
notice: onetime 실행에서 –listen을 무시합니다
info: 구성은 최신입니다
notice: 구성 실행 시작
notice: //pclient/test_class/File[/tmp/testfile]/mode: 모드가 ‘644’에서 ‘600’으로 변경되었습니다
notice: 0.26초 만에 구성 실행 완료
작업이 제대로 완료되었는지 확인하십시오.
pclient:# ls -l /tmp/testfile
-rw——- 1 root root 0 2007-02-18 18:28 /tmp/testfile
9. 결론
축하합니다. 테스트가 완료되었으며, 작동하는 퍼펫 설정이 있습니다. 다음 단계는 기능성 매니페스트를 생성하고, 추가 테스트를 수행한 후 클라이언트 측에서 puppetd 데몬을 시작하는 것입니다. 기본적으로 puppetd는 30분마다 서버를 자동으로 폴링합니다.
pclient:# /etc/init.d/puppet start
더 많은 정보는 Reductive Labs를 방문하십시오.
친절하고 지식이 풍부한 도움을 원하시면 Puppet Users에 가입하거나 irc.freenode.net의 #puppet에 들러주세요.
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.