Among the lucky, you are the chosen one.
TwinPages는 서로 다른 위키간의 연결을 유기적으로 해준다. 이때, 서로 다른 위키이면서 유기적으로 연결되고자 하는 개개의 두개의 위키 혹은 다수의 위키를 자매위키라 부를 수 있다.

모니위키의 하단에 보시면 TwinPages 목록이 뜨는 것을 볼 수 있습니다. 이것은 SisterWiki를 설정하거나 AliasPage를 설정한 경우이며, 이와 동시에 TwinPage와 sisterSiters를 활성화시켰을 경우입니다.

SisterSites는 그 페이지 내에, 지금 위키페이지에는 존재하지 않고 다른 자매 위키사이트에는 존재하는 페이지에 대한 목록을 보여주기 위한 장치입니다.

모니위키에서 SisterWiki 설정하기

기본 설정

$use_sistersites=1;
$use_twinpages=1;
그리고 SisterSites에 대한 db를 만들어야 합니다. SisterSites에 대한 db는 AliasPage에 의해 만들어지는 PageNameAliases에 의해서 1차적으로 가상의 db가 만들어집니다. 그 이외의 SisterWiki에 대한 진짜 db는 dba모듈에 의해 만들어집니다.

/!\ 단순히 AliasPage만 사용할 경우는 SisterSites에 대한 db를 구축할 필요 없습니다.

config.php

AliasPage뿐만 아니라 SisterSites의 db를 구축하기 위한 설정을 추가합니다.
$use_sistersites=1;
$use_twinpages=1;
$dba_type='gdbm'; # db3,db4 etc. # 모니위키 초기 설치시 자동으로 설정됩니다.
$shared_metadb=$data_dir.'/metadb.cache';
php의 dba로 구현되는데, metadb는 python 스크립트를 사용하며, python에서 어떤 db를 지원하느냐에 따라 설정값이 달라질 수 있습니다. php에서도 이에 대응하는 db를 지원해야 합니다.

sistermap.txt 설정

intermap.txt와 기본적으로 포맷이 같다. 그러나, 추가로 위키의 형식을 가리키는 인자가 하나 더 있다.
# 포맷은, 인터위키 URL 위키형식 순서로 나열
# 위키 형식은 Wiki, MoinMoin(기본값), usemod, foldoc, jargon, Wolfram, PediaWiki, TWiki, tavi
Wiki http://c2.com/cgi/wiki? Wiki
# 위의 형식에 포함 안되는 경우. 예를 들어 패치된 usemod위키
TheLibraryOfBabel http://nyxity.com/wiki/wiki.pl? action=titleindex
data/sistermap.txt를 자신의 환경에 맞게 고친 후에
cd data
python metaparse.py
이렇게 명령을 내리면 data/metadb.cache가 생성됩니다. /!\ 만약 처음으로 metaparse.py 를 실행하는 거라면, 마지막 줄 근처의 fetch=0 를 fetch=1 로 수정해주어야 합니다. 이후에 다운로드 한 index를 그대로 사용하고 그 내용을 갱신만 하고 싶다면 fetch=1 로 바꾸어 주시면 됩니다. ( Q: fetch = 0 으로 바꾸어야 하지 않나요?) /!\ 이때, config.php의 설정에 맞게 ($dba_type)로 지정한대로 metaparse.py를 고쳐주어야 합니다. 기본적으로 bsddb로 설정되어 있는데, gdbm을 쓴다면 metaparse.py의 소스를 직접 고쳐주면 됩니다. 최신 metaparse.py의 경우엔 -g 옵션을 주면 gdbm으로 동작합니다. 만약 중간에 dba_type을 바꿨다면 metadb.cache 파일을 지우고 metaparse.py를 실행해야 합니다. 아니면 읽을 때 에러가 나서 갱신에 실패합니다.

InterMap 설정

data/sistermap.txt를 고쳐주었을 경우, data/intermap.txt 혹은 InterMap 페이지를 이에 맞게 고쳐주어야 합니다. InterMapInterWiki를 지정해주는 맵이며 InterMap 페이지를 참조해서 만들어주시기 바랍니다.

주의사항

대규모 위키는 몇달에 한번씩 긁어도 되겠고( OriginalWiki) 한번 긁은 정보는 metadb.cache라는 db파일에 계속 저장되어 또 업데이트 하더라도 계속 남아있습니다. 그 페이지가 지워졌는지는 검사하지 않습니다.

모든 위키는 UTF-8이라고 가정하며, metaparse.py상단의 다음 변수를 조정해 줘야 합니다.
import string,os,sys,re,urllib

local_charset="EUC-KR"
default_charset="UTF-8"

Edit data/sistermap.txt for your wiki properly. run the following commands to update/make a metadb.cache:
cd data
python metaparse.py
then you get the metadb.cache file. /!\ accroding to the $dba_type in your config.php, you have to switch the following lines in the metaparse.py source.
def updateMetaCache(wikis):
    import bsddb,os,sys,string
    db = bsddb.hashopen(shared_metadb,'c')
#    import gdbm,os,sys,string
#    db = gdbm.open(shared_metadb,'c')

215행 정도를 보면 len으로 페이지의 단어 수를 검사한다. 여러 단어로 되어 있으면 무시해버리도록 되어 있는데, 여러 단어짜리 페이지도 SisterWiki에 넣고 싶으면 그 부분을 지워버리면 된다.

Q & A

Q: SisterWiki 를 읽어올때 한글 코드가 UTF-8 인것은 잘 읽어 오는데, CP949 등은 깨어집니다. 이 경우 프로그램을 이용해서 그냥 변환을 시켜주면 되나요?

A: 윗부분에 관련내용이 아주 살짝 기술되어있는데, python에서 iconv 모듈이 지원안되면 CP949를 변환하지 못합니다. python에서 다음과 같은 명령이 제대로 되는지 확인해보셔야 합니다.
key=unicode(key,"UTF-8").encode("CP949") # local_charset="EUC-KR"이 아닌 CP949인 경우
print key

Q: SisterWiki 를 사용하기 위해서 metaparse.py 를 이용해서 꼭 데이터 베이스를 만들어야 하나요? 그냥 data/cache/ NoSmoke›1 등과 같이 파일을 기록하는 것으로는 안되나요?

A: 현재 지원하지 않고 있습니다. 이론상 당연히 가능하겠습니다.

Q: 맥에서는 gdbm 을 사용하지 않고 dbm 을 사용하기에 변경을 하였습니다. 결과적으로 잘 읽고 데이터 베이스를 만들어 주는 것 같은데 읽어온 data/cache/metawiki 에서도 파일을 읽지 못하는 것 같습니다. 혹 gdbm 이 아니라 dbm 을 사용하기 때문일까요? 생성된 db 의 이름도 조금 다른 것이 의심스럽습니다.
config.php에 dba_type 변수가 있는지 확인해보세요. 그것과 완전히 일치해야 합니다. 만약 $dba_type값이 지정이 안되어있다면 그것은 php의 dba모듈이 설치되지 않아서 그렇습니다.
기본값은 'gdbm' 인데, 제가 'dbm' 으로 변경하였습니다. 또한 $shared_metadb 도 처음에는 $data_dir.'/metadb.cache'; 인것을 $shared_metadb=$data_dir.'/metadb.cache.db'; 로 바꾸었습니다. 그래도 못읽어 주네요. 데이터를 잘 access 하는지, dba 모듈이 설치되어있는지 확인할 방법이 없을까요?
Q: NoSmoke›1 python metaparse.py 하면, You are not allowed to 'titleindex' 에러가 나옵니다. 페이지의 이름은 TitleIndex 인데, 뭔가 잘못되었나요? sistermap.txt 에는 NoSmoke http://no-smok.net/nsmk/ 가 있습니다.

A: 노스모크의 문제입니다. 로그인한 사용자면 허용되게끔 되어있어서 그렇습니다. 로그인하신 후에 그냥 action=titleindex 페이지를 긁어서 data/cache/ NoSmoke›1 파일로 저장하셔도 될것입니다.

Q: 맥에서 SisterWiki 를 사용하려고 합니다. metaparse.py 를 약간 바꾼다음에 돌려보면 일단은 잘 동작하는 것 같습니다.

$use_sistersites=1;
$use_twinpages=1;
$dba_type='dbm';
$shared_metadb=$data_dir.'/metadb.cache';

sistermap 은 다음과 같습니다.
NoSmoke http://no-smok.net/nsmk/ 
MoniWiki http://moniwiki.kldp.org/wiki.php/ 
WikiPedia http://www.wikipedia.org/wiki/ PediaWiki
Wiki http://c2.com/cgi/wiki? Wiki
KTUG http://faq.ktug.or.kr/mywiki/

Fetching http://no-smok.net/nsmk/?action=titleindex
  getting 4713 bytes:
    0K -> .                                                      [100%]

Processing MoniWiki:MoinMoin
Fetching http://moniwiki.sf.net/wiki.php/?action=titleindex
...
Processing WikiPedia:PediaWiki
Fetching http://www.wikipedia.org/wiki/Special:Allpages
  getting 51039 bytes:
    0K -> .......                                                [100%]

Processing WikiPedia:PediaWiki
Fetching http://www.wikipedia.org/wiki/Special:Allpages
  getting 51039 bytes:
    0K -> .......                                                [100%]

보면 metadb.cache가 아니라 metadb.cache.db 가 생성되어 있습니다. (68K) cache/metawiki 에도 MoniWiki(12K), WikiPedia›2 (0K, 생각해 보니까 너무 커서 그런것 같습니다) 도 생성되어 있습니다. 내용도 잘 읽혀져 있고요.
모니위키 URL은 http://moniwiki.kldp.org/wiki.php/ 입니다~
앗, 그렇군요. sistermap.txt.sample 을 변경했는데 주의깊게 보지 않았습니다.

문제는 되는 페이지가 있고 그렇지 못한 페이지도 있다는 것입니다. 예를 들어서 MoniWikiSisterWiki 를 잘 잡아주는데 SisterWiki 는 그렇지 못합니다. (지금보니까 MoniWiki 하나만 SisterWiki 가 있네요)
cache/metawiki/* 파일은 텍스트파일입니다. 그 파일에는 페이지목록이 들어있는데 그게 아무 내용이 없다는 것은 페이지 목록이 제대로 받아지지 않은 것이죠.
모니위키하고 C2는 잘 읽었는데, 위키피디아는 너무커서 그런지 크기가 0 이네요. 그리고 NoSmoke›1
You are not allowed to 'titleindex'

You are not allowed to 'titleindex' on this page.
Please Login or make your ID on this Wiki
에러를 내네요. KTUG 은 png 파일이 들어 있습니다.

KTUG는 [http]http://faq.ktug.or.kr/faq/ 입니다. 아마 몇년전에 바뀌었지요ㅋ

CVS에서 Media위키 (WikiPedia›2)에 대한 패치를 적용했습니다. 주의하셔야 할 점은, WikiPedia›2의 경우 그 크기가 무려 600MB나 되게 된다는 것이고 다운받는 시간도 하루 혹은 반나절 이상 걸립니다.

  1. sistermap.txt 를 받아 볼 수 있을까요?
    아마 똑같을겁니다. 여기는 아주 오래전에 (몇년전에) 생성된 것입니다. sistermap.txt를 그동안 전혀 건드리지 않았기때문에..

A: 현재 metaparse.py는 WikiPedia›2를 읽지 못하고 있습니다.

WikiPedia›2 가 좀 자주 고쳐지는 편이더군요. 최근에 제대로 작동하지 않는것을 발견하고 고쳤는데, 페이지 리스트 다운로드 받는데 무려 하루정도 걸리고 metadb.cache 파일은 400MB나 되더군요ㅋㅋ metaparse.py 현재 버전은 문제있습니다. 몇가지 테스트를 한 후에 CVS에 올릴것입니다

CVS에서 고쳤습니다.

Q: SisterWikiTwinPages를 특정 페이지에서 끄고 싶습니다. 예를들면 TitleIndex와 같은 시스템 페이지에서 말입니다. 위키의 기반이 되는 이런 페이지들은 밑에 주렁주렁 다 달려서 너무 길어집니다. 끄고 싶을때 쓰는것 있나요? 그리고 전체에서 끄는 변수도 알려주세요
  • A: 전체적으로 끄려면. config.php에서 $shared_metadb=0;으로 하거나, data/metadb.cache를 지웁니다.
  • 특정 페이지에 기능을 끄고 싶으면 #notwins를 페이지 맨 상단에 첨가합니다.

metaparse.py를 bsddb 그대로 성공했는데, sisterwiki가 뜨지 않습니다. php는 --enable-dba=shared라고 phpinfo에 나옵니다. function_exists()가 실패하는데 뭐가 잘못된 건가요? -- TwinPages:kz 전에 말씀드렸지만, 사용하시는 PHP oops는 dba모듈이 없습니다. (--enable-dba=shared옵션을 붙여서 컴파일 했으나, /usr/lib/libdb*.so 혹은 db3-devel같은 것이 없는 채로 컴파일이 되어서 모듈이 아예 포함되지 않은 것이죠) oops PHP 대신에 패키지에서 공급하는 기본 PHP를 까시던지, dba모듈만을 따로 extension으로 컴파일 해서 /usr/lib/php4에 넣어주면 됩니다. -- WkPark /!\ oops는 protector patch가 들어가서, 다른 데서 공급하는 패키지는 깔지 말라고 합니다. 안 맞는다네요.
안 맞는다기 보다는 protector patch를 애써 넣어 놓은 것이 무용지물이 된다는 뜻이겠지요 :)

php-gdbm-4.3.1-2kr 패키지가 깔려는 있었는데, php.ini에 주석 처리가 되어 있었습니다. 주석을 푸니까 일단 dba_open가 있긴 있습니다. config.php:$dba_type='gdbm';한 다음에 metaparse.py를 bsddb->gdbm으로 바꾸고 실행해보니 됩니다.


metaparse.py WikiName으로 해당 사이트만 업데이트 할 수 있으면 좋겠습니다. 하나 추가할 때마다 (서른 개가 넘는 걸) 모두 긁자니 귀찮아서요. 그리고 특정 사이트가 죽었을 때 거기에 접근하면 한참 기다리다 실패합니다. 실패했을 때 다음으로 넘어가게 하면 좋겠습니다.

옙. -- WkPark

Q :$dba_type 이 gdbm 이나 db3 로만 해야 동작하나요? 설치된 것이 db2와 ndbm은 php와 연동되었고 여기서 언급한 gdbm, db3는 깔기만한체 php와는 연동되지 않았습니다. 그래서 그런지, 동작이 안되드라구요. --enable-dba=shared 도 해야하는건가요?.... 혹시 데비안을 쓰신다면 db3 내지gdbm 이 포함되어있는 php 패키지 이름을 아시나요? 컴파일 해야하는건가요..;; 질문이 다소 이해가 가지 않으시련지요; A : php는 dba를 지원해야 합니다. ndbm모듈과 dba모듈은 따로 있습니다. ndbm을 지원한다고 해도 dba를 지원하지 않으면 안됩니다. 그냥 모듈로 설치하시려면, php소스를 받아다가 php-3.x.x/ext/dba 디렉토리로 들어가서 phpize; make 해서 dba.so를 얻어낸 후(???) 이것을 php모듈 디렉토리로 복사하고 php.ini를 설정하면 되었던 것으로 기억합니다. (데비안은 안 써봐서 몰라요 =3=3) 그리고, SisterWiki의 metadb는 현재 bsddb(db3가 기본)와 gdbm만 지원하기때문에 SisterWiki를 쓰기 위해서는 db3 혹은 gdbm을 지원해야 합니다. python에서 db2혹은 ndbm을 지원하는 방법을 모르기때문에 data/metaparse.py는 그렇습니다. ^^;; -- WkPark

Q : MySQL›3은 있지만 gdbm이나 db3같이 파일 기반의 데이터베이스는 지원하지 않은 곳이 있습니다. 그냥 차라리 다음 버젼에 MoniWiki가 아예 RCS까지 모조리 MySQL›3같이 범용 데이터베이스를 최대한 사용해서 저장하고 관리하는 쪽으로 나갔으면 합니다. 그게 차라리 나은거 같네요. 시스템관리자가 gdbm같은건 안쓴다고 가정하고 컴파일해서 설치해 놓으면 다시 이거 하나때문에 해달라기는 좀 어렵거든요.. ex) people.kldp.org 의 계정의 경우가.. -_-;; -- minsu

A: db3나 gdbm을 지원하도록 요청하세요. RCS나 CVS같은 안정된 버전관리 시스템을 두고 tavi나 phpwiki처럼 SQL으로 버전관리시스템을 새로 고안할 계획은 전혀 없습니다. 개발이 쉬울지 설치가 쉬울지 생각해보세요. SQL은 캐쉬나 서치를 위해 활용할 것입니다. -- WkPark

Q: do_titleindex()에서 getPageLists()에다 metadb->getAllPages()까지 붙여서 시도를 해봤습니다. 그랬더니 메모리가 부족하다고 죽네요. -_-; 정확히 걸리는 부분은 MetaDB 클래스의 getAllPages() 메쏘드에서 배열로 하나씩 페이지명을 저장해서 넘기는 부분입니다. 확실히 메모리를 많이 먹을 수 밖에 없는 부분이긴 한데, 메모리 의존적이지 않게 바꿀 수 없을까요?

A: 읽고 쓰고 읽고 쓰고 하면 가능은 하겠지만, 이것은 그다지 권장될만한 것 같지는 않습니다. WikiPedia›2같은 것이 같이 들어있을 경우, 텍스트파일만 무려 400MB가 되고 DB파일로 변환하면 600MB나 되더군요. 대안은?? 잘 모르겠네요.

Q: 말씀하신대로 python metaparse.py -g 를 통해 metadb.cache 파일을 만든 상황입니다. SisterWiki가 제대로 동작하는지는 어떻게 살펴볼 수 있나요? 그냥 바로 페이지를 열어보면, 관련된 페이지 이름의 외부 페이지 리스트가 뜨는 게 맞나요? 아니면, 어떠한 키워드를 넣어줘야 되나요? [http]관련 페이지 잘 모르겠네요. 답변 해주실 수 있죠? ^^ -- ntames8

A: 자신의 위키에 없는 페이지이면서 다른 위키에 있는 경우, 혹은 자신의 위키에도 있고 다른 SisterWiki에도 있는 경우에 맨 하단에 TwinPage목록이 뜨게됩니다.



----
Sister Sites Index
 
captcha
Username:
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-01-29 18:45:35
Processing time 0.2279 sec