RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
«이전  1 ... 2 3 4 5 6 7 8 9 10 ... 21  다음»
출처 블로그 > 슈퍼유저도전
원본 http://blog.naver.com/ilove7rose/110006516800
KISA에서 나온  'ModSecurity를 이용한 아파치 웹서버 보안'문서를 요약

설치법에는  DSO 방식과 소스 설치가 있는뎅,  소스 설치에 대한 내용은 다음과 같다.

* 설치는 당사의 아파치 설치에 따라  문서와는 조금 다른 점이 있음.

1. 작업 공간으로 이동
  cd /usr/local/src
 
2. 다운로드
  http://www.modsecurity.org/download/modsecurity-apache-1.9.2.tar.gz

3. 압축 해제
  tar xvzf modsecurity-apache-1.9.2.tar.gz

4. 아파치 STOP
  /usr/local/apache/bin/apachectl stop

5. 아파치 재컴파일
  cd /usr/local/src/apache_1.3.26/

  cp /usr/local/src/modsecurity-apache-1.9.2/apache1/mod_security.c ./src/modules/extra

  ./configure --prefix=/usr/local/apache --activate-module=src/modules/php4/libphp4.a --enable-rule=SHARED_CORE --enable-module=so --enable-shared=max --add-module=src/modules/extra/mod_throttle.c --activate-module=src/modules/extra/mod_security --enable-module=security
 
  make

  make install

6. /usr/local/apache/conf 안에 mod_security.conf 복사
 

7. 실행권한 조정
  chmod 700 mod_security.conf

8. 아파치 conf에 mod_security.conf  include 시킴
  Include conf/mod_security.conf

9. 아파치 재시작


 mod_security.conf은  웹서버 및 서비스 환경에 따라 수정해야 함.
2006/09/11 10:08 2006/09/11 10:08
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > [完's Life~!]
원본 http://blog.naver.com/bbulkim2/80023987982
한국정보보호진흥원에서 권고중인 웹방화벽
웹서버의 재설치 없이 DSO방식으로 설치한다
/usr/local/apache2/bin/apxs -cia /usr/local/modsecurity-apache-1.9.2/apache2/mod_security.c

설치후 /usr/local/modules 디렉토리에 mod_security.o 가 생성되며
/usr/local/conf/httpd.conf에 LoadModule 에 mod_security.o 가 삽입된다.


httpd.conf안에 다음을 추가한다.

<IfModule mod_security.c>
첨부한 정책내용
</IfModule>

* 정책은 KrCERT에서 제작한 APM용 기본정책
2006/09/11 10:07 2006/09/11 10:07
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 나만의 세계
원본 http://blog.naver.com/didorito/60012087196

웹 어플리케이션 시큐리티, 과연 올해 시장이 있을까?  아니면 내년?

웹 방화벽의 시장성에 대해서는 약간 의문이 생긴다.


이러한 제품을 구매할 능력이 있는 회사가 얼마나 될까?

또한 웹의 보안문제로 인한 피해 규모 및 이로인한 파급효과가 얼마나 될지?

자료의 유출이나, 웹 사이트 해킹에 대한 피해액이 과연 이러한 제품을 구매할 만한 가치가 있게 만드는 것일까?


당장 머리속에 떠오르는 의문들이다. 사실 이런걸 예측한다면 만드는 것마다 성공하겠지만 어쨌든 이러한 관점에 대해서는 계속 고민을 해 봐야 할만한 문제라고 생각한다.


기술적인 관점에서는 아직 깊이 서베이를 해보지 않아서 단편적인 지식만 있는 상태이다.

하지만 대강 (항상 그렇지만) 파악한 바로는

- learning based approach

- rule-based approach

이렇게 두 가지가 있는 것으로 알고 있다.

약간 다른 관점에서 vulnerability scanner가 있지만 성향이 약간 달라 현재 고려대상에서 제외하는게 좋을 것 같다고 판단했다.


learning 방식에 대해서는 구체적으로 파악하지는 못 했지만,

정상적인 HTTP request/reponse 에서 규칙을 추출하는게 아닌가 한다. 어떤 dynamic page에 대한 request의 parameter의 전달 형태와, response의 형태를 규칙을 자동으로 생성하고 적용시에 이와 위배되는 request와 reponse가 발견되면 차단하는 걸로 파악이 된다.

반변 rule-based approach는 학습 방법과는 달리, 잘 알려진 attack이나 페이지의 변조, 데이터의 유출 등에 대한 rule-set을 미리 정의하여 이 규칙에 위배되는 request를 차단하는 방식으로 파악하고 있다.


현재 나의 관심 대상인

mod_security는 후자의 방식을 채택한 것으로 아파치의 module로 사용되며, mod_proxy와 같이 이용시에 웹 서버와 무관하게 적용할 수 있을 것으로 보인다.


현재 쓸만한 오픈소스의 조사가 더 필요하긴 하지만 mod_security와 같이 범용적으로 사용할 수 있는 오픈소스는 그다지 많지 않으리라고 파악하고 있다. 뭐, 더 있다면 좋겠지만...


아파치+mod_proxy+mod_security의 조합은 범용적으로 쓸 수 있기에는 좋은 조합이지만 언제나 그렇듯이 performance에 치명적인 단점이 있으리라고 생각한다. 이 부분에 대해서는 좀더 효율적인 구조로 변경을 통한다면 좀더 상용제품에 가까운 웹 방화벽을 만들 수 있지 않을까 한다.


시간이 되면 효용성에 대한 분석과 더불어 소스코드에 대한 좀더 심화된 분석이 필요하다. 사실 잠깐 코드를 들여다 보았는데, 스윽 본거라 뭐라고 적을만한 내용은 아직까지는 없다. 하지만 기능과 rule-set 측면에서 적용가능한 보안 정책에 대해서는 이제부터라도 조사를 시작해야 할 것 같다....


< 자료 >


- 아파치 + mod_proxy + mod_security 의 조합에 대한 overview성격의 자료

  http://www.securityfocus.com/infocus/1739

- mod_security 에 대한 자세한 정보는

  www.mod_security.org

- 웹 어플리케이션 시큐리티에 대한 정보는

  www.owasp.org

2006/09/11 10:06 2006/09/11 10:06
이 글에는 트랙백을 보낼 수 없습니다
출처 카페 > 컴퓨터, 너 누구니? / 쵸코바샘
원본 http://cafe.naver.com/whoiscomputer/24

서비스 업체

기본 DNS 1

DNS 2

DNS 3

보조 DNS

KT 한국통신

211.216.63.1

211.229.63.1

168.126.63.1

끝숫자를 2로...

하나로통신

210.94.0.7

210.180.98.74


131.107.1.7

두루넷

210.117.65.1



210.117.65.2

신비로 샤크

202.30.143.11



203.240.193.11

드림라인

210.181.1.24




데이콤 보라홈넷

211.106.67.221



164.124.101.2

SK 싱크로드

211.188.128.2




HiTEL

203.245.15.2




단지넷

210.181.1.24



164.124.101.2

2006/09/11 08:57 2006/09/11 08:57
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 헤즐넛 - 더욱 강렬하게
원본 http://blog.naver.com/designfull/120002329692

FreeBSD 시스템을 다시 만지게 됬는데..


아파치 에로로그에서 내뱉는 걸 보면


tail -f /var/log/httpd-error.log


에서


File 'NONEXISTENT/charsets/?.conf' not found (Errcode: 2)
Character set '#19' is not a compiled character set and is not specified in the 'NONEXISTENT/charsets/Index' file


가 뜨는게 있다.


이럴땐..


cp /usr/local/share/mysql/charsets/euc_kr.conf /root/src/mysql-4.0.17/sql/share/charsets/


물론 euc_kr.conf 파일 있을때..

2006/09/11 08:44 2006/09/11 08:44
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 섹 스코리아
원본 http://blog.naver.com/korean44/5537771
PBS(Portable Batch System) 설치하기작성자: 김상완(sangwan@kisti.re.kr)최초 작성일: 2002-10-14이 문서는 PBS(Portable Batch System) 을 설치하고 사용하는 방법을 설명한다.설치에 사용된 운영체제는 RedHat 7.1이고, 이 문서에서 설치된 OpenPBS 버젼은2.3.16이다. 소스 코드와 RPM 패키지로 설치하는 방법을 설명한다.문서 업데이트2002-10-16: 버그 수정, RPM 제거 방법2002-10-17: PBS 제시작 스크립트목차1. 소스로 설치하기  1.1. 마스터 노드에 설치    0) 다운로드 받기    1) 압축풀기    2) 컴파일하기    3) 설치하기    4) 서버 설정    5) 서버 데몬 시작하기    6) 클라이언트 노드 접속 확인    7) 서버 데몬 제시작 시키기    8) PBS 제거하기  1.2. 클라이언트 노드에 설치    1) 압축풀기    2) 컴파일하기    3) 설치하기    4) 클라이언트 설정    5) 클라이언트 데몬 시작하기2. RPM으로 설치  2.1. 마스터 노드에 설치    1) RPM 패키지 설치    2) 환경 변수의 추가    3) 서버 설정    4) 서버 데몬 시작하기  2.2. 클라이언트 노드에 설치    1) RPM 패키지 설치    2) 클라이언트 설정    3) 클라이언트 데몬 시작하기    4) PBS 제거하기3. 기타  3.1. MAN 페이지 참조  3.2. PBS 데몬의 종류  3.3. 네트웍 주소와 포트  3.4. 부팅시 데몬을 자동으로 실행하기  3.5. PBS 제시작 스크립트참고자료
1. 소스로 설치하기 [[목차]]1.1. 마스터 노드에 설치 [[목차]]0) 다운로드 받기http://www.openpbs.org에서 PBS 최신 버젼을 다운로드 받는다.또는 KISTI Grid Testbed의 '소프트웨어 다운로드 디렉토리'에서(http://gridtest.gridcenter.or.kr/software/index.php?dir=/OpenPBS)OpenPBS_2_3_16.tar.gz을 다운 받는다.1) 압축풀기$ tar zxvf OpenPBS_2_3_16.tar.gz$ cd OpenPBS_2_3_162) 컴파일하기--enable-docs 옵션이 없으면 man 문서가 설치되지 않는다.$ ./configure --prefix=/usr/pbs --enable-docs --disable-mom$ make주의>>OpenPBS 2.3.12등의 이전 버젼에서는 컴파일과정에서"'CLK_TCK' undeclared" 등의 에러가 발생할 수 있으나 헤더화일 include등을수정하면 컴파일이 가능하다.3) 설치하기/usr/pbs에 바이너리가 설치되고,/usr/spool/PBS에 환경설정 및 로그화일 디렉토리 등이 설치된다.$ su# make install4) 서버 설정# cd /usr/spool/PBS서버 이름을 지정하여 준다.# cat server_namesdd114.foobar.com서버에 연결된 노드들을 명시하여 준다.# vi server_priv/nodessdd105sdd106sdd107:wq참고>> nodes 화일의 형식은 다음과 같다.node_name[:ts] [property ...] [np=NUMBER]노드 이름 다음에 ts는 timeshared를 의미한다.np=NUMBER 는 VP(virtual processor)의 개수를 지정한다.자세한 것은 참고자료를 참고 할 것.소스로 설치할 경우 설정 화일이 생성되지 않으므로 만들어 준다.# vi /usr/spool/PBS/pbs_server.conf## Create queues and set their attributes.# Create and define queue workq#create queue workqset queue workq queue_type = Executionset queue workq enabled = Trueset queue workq started = True## Set server attributes.#set server scheduling = Trueset server default_queue = workqset server log_events = 511set server mail_from = admset server query_other_jobs = Trueset server scheduler_iteration = 600:wqserverdb 화일 생성, 큐 생성 등의 초기화# /usr/pbs/sbin/pbs_server -t create# /usr/pbs/bin/qmgr < /usr/spool/PBS/pbs_server.confMax open servers: 4# /usr/pbs/bin/qterm5) 서버 데몬 시작하기# /usr/pbs/sbin/pbs_server# /usr/pbs/sbin/pbs_sched# ps -ax | grep pbs15038 ? S 0:00 /usr/pbs/sbin/pbs_server15040 ? S 0:00 /usr/pbs/sbin/pbs_sched6) 클라이언트 노드 접속 확인# /usr/pbs/bin/pbsnodes -asdd105 state = free np = 1 ntype = clustersdd106 state = free np = 1 ntype = clustersdd107 state = free np = 1 ntype = cluster7) 서버 데몬 제시작 시키기# killall pbs_server ; killall pbs_sched ; \ /usr/pbs/sbin/pbs_server ; /usr/pbs/sbin/pbs_sched8) PBS 제거하기# killall pbs_sched pbs_server# killall pbs_mom# rm -rf /usr/spool/PBS /usr/pbs1.2. 클라이언트 노드에 설치 [[목차]]1) 압축풀기$ tar zxvf OpenPBS_2_3_16.tar.gz$ cd OpenPBS_2_3_162) 컴파일하기$ ./configure --help$ ./configure --prefix=/usr/pbs --disable-server --enable-mom \ --set-default-server=sdd114.foobar.com참고>> --set-default-server 옵션의 값은 server_name 화일에 저장된다.$ make3) 설치하기$ su# make install/usr/pbs에 바이너리가 설치되고,/usr/spool/PBS에 환경설정 및 로그화일 디렉토리 등이 설치된다.4) 클라이언트 설정# cd /usr/spool/PBS# cat server_namesdd114.foo.bar.com# vi mom_priv/config$clienthost sdd114.foo.bar.com:wq5) 클라이언트 데몬 시작하기# /usr/pbs/sbin/pbs_mom# ps -ax | grep pbs17812 ? S 0:00 /usr/pbs/sbin/pbs_mom2. RPM으로 설치 [[목차]]www.openpbs.org에서 PBS 최신 버젼을 다운로드 받는다.또는 KISTI Grid Testbed의 '소프트웨어 다운로드 디렉토리'에서(http://gridtest.hpcnet.ne.kr/software/index.php?dir=/OpenPBS)openpbs-2.3pl2-1.i386.rpm (마스터 노드용)openpbs-exechost-2.3pl2-1.i386.rpm (계산 노드용)위의 두 화일을 다운 받는다.2.1. 마스터 노드에 설치 [[목차]]1) RPM 패키지 설치tcl, tk 패키지등의 의존성 문제가 있으므로 --nodeps 옵션을 주어 설치한다.# rpm -ivh --nodeps openpbs-2.3pl2-1.i386.rpmPreparing... ########################################### [100%] 1:openpbs ########################################### [100%]2) 환경 변수의 추가# vi ~/.bashrc...# PBSexport PATH=/usr/pbs/bin:/usr/pbs/sbin:$PATHexport PBS_SERVER_HOME=/usr/spool/PBSexport PBS_HOME=/usr/spool/PBS...:wq# source ~/.bashrc3) 서버 설정# cd /usr/spool/PBS# vi server_priv/nodessdd105sdd106sdd107:wq# vi server_namesdd114.foo.bar.com:wq4) 서버 데몬 시작하기# /usr/pbs/sbin/pbs_server# /usr/pbs/sbin/pbs_sched# ps -ax | grep pbs15270 ? S 0:00 /usr/pbs/sbin/pbs_server15274 ? S 0:00 /usr/pbs/sbin/pbs_sched2.2. 클라이언트 노드에 설치 [[목차]]1) RPM 패키지 설치# rpm -qpl openpbs-exechost-2.3pl2-1.i386.rpm/etc/rc.d/init.d/pbs/usr/doc/openpbs-exechost-2.3pl2.../usr/spool/PBS/usr/spool/PBS/aux/usr/spool/PBS/checkpoint/usr/spool/PBS/mom_logs/usr/spool/PBS/mom_priv/usr/spool/PBS/mom_priv/jobs/usr/spool/PBS/pbs_environment/usr/spool/PBS/server_name/usr/spool/PBS/spool/usr/spool/PBS/undeliveredtcl, tk 패키지등의 의존성 문제가 있으므로 --nodeps 옵션을 주어 설치한다.# rpm -ivh --nodeps openpbs-exechost-2.3pl2-1.i386.rpmPreparing... ########################################### [100%] 1:openpbs-exechost ########################################### [100%]2) 클라이언트 설정# cd /usr/spool/PBS# vi server_namesdd114.foo.bar.com:wq# vi mom_priv/config$clienthost sdd114.foo.bar.com:wq3) 클라이언트 데몬 시작하기# /usr/pbs/sbin/pbs_mom# ps -ax | grep pbs 4178 ? S 0:00 /usr/pbs/sbin/pbs_mom4) PBS 제거하기RPM으로 PBS를 설치하였을 경우 PBS를 제거하려면 실행중인 프로세스를 죽이고,패키지를 제거하면 된다.# killall pbs_server ; killall pbs_sched ; killall pbs_mom# ps -ax | grep pbs# rpm -qa | grep pbsopenpbs-2.3pl2-1openpbs-exechost-2.3pl2-1# rpm -e openpbs...error: cannot remove /usr/spool/PBS - directory not empty# rpm -e openpbs-exechost...error: cannot remove /usr/spool/PBS - directory not empty# rpm -qa | grep pbs# rm -rf /usr/spool/PBS3. 기타 [[목차]]3.1. MAN 페이지 참조 [[목차]]--enable-docs 옵션을 주어 컴파일 하면 /usr/pbs/man 에 메뉴얼 페이지가 설치된다.이것을 MANPATH에 추가 하여 두려면 다음 행을 .bashrc 에 추가해 두자.# export MANPATH=`man --path`:/usr/pbs/man3.2. PBS 데몬의 종류 [[목차]]Job Server (pbs_server) 사용자로 부터 배치 작업을 받거나 생성한는 역할을 한다. 작업을 수정하거나, 시스템 정지로 인한 작업의 손실을 방지하는 역할도 한다.Job Executor (pbs_mom) 실제로 작업을 실행시키는 역할을 한다. 모든 실행중인 작업의 mother 라는 뜻으로 mom 이라고 부른다. 작업의 출력을 서버로 전달하는 역할을 한다.Job Scheduler (pbs_sched) 어떤 작업을 어디에서 언제 실행시킬지를 결정하는 역할을 한다. Mom 들로 부터 시스템의 자원상태를 모니터링 하기 위한 정보를 수집하며, Server로 부터 수행해야 될 작업에 대한 정보를 수집한다.3.3. 네트웍 주소와 포트 [[목차]]PBS의 데몬들과 명령어들은 사용할 포트 번호를 알아내기 위해서 /etc/services를검색한다. 포트 번호는 모든 서버와 클라이언트에 동일하게 지정되어 있어야 한다.만약 /etc/services에 포트 번호를 지정해 주지 않았을 경우에는 다음의 포트들이사용된다.pbs 15001/tcp # pbs server (pbs_server)pbs_mom 15002/tcp # mom to/from serverpbs_resmom 15003/tcp # mom resource management requestspbs_resmom 15003/udp # mom resource management requestspbs_sched 15004/tcp # scheduler참고>>pbs_resmom 은 이전 버전의 PBS에서 사용되던 포트번호이다. 지금은 pbs_mom 데몬으로 그 기능이 합쳐졌다.3.4. 부팅시 데몬을 자동으로 실행하기 [[목차]]데몬을 자동으로 실행하려면 /etc/rc.d/rc.local 화일에 데몬 실행 명령을 추가해 준다.마스터 노드# vi /etc/rc.d/rc.local...# PBS daemons (master node)/usr/pbs/sbin/pbs_server/usr/pbs/sbin/pbs_sched:wq클라이언트 노드# vi /etc/rc.d/rc.local# PBS daemons (client nodes)/usr/pbs/sbin/pbs_mom:wq3.5. PBS 제시작 스크립트 [[목차]]전체 클러스터의 PBS 시스템을 중지시키고, 설정화일을 복사한 후 다시 제시작시키는 스크립트이다. rsh과 rcp가 동작하여야 한다.$ cat pbsrestart.sh#!/bin/sh# stop serverkillall pbs_serverkillall pbs_schedps -ax | grep pbs_sleep 1# stop momsrsh sdd105 "killall pbs_mom"rsh sdd106 "killall pbs_mom"rsh sdd107 "killall pbs_mom"rsh sdd105 "ps -ax | grep pbs_"rsh sdd106 "ps -ax | grep pbs_"rsh sdd107 "ps -ax | grep pbs_"sleep 1# copy mom.conf to client nodes# mom.conf should be under the current directoryrcp mom.conf sdd105:/usr/spool/PBS/mom_priv/configrcp mom.conf sdd106:/usr/spool/PBS/mom_priv/configrcp mom.conf sdd107:/usr/spool/PBS/mom_priv/configsleep 1# start momsrsh sdd105 /usr/pbs/sbin/pbs_momrsh sdd106 /usr/pbs/sbin/pbs_momrsh sdd107 /usr/pbs/sbin/pbs_momrsh sdd105 "ps -ax | grep pbs_"rsh sdd106 "ps -ax | grep pbs_"rsh sdd107 "ps -ax | grep pbs_"sleep 1# start server/usr/pbs/sbin/pbs_server/usr/pbs/sbin/pbs_schedps -ax | grep pbs_sleep 1# set server attributes# e.g.# qmgr -c "s q workq max_running=10"# show nodes statuspbsnodes -a | more$참고자료 [[목차]]1. Portable Batch System Administrator Guide (Release 2.3) http://www.openpbs.org/docs.html2. PBS man pages-EOF- PBS 설치하기 [[TOP]]
2006/09/11 08:44 2006/09/11 08:44
이 글에는 트랙백을 보낼 수 없습니다

맨밑에 레이어 추가하는 부분에다가



<div id="layer" style="position:absolute; background:black; width:170; left:450; top:0; height:160; z-index:5; visibility:hidden;">
  <iframe frameborder='no' style='border:0px; width:100% ;height:164px;filter:Alpha(Opacity=10)'></iframe>
  </div>



아이프레임을 추가해주시면 됩니다. 이런식에 문제가 발생하는 이유는요. 셀렉트 박스는  컴퍼넌트라서 항상 최상위에 존재 하죠. 그리고 레이어는 단지 화면에 표시해주는 거뿐이라서 아무리 z-index가 높다고 하더라도 셀렉트 컴퍼넌트 밑에 존재 하게 됩니다.


이런식에 문제를 해결하기 위해서는 컴퍼넌트를 사용해서 그위에 위치하게 하면 되는데 그 컴퍼넌트를  iframe으로 사용하면 되요

(출처 : 'z-index' - 네이버 지식iN)

2006/09/09 17:25 2006/09/09 17:25
이 글에는 트랙백을 보낼 수 없습니다
Linux  2006/09/08 23:34
출처 블로그 > 블로거
원본 http://blog.naver.com/wonie777/120001195066

Part 1: 백업 계획

    모든 사용자들은 적어도 한번쯤 백업을 계획한다. 그러나 유감스럽게도, 우리 대부분은 “백업하지 않는” 것이 오히려 습관처럼 되어있다.

Disclaimer:

    이 기사는 단행본, 하우투 문서들, 맨 페이지, 유즈넷 뉴스그룹, 그리고 셀 수 없는 시간을 키보드와 씨름하며 얻은 유용한 정보들을 제공한다. 비록 모든 주제에 대해 통달했다는 것을 뜻하지는 않지만, 초급자가 중급 사용자가 되는 발판이 될 것이다. 모든 예제들은 우리 홈 네트워크로부터 그대로 가져왔으므로 우리가 아는 한 잘 동작한다.

이 가이드를 어떻게 사용할까

    ·[Enter]처럼 각 괄호에 담긴 단어들은 키보드에서 그 키를 누르거나 마우스 1번 버튼을 누르라는 뜻이다.

    ·{your name here}처럼 구불구불한 괄호 안에 담긴 단어들은 사용자가 입력해야 할 “진짜” 데이터에 대응하는 데이터를 뜻한다.

    ·이탤릭체로(기울어진) 쓰여진 텍스트는 사용자 자신이 셸 프롬프트에 써넣어야 할 명령을 뜻한다.

    필요한 것 들 ( Prerequisites)

    당신의 시스템에 리눅스가 설치되었다면, 필요한 모든 것이 이미 갖추어져 있을 것이다.

    백업 계획  (Backup Plan)

    당신이 홈 네트워크에서 백업을 계획하고 있다면, 몇 가지 작업순서를 정할 필요가 있다. 하드디스크가 전혀 못쓰게 되더라도(crash), 백업의 진정한 가치는 실수로 지운 파일이나 변경된 파일 모두를 반드시 되살리는 것이다. 언제고 당신은 (아마 그리 오래지 않아) 어떤 중요한 파일들을 지우거나 변경할 것이다. 그리고 백업도 없이 부트마저 불가능하게 만들게 될 것이다. 사실 이런 것을 털어놓기는 부끄럽지만, 나는 실제로 /root 디렉터리를 한 방에 날려버렸었다.
     

    譯註: 백업
    대체로 백업의 가치를 절실하게 느낄 때는 이미 돌이킬 수 없는 큰 대가를 치른 뒤일 경우가 많다. 우습게도, 백업에 대한 이 글을 나는 두 번째 쓰고 있다. 새로 구성한 시스템에 백업에 대한 장치를 미처 못하고 있었는데 마침 원본이 손상되어 버렸기 때문이다.

    Note▶ 당신의 시스템이 크랙된 적이 있다면 백업은 깊이 생각한 후에 결정해야 한다. 백업은 수행과정을 매우 단순하게 하거나 녀석들이 시스템을 망치지 못하도록 계획되어야 한다.(특히 홈 네트워크에서는)
    홈 네트워크를 위한 백업계획은 다음 두 가지 영역에 걸쳐 다루어진다: 얼마나 많이 백업을 하려는가? 그리고 어떻게 최소한의 수고로 백업을 할 것인가?

    얼마나 백업을 할 것인가

    백업하는 공간은 바로 돈이므로 나는 모든 백업을 최소한으로 유지하려 애쓴다. 그래서 나는 단지 선택된 디렉터리만 백업할 뿐, 전체 파일 시스템은 백업하지 않는다. /usr와 /opt 등 디렉터리는 인스톨 시디롬에 그 대부분이 들어있으므로, 하드 드라이브가 손상되더라도 기본적인 것들은 그저 다시 설치하면 그만이다. 그러나, 시스템 환경이나 사용자 설정값이 들어있는 /etc나 /home 디렉터리는 어디에서도 복구할 수 없으므로 정말 중요하다.
    백업작업의 효율성과 경제성을 높이기 위해, 당신은 백업 계획에, 선택된 디렉터리를 가끔씩(월 또는 주 단위) 전체 백업을 수행하고, 그 다음엔 변경된 파일만 매일 백업(증분 백업 incremental backups)하도록 설정해야 한다.
     

    譯註: 증분(增分) 백업
    적당한 말을 찾으려 애썼는데 결국 이해하기 어려운 말이 되어버렸다. incremental backups는 증분 백업, 또는 부가(附加)적인 백업이라고 번역되기도 하는데, 전체 백업 후에, 백업 시스템의 효율성을 높이기 위해 변경된 파일들만 대상으로 백업을 추가하는 것을 뜻한다.

    어떻게 백업하는가

    테이프 드라이버는 홈 네트워크 백업용으로 사용하기에는 대체로 너무 비싸고, 플로피 디스크는 실용성이 없다. (나는 백업 디스크 수가 132 장을 넘었을 때 플로피 디스크를 포기해버렸다) 우리는 여분의 하드 드라이브를 사용하는 방법이 가장 좋은 해결책이라고 생각한다. 단, 여기서 말하는 하드 드라이브가 파티션이 아니라는 것에 주의한다! 내 하드 드라이브에 문제가 생긴 모든 경우에 드라이브 전체가 죽거나 못쓰게 되었지, 피해가 하나의 파티션에 끝나지 않았다.
    하드 드라이브를 사용하는 방법이 비록 가장 안전한 방법은 아니지만(譯註: 온라인으로 침투한 크래커에게 시스템이 점령당했을 때 테이프 드라이버가 아마 상대적으로 안전할 것이다), 얼마나 많이 백업할 것인지 범위를 한정하는 방법도 있다.(하지만, 이미 크래커가 은밀히 활동하고 있다면!)
     

    譯註: 백업 파티션과 드라이브
    하드 드라이브에 백업하려면 반드시 원본이 들어있는 하드디스크와 물리적으로 다른 파티션에 설치해야 한다. 나는 하드디스크 하나에 파티션을 몇 개 만들고 그 가운데 하나에 백업파일들을 보존하고 있었다. 루트 파티션에 문제가 생겼을 때 몇 번 백업파티션의 데이터로 복원할 수 있었고, 그래서 나는 꽤 안심하고 있었지만, 하드디스크 스핀들 모터가 고장나자 백업파티션은 아무 소용도 없었다.

    백업 프로그램들

    모든 un*x 계열의 배포판에는 백업에 사용할 수 있는 세 개의 일반적인 프로그램이 포함되어 있다: tar, cpio, 그리고 dump가 그 것으로 각각의 유틸리티는 저마다 장점과 단점을 가지고 있다.

    TAR:
    tar(Tape ARchive)는 소규모 네트워크에서 백업 프로그램으로 가장 일반적으로 사용되는 유틸리티이다. 이 유틸리티는 오래 전부터 여러 가지 용도로 사용되어 왔고, 앞으로도 아마 꽤 오랫동안 남아있을 것이다.
    대부분의 사람이 모르고 있지만, tar는 테이프에 파일들을 옮겨 넣기 위해서 만들어진 것으로 백업용으로 설계된 것이 아니다. tar의 목적은 백업이 아니라 다른 컴퓨터들에서도 설치될 수 있도록 파일들을 테이프에 옮겨 쓰는 것이다. 그런 이유로 tar는 증분 백업기능이 미약하다.

    CPIO:
    cpio는 증분 백업 기능을 제외하고 tar와 비슷한 유틸리티이다. 사실, cpio는 “파일 리스트” 기능조차 없다: 백업본에 포함할 파일들을 선택하려면, cpio는 find 프로그램으로부터 파일이름을 파이핑하여 사용해야만 한다.
    하지만 cpio는 tar에 비해 두 가지 장점을 가진다: cpio는 더 작은 비압축 백업본을 만들고, 백업본에 손상된 부분이 있더라도 프로그램이 그냥 죽어버리지 않는다.
     

    譯註: cpio
    아래는 find 명령의 출력을 cpio의 표준입력으로 사용하는 일반적인 방법이다. /home 디렉터리 아래 모든 파일을 테이프 드라이브(/dev/st0)로 백업한다:

      $ find /home -print | cpio -o > /dev/st0

    find 유틸리티의 -mtime, -newer 등 옵션을 사용하면 증분 백업도 쉽게 할 수 있다. -newer 옵션으로 비교하는 /backup/time/home_full 파일은 최근 백업시간을 기록한 파일이다:
    $ find /home -mtime -l -name .bak -print | cpio -o > /dev/st0
    $ find /home -newer /backup/time/home_full -print | cpio -o > /dev/st0

    cpio와 tar는 압축을 하지 않고, 많은 파일을 묶어 하나의 덩어리로 만드는 유틸리티이다. ‘더 작은 비압축본’은 cpio가 더 효율적으로 파일을 묶을 수 있다는 것을 뜻한다.(일반적으로 백업 대상 파일의 전체크기가 백업매체의 크기보다 훨씬 크다면 tar가 더 유리하다.)

    ‘그냥 죽어버리지 않는다’는 말은 백업본에 손상된 부분이 있다면 그 부분을 건너뛰고 계속해서 작업을 수행한다는 뜻이다. 이 기능이 정말 고마울 때가 있을 것이다.

    DUMP:
    dump는 tar나 cpio와 완전히 다른 프로그램이다. 이 유틸리티는 파일들이 아닌, 파일시스템 전체를 백업한다. dump는 파일 시스템이 하드 드라이브에 있거나, 심지어 그 파일시스템 안에 있는 파일이라도 상관하지 않는다.
    dump 유틸리티는 0-9 단계의 증분 백업을 지원하며, 한 파일시스템을 한번에, 신속하게, 그리고 효율적으로 옮겨 쓴다. 하지만, 가상 디렉터리를 다룰 수 없으며, tar나 cpio보다 훨씬 많은 백업공간을 잡아먹는다.

    우리의 백업 방법

    우리는 run-backup이라는 이름을 가진 백업 스크립트를 사용한다. 이 글의 끝인 Part 3에 쓰여진 글을 그대로 하드 드라이브의 적당한 위치로 옮긴 다음, 아래 명령을 수행해 실행할 수 있도록 설정한다:

    chmod 777 run-backup [Enter]

    run-backup
    스크립트에서 어떤 부분을 고쳐야 할까

    이 스크립트는 변수 네 개만 바꾸면 어떤 컴퓨터에서도 실행할 수 있도록 디자인되었다: COMPUTER, DIRECTORIES, BACKUPDIR, 그리고 TIMEDIR. 현재 우리는 리눅스 박스 두 대와 솔라리스 박스 두 대에서 이 스크립트를 실행하고 있다. BACKUPDIR은 우리 머신에 nfs로 마운트 되어 있지만, 컴퓨터에 연결된 다른 어떤 하드 드라이브라도 상관없다.

    스크립트가 하는 일은 무엇인가?

    스크립트가 실행되면, 먼저 오늘이 이 달의 첫 번째 날인지 검사한다. 만약 그렇다면, 스크립트는 DIRECTORIES 변수에 설정된 디렉터리와 파일리스트 전체를 tar로 묶고, 예를 들어 myserver-01Nov.tgz처럼 파일이름에 컴퓨터 이름과 날짜, 그리고 tgz를 붙인 다음, BACKUPDIR 변수에 설정된 디렉터리에 집어넣는다. 백업본의 파일이름들은 각각 서로 다르므로, 당신이 지우지 않는 한 BACKUPDIR 속에 계속 남아있을 것이다.

    그 다음에, 오늘이 만약 이 달의 첫 날은 아니지만 일요일이라면, 스크립트는 DIRECTORIES에 설정된 목록 전체에 대한 백업을 만들고, BACKUPDIR 안에 있는 일요일 파일에 덮어쓴다. 다시 말하면, 백업 디렉터리에는 오직 하나의 일요일 파일만 있어서 매주 일요일마다 이 파일을 덮어쓰는 것이다. 그런 방법으로 하드 드라이브 공간을 쓸데없이 낭비하지 않도록 만들면서도 여전히 한 주 전의 전체 백업은 남아있게 된다.

    스크립트는 또 일요일의 날짜를 TIMEDIR 디렉터리에 넣어둔다. 만약 오늘이 첫 번째 일요일이 아니라면, 스크립트는 전체 백업이 있었던 일요일 이후에 변경된 파일에 대해서만 모두 증분 백업을 만든다. 그런 이유로 일요일이 지나고 매 요일의 백업은 마지막 파일보다 계속 커지게 될 것이다.

    당신은 최근 24시간 이내에 변경된 파일만 증분 백업을 하고 매 요일의 백업은 최소한으로 유지하려고 애쓰겠지만, 혹시 당신의 하드 드라이브가 이번 금요일에 먼 남쪽(?)으로 가버린다면, 당신은 일요일, 월요일, 화요일, 수요일, 그리고 목요일의 백업을 복원해야만 할 것이다. 일요일과 다른 요일들의 백업으로 백업본은 계속 더 많은 파일을 포함하지만, 당신은 단지 일요일과 목요일의 백업만으로 복원해야한다. 아래에 백업 디렉터리의 간단한 보기가 있다:

    root 828717 Oct 1 16:19 myserver-01Oct.tgz
    root 14834 Oct 22 01:45 myserver-Fri.tgz
    root 5568 Oct 18 01:45 myserver-Mon.tgz
    root 14999 Oct 23 01:44 myserver-Sat.tgz
    root 1552152 Oct 24 01:45 myserver-Sun.tgz
    root 5569 Oct 21 01:45 myserver-Thu.tgz
    root 5570 Oct 19 01:45 myserver-Tue.tgz
    root 5569 Oct 20 01:45 myserver-Wed.tgz

    스크립트를 어떻게 실행시킬까?

    우리는 매일 새벽 1시(모두 잠들어 있을 시간)에 cron 작업으로 스크립트를 실행한다. cron에 대한 자세한 도움말은 Part 2에 있다.

    주의: 증분 백업은 일요일에 백업한 시간을 알아야한다. 만약 당신이 주중에 백업 스크립트를 시작했다면, TIMEDIR 디렉터리 안에 시간파일을 만들어야 한다.(echo $NOW > $TIMEDIR/$COMPUTER-full-date #update full backup date) 예문으로 제공되는 스크립트에서 이 파일 이름은: myserver-full-date이고 그 속에는 다음 한 줄이 들어있다:

    26-Sep

    복원  Restoring:

    복원은 백업보다 상대적으로 쉬운데, 한 가지만 잘 기억하자: tar는 파일이름 앞에 / 문자를 포함하지 않는다. 그러므로 /etc/passwd 파일을 복원한다면 먼저 / 디렉터리로 옮겨간 다음에 아래처럼 명령을 써야한다:

    tar -zxvf {wherever_file_is}/myserver-Sun.tgz etc/passwd
     

    譯註: cpio, dump 복원
    cpio로 만들어진 백업도 일부분을(또는 전체) 복원할 수 있다. 아래는 테이프 백업장치로부터 /etc 디렉터리를 복원하는 명령이다. -m 옵션은 파일 속성을 그대로 복원하며, -d 옵션은 서브디렉터리 구조도 복원하는 옵션이다:

    cpio -imd ‘/etc’ < /dev/st0

    dump로 만들어진 백업은 restore로 복원한다. dump처럼 restore도 사용자에게 상세한 설명을 제공하며, 대화형으로 동작한다.

    다음 달에는 dhcp를 살펴보기로 한다.

    Copyright 1999, JC Pollman and Bill Mote
    Published in Issue 47 of Linux Gazette, November 1999
    &
    http://www.linuxlab.co.kr/~el/

Part 2: Cron

    리눅스 배포판에는 작업일정 관리와 관련된 프로그램으로 두 가지가 따라 나온다: cron과 at가 그 것으로, 둘 다 시스템이 부트될 때 데몬으로 실행된다 - 그래서 이들 프로그램은 결코 끝나지 않는다(시스템이 종료되거나 데몬을 죽이기 전까지). cron 스케줄은 일정을 반복해서 수행하고  at은 한번만 수행한다.

    cron은 crontab 파일로부터 실행에 필요한 정보를 읽어들인다. 시스템과 각각의 사용자는 자신의 crontab 파일을 가진다. 시스템의 crontab은 /etc/crontab에 있다. 이 파일은 그대로 둔다. run-backup 일정을 설정하기 위해, root 사용자로 자신의 crontab 파일을 만들어야 한다.

    루트의 crontab 파일을 만들자

    먼저 EDITOR 변수를 정의한다. 이 변수는 아마 로그인하는 모든 사용자들이 반드시 읽어들이는 /etc/profile 에 넣어두는 방법이 가장 좋을 것이다. /etc/profile을 열고 아래 두 줄을 추가한다.

    EDITOR=vi [Enter]
    export EDITOR [Enter]

    만약 vi보다 더 좋아하는 에디터가 있다면, 당신이 좋아하는 것으로 바꾸길 바란다. 바뀐 변수가 시스템에 반영되려면 로그아웃한 다음 다시 로그인해야한다. 그 다음 아래처럼 쓴다:

    crontab /etc/crontab [Enter]

    이 명령은 시스템의 crontab을 복사하여, 당신이 사용할 crontab 파일을 만든다. 이제, 아래 명령으로 당신의 crontab 파일을 편집한다:

    crontab -e [Enter]

    crontab은 실행되는 프로그램과 설정파일 모두에 사용되는 이름이라는 것을 기억한다 - passwd랑 비슷하다. 아마 아래와 비슷한 줄들이 보일 것이다(原註: 이 예문은 RedHat 배포판의 crontab이다):

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    HOME=/

    # run-parts
    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly

    우리가 실행하려는 명령들이 아니므로 HOME=/ 줄 아래 모든 것을 지우고, run-backup 스크립트가 저장되어 있는 디렉터리 이름을 PATH에 추가한다.

    crontab 안에서 각각의 줄은 프로그램 하나씩을 실행한다. crontab 파일은 특별한 형식을 가지는데: 프로그램이 실행되는 데 필요한 다섯 개의 필드로 구성된다.

    주의: 시스템 crontab 안에는 프로그램을 실행하기 위해 cron 데몬에게 알려주어야 하는 특별한 사용자(예를 들어 root)가 설정되어 있지만, 사용자 crontab에는 이 필드가 필요 없다. 다섯 개의 필드는 다음과 같다:

    minutes hours day-of-month month day-of-week

    맨 페이지에 따르면:

    시간과 날짜 필드는:
     

      field   allowed values
      minute   0-59
      hour    0-23
      day of month    1-31
      month   1-12 (or names, see below)
      day of week     0-7 (0 or 7 is Sun, or use names)

    어떤 필드에 애스터리스크(*, asterisk)가 있다면, “처음부터-끝까지” 항상 설정되어 있다는 의미이다.

    숫자로 된 범위는 허용된다. 하이픈(-, hyphen)으로 두 숫자를 구분하여 범위를 설정하며 앞에 있는 숫자가 뒤보다 작아야한다. 특정 범위는 그 사이 숫자들을 포함한다. 예를 들어, 시간 필드에 사용된 8-11은 8, 9, 10 그리고 11시에 정해진 항목을 실행한다.

    목록은 허용된다. 목록은 숫자들(또는 범위들)을 쉼표(,)로 구분하여 설정한다. 예를 들어: “1,2,5,9”, “0-4,8-13”.

    간격 수치(step values)는 범위에 덧붙여 사용할 수 있다. 범위 뒤에
    “/<number>”를 덧붙여 지정한 범위 안에서 특정 수치를 건너뛴다.
    예를 들자면, “0-23/2”는 한 시간 건너 다른 한 시간마다 특정한 명령을 실행하기 위해 시간 필드에 사용될 수 있다.(V7 표준에서 “0,2,4,6,8,10,12,14,16,18,20,22”이 선택된다.) 간격은 애스터리스크 뒤에도 허용되므로, 당신이 “매 두 시간마다”를 말하려 한다면 그저 “*/2”라고 사용한다.

    “month”와 “day of week” 필드에는 이름이 사용될 수도 있다. 특정한 요일이나 달을 구분할 수 있도록 앞에서 세 글자 정도를 사용한다(문제가 없는 경우). 범위나 목록에는 이름이 허용되지 않는다.

    날짜와 요일이 함께 설정되어 있다면, 두 설정 모두 적용된다. 예를 들어 “30 4 1,15 * 5”라고 다섯 개의 필드가 설정되었다면 매달 1일과 15일, 4시 30분에 명령을 실행하고, 또 매주 금요일마다 같은 명령을 실행한다.

    이제, 우리가 매일 새벽 한 시 5분이 되면 백업 스크립트를 실행하려 한다면, 우리 crontab 파일은 다음과 같을 것이다:

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
    MAILTO=root
    HOME=/

    5 1 * * * /usr/local/bin/run-backup

    그리고 스크립트는 무슨 일이 있었는지 알리기 위해 작업이 끝난 후에는 root에게 email을 보낸다. run-backup 스크립트가 만족할만하게 작동해서 굳이 메일을 확인할 필요가 없다거나, crond로부터 자꾸 날아드는 email이 귀찮아졌다면 MAILTO 줄을 다음과 같이 고친다:

    MAILTO=””

    더 많은 정보를 원한다면, 맨 페이지를 살펴본다:

    man crontab
    (/usr/bin/crontab, 실행파일에 대한 도움)
    man 5 crontab
    (/etc/crontab, 설정파일에 대한 도움)
    man cron
    (cron과 cron 데몬에 대한 도움)

Part 3: run-backup 스크립트

    #!/bin/sh
    # 전체와 증분 백업 스크립트
    # full and incr backup script
    # created 27 Sep 99
    # Based on a script by Daniel O’Callaghan <danny@freebsd.org>

    # 아래 변수 다섯 개를 당신의 컴퓨터/백업에 알맞은 것으로 바꾼다.

    COMPUTER=myserver # 컴퓨터 이름
    DIRECTORIES=”/etc /home” # 백업할 대상 디렉터리
    BACKUPDIR=/backup/backups # 백업본이 만들어질 디렉터리
    TIMEDIR=/backup/backups/last-full # 전체 백업한 날짜를 저장할 디렉터리
    TAR=/bin/tar # tar 유틸리티 이름과 위치

    # 이 아래 줄은 모두 손대지 말고 그대로 둔다.

    PATH=/usr/local/bin:/usr/bin:/bin
    DOW=`date +%a` # 요일 이름, 예를 들어 Mon
    DOM=`date +%d` # 월 단위 날짜, 예를 들어 27
    DM=`date +%d%b` # 날짜와 달, 예를 들어 27Sep

    # 그 달의 첫 날에 영구적인 전체 백업을 만든다.
    # 매주 일요일마다 전체 백업을 만든다 - 이전에 만든 일요일 백업을 덮어쓴다.
    # 한가한 시간에 증분 백업을 만든다.
    # 각각의 증분 백업은 지난주에 만든,
    # 같은 이름을 가진 증분 백업을 덮어쓴다.
    #
    # 만약 NEWER = “” 이라면, tar는 지정한 디렉터리 안의 모든 파일을 백업한다.

    # 그렇지 않다면 NEWER 날짜보다 새로운 파일들만 백업한다.
    # NEWER는 매주 일요일마다 쓰여진 날짜파일로부터 날짜를 가져온다.

    if [ $DOM = “01” ]; then # 달마다 하는 전체 백업
    NEWER=””
    $TAR $NEWER -z -c -f $BACKUPDIR/$COMPUTER-$DM.tgz $DIRECTORIES
    fi

    if [ $DOW = “Sun” ]; then # 매주 일요일마다 전체 백업
    NEWER=””
    NOW=`date +%d-%b`
    echo $NOW > $TIMEDIR/$COMPUTER-full-date
    # 전체백업 데이터를 업그레이드.
    $TAR $NEWER -z -c -f $BACKUPDIR/$COMPUTER-$DOW.tgz $DIRECTORIES

    else # 증분 백업 - 지난주의 백업을 덮어쓴다.
    # 지난번 전체 백업을 한 날짜를 가져온다.
    NEWER=”--newer `cat $TIMEDIR/$COMPUTER-full-date`”
    $TAR $NEWER -z -c -f $BACKUPDIR/$COMPUTER-$DOW.tgz $DIRECTORIES
    fi

     

    譯註: tar 옵션
    tar는 원래 xvzf처럼 하이픈 없이 옵션을 한 덩어리로 묶어 사용한다. 하지만 유닉스계열의 표준 유틸리티들이 하이픈으로 옵션을 구분하므로 위 예문에서 tar는 표준적인 표기형식을 따르고 있다.


2006/09/08 23:34 2006/09/08 23:34
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > 20대의 끝을 잡고
원본 http://blog.naver.com/javancoffee/40003093131

링크 : http://phpschool.com/bbs2/inc_view.html?id=10453&code=tnt2&start=0&mode=search&field=title&search_name=&operator=and&period=last6month&category_id=&s_que=%BD%BA%B8%B6%C6%BC


스마티(Smarty) 템플릿 사용하기

김영진(cogolda@hanmail.net)
이 튜토리얼은 http://www.zend.com/zend/tut/tutorial-cezar.php에 있는
내용은 제가 번역, 추가, 생략했습니다.
소스 코드가 많아서 번역할 내용은 많지 않네요.
질문이나, 의견은 메일이나 코멘트 이용해 주시고,
관심있으신 자료 있으시면, 정리해서 올리겠습니다.
이 자료는 제가 스마티 쓸 때 도움이 되었던 문서이기도 합니다.

대상 독자

이 기사는 PHP templating같은 새로운 웹 개발기술을 적용하고 싶은 PHP 프로그래머와 HTML 디자이너를
위해 작성되었습니다.

Smarty 개요

이론적인 웹 개발 과정은 다음과 같다.
처음에는 디자이너가 유저 인터페이스를 만들고, 그것을 프로그래머를 위해 HTML 조각으로 쪼갠 다음
프로그래머가 HTML안에 PHP 비즈니스 로직을 구현하는 것이다.

그것은 이론적으로는 좋다. 그러나 실질적으로, 내 경험을 빌리자면, 클라이언트는 디자인이나 비즈니스 로직을 변경을 자주 요구한다. 그런 일이 일어날 때, HTML은 변경되고 프로그래머는 HTML 소스 코드를 수정한다.

이런 상황에서 문제는 프로그래머는 디자이너가 레이아웃과 HTML 파일을 완성할떄까지 기다려야 한다는 것이다. 다른 문제는 만약 메인 디자인이 바뀌면, 프로그래머는 새로운 페이지에 적합하기 위해 변경할 것이다. 이것이 바로 내가 스마티(Smarty)를 추천하는 이유이다. 스마티는 PHP를 위한 템플릿 엔진이다.

여러분은 http://smarty.php.net/ 에서 스마티 템플릿을 다운로드 할수 있다. 설치 과정은 매우 단순하다. 문서를 읽고 지시에 따라라.

그래서 스마티가 무엇인가? 스마티는 PHP 스크립트로 템플릿을 컴파일하는 PHP 클래스의 집합이다. 스마티는 템플릿 언어이고 디자이너와 프로그래머에게 매우 유용한 툴이다.
(한국에서 디자이너에게 스마티를 가르치는 것이 가능할까요?)

디자이너를 위한 스마티

디자이너 HTML 파일로 작업한다. 스마티와 작업하기 위해, 여러분은 템플릿 파일로 작업한다. 이런 파일들은 정적인 컨텐츠로 완성했으나, 스마티는 마크업 태그와 함께 결합된다.
(여기서 정적인 컨텐츠라는건 php 코드가 없는 html파일을 애기하는 것입니다.
마크업 태그는 페이지 기술 언어 다시말해 html, sgml, xml이런 걸 애기하는 것입니다.)
모든 템플릿 파일은 확장자가 .tpl이다. 스마티 템플릿 태그는 { and } 구획문자로 감싸진다.

웹 페이지의 기본적인 구조를 생각해 보자. 헤더가 있고, 중간 부분이 있고, 꼬리말(footer)이 있다. 헤더와 꼬리말을 포함하는 파일템플릿 파일 다음과 같다.

{include file="header.tpl"}
<form name="form1">
   Label1 <input type="text" name="text1">
   <input type="submit" value="submit">
</form>
{include file="footer.tpl"}

모든 템플릿은 한 템플릿 디렉토리안에 있어야 한다. 처음에 템플릿을 호출하고 나서, 컴파일된 템플릿은 template_c에 있을 것이다.

스마티 언어는 매우 강력하다. PHP에 모든 변수는 {$Variable_Name}으로 스마티에서 식별된다. 주의할 점은 $ 표시가 앞에 와야 한다. 만약 우리가 PHP에서 $MyName로 호출되는 변수가 있으면, 그 다음에 스마티에서 그것을 출력하기 위해, 우리는 다음과 같이 작성해야 한다.

<html>
   <body>
       Welcome, {$MyName} <br>
   </body>
</html>

스마티의 힘은 유연성에도 있다. 여러분은 템플릿에 IF와 LOOP 삽입할수 있다. IF 문법은 다음과 같다.

{if <condition> }
       html code
{else}
       html code
{/if}

여러분이 링크가 있는 동적인 메뉴를 가지고 있다고 보자. 여러분이 링크를 클릭하면, 여러분은 특정 페이지에 간다. 그래서 여러분은 PHP에서 정수 변수 $Menu가 있다면, 템플릿은 다음과 같다.

{if ($Menu == 1) }
       Option 1
{else}
       <a href=”option1.php”>Option 1</a>
{/if}
{if ($Menu == 2 ) }
       Option 2
{else}
       <a href=”option2.php”>Option 2</a>
{/if}

반복문을 작성하기 위해, 여러분이 PHP에서 다음과 같은 배열을 얻기를 제안한다.
(여기서 얻는다(get)는 표현은 확장자가 php인 파일에 있는 변수나 배열을
템플릿 파일이 가져와야 하기 때문에 이렇게 표현한 것입니다.)

<table>
<tr  
{section name=user loop=$userID}
{if $smarty.section.user.iteration is odd}
       bgcolor=#efefef
{else}
       bgcolor=#ffffff        
{/if}  
>
   <td>    ID = {$userID[user]}  </td>
   <td> Name = {$name[user]}     </td>
   <td> Address = {$address[user]} </td>
</tr>
   {sectionelse}
<tr>
   <td>
       There is no user.
   </td>
</tr>
</section>
</table>

반복자는 스마티를 위한 내부 카운터이다. 그것은 우리에게 섹션의 현제 반복을 알게 해준다. 필자는 만약 현제 반복 변수가 남는지 아닌지 확인으로 인해 테이블에서 다른 열 색깔을 만들기 위해 내부 변수를 사용한다.(뭔 소리를 하는 건지)

LOOPS에 대안은 단일 연관 배열을 반복하기 위해 사용되는 FOREACH이다.

<foreach from=$users item=current_user>
       Name = {$current_user}
<foreachelse}
       No user available.
</foreach>

SECTION과 FOREACH의 중요한 차이는 SECTION은 특정 변수에서 시작할 수 있고, 반복을 위해 스텝을 설정할수 있다. 그에 반해 FOREACH는 모든 변수에 대해 반복할 수 있다.
(뒤에 예제 나오니까 그거 보시면 이해하실수 있을 것입니다.)

프로그래머를 위한 스마티

프로그래머를 위한 장점은 그들은 HTML과 PHP 코드를 분리할 수 있다는 것이다. 좀더 자세히 말하자면, 만약 디자이너가 페이지의 레이아웃을 바꾸면, 프로그래머는 기능적으로 바뀌지 않았다면, 새로운 레이아웃에 적합하게 하기 위해 코드를 바꿀 필요가 없다. 여러분은 여러분의 파일에서 작업하고 화면에 출력되는 모든 변수를 템플릿에 할당하고, 맥주 마시러 나간다.. 디자이너는 레이아웃을 바꾸고 내부적인 에러를 해결하기 위해, 여러분에게 전화 걸고 싶지 않을 것이다.
(쉽게 설명 하자면, 디자이너가 화면 디자인을 살짝 바꾼다음에 프로그래머에게 좀 고쳐달라고 말하지 않아도 됩니다. 여러분이 하는 일은 비즈니스 로직 구현이니까요)

PHP 파일에서 여러분은 스마티 클래스 require ‘Smarty.class.php’를 포함해야 한다.
그리고 $smarty = new Smarty로 인스턴스를 만들어야 합니다.

템플릿에 변수를 할당하기 위해, 여러분은 다음과 같이 해야 한다.
$smarty->assign(‘UserName’, ‘John Doe’).
모두 끝난 다음 여러분은 템플릿 $smarty->display(‘index.tpl)을 보여주기 위해 메소드를 호출한다.

다음과 같은 소스 코드를 보자 (index.php)


<?php
require 'Smarty.class.php';
$smarty = new Smarty;

$smarty->assign('Username', 'John Doe');
$smarty->display('index.tpl');
?>

이런 템플릿(index.tpl)을 보자.


<html>
<body>
       Welcome {$Username}
</body>
</html>

여러분은 역시 PHP에서 템플릿에 그것을 통과하는 배열을 만들수 있다.


$tmp = array ( 'UID'=> '10',  &'Name' => 'John Doe', 'Address'=>'Home address');
$smarty->assign('info', $tmp);

샘플 스크립트 ( 위의 내용은 추상적으로 설명한거고 밑에 내용이 중요합니다.)

이 스크립트는 로컬 데이터베이스에 접속하고 ‘Products’ 테이블에서 모든 제품을 선택(select)한다. 그 때 템플릿에 모든 변수를 통과한다. 그것은 스크린에 그것을 출력한다.


INDEX.PHP

<?php
// 스마티 클래스 파일 포함
require 'Smarty.class.php';
// 스마티 인스턴스 생성
$smarty = new Smarty;
// 디비 설정, 이부분은 각자에 맞게 고치십시오
$hostname = "localhost";
$dbUser = "sqluser";
$dbPass = "sqlpass";
$dbName = "sqldb";
// 데이터베이스에 접속
$conn = mysql_connect($hostname, $dbUser, $dbPass) or die("Cannot connect to the database");
// 디비 선택
mysql_select_db($dbName);
// 질의문 저장
$sql = "SELECT prodID, info FROM products ORDER BY prodID ASC";
// 테이블에서 모든 제품을 선택하라.
$res = mysql_query($sql);
// results를 배열 변수로 선언
$results = array();
$i=0;
while ($r=mysql_fetch_array($res)) {
           $tmp = array(
               'prodID' => $r['prodID'],
               'info'=> $r['info']
           );
           $results[$i++] = $tmp;
}
// 결과를 템플릿에 넘긴다
$smarty->assign('results', $results);
// 템플릿 파일을 로딩load 한다
$smarty->display('index.tpl');
?>


INDEX.TPL

<html>
<body>
Here's a table with the results: <br>
<table cellpadding=1 cellspacing=0 border=0 width=100%>
{section name=nr loop=$results}
   <tr {if $smarty.section.nr.iteration is odd} bgcolor="#efefef"{/if}>
       <td class=fb width=15%>
           <nobr><a href=&#8221;show-product.php?id={$results[nr].prodID}">Press here</a>

       <td class=fb width=29%><a href="show.php?id={$results[nr].prodID}"
       {popup inarray=$smarty.section.nr.iteration}
       >{$results[nr].info}</a></td>
   </tr>

{sectionelse}
<tr><td align="center"><br><b>no product </b> <br> </td></tr>
{/section}
   
</table>

<br>

Here's a select with the results: <br>
<select name="mys">
   {section name=nr loop=$results}
       <option value="{$results[nr].prodID}">{$results[nr].info}</option>
   {/section}
</select>

</body>
</html>


요약

스마티는 디자이너와 개발자 둘 다 에게 멋진 툴이다. 스마티를 사용하면서, 여러분은 사이트 개발과 관리 시간을 줄일 수 있다. 만약 여러분이 개발자라면, 여러분은 더 이상 HTML 코드로 뒤섞인 PHP code가 필요하지 않다. 비즈니스 로직에만 집중하고 디자이너에게 HTML을 떠나라.

번역자에 관하여..
집에서 놀고 있는 백수..

2006/09/08 23:33 2006/09/08 23:33
이 글에는 트랙백을 보낼 수 없습니다
출처 블로그 > kdnnetwork님의 블로그
원본 http://blog.naver.com/kdnnetwork/140000675195
제 목 : 서버 모니터링 툴의 강자, RRDtool 가이드 (작성중. alpha 버전)
작성자 : 좋은진호(truefeel)
작성일 : 2003.9.22(월)~

그래픽 모니터링 툴인 RRDtool과 그 프론트엔드 툴 HotSaNIC의 설치, 운영가이드이다.

1. RRDtool의 이해
2. RRDtool 설치
3. HotSaNIC 설치
4. RRDtool 직접 다루기
5. 문제 해결
6. 이용 사례



1. RRDtool의 이해

RRDtool에 대해 들어가기 전에 먼저 MRTG 툴을 설명할 필요가 있을 듯 하다.
MRTG(Multi Router Traffic Grapher)는 이름에서도 드러난대로, SNMP 프로토콜을 사용하여
라우터를 거쳐가는 트래픽을 실시간 그래픽을 통해 모니터링하는데 가장 많이 사용한다.
이외에 시스템을 모니터링하는 여러 addon들이 있다.
DISK 사용량, CPU사용량, 메모리 사용량, 데몬, 세션 개수 등..
심지어는 P2P인 당나귀의 트래픽, 프락시 서버인 Squid 트래픽까지 실시간(실시간이라기
보다는 특정 시간간격으로 변화하여 보여준다는게 더 정확하지만)으로 웹에서 볼 수 있다.

RRDtool은 MRTG처럼 실시간 그래픽 모니터링 기능을 가지고 있으면서 보다 더 개선된 형태의
툴이다. 보다 빠르고 시스템 로드를 덜 잡아먹는다. 또한 MRTG의 제약이었던 2개 이상의 데이터를
하나의 그래픽을 통해 표시할 수 있다. 그래픽의 유연성(?)면에서도 단연 RRDtool이 압도한다.

[ MRTG로 트래픽 모니터링하는 화면 ]


[ RRDtool과 HotSaNIC으로 CPU 사용률을 모니터링하는 화면 ]


2. RRDtool 설치

RRDtool :
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/

RRDtool의 시스템 요구사항은 다음과 같다.

Perl 5.005 (컴파일시에 문제가 발생하면 더 최신 것을 설치해본다.)
GNU make
GNU gcc

위 RRDtool 사이트에서 최신 버전을 받아온다. /usr/local/rrdtool에 하는 것으로 가정한다.


# tar xvfz rrdtool-1.0.45.tar.gz
# cd rrdtool-1.0.45
# ./configure --prefix=/usr/local/rrdtool
# make install
# make site-perl-install
... 중략 ...
Installing /usr/lib/perl5/site_perl/5.8.0/RRDp.pm
Installing /usr/share/man/man3/RRDp.3pm
... 생략 ...


3. HotSaNIC 설치

HotSaNIC :
http://hotsanic.sourceforge.net/archive/

HotSaNIC은 RRDtool을 사용하는 툴로 시스템 통계정보를 그래프로 생성해준다.

* 시스템 요구 사항

- RRDtool
- iptables 또는 ipchains (네트워크 트래픽 통계용으로 쓰기 위함)

위 사이트에서 받은 최신 버전은 컴파일없이 환경설정만으로 바로 사용하므로
/usr/local에서 압축을 푼다.


# cd /usr/local
# tar xvf HotSaNIC-0-5-0-pre3.tgz ( HotSaNIC/ 디렉토리가 생성된다. )
# cd HotSaNIC



1) 제공하는 모듈

HotSaNIC은 어떤 모듈을 통해 시스템 통계를 제공하는지 알아보고,
그 모듈을 사용할 것인지 안할 것인지를 판단해보자.


---------   ----------------------------------------------------------- ---------------
모듈      처리하는 통계 정보                      truefeel의 권장
---------   ----------------------------------------------------------- ---------------
APCUSV    APC UPS의 현황 (apcaccess 툴 사용)             N
         (APC UPS를 사용하지 않고 또한 있더라도 서버와 연결하여

                   모니터링중이 아니라면 N)
APPS     데몬, 응용프로그램별 프로세스 현황                Y
          (프로세스 이름 별도 설정 필요)
DISKIO     각 HDD별(파티션별이 아님) 입출력                   Y
         (별도 설정 필요)
DNET     Distributed.Net관련 RC5, OGR, DES, CSC ???         N
NETWORKS  네트워크 트래픽 (별도 설정 필요)                     Y
PART    파티션별 사용량                                  Y
PING     지정한 서버로 ping time 결과 (ping서버 설정 필요)        ping할 서버가

                                                                                                           있다면
SENSORS CPU, 마더보드 등의 온도, 전압등의 수치              원하는대로
SHOUTCAST 지정한 서버와 포트로의 스트링 현황 (서버, 포트 설정 필요)  N
SYSTEM  시스템의 프로세스 수, CPU 사용률, load, 메모리 사용률, ...      Y
TRAFFIC  네트워크 인터페이스별(eth0, ...) 트래픽                   Y
       (SNMP를 통해 라우터나 다른 서버의 트래픽도 모니터링 가능,
         물론 이 때는 별도 설정 필요)
WORMS  웹로그 파일을 이용한 님다, 코드레드 등의 웜 공격 건수           Y
      (웹로그 경로 설정 필요. 문자열 지정으로 다른 웜 공격도 설정 가능)
--------- ----------------------------------------------------------- ----------------


2) setup.pl로 기본 환경 파일 생성

이제 setup.pl 으로 기본 환경 설정을 해보자.
과정은 길지만 간단하다. 모듈을 보고 Y로 할 것인, N로 할 것인지를 결정한다.
이 설정은 나중에 ./setup.pl으로 변경할 수 있으므로 맘 편하게 진행해라.
(반복되는 내용이라 메시지 중간중간 생략하였다.)


# ./setup.pl
Configuring modules:


Module found: APCUSV
----------------------------------------
Do you want to use this module ? (Y)es / (n)o > n

Module found: APPS
----------------------------------------
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module's graphs on the webpage ? (Y)es / (n)o >

... 중략 ...

Module found: DISKIO  ... 중략 ...
Module found: DNET   ... 중략 ...
Module found: NETWORKS
----------------------------------------
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module's graphs on the webpage ? (Y)es / (n)o >

setting up networks ...

Configuring local interfaces.
(i)nternal means an interface pointiong to your local machines (intranet)
(e)xternal means an interface connecten with the internet
(n)one means you don't want to account this interface.

Please answer these:
found: eth0 - (i)nternal, (e)xternal or (n)one ? e

found: lo - (i)nternal, (e)xternal or (n)one ? n

... 중략 ...

Module found: PART   ... 중략 ...
Module found: PING   ... 중략 ...
Module found: SENSORS  ... 중략 ...
Module found: SHOUTCAST ... 중략 ...
Module found: SYSTEM  ... 중략 ...
Module found: TRAFFIC
----------------------------------------
Do you want to use this module ? (Y)es / (n)o >
Do you want to show this module's graphs on the webpage ? (Y)es / (n)o >

setting up traffic ...

Configuring local interfaces. Please answer these:
found: eth0 - (y)es or (n)o ? y

found: lo - (y)es or (n)o ? n


Please check the settings file and adapt it to satisfy your needs.
If you have any interfaces slower than 100 MBit, please change the
corrosponding default values.

... 중략 ...

Module found: WORMS  ... 중략 ...
----------------------------------------
Ok.
Writing main settings ...
 checking for OS-type (current: not configured)
OSTYPE="Linux"
 checking path to "rrdtimer" (current: not configured)
DAEMONDIR="/usr/local/HotSaNIC"
 checking path to "rrdtool" (current: not configured)
the following possibilities have been detected:
0 /usr/bin
1 /usr/local/rrdtool/bin

which one shall i use (0=default ... 1) ? > 1 ( rrdtool이 2군데 설치된 경우이다.)
BINPATH="/usr/local/rrdtool/bin" (RRDtool 실행이 있는 디렉토리)
LOGDIR="$DAEMONDIR/var/log/"   (로그가 저장될 디렉토리)
PIDFILE="$DAEMONDIR/var/rrdtimer.pid"
DIAGRAMLOG="last"
LOGSIZE="200000"
LOGBACKUPS="5"
DEBUGLEVEL="-1"
STIME="120"
SCHEDULE_MIN="100"
SCHEDULE_MAX="200"
RUN="apcusv apps diskio dnet networks part ping sensors shoutcast system traffic worm
s"
WEBDIR="not configured"
WIDTH="600"
HEIGHT="200"
IMAGEFORMAT="gif"
SHOW="apcusv apps diskio dnet networks part ping sensors shoutcast system traffic wor
ms"
ORDER="traffic system part ping dnet sensors"
DTIME="15" (15분 간격으로 이미지를 갱신한다.)
CTIME="24" (24시간 간격으로 통계화면 메인에 표시될 작은 크기의 이미지를 갱신한다.)
 guessing convert method...
 checking for Image::Magick perl module... not found
 checking path to "convert" from ImageMagick (current: not configured)
detected: /usr/bin/convert
is this corrrect? (y)
 checking path to "snmpwalk" (current: not configured)
detected: /usr/bin/snmpwalk
is this corrrect? (y)
SNMPWALK="/usr/bin/snmpwalk"
 checking path to "snmpget" (current: not configured)
detected: /usr/bin/snmpget
is this corrrect? (y)
SNMPGET="/usr/bin/snmpget"
checking path to "snmpbulkwalk" (current: not configured)
detected: /usr/bin/snmpbulkwalk
is this corrrect? (y)
SNMPBULKWALK="/usr/bin/snmpbulkwalk"

--- Main settings generated. ---

Writing start/stop script "rrdgraph" ... Ok.

Now adapt all settings files to satisfy your needs.
They are all linked to the directory /var/settings .


3) 필요한 디렉토리 생성

이제 RRDtool의 웹용 이미지와 html이 저장될 디렉토리와 로그 파일 저장 디렉토리를 생성한다.
디폴트로 로그는 HoSaNIC 홈의 var/log에 생성된다.
(html 홈은 /usr/local/apache/htdocs/ 라고 가정)


# mkdir /usr/local/apache/htdocs/rrdtool
# mkdir var/log


4) 환경 파일의 주요 설정

HoSaNIC 홈/settings가 주 설정 파일이고
HoSaNIC 홈/modules/모듈명/settings는 각 모듈별 설정 파일이다.

주 settings 파일에서 주요 설정을 살펴보자.(반드시 확인할 것에 * 표시해둠)


# BINPATH  = rrdtool 실행 파일이 있는 경로 (*)
BINPATH="/usr/local/rrdtool/bin"

# LOGDIR   = HoSaNIC의 로그 파일 경로
# LOGSIZE  = 로그 파일 크기
# LOGBACKUPS = 지정한 개수만큼 로그는 로데이터션되어 백업된다.
#       로그 파일명은 HotSaNIC.log, HotSaNIC.log.1, ...
LOGDIR="$DAEMONDIR/var/log/"
LOGSIZE="200000"
LOGBACKUPS="5"

# RUN  = 실행할 모듈 목록 (*)
# SHOW = 웹페이지로 표시할 모듈 목록 (*)
# ORDER = 표시할 모듈의 순서를 지정(먼저 쓴 것부터 왼쪽에 표시함)
RUN="apps diskio networks part ping sensors system traffic"
SHOW="apps diskio networks part ping sensors system traffic"
ORDER="traffic system part ping sensors"

# WEBDIR   = 생성된 이미지, html이 저장될 디렉토리 (*)
# IMAGEFORMAT = 이미지 파일 형식 (gif 또는 png)
WEBDIR="/usr/local/apache/htdocs/rrdtool"
IMAGEFORMAT="gif"

# DTIME = 지정한 간격으로 이미지를 생성한다. (단위는 분)
# CTIME = 지정한 간격으로 모니터링 메인화면의 작은 이미지를 생성한다. (단위는 시간)
#     따라서 처음 설치한 후 지정한 시간내에 convert.pl 명령을 하지 않으면 메인화면의
#     이미지는 최소 지정 시간동안 볼 수 없다.
DTIME="15"
CTIME="24"

# CONVERTPATH = ImageMagick 를 사용하여 이미지를 생성한다. convert 경로를 지정한다.
CONVERTPATH="/usr/bin/convert"

# REFRESH = 지정한 초단위로 웹페이지를 리프레쉬해서 보여준다. 기본 300초(5분)
REFRESH="300"



각 모듈별 설정은 해당 디렉토리의 settings을 보면 자세히 설명이 되어 있다.
여기서는 ping, diskio, apps에 대해서만 예를 들어본다.

* ping 모듈 ( HoSaNIC홈/modules/ping/settings )

 192.168.123.15(파일서버)에 대해 ping을 한다면, 다음을 추가하면 된다.


HOST=192.168.123.15,File Server


 설정했는데 ping 이미지가 생성안된다면 '5. 문제해결'에 해결방법을 설명해뒀다.

* diskio 모듈 ( HoSaNIC홈/modules/ping/settings )

/proc/stat 에서 disk_io 라인을 살펴보면 다음과 같이 되어 있다.

disk_io: (2,0):(1,1,2,0,0) (3,0):(306090,39930,942826,266160,5212040)
(3,1):(55015,28746,1435800,26269,909568) (8,0):(50,50,253,0,0)

여기서 (3,0) = hda, (3,1) = hdb, (8,0) = sda를 각각 의미한다.
따라서 hda와 hdb의 disk 입출력을 보려면 다음과 같이 설정한다.


DEV=3_0,hda
DEV=3_1,hdb


* apps 모듈 ( HoSaNIC/modules/apps/settings )


APP=httpd,Apache
APP=sendmail,Sendmail
APP=mysqld,Mysql Server
APP=hanterm,hanterm
APP=xmms,xmms
APP=MozillaFirebird-bin,Mozilla Web Browser


5) 실행

자~ 이제 웹페이지를 생성하고 rrdgraph만 실행하면 모니터링할 수 있다.


# ./makeindex.pl
# ./rrdgraph start



이제 웹브라우저를 띄우고 보면 된다. 아직 이미지도 안나온는데 뭘 보라는 것일까?
최소 15분(settings의 DTIME)이 지내야 모듈내의 큰 이미지들이 생성되고
24시간(CTIME)이 지나면 메인의 작은 이미지가 보일 것이다.
24시간 전이라도 적당한 시기에 ./convert.pl을 실행하면 메인에서도 이미지를 볼 수 있다.

부팅할 때 자동으로 rrdgraph가 실행되록 하려면 어떻게 해야할까?
rrdgraph 스크립트를 /etc/rc.d/init.d 에 복사를 한 후 chkconfig로 서비스를 추가한다.


# cp rrdgraph /etc/rc.d/init.d
# chkconfig -add rrdgraph



4. RRDtool 직접 다루기

HoSaNIC은 이미 정해진 모듈을 통해서 RRDtool을 다루는 것이다.
이제 시스템관리자가 원하는 데이터를 RRDtool로 직접 조작하여 통계용 이미지를 생성하는
방법을 알아본다. 간단히 과정을 정리해보면.

- RRDtool용 자체 DB(일반적으로 .rrd로 지정)를 생성한다.(create) ->
- 데이터를 업데이트하거나 (update) 가져온다.(fetch) ->
- 이미지를 생성한다. (graph)

1) rrdtool 명령 익히기

DB 생성, 이미지 만드는 것은 모두 RRDtool홈/bin/rrdtool 명령을 통해서 한다.


* 형식 : rrdtool [명령] [명령 옵션...]
* 예  : rrdtool create coffeenix_status.rrd DS:....


rrdtool에서 사용 가능한 명령은 무엇이 있을까?


---------- -----------------------------------------------------------------------
명 령   설 명
---------- -----------------------------------------------------------------------
create   새로운 RRD DB를 만든다.
update   DB에 새 데이터를 저장한다.
graph    저장된 DB자료를 이용해서 이미지를 생성한다. (.gif 또는 .png)
dump    RRD DB의 데이터를 XML 포맷으로 뽑아준다.
restore   XML 포맷에서 RRD DB로 저장한다.
fetch    RRD DB에서 데이터를 얻어온다.
tune    RRD DB의 설정을 변경한다.
last    RRD DB의 최종 업데이트 시간을 알려준다.
info    RRD DB의 헤더 정보를 보여준다. (파일명, 최근업데이트일, 설정값...)
rrdresize  RRA 크기를 변경한다. 가능하면 사용하지 말기를
xport    RRD DB의 데이터를 XML 포맷으로 뽑아준다. (출력 포맷 지정)
---------- -----------------------------------------------------------------------


2) 샘플 DB 생성

3) 이미지 만들기

5. 문제 해결

1) HoSaNIC 로그 파일을 보니 Can't locate RRDs.pm in @INC (@INC contains... 오류가 있습니다.

  RRDtool 설치할 때 make site-perl-install 를 하지 않아 RRDs.pm 펄 모듈이
  설치되지 않아서 입니다.
  RRDtool 소스 디렉토리에 가서 make site-perl-install을 하세요.
 
2) makeindex.pl 실행할 때 다음 오류가 발행합니다.
  WEBDIR (path to HotSaNIC's output directory) does not exist.

  시스템 모니터링 결과가 저장될 웹디렉토리를 생성하지 않았다.
  위 글중 '3 - 3) 필요한 디렉토리 생성'을 확인해봐라.

3) 시간이 한참지났는데 ping 이미지가 생성이 안됩니다. 물론 ping설정은 했습니다.
  로그를 보니 Can't locate asm/unistd.ph in @INC (did you run h2ph?).. 가 있습니다.

  펄용 헤더 파일이 없기 때문입니다. 펄 헤더로 변환해주는 h2ph로 해결할 수 있습니다.

  cd /usr/include; h2ph -r -l .

6. 이용 사례

  • http://kornet.hanirc.org/chanstat/
     HanIRC의 채널별 사용자 통계를 보여준다. 5분간격의 데이터를 1시간 단위로 자동 업데이트한다.
     장혜식님의 py-rrdtool을 사용한 페이지
    http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/gallery/

    * 참고 자료
  • RRDtool 매뉴얼
     
    http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/manual/index.html
  • itup님의 RRDtool 튜토리얼, 논문 자료
     
    http://myhome.hanafos.com/~itup/index.html
  • 이은태님의 'RRDTool로 서버의 상황을 파악하자.'
     
    http://kltp.kldp.org/stories.php?story=03/02/13/1717339

  • 2006/09/08 23:32 2006/09/08 23:32
    이 글에는 트랙백을 보낼 수 없습니다
    «이전  1 ... 2 3 4 5 6 7 8 9 10 ... 21  다음»
    웅쓰:웅자의 상상플러스
    웅자의 상상플러스
    전체 (379)
    게임 (5)
    영화 (2)
    기타 (23)
    맛집 (5)
    영어 (2)
    대수학 (3)
    형태소 (5)
    Hacking (9)
    Linux (112)
    HTML (48)
    Application_developing (48)
    Web_developing (102)
    Window (11)
    «   2006/09   »
              1 2
    3 4 5 6 7 8 9
    10 11 12 13 14 15 16
    17 18 19 20 21 22 23
    24 25 26 27 28 29 30
    1. 2016/01 (1)
    2. 2015/12 (3)
    3. 2015/10 (3)
    4. 2015/03 (2)
    5. 2015/01 (4)