Twiki 4.0 설치 

Simple View | Forum View

코드명 DakarRelease, 4.0 트위키가 얼마전 릴리즈가 되었습니다. 얼마전 어떤 분이 트위키 설치에 관한 질문을 주셨는데, 마침 4.0 프러덕션 릴리즈가 나왔다는 메일을 받고 겸사겸사 다시 설치해봤습니다.

혹시 트위키에 관심이 있는 분들은 참고하십시요. 제가 아는건 설치과정뿐입니다. 실제 트위키 사용은 거의 해보지 못해서 모릅니다.

아래 설치는 위키를 "UTF-8"인코딩으로, 한글 CoolIRI로 설치하는 방법에 대한 간단한 로깅입니다.이전 버전 twiki_설치에서 Cool URL부분 참조

/wiki/wiki/Main/환영합니다

http://twiki.org/cgi-bin/view/TWiki04/TWikiInstallationGuide를 참조하면서 보세요. 특히 퍼미션에 대한 부분은 이 페이지를 참조하세요. data, pub 밑의 모든 파일은 유저가 쓸수 있는 퍼미션이 있어야 합니다.

  1. http://twiki.org에서 4.0을 받습니다.
  2. www/twiki 에 압축을 풉니다. www/ 가 웹루트 폴더라고 가정합니다. 따라서 풀게 되면, www/twiki/data... 등의 폴더 구조가 될겁니다.
  3. * 이 부분의 작업은 한글 Cool URL 적용을 위한 부분입니다. 관심없는 분은 패스
    $ cd www/
    $ ln -s twiki/bin wiki
    $ cd www/twiki/bin
    $ ln -s view wiki
  4. twiki/lib에서 설정파일 조작
    $ cd lib
    $ cp LocalSite.cfg.txt LocalSite.cfg
    $ chmod 755 LocalSite.cfg
    $ vi LocalSite.cfg
    ===
    $cfg{DefaultUrlHost} = 'http://alogblog.com';
    $cfg{ScriptUrlPath} = '/wiki';  # 3.과정 안거쳤으면, /twiki/bin이 됩니다.
    $cfg{PubUrlPath} = '/twiki/pub';
    $cfg{PubDir} = '/home/.../www/twiki/pub';  # 절대경로
    $cfg{TemplateDir} = '/home/.../www/twiki/templates';
    $cfg{DataDir} = '/home/.../www/twiki/data';
    $cfg{LogDir} = $cfg{DataDir};

    ### 서버상에 diff 등의 명령이 /bin:/usr/bin 외의 경로에 있다면 추가
    $TWiki::cfg{SafeEnvPath} = '/home/bin:/bin:/usr/bin';
    ### 3.번 과정의 쿨 유알아이 과정 안거쳤으면 생략!
    $TWiki::cfg{ScriptUrlPaths}{view} = 'http://alogblog.com/wiki/wiki';
  5. twiki/bin 밑의 설정파일 조작
    $ cd twiki/bin
    $ cp LocalLib.cfg.txt LocalLib.cfg
    $ vi LocalLib.cfg
    ===
    $twikiLibPath = "/home/.../www/twiki/lib";
  6. twiki/bin 밑의 .htaccess파일 조작
    $ cd bin
    $ cp .htaccess.txt .htaccess
    $ vi .htaccess
    ===
    AuthUserFile /.../www/twiki/data/.htpasswd
    ErrorDocument 401 /wiki/wiki/TWiki/TWikiRegistration
    <FilesMatch "configure.*">
       require user "my_username"   # my_username은 일종의 root같은 개념, 적당한 이름
    </FilesMatch>
  7. twiki/data 밑에 .htpasswd 파일 생성
    $ cd data
    $ htpasswd -c .htpasswd my_username  # 6번의 설정에서 정했던 그 유저네임
  8. 몇몇 폴더 보안을 위해,
    $ cd twiki
    $ cp subdir-htaccess.txt data/.htaccess
    $ cp subdir-htaccess.txt lib/.htaccess
    $ cp subdir-htaccess.txt templates/.htaccess
    $ cp subdir-htaccess.txt locale/.htaccess
  9. 이제 브라우저에서 example.com/twiki/bin/configure 주소 입력
    이때 앞서 만들었단 유저네임과 비번을 물어볼겁니다. 여기서 몇몇 원하는 설정을 해줍니다. 만약 error가 나는 부분은 적당히 자신의 환경에 맞는 값으로 재 설정해주면됩니다. 여기서 설정하면 그 값들이 lib/LocalSite.cfg 파일에 추가됩니다. 즉, 직접 저 파일을 수정해도 된다는 뜻입니다.

    개인적으로 바꾼 몇몇 값들을 예로 적어봅니다.
    * Security setup에서, CGI::Session 모듈이 없어 그냥 UseClientSessions을 껐다.
    * UseLocale 선택하고, site.Locale = ko_KR.euc-kr
    * {Site}{CharSet} = utf-8, site.lang = ko, site.fulllang = ko_KR 대충 이런식.
  10. !!! 가장 중요 !!!
    위 설정을 하고 나서, 브라우저에서 /wiki/wiki/Main 등의 위키 접속을 하면, 혹 Server Error 화면이 반겨주는 재수없는 경우를 맞는다면,
    lib/LocalSite.cfg에서 NameFilter 설정 부분을 커멘트(#) 처리 혹은
    (,] 등의 값에 이스케이프 처리 즉, \(, \] 식으로...

한글 주소 핵(Hack)

한글 위키이름의 경우 그것이 URL로도 나타나기 때문에, 거의 모든 위키 엔진이 이를 %HH 처리합니다. 그런데 위키의 경우 이런식의 주소는 위키틱하지 못할뿐더러 정신을 사납게 만드는 주소꼴이 아닐수 없습니다. 머 순전히 개인적인 취향일지 몰라도... 그래서 무버블타입 블로그에서 CoolURI를 구현하듯이, 위키도 그럴수 있는 위키엔진을 골랐고(트위키), 또 몇가지 핵을 통해 이를 가능하게 할려고 노력해왔습니다.

하지만, 초보자나 안전제일주의자, 범생이과에 속하는 분들은 신경끄는게 정신 건강에 이롭습니다. 무버블타입에서의 한글 CoolURI는 개인적으로 플러그인도 만들고 해서, 어느 정도 정리가 다 되었다고 보지만, 트위키의 경우 설치만 해뒀지, 실질적으로 사용하거나 내부 루틴을 일관되게 이해라고 있거나..하질 못하고 걍 감으로 대충 뚜드려 맞춰놓은 상태입니다. 그래서 생각지 못한 문제가 생길 수 있다는 것입니다.

혹시나 한글 위키이름을 저처럼 고집하고 싶은 고집쟁이분들만 해보십시요. 먼저 펄 Encode모듈이 있어야 합니다. 펄 5.8 이상의 버전이면 대부분 기본적으로 깔려 있을텐데... 이것은 주소창이나 EUC_KR 인코딩 페이지에서 위키 주소를 따라 접속해온 경우에도, 사용자에게 UTF-8로 보내라느니..하는 잔소리하지 않고 걍~ 내부적으로 그까이꺼~하고 알아서 변환해서 주소를 처리해주기 위해 필요한것입니다.

이 트위키의 한글처리부분을 다루다가 발견한게, MS IE의 쿼리부분의 인코딩에러입니다. 이 어처구니 없는 것때문에 IE에서 자식 위키네임 페이지를 만들면, 부모 위키이름이 깨져나타납니다. 그래서 혹시 IE에서 자식 위키페이지를 만드는건 삼가거나, 파이어폭스, 오페라 등에서 만드는게 좋습니다. IE7 베타 2에서도 여전히 이 문제가 있네요. /wiki/wiki/Sandbox/무이 페이지의 상단 부분을 보면 깨져있습니다. 이건 트위키나 루틴의 문제가 아니라, IE의 치명적 버그 문제입니다.


$ vi lib/TWiki.pm

sub redirect {
    my $this = shift;
    my $url = shift;

    ASSERT($this->isa( 'TWiki')) if DEBUG;

    my $query = $this->{cgiQuery};
    unless( $this->{plugins}->redirectCgiQueryHandler( $query, $url ) ) {
        if ( $query && $query->param( 'noredirect' )) {
            my $content = join(' ', @_) . "\n";
            $this->writeCompletePage( $content );
### ($url)을 urlRealEncode($url)로 수정
        } elsif ( $this->{client}->redirectCgiQuery( $query, urlRealEncode($url) ) ) {
        } elsif ( $query ) {
            print $query->redirect( $url );
        }
    }
}
...
...
sub new {
    if( $newt ) {
        $newt =~ /^(.*?)\.([^.]*)$/;
        $this->{webName} = $1;
        $this->{topicName} = $2;
    }
### 받은 주소가 EUC 한글이라면 이를 UTF-8로 바꿔준다.
### alogblog 시작
    else { 
        use Encode qw(encode decode);
        use Encode::Guess qw(euc-kr utf-8);

        $newt = $this->{webName}.'.'.$this->{topicName};
        my $tmp_encoding = guess_encoding($newt);
        if($tmp_encoding->name eq 'euc-kr') {
                $newt = encode('utf-8', $tmp_encoding->decode($newt));
                $newt =~ /^(.*?)\.([^.]*)$/;
                $this->{webName} = $1;
                $this->{topicName} = $2;
        }      
    }
### alogblog 끝
...
...
}
...
...
### 한글 위키이름이 %HH되지 않는 형태로 위키에 나타나게 하기 위해
### urlEncode 루틴의 실제 작업 부분을 커멘트시킨다.
sub urlEncode {
    my $text = shift;

#  $text =~ s/([^0-9a-zA-Z-_.:~!*'()\/%])/'%'.sprintf('%02x',ord($1))/ge;

    return $text;
}

 ### 새로 추가 함수, redirectCgiQuery 하나만을 위한...
### urlRealEncode는 새로 추가, 원래의 urlEncode함수와 같다.
sub urlRealEncode {
    my $text = shift;

    $text =~ s/([^0-9a-zA-Z-_.:~!*'()\/%])/'%'.sprintf('%02x',ord($1))/ge;

    return $text;
}


한글 위키명 관련한 개인적인 로그

Edit 등의 경우에 원래 위키 페이지로 리다이렉트(redirect)되는데, 이때 원래는 그냥 유티에프 주소를 보내려고, 기존 redirect 루틴에서 메타 태그를 이용한 리다이렉트를 하려했는데, 이상하게 Firefox에서는 이 메타 태그의 유티에프 주소를 제대로 이해하지 못했다. 그래서 어쩔수 없이 리다이렉트시키는 주소는 기존 redirectCgiQuery 루틴을 사용하는 대신에 그 때 주소를 urlRealEnocde로 이스케이프 시켜서 보낸다. redirectCgiQuery는 HTTP header 의 Location을 이용하는데 이것은 이스케이프된 주소밖에 어느 브라우저도 인식하지 못하기때문에, 이를 이용한다면 반드시 한글주소는 이스케이프 처리해야하기때문이다.

MS IE는 "?" 뒤의 쿼리를 이스케이프하지 않고 그냥 바이너리 값을 보내는데 문제는 UTF페이지에서 UTF로 주소를 보낼때, 쿼리 값이 제대로 UTF로 변환돼지 않고 전송된다는 것이다. 젠장! 그래서 어떤 위키명의 자식 위키명을 IE에서 만들면 브레드스크럼(breadcrum)에서 부모 위키명이 깨져 나타난다.

Comments

헤매다 헤매다 다시 이곳에 왔습니다. 답글 남겨주셔서 감사합니다. 설명주신대로 똑같이 해보려고 하는데, htpasswd 생성부분이 막히는군요. Telnet에서 "Command Not Found"가 나오는 걸요?

Posted by 김일환 , 2006년 02월 16일 아침 7:47

휴~! twiki/bin/configure 까지는 성공했습니다. 그런데, twiki/bin/view에 가보면 internal server error가 나는군요. "가장중요"를 참고했지만 무슨 말씀인지 조금 난감하군요. 직접 연락을 취할 수 있는 방법이 없을까요.

Posted by 김일환 , 2006년 02월 16일 아침 8:59

우선 트위키 설치방법을 정리해주신거 정말 고맙습니다. 근데 제가 설치하면서 궁금한 부분이 있어 질문드립니다.

위의 LocalSite.cfg 설정부분에서
" $cfg{PubDir} = '/home/.../www/twiki/pub'; # 절대경로 "
이렇게 쓰신부분이 이해가 가질 않습니다.

제 웹루트폴더가 html인데 어떻게 써야 맞는건가요?
아래의 세가지 경우중 어떤게 맞는건가요?

1. $cfg{PubDir} = '/home/.../html/twiki/pub';
2. $cfg{PubDir} = '/html/twiki/pub'; "
3. $cfg{PubDir} = '/home/httpd/www/twiki/pub';

그냥 보고 따라하면 될꺼라 생각했는데 생각보단 어렵네요. 그럼 답글부탁드릴께요~

Posted by 김상만 , 2006년 02월 24일 새벽 12:39

조금 오해의 소지가 있는건가요? /home/.../www/twiki/bin 에서 www가 웹루트 표시입니다. 텔넷에서 $ pwd 명령을 html/ 웹루트 밑에서 쳐보시면, /home/.../sangmankim/html/ 식으로 절대 경로가 나올겁니다. 물론 호스팅 회사마다 저 경로 모습이 다 다르겠죠.

담에 혹시 코멘트 남기실 일 있으시면, 메일 주소도 적어주시면 답변을 멜로 보내드립니다.

Posted by 알록블록 , 2006년 02월 24일 새벽 2:25

답변감사합니다. 제 절대경로는 /home/httpd/html/이더군요.^^ 근데 아직은 그 이상한 Internal Server Error 로 인해 접속은 안되고 있습니다. 좀더 연구해보고 도저히 안되면 다시한번 질문 드릴께요. 일교차가 심하다던데 감기조심하시구요.
제 이메일은 modern77_sm 앳 네이버닷컴 입니다. 그럼..^__^

Posted by 김상만 , 2006년 02월 24일 오전 9:51

Error: 'TWiki.pm' could not be loaded. The error was:
[Tue Feb 28 01:35:24 2006] configure.pl: [Tue Feb 28 01:35:24 2006] configure.pl: syntax error at /home/y/share/htdocs/twiki/lib/TWiki.pm line 268, near "$var qw( DataDir DefaultUrlHost PubUrlPath PubDir TemplateDir ScriptUrlPath LocalesDir )"
[Tue Feb 28 01:35:24 2006] configure.pl: [Tue Feb 28 01:35:24 2006] configure.pl: BEGIN not safe after errors--compilation aborted at /home/y/share/htdocs/twiki/lib/TWiki.pm line 273.

말씀하신 대로 다 설정했는데 위와 같은 에러가 납니다.
갖은 짓을 다 해 봤는데, 절대 해결이 안되네요.. 혹시 왜 나는지 도와주실 수 있으면 감사하겠습니다.

Error: Check path to twiki/lib and check that LocalSite.cfg is present and readable

Posted by 이승현 , 2006년 02월 28일 오후 6:39

이승현님/위에 적으신 에러는 아파치 에러로급니까? 그럼 개인서버에 돌려보신건가보네요?

먼저 에러로그에 configure.pl이 나오는데, 왜 그렇죠? 트위키는 쿨 유알아이를 위해 디폴트에서 .pl이나 .cgi를 의식적으로 사용하지 않거든요. 혹시 다른 문제땜에 bin/밑의 파일들을 전부 .pl로 바꾸신건가요? bin/.htaccess 에서 SetHandler cgi-script
명령으로 그럴필요가 없어지느건데.. 왜 에러로그에 .pl이 붙는지 모르겠네요...

그리고 저 에러는 어느 상태에서 발생한 건가요? 기본적으로 bin/configure 는 큰 무리없이 실행이 되거든요. 이걸 돌려서 세부적인 설정을 해줘야 bin/view/MainPage 등을 열수 있는데요.. configure에서 암호 묻는 장면은 되는겁니까? 저 에러가 일어나는 장면에 대한 좀더 자세한 설명이 있었으면 합니다.

Posted by 알록블록 , 2006년 02월 28일 저녁 7:58

internal server error

저도 이런 에러가 나서 한참 버벅거렸는데...
perl 컴파일 과정에서 라이브러리가 없어서 생긴 문제였어요.
저의 경우 perl 5.8.0 인데... /url/lib/perl5/5.8.0 에 *.pm 파일들이 있는 데 CGI 관련된 파일등 여러개가 없더군요.
그래서 perl 5.8.0 소스를 받아서 pm 파일만 가져다가 덮어 쓰니가 잘 되더군요

Posted by 김주혁 , 2006년 06월 1일 오후 1:47

한가지 질문이 있습니다. 최신판 twiki를 설치하였는데, 한글 topic name이 입력이 안되는 군요....

설치하신 버젼에서는 되는 것 같은데, 혹시 추가적으로 작업해주신 것 이 있나요???

미리 감사드립니다.

Posted by 어진선 , 2006년 11월 6일 오후 3:32

안녕하세요

하도 그거 해본지 오래돼서 가물가물합니다. 제 기억에 이 글에 적은 이외에 한글 입력 등의 문제로 추가적으로 소스를 수정하지는 않았을겁니다.(했다면 로깅했을테니깐요.)

한글 타픽네임이 안된다는 것은 %HH 식으로 처리된다는 말씀인가요? 그런거라면 제 생각에 트위키 내에서 강제로 그렇게 처리하는 것 같은데요. 지금 당장엔 좀 알아보기가 개인사정으로 어렵고, 혹 알게 되면 알려드리겠습니다.

Posted by 알록블록 , 2006년 11월 6일 저녁 7:51

Post a comment

  • PGP/GPG 서명된 코멘트를 지원합니다. ?
  • 이메일 주소는 정중히 사절합니다.
  • 이름(닉네임)/블로그 주소는 필수 입력사항입니다.
  • 이미지는 자기 블로그상의 대문이미지 등을 사용하셔도 좋습니다.
  • 코멘트에 달린 이미지를 클릭하면 자신의 블로그로 연결됩니다.
  • 깨진 블로그/이미지 주소를 가진 코멘트는 수정/삭제 대상입니다.


  •   Forget me

    ?