cfengine 을 이용하여 여러대의 시스템관리 자동화 하기

문태준의 이미지

** 지난번 내용을 수정하였습니다.

제 위키에 올린것을 가져오니 좀 편집이 엉성하군요. 처음에는 사용방법이 눈에 들어오지 않겠지만 홈페이지에서 매뉴얼을 보고 어느정도 공부하시면 정말 많은 도움이 될 것입니다.

pxe 와 kickstart/fai 등을 이용하여 설치 자동화, ldap과 nfs/autofs 등을 이용하여 계정 및 홈디렉토리 통합, cfengine 을 이용하여 각종 시스템관리 작업 자동화를 한다면 정말 멋지고 훌륭한 일일 것입니다.

언제나 공개소스는 우리를 놀라게 하고 즐겁게 합니다.

http://tunelinux.pe.kr/wikix/index.php?display=CfengineTest
=============================

cfengine 소개
프로그램소개

* Cfengine은 유닉스 컴퓨터 시스템 설정 및 유지보수를 환상적으로 해주는 유용한 툴이다. Cfengine은 독립형(stand-alone) 도구모음으로 설정 파일에 있는 명령에 따라 컴퓨터를 설정하고 관리한다. 설정 파일은 습득해서 사용하기 쉬운 고급 언어로 다양한 시스템 컴포넌트에 적합한 속성을 정의하고 있다(프로그래밍은 하지 않아도 됨). 이런 방식으로 Cfengine은 각각의 시스템을 정의된 설정 스펙에 맞게 자동으로 여러 시스템을 설정해 줄 수 있다. 또한, 계속해서 시스템을 감시하면서 필요에 따라 설정을 조절해주도록 할 수도 있다.

* Cfengine으로 할 수 있는 작업

* 네트워크 인터페이스 설정
* 시스템 설정 파일 및 기타 텍스트 파일 편집
* 상징적 링크 생성
* 파일 권한과 소유자 점검 및 수정
* 불필요한 파일 삭제
* 선택된 파일 압축
* 정확하고 안전한 방식으로 네트워크에서 파일 배포
* 자동으로 NFS 파일 시스템 마운트
* 주요 파일 및 파일 시스템 존재 여부와 무결성 확인
* 명령어 및 스크립트 실행
* 프로세스 관리
* 보안관련 패치 및 유사한 수정사항 적용

* 위와 같은 다양한 작업을 모두 중앙의 서버에서 중앙집중적인 방식으로 관리를 할 수 있다. 클래스를 이용하여 특정 호스트별로 그룹을 묶을 수도 있고 운영체제를 묶어 명령을 다르게 적용할 수도 있다.

* 프로그램 구성은 다음과 같다.

cfagent 로컬 시스템에 설정 파일을 적용하는 주요 유틸리티
cfrun 리모트 시스템에 설정 파일을 적용하는 유틸리티
cfservd cfrun을 지원하는 서버 프로세스. 리모트 시스템으로부터 Cfengine 에이전트 기능을 사용할 수 있게 해줌.
cfexecd 작업 스케쥴링 및 보고 등을 자동화 해주는 데몬
cfenvd 문제 감지 데몬
cfkey 보안 키 생성 유틸리티

o 각 호스트별로 cfagent 를 이용하여 작업할 내용을 미리 정의해놓는다. 이를 이용하여 서버 1대별로 시스템관리 작업을 자동화할 수 있다. 그러나 우리가 원하는 것은 이것이 아닐 것이다. 중앙의 관리서버에 필요한 파일 등을 올려놓고 각 서버에서 중앙의 관리서버에서 파일을 가져오게 할 수도 있고 중앙의 관리서버에서 원격으로 각 시스템의 cfagent 를 실행할 수도 있다. 중앙의 관리서버에서 cfrun 을 이용하여 각 호스트에 접속할 수가 있는데 이때 각 호스트에는 cfservd 가 돌아가고 있으면 된다.
o cfexecd 는 각 호스트에서 cron 처럼 사용하는 것이다.
o cfkey 는 보안 키 생성 유틸리티로 각 관리할 호스트에서 실행하면 된다. 이 키를 이용하여(개인키/공개키 방식) 중앙관리서버와 각 호스트간에 통신을 한다.

설치 및 세팅
설치

http://www.cfengine.org/download.phtml 에서 다운로드

먼저 md5sum을 이용해 소스프로그램의 무결성 확인한다. 소스를 푼다. ./configure (기본은 /usr/local 에 설치) make make check (셀프 테스트) make install

여기서 설치시 두가지 개발관련 프로그램이 필요하다.


Berkeley Database obtainable from http://www.sleepycat.com
OpenSSL obtainable from http://www.openssl.org

rhel3 에서는 db4-devel, openssl-devel 이 필요하다.

설치패키지는 아래와 같다. > ./sbin/cfagent > ./sbin/cfservd > ./sbin/cfrun > ./sbin/cfkey > ./sbin/cfenvd > ./sbin/cfenvgraph > ./sbin/cfexecd > ./sbin/cfshow > ./sbin/cfetool > ./sbin/cfetoolgraph > ./sbin/cfdoc 21a33,57 > ./share/cfengine > ./share/cfengine/cfengine.el > ./share/cfengine/cf.chflags.example > ./share/cfengine/cf.freebsd.example > ./share/cfengine/cf.ftp.example > ./share/cfengine/cf.groups.example > ./share/cfengine/cf.linux.example > ./share/cfengine/cf.main.example > ./share/cfengine/cf.motd.example > ./share/cfengine/cf.preconf.example > ./share/cfengine/cf.services.example > ./share/cfengine/cf.site.example > ./share/cfengine/cf.solaris.example > ./share/cfengine/cf.sun4.example > ./share/cfengine/cf.users.example > ./share/cfengine/cfservd.conf.example > ./share/cfengine/cfagent.conf.example > ./share/cfengine/cfagent.conf-advanced.example > ./share/cfengine/update.conf.example > ./share/cfengine/cfrc.example > ./share/cfengine/cfrun.hosts.example > ./share/cfengine/README > ./share/cfengine/ChangeLog > ./share/cfengine/INSTALL > ./share/cfengine/NEWS

세팅

* 먼저 프로그램을 컴파일하여 /usr/local/cfengine 디렉토리에 생성하였다고 가정한다.
* /var/cfengine/inputs 에 cfagent.conf 파일을 적절히 생성한다. 이 파일만 있으면 작업은 가능하다.
* 테스팅이 되었으면 이제 마스터 서버와 클라이언트를 구성하자.
* 마스터 서버에서는 /usr/local/var/cfengine 디렉토리에 inputs 에 들어가는 파일을 생성해준다. 여기에 들어갈 파일은 cfagent.conf cfrun.hosts cfservd.conf update.conf 일 것이다. /usr/local/var/cfengine 디렉토리는 update.conf 설정파일에 들어갈 부분이며 각 클라이언트에서 마스터 서버의 설정파일을 가져올 디렉토리이다. 물론 다른 디렉토리로 변경하여도 된다.
* 이제 클라이언트에 프로그램을 설치해야하는데 동일한 OS에 동일한 버전이면 앞에서 컴파일한 프로그램을 사용하여도 된다. 각 클라이언트에서는 /var/cfengine 디렉토리에 모든 설정파일과 바이너리 파일을 놓는다. 설정파일은 inputs, 바이너리파일은 bin 디렉토리에 넣으면 될 것이다. 설정파일은 자동으로 가져오면 되므로 /var/cfengine/inputs/update.conf 파일만 제대로 작성을 해놓고 cfkey를 이용하여 키 생성후 공개키를 마스터서버에 복사하여놓는다.
* 마스터서버에서는 cfservd 가 떠 있어야하며 위에서 설명한대로 클라이언트의 키를 서버의 /var/cfengine/ppkeys/root-ip.pub 의 형태로 복사해넣는다. cfservd 의 설정파일에서 AllowUsers = ( root ) 라는 항목이 있어야 나중에 cfrun이 실행가능하다. 이때문에 약간의 시간을 소모하였다. 또한 cfservd 설정에서 admin 설정등이 제대로 되어 있어야 한다.
* 이제 client 에서 cfagent 를 실행하면 마스터 서버에서 cfagent.conf cfrun.hosts cfservd.conf 파일을 자동으로 가져와 필요한 작업을 수행한다.
* cfservd 는 위에서는 마스터에만 띄웠지만 마스터 서버에서 각 클라이언트에 접속하여 cfagent 를 실행하려면 각 클라이언트에도 띄워져 있어야 한다. cfservd는 두가지 기능을 하는 것이다. 마스터서버에서 파일서버기능, 클라이언트에서 원격접속 실행기능.
* 클라이언트에 update.conf 를 수동으로 복사해주어야 하고 클라이언트에서 마스터 서버로 공개키를 수동으로 복사해주어야 한다. 나머지는 자동으로 처리를 한다.
o 이를 위해서 처음 각 클라이언트에 설치시 자동으로 /var/cfengine 디렉토리를 만들고 마스터서버에서 update.conf 파일을 가져오도록 하고 클라이언트에서 cfkey를 생성하여 마스터서버로 복사해주는 스크립트를 짜놓으면 자동화가 가능하다.

디렉토리 구조

* 마스터서버
o /usr/local/var/cfengine : 각 클라이언트에서 공유할 설정파일
o /usr/local/cfengine : 초기 설치시 바이너리 파일
* 클라이언트/마스터 공통
o /var/cfengine : 각 설정파일 및 바이너리 프로그램
* rpm 으로 묶어놓는다면 개별프로그램은 표준디렉토리에 넣으면 되고 /var/cfengine 디렉토리를 생성하도록 하고 모든 설정을 테스팅하였다면 update.conf 파일복사, cfkey 이용해 키 복사까지 하면 좋을 것이다.

참고자료

* http://www.cfengine.org/ cfengine 사이트
* 관련매뉴얼 : 위의 사이트에서 튜터리얼은 세팅하는 방법 및 사용법에 대하여 레퍼런스는 개별 프로그램의 상세한 사용법에 대해서 나와있다. 레퍼런스 매뉴얼에서 설정파일 예제가 있으며 이를 참고하자.
o 여기의 설정파일 예제는 초기 프로그램 설치시 share/ 디렉토리에도 생성이 된다.
* Automating UNIX and Linux Administration 서적 http://tunelinux.pe.kr/zboard/view.php?id=link_book&no=111
* 시스템관리의 핵심 개정 3판 14장 관리 작업 자동화 (한빛네트워크에 간단한 내용이 있으나 책에 있는 내용임)
* http://network.hanbitbook.co.kr/view.php?bi_id=644 한빛네트워크 강좌 시스템 관리용 오픈 소스 패키지 톱 5: 제5편 Cfengine
* 윈도우즈에서도 활용이 가능하며 http://www.cfengine.org/confdir/nt-howto.html 내용을 참고로 하여 설치한다. 먼저 cygwin 을 설치해야한다.

Forums: 
문태준의 이미지

Automating UNIX and Linux Administration 이책 강력추천 합니다.
http://tunelinux.pe.kr/zboard/view.php?id=link_book&no=111

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

ydhoney의 이미지

근데 혹시 이 책 가져가셨나요? 아직 사무실에 있는건가? 요즘 사무실에 잘 없어서 확인이 안되는군요..-_-

한동안 보고 있었는데..가져가셨으면..질러야죠. :-) 청구하고..^^

문태준의 이미지

그런걸 왜 여기서 질문?
당연히 사무실에 두고왔었죠. 그래서 며칠전 다시 샀음. 좀 비싸긴 하지만 내용은 정말 좋지요. 이런 툴들 고민하면서 만지며 살면 얼마나 좋을까나??? 계속 돌아다니지 않구~~~

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

문태준의 이미지

cfengine 써보면 써볼수록 멋있는 프로그램이네요.
이거 무슨 완전히 광고같지요?

근데 제가 여러가지 프로그램써보면서 또 이렇게 강력추천하는 일이 별로 없는데 이건 정말 해볼만한 프로그램입니다.

당분간은 기술적으로 실무일을 할 일이 별로 없겠지만 일이 생긴다면 바로 써먹을 것입니다.

앞으로 cfengine의 전도사가 되자!

---------------------------
문태준
http://groups.google.co.kr/group/sysadminstudy 시스템어드민 공부모임
http://tunelinux.pe.kr
http://database.sarang.net

익명 사용자의 이미지

[b]whhhwGhwghRH

Quote:

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.