Table of Contents

내가 현재 사용하고 있는 cafe24 계정에서 모니위키(moniwiki) 를 설치하는 방법을 설명하고 있다.
cafe24 는 리눅스 기반의 APM 을 제공하고 있다.
일반적인 모니위키의 설치는 무척이나 간단하다. 하지만, 내가 원하는 환경을 만들기 위해서는 몇가지 설정이 필요하다.
여기서는 최대한 설정에 관한 설명을 할 것이다.

준비 운동하기

현재 모니위키의 최신버전은 1.1.2 이다. 여기서 http://kldp.net/projects/moniwiki/ 에서 다운로드 받을 수 있다. 차후 문서 버전관리를 하기 위해서는 RCS 관련 유틸리티들이 필요하다.
물론 호스팅 서버측에서 제공을 해준다면, 상관이 없겠지만 cafe24 에서는 현재 RCS 관련 유틸리티들을 지원하지 않고 있다.
따라서 rcs57-bin.tgz 파일이 필요하다. rcs57-bin.tgz 에서 다운로드 받을 수 있다.

설치하기

모니위키 설치 방법은 굳이 설명하지 않겠다. 이제 RCS 유틸리티를 설치해야 한다. rcs57-bin.tgz 파일을 계정 홈디렉토리(~fat81)에 복사한다.

#cd
#ls
www rcs57-bin.tgz
#tar xzf rcs57-bin.tgz

bin 디렉토리가 생기고 그 아래에 실행파일들이 생성되었을 것이다.
moniwiki/config.php 파일에 다음을 추가해준다.

$path= '/home/hosting_users/fat81/bin';

이제 제대로 RCS 가 작동하는지 확인해보자!!
아무 페이지나 수정 저장한다. 그리고 나서, 상위 아이콘 중에서 'i' 를 클릭하면, 버전 히스토리 나온다.
각 버전별로 diff 를 볼 수 있으면, 정상적으로 동작하는 것이다.

설정하기

여기서 언급하는 설정들은 지극히 필자 주관적인 사항이므로 반드시 따라야 할 의무는 없다. 자기가 좋은 대로 설정하면 되는 것이다.
내가 원하는 설정은 다음과 같다.

  1. 기본 테마(theme)를 blog 로 하고, 폰트 크기를 9, 폰트 모양은 굴림체로 한다(CSS 이용).
  2. admin, fat81 을 제외한 모든 계정 추가를 금지한다.
  3. 개인적인 페이지는 읽기권한을 금지시키고, 그 외의 페이지는 읽기권한만 부여한다.

위의 요구를 만족하는 설정을 만들기 위해서는 몇가지 파일을 수정해야 한다.
먼저 기본 테마를 blog 로 설정하기 위해 moniwiki/config.php 파일을 다음과 같이 수정한다. 또한 사용자가 다른 테마로 수정하는 것을 방지하기 위해,

$theme='blog';
$theme_css=1;

위와 같이 한다. 설정을 적용하면, 페이지 하단의 메뉴가 모두 붙어서 링크가 걸려있는 것을 볼 수 있다. config.php 에 다음을 추가한다.

$menu_sep='|';

모니위키의 모든 폰트와 폰트 모양을 일치시키기 위해서는 .css 파일이 필요하다. 다음은 moniwiki/css/nlog.css 파일이다.

@import url("user.css");
 
body {
 font-family: "굴림"; font-size:9pt; color:block; line-height:150%;
background-color:#90B7DC;
  color:#000;
  margin: 0;
  padding: 0;
}
 
a:link { color: #369;}
a:visited { color: #369;}
/* a:hover {background-color:#999966;color:white} /* */
.wikiTitle {
font-family: "굴림"; font-size:9pt; color:block; line-height:150%;
font-weight:bold;
  color:#ffffff; /* */
/*  color: #7B7D5A; /* */
  text-decoration: none;
}
tt.wiki {font-family: "굴림"; font-size:9pt; color:block; line-height:150%;}
tt.foot {
font-family: "굴림"; font-size:9pt; color:block;  
vertical-align: super;
}
 
tt.sister {
font-family: "굴림"; font-size:9pt; color:block; line-height:150%; 
vertical-align: super;
  text-decoration: none;
}
 
pre.wiki {
  padding-left:6px;
  padding-top:6px; 
font-family: "굴림"; font-size:9pt; color:block; line-height:150%; 
background-color:#000000;
  color:#FFD700; /* gold */
}
 
pre.console {
  background-color: #000000;
  color: #E0E0E0;
  padding: .25em ;
  border: 2px inset #808080;
}
 
pre.quote {
  padding-left:6px;
  padding-top:6px;
  white-space:pre-wrap;
  white-space: -moz-pre-wrap; 
font-family: "굴림"; font-size:9pt; color:block; line-height:150%; 
background-color:#ddddc0;
}
 
table.wiki {
  border: 0px outset #ddddb0;
}
 
td.wiki {
  border: 0px inset #E2ECE5;
}
 
tr.wiki {
  background-color: #E9ECEF;
}
 
textarea.wiki { width:100%; }
 
th.info {
  background-color:#E2ECE2;
}
 
td.info {
  background-color:#E2ECE2;
}
 
h1,h2,h3,h4,h5 {
font-family: "굴림"; font-size:9pt; color:block; line-height:150%; 
border-bottom:1px solid #999;
}
 
tr,td {
  font-family: "굴림"; font-size:9pt; color:block; line-height:150%;
}
 
a {
font-family: "굴림"; font-size:9pt; color:block; line-height:150%;
}
 
caption {
  font-family: "굴림"; font-size:9pt; color:block; line-height:150%;
}
 
 
div.diff-added {
font-family: "굴림"; font-size:9pt; color:block; line-height:150%; 
background-color:#E0FFE0;
  color:black;
}
 
div.diff-removed {
font-family: "굴림"; font-size:9pt; color:block;  line-height:150%;
background-color:#E9EAB8;
  color:black;
}
 
div.diff-sep {
font-family: "굴림"; font-size:9pt; color:block; line-height:150%; 
background-color:#000000;
  color:#FFD700; /* gold */
}
 
span.diff-added, ins.diff-added {
  color:black;
  background-color: #60FF60;
  text-decoration: none;
}
 
span.diff-removed, del.diff-removed {
  color:black;
  background-color: #FF0000;
}
 
div.message {
  margin-top: 6pt;
  background-color: #E8E8E8;
  border-style:solid;
  border-width:1pt;
  border-color:#990000;
  color:#440000;
  padding:0px;
  width:100%;
}
 
.highlight {
  background-color:#FFFF40;
}
 
table.goto {
  background-color: #002B2C;
}
 
span.goto, input.goto {
font-family: "굴림"; font-size:9pt; color:block; line-height:150%;
}
 
table.closure, td.closure{
  background-color:#ddddb0;
}
 
/*  */
.wikiHr {
  border:0px solid;
  padding: 0px 0px; /* */
  margin-top:0px;
  height:1px;  
/* background: #000 url(hr1.gif) no-repeat scroll center; */
}
 
#wikiTrailer,#wikiOrigin {
  padding-left: 20px;
  padding-bottom: 5px;
}
 
#wikiHeader {
/*  border-left: 0.8em solid #7B9AC5; /* */
  color: #fff;
  padding: 0.2em 0em 0.2em 0.2em;
  background-color:#69c; 
}
#wikiHeader a:link {color:#fff;}
#wikiHeader a:visited {color:#f2f2f2;}
 
#wikiBody {
  color: black;
  background-color: #fff;
  border: 2px solid #69C;
/*  border-left: 0.8em solid #E2ECE2;
  border-right: 0.8em solid #E2ECE2; */
/*  border-left: 0.8em dotted; /*solid #6A2525; */
/*  border-right: 0.8em solid #6A2525; */
/*  text-transform: lowercase; /* */
  margin: 0px 10px 0px 10px;
  padding: 5px 1em 5px 1em; 
/*  margin-left: 20px; */
/*  padding-left: 1em; /* */
/*  text-indent: 10px; */
/*  border: 0px outset #E2ECE5; */
/*  font-size:16px; 
   border-collapse:collapse; */
}
 
#wikiBody a:link {
  color: #39c;
}
 
#wikiBody a:visited {
  color: #369;
}
 
#wikiBody a:hover {
  border-bottom: 1px solid #369;
}
 
#wikiContent {
  margin-left: 20px; 
}
 
#wikiFooter {
  padding: 0.5em 2em;
/*  background-color:yellow; */
}
 
#wikiHint {
  font-family:Georgia,Verdana,Lucida,sans-serif;
  font-size:10px;
  background-color:#E2DAE2;
}
 
#wikiSister {
/*  background-color:lightgreen; /* */
}
 
#wikiPreview {
  border: 2px solid #a0a0a0;
  margin: 5px 5px 5px 5px;
  padding: 5px 1em 5px 1em;
}
 
/*
#wikiMenu {
  background-color:yellow;
}
*/
 
div.indent { padding-left:2em; }
 
div.hint { font-family: "굴림"; font-size:9pt; color:block; background-color: line-height:150%; #369; color:white;}
a.purple { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; text-decoration:none;}
 
/* Blog CSS */
a.purple { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; text-decoration:none;}
div.blog { width:90%; padding: 0em 1em 0em 1em; }
div.blog-user { font-family: "굴림"; font-size:9pt; color:block; line-height:150%;}
div.blog-title { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; font-weight:bold; }
div.blog-comments { padding: 0.5em 0.5em 0.5em 2em; border-left: 1px dotted #7B9AC5; background-color:#E8F5FA;}
 
div.blog-date { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; font-weight:bold; padding-bottom:5px;}
span.blog-user { font-family: "굴림"; font-size:9pt; color:block; line-height:150%; }
div.blog-action { font-family: "굴림"; font-size:9pt; color:block; line-height:150%;}
li.blog-list { list-style-type: none;}
 
/* Calendar */
td.day { background:#90B7DC; text-align: center;}
td.today { background:#fff; text-align: center;}
 
/* HierarchicalWiki */
div.wikiGroup {
font-family: "굴림"; font-size:9pt; color:block; line-height:150%;
}
 
/* enscript syntax */
div.wikiPre i,div.wikiPre b{
  font-weight: normal;
  font-style: normal;
}
 
img.imgLeft {
  margin-right : 15px;
  margin-bottom : 5px;
}
 
img.imgRight {
  margin-left : 10px;
  margin-bottom : 5px;
}
 
span.externalLink {
  display: none;
}
 
span.lineNumber {
  color:#ffff00;
}

이 파일을 moniwiki/theme/blog/css 아래의 default.css 로 복사한다. 이제 브라우저를 통해 확인해보자! 어떤가 폰트가 바뀌었는가?
blog 테마는 오른쪽에 달력이 있다. 달력 앞 뒤로 이동할 수 있도록 링크가 걸려있는 데, 이 모양이 마음에 들지 않는다.
moniwiki/plugin/Calendar.php 파일의 주석처리한 부분을 수정한다.

function macro_Calendar($formatter,$value="",$option="") {
        global $DBInfo;
 
        $date=$_GET['date'];
 
        $prev_tag='<';         // 수정
        $next_tag='>';         // 수정
 
        static $day_headings= array('Sunday','Monday','Tuesday','Wednesday',
                'Thursday','Friday','Saturday');
        $day_heading_length = 3;
 
        preg_match("/^(('|\")([^\\2]+)\\2)?,?((\d{4})-?(\d{2}))?,?\s*([a-z, ]+)?$/i",$value,$match);

이제 다시 브라우저로 확인해보자!
이제는 admin, fat81 의 제외한 모든 계정 추가를 금지시켜야 한다. 이 방법은 먼저 admin 의 경우에는 설치시 만들었기 때문에 따로 만들어줄 필요가 없다. '환경설정' 페이지에서 fat81 계정을 생성한다. 이제 config.php 파일에

$security_class="mustlogin";
$no_register=1;

를 추가한다. 이제 절대로 새로운 계정을 추가할 수 없다.
이번에는 개인적인 페이지는 읽기권한을 금지시키고, 그 외의 페이지는 읽기권한만 부여해야 한다.
wiki.php 파일을 아래와 같이 추가한다.

 $formatter->pi=$formatter->get_instructions($dum);
    if ($DBInfo->body_attr)
      $options['attr']=$DBInfo->body_attr;
 
    # 수정 시작
    if ($formatter->pi['#private'] and !$DBInfo->security->is_allowed('read_private',$options)) {
        do_invalid($formatter,$options);
        return;
    }
    # 수정 끝
 
    $formatter->send_header("",$options);
 
    $formatter->send_title("","",$options);
...
...
...
function get_instructions(&$body) {
    global $DBInfo;
    # '#private' inserted by Lbird
    $pikeys=array('#redirect','#action','#title','#keywords','#noindex',
      '#filter','#postfilter','#twinpages','#notwins','#nocomment',
      '#language','#camelcase','#nocamelcase',
      '#singlebracket','#nosinglebracket','#private');     // 추가
    $pi=array();

이제 읽기권한을 금지하고 싶은 페이지의 맨 위에 '#private' 를 추가한다.
그리고 나서, 로그아웃을 하고, 난 뒤에 추가한 페이지를 클릭해본다. 권한이 없다는 에러 페이지가 뜬다면 성공이다.