개요

설정파일을 수정하는 것은 시스템 관리자의 통상적인 작업중에 하나 입니다. 이 글에서 필자는 버전 관리 소프트웨어를 이용해서 설정 파일의 버전을 관리하는 방법에 대해 설명할 것입니다. 필자는 시스템 관리자에게는 이것이 베스트 프랙티스라고 간주하고 있습니다.

여러분은 새로운 소프트웨어를 설치 하거나 혹은 기본적인 시스템의 동작을 수정하기 위해 다양한 설정 파일을 변경해야할 필요가 있습니다. 단순히 "원본" 파일을 수동으로 백업 카피를 만들고 vfstab-orig, vfstab-, vfstab--, vfstab-old, vfstab-Jul17 같은 백업 파일들을 유지하고 있는 것 대신에 여러분은 버전 관리 소프트웨어를 이용해서 이러한 파일의 복수 리비전을 관리해야 합니다.

이것은 시스템을 깨끗하게 유지해주고 여러분은 오직 하나의 "vfstab" 파일만 가지게 될 것입니다. 또한 리비전 관리를 통해서 여러분은 이전 버전을 자유롭게 검사해 볼 수 있습니다. 적절하게 사용만 한다면 여러분은 여러분의 변경사항을 적절하게 문서화 할 수 있고 이것은 다음 주가 됐든 혹은 내년이 됐든 여러분이 설정 파일에 어떠한 라인을 추가/삭제/수정 했는지를 쉽게 알 수 있게 해줄 것입니다.

필자는 hosts, inetd.conf, /kernel/drv/sgen.conf, vfstab, dfstab, nsswitch.conf, services, sshd_config, httpd.conf 같이 수정이 필요한 모든 파일에 이 방법을 사용하고 있습니다. 필자는 RCSemacs 를 같이 이용합니다. emacs 의 빌트-인 커맨드를 이용해서 "체크 인", "체크 아웃이" 가능함으로써 파일의 업데이트가 쉽습니다.

Emacs 는 또한 여러분이 변경에 따른 체크인 시에 변경에 대한 커멘트를 물어 볼 것입니다. 여러분은 항상 최신의 버전을 가지고 있게 될 것이고 파일들은 "읽기 전용" (그러므로 여러분은 갑자기 파일을 체크하지도 않고 수정하는 일이 없어질 것입니다.) 으로 변경됩니다. 그리고 만약 여러분이 변경한 것들이 동작하지 않으면 손쉽게 이전 리비전으로 복구 할 수 있습니다.

몇몇 파일들은 자주 수정되지 않습니다. 그러므로 변경 커멘트를 다는 것은 매우 중요합니다. 왜냐하면 이 파일을 수주 혹은 수년 후에 다시 볼 수도 있기 때문이며 달아 놨을 경우엔 이후에 손쉽게 무슨 작업을 했었는지 알 수 있을 것이기 때문입니다. 만약 여러명이 시스템 관리자를 맡고 있다면 다른 시스템 관리자가 시스템을 변경한 사항들을 추적하는데에 매우 유용할 것입니다.

그러나 이러한 책임을 가진 모든 사람들이 버전 관리 소프트웨어가 있다는 것을 아는 것도 중요 합니다. 필자는 파일을 단순히 chmod 해서 수정해 버리는 (버전 관리 소프트웨어는 현재 버전 파일의 복사 버전을 항상 읽기-전용 파일로 위치 시킴) 관리자들을 여러명 보아 왔습니다. 특정 파일이 읽기-전용인 것을 보고 버전 관리 소프트웨어를 사용하고 있음을 짐작할 수 있어야 할 것입니다.


예제

RCS 에서 필자는 파일에 두가지 키워드를 항상 입력합니다(RCS 에서 이것은 키워드 교체라고 합니다): $Id$$Log$ 키워드. $Id$ 키워드는 파일 이름, 최신 버전과 날짜 그리고 파일을 수정한 마지막 사람의 한줄짜리 요약 정보를 나타냅니다. $Log$ 키워드는 수정되는 파일의 리비전 히스토리 (변경 커멘트 포함) 를 삽입합니다. RCS 는 항상 $Log$ 키워드에 사용되는 프리픽스 문자열(# 혹은 etc 로 시작하는 커맨트들 같은) 과 함께 로그 라인들을 확장할 것입니다. SCCS 는 비슷한 ID 키워드를 가지고 있습니다.

아래는 이러한 키워드 태그들을 가진 vfstab 의 예제 입니다:

# $Id: vfstab,v 1.19 2006/12/10 19:02:23 root Exp $
#
# $Log: vfstab,v $
# Revision 1.19  2006/12/10 19:02:23  root
# moved vpm/domains from c1t14d0s6 to c1t14d1s0 (about twice as large)
#
# Revision 1.18  2006/07/20 15:41:51  jkwan
# added old system disk
#
# Revision 1.17  2006/07/19 22:00:15  jkwan
# updated for c0t0 new system disk, updated Solaris 8
#
# Revision 1.16  2005/10/27 14:46:30  jkwan
# replaced c0t0 disk - was IBM 18g; now Seagate 36g;
# trimmed comments from 1.1;
# removed c0t0 fs from new disk;
# added swap back on on c0t0d0s1

초기 버전 관리 파일의 체크인을 위해 아래와 같이 입력하였습니다:

# $Id$
#
# $Log$
# comment about this file

RCS 는 파일과 히스토리 를 저장하기 위해 "RSC" 라는 이름의 서브 디렉토리를 필요로 합니다. 버전관리가 필요한 모든 파일들을 위해서 이러한 서브 디렉토리가 필요 합니다. 또한 이러한 파일들 내의 데이타는 민감하기 때문에 적절하게 퍼미션을 설정 합니다:

# mkdir /etc/RCS /etc/mail/RCS ...
# chmod 700 /etc/RCS /etc/mail/RCS ...

만약 emacs 를 사용 한다면, (아래를 참고) ^Xvi 가 RCS 디렉토리를 생성할지를 물어봅니다.


기본 RCS 커맨드

여러분이 사용할 수 있는 몇가지 기본 RCS 커맨드들을 알려 드립니다. 여러분은 SCCS 같 은 다른 버전 관리 소프트웨어를 사용할 수도 있습니다(과거에 필자도 사용해온 경험이 있음). 그러므로 커맨드 구문은 적절한 멘 페이지를 참고하시기 바랍니다.

  • co -l file – 수정을 위해 파일을 체크 아웃 (락)
  • ci file – 파일을 체크인. 이것은 또한 초기 파일을 체크인 할때에도 사용됨. 변경사항에 대한 커멘트 입력을 하도록 함. 중요한것으로는 변경이 완료된 후에는 반드시 "co file" 을 이용해서 최신 버전을 체크 아웃 해야 함. 반드시 이 작업을 해야 하며 그렇지 않을 경우 설정 파일이 제대로 위치하지 않게 되면서 문제를 유발할 수 있음.

다음의 커맨드를 이용해서 체크 인, 체크 아웃을 단 한번의 작업으로 할 수도 있습니다:

  • ci -u file – 파일을 체크인 하고 새로운 버전을 체크 아웃 함.


emacs 와 같이 사용하기

  • ^Xvi – 여러분이 수정하고 있는 파일을 새 파일 (초기 파일) 로 체크인 함
    (emacs 는 만약 RCS 디렉토리가 존재하지 않을 경우 새로 생성하길 원하는 지를 물어 볼 것임)
  • ^X^Q – 수정하고 있는 파일을 체크 인/체크 아웃 (토글)


소프트웨어 설치

종종 써드 파티 소프트웨어를 설치 할 때에 설치 과정에서 설치 스크립트가 수정하는 파일들의 백업 파일들을 만드는 경우가 있습니다. 여러분은 표준 디렉토리를 살펴 보고 (/etc, /kernel etc) 변견된 사항이 없는지 확인하여 수동으로 이러한 변경사항을 버전 관리 파일에 반영해 줘야 합니다.

예를 들어 베리타스 넷백업 소프트웨어 설치시에는 /etc 에서 아래와 같은 파일들을 볼 수 있습니다:

inetd.conf.NBU_060107.11:05:31
services.NBU_060107.13:16:02

이러한 원본파일의 복사본들은 소프트웨어 설치 이전에 것들 (그러므로 버전 관리 소프트웨 에 최신 버전으로 체크인 되어야 함) 입니다. diff 를 실행하고 변경 사항을 버전 관리되고 있는 설정 파일들에 집어 넣습니다.

bash-3.00$ diff -c inetd.conf.NBU_060107.11\:05\:31 inetd.conf
*** inetd.conf.NBU_060107.11:05:31      Fri Jun  1 13:16:02 2007
--- inetd.conf  Wed Jul 18 22:26:27 2007
***************
*** 24,26 ****
--- 24,30 ----
  100235/1 tli rpc/ticotsord wait root /usr/lib/fs/cachefs/cachefsd cachefsd"
  # TFTPD - tftp server (primarily used for booting)
  #tftp dgram   udp6    wait    root    /usr/sbin/in.tftpd      in.tftpd -s /tftpboot
+ bpcd  stream  tcp     nowait  root    /usr/openv/netbackup/bin/bpcd bpcd
+ vnetd stream  tcp     nowait  root    /usr/openv/bin/vnetd vnetd
+ vopied        stream  tcp     nowait  root    /usr/openv/bin/vopied vopied
+ bpjava-msvc   stream  tcp     nowait  root    /usr/openv/netbackup/bin/bpjava-msvc bpjava-msvc -transient
  1. rm inetd.conf.NBU_060107.11:05:31 – 소프트웨어 설치 이전의 설정 파일. 이 파일은 반드시 최근에 체크인된 파일과 동일해야 함
  2. mv inetd.conf inetd.conf-netbackup – 소프트웨어 설치 이후의 파일
  3. co -l inetd.conf
    변경된 파일의 변경사항 적용
  4. rm inetd.conf-netbackup


요약

버전 관리 소프트웨어를 설정 파일들에 사용하는 것은 시스템을 관리하는 훌륭한 방법입니다. 이 방법을 통해서 시스템을 깔끔하고, 설정 파일의 변경을 적절하게 문서화 하고 변경에 대한 추적이 용이하도록 합니다. 또한 설정 파일을 이전의 상태로 롤백이 가능케 합니다. 또한 시스템 업그레이드 혹은 설치시에 RCS 디렉토리 혹은 RCS 가 사용하는 ",v" 파일을 살펴 봄으로써 이전이ㅡ 설정 되었던 사항들을 확인해 볼 수도 있습니다. 관리의 책임 있는 각 개인들이 버전 관리 소프트웨어의 사용법을 아는 것이 가장 중요 합니다. 버전 관리 소프트웨어를 사용하는 것은 몇가지 간단한 기본 커맨드에 대한 숙지를 요구하고 설정 파일 수정시에 하나 혹은 두개 정도의 추가 단계만을 요구할 뿐입니다.


이 글의 영문 원본은
Configuration files best practices
에서 보실 수 있습니다.

2008/05/19 15:13 2008/05/19 15:13

TRACKBACK :: http://blog.sdnkorea.com/blog/trackback/573

댓글을 달아 주세요

[로그인][오픈아이디란?]

◀ Prev 1  ... 78 79 80 81 82 83 84 85 86  ... 624  Next ▶