1.1.1. 파이썬이 깔려있지 않은 계정에서 노스모크모인모인 사용하는 방법 ¶
A.2 아무곳이나 C언어 컴파일러를 사용할 수 있게 해주는 곳을 선택하십시오. 대부분의 쉘 계정은 이를 허용합니다. http://www.python.org 에서 소스 코드를 다운 받아서 직접 컴파일해 쓰십시오. 컴파일은 간단하며 5분도 걸리지 않습니다. 컴파일시
--prefix=somewhere
라는 옵션을 주면, somewhere라는 디렉토리 밑에 파이썬이 깔립니다.1.2.1. 웹 브라우저 상에서 보면은 moin.cgi 파일이 소스만 보인다 ¶
아파치에서 CGI를 활성화 시켜야 한다.
AddHandler cgi-script .cgi
줄이 httpd.conf에 있어야 한다.1.2.2. 페이지를 열 때마다 한글이 깨져서 나온다. Character Coding이 Western으로 설정이 되어버린다 ¶
아파치 설정 파일에서 다음 라인을 찾아 그 라인의 앞에 #를 붙여 비활성화시킨다.
#AddDefaultCharset ISO-8859-1
1.2.4. 퍼미션suexec 관련 ¶
퍼미션 에러가 납니다. ls -al 로 살펴본 결과 501 입니다. 무슨무슨 화일을 어떻게 퍼미션 바꾸어야 할까요? http.conf의 설정에서는 유저도 www-data 이고 그룹도 www-data 입니다. 이것은 데비안의 기본설정입니다.
기억이 잘 안나는데 비슷한 설명이 어딘가에 있을겁니다. suexec를 안쓰시나 보군요.
root로 들어가서
root로 들어가서
# chown -R www-data.www-data data/{user,text,cache} data/editlog cache
하면 될 것같군요. 기타 여러 문제는 /var/log/httpd(혹은 apache)/error_log
를 참고하세요계속되는 답변 너무 감사합니다. 그런데 문제가 해결되지가 않는군요.. 지금 데비안 사이트쪽이랑 같이 포스팅을 하고 있는데 결과적으로 퍼미션 에러입니다. 제가 내려준 명령어는
chown -R www-data /var/www/wiki chmod +x /var/www/wiki/moin.cgi과 moin.cgi을 777로 변경했답니다. 그리고 데비안에서는 suexec를 기본적으로 쓰게 컴파일 한답니다. 님이 가르쳐 주신 명령중에서
# chmod -R 755 www-data.www-data data/{user,text,cache} data/editlog cache에서 {}가 이해가 되지 않아서 못해봤답니다. 계속되는 답변 너무 감사드립니다
suexec로 되어있다면 777로 변경하면 안됩니다. suexec_log에 에러가 기록되어 있을겁니다. 그리고, 헉... chown -R www-data.www-data (유저와 그룹을 함께 지정할 때 하는 방법) chmod -R 777을 섞어 썼군요 ㅡㅡ;; 다 무시하세요.
suexec가 설정되어 있다면, 파일들은 744 디렉토리는 755로 moin.cgi도 755로 하고 유저,그룹은 자신의 것으로 변경하셔야 합니다. (/var/log/apache(혹은 httpd?)/suexec_log를 살펴보세요)
1.2.5. Premature end of script headers ¶
Premature end of script headers: /home/user/www/wiki/moin.cgi 라는 에러로 500 Internal server에러가 나는 경우.
일단 웹서버의 에러 로그를 살펴보아야 한다.
- 에러 로그에서 파이썬 exception일 경우 그 메시지가 적혀 있으므로 그 메시지를 바탕으로 문제를 해결한다.
- suexec를 쓰는 경우에는 스크립트가 들어있는 디렉토리의 그룹 쓰기 권한이 writable이 되면 안 된다. (Premature end of script headers on everything의 Article #9758을 참고)
1.2.6. NotImplementedError: Unsupported web interface ¶
아파치에 mod_python이라던가 하는 것이 설치되어있을 경우 발생하는 현상이다.
webapi/init.py에서
# load the appropriate interface here if os.environ.get('GATEWAY_INTERFACE') == 'CGI/1.1': from cgiMoin import * else: raise NotImplementedError("Unsupported web interface")위 부분을 다음과 같이 주석처리한다. 주석처리할 때
from cgiMoin import *
부분의 들여쓰기를 당겨줘야한다는 것에 유념.# load the appropriate interface here #if os.environ.get('GATEWAY_INTERFACE') == 'CGI/1.1': from cgiMoin import * #else: # raise NotImplementedError("Unsupported web interface")
1.3.1. 윈도우즈 서버(IIS)에서 텍스트 파일 업로드만 되고 이진 파일 업로드는 되지 않는 경우 ¶
moin.cgi 파일의 첫 라인(#!/path/python.exe)에 옵션 -u를 붙인다.
#!/path/python.exe -u
이런 식으로.python.org에서 찾아보면
The -u (unbuffered) option on NT and win95 prevents the interpreter from altering newlines in the standard input and output. Without it post/multipart requests will seem to have the wrong length and binary (eg, GIF) responses may get garbled (resulting in, eg, a "broken image").
라고 되어다이렇게 해도 되지 않을 경우에는 IIS에서 CGI 매핑할때
~/Python.exe -u %s %s
로 해야한다.1.3.2. IIS에서 파일 업로드할 때 CGI timeout이 뜨는 경우 ¶
IIS에서는 무한루프에 걸리는 것을 방지하기 위해 스크립트 타임아웃을 쓰는 것이므로 IIS의 설정을 바꾸면 된다.
2.1.1. Index Error: string index out of range ¶
페이지에서 제목 태그(= 등)이 하나라도 쓰일 경우 발생.
파이썬 2.1이하에서 2.2 로 넘어오면서 dictionary.items() 의 순서가 바뀌어서 발생하는 현상이다. MoinMoin의 구현이 items의 순서에 의존 했기 때문에 parser/wiki.py에서 다음 부분을 고쳐야 한다.
formatting_rules에서 hmarker앞에 밑줄 (?P<heading>^\s*(?P<_hmarker>=+)\s.*\s(?P=_hmarker) $) ---- replace에서 _로 시작하는 아이템은 생략 def replace(self, match): matched=match.groupdict().items() matchedItemsToReplace=filter(lambda item:item[0][0]!='_',matched) for type, hit in matchedItemsToReplace:
위처럼 수정해도 안 되는 경우에는 다음 fix를 적용시킨다.
2.1.2. IO Error: Disk quota exceeded ¶
계정에 허용된 디스크 사용량을 초과했을 경우. 불필요한 파일을 정리해서 용량을 확보해야 한다. 모인모인을 오랜 기간 운영했을 경우 data/backup 디렉토리에 너무 많은 파일이 쌓여있는 경우가 있다. 노스모크모인모인/팁의 백업 지우기 스크립트를 사용하라.
2.3.1. UploadFile 매크로에서 보이는 파일 목록의 링크 위치가 올바르지 않다 ¶
업로드된 파일 리스트는
"config.url_prefix"/"config.upload_dir"/"filename"
의 URL로 구성된다.moin_config.py에서 url_prefix와 data_dir만 제대로 설정해 주면 정상 작동한니다. 단, url_prefix를 공백으로 하면 안 된다.
2.4.3. 회원 관리 ¶
Q: 제로보드 회원방식과는 별개로 회원가입/관리를 해야하는가?
A. 제로보드와 호환될 수 없고, 제로보드식의 회원 관리 방법을 제공하지도 않는다. 편집 권한 제어를 해야한다면 수동으로 사용자 아이디를 moin_config.py에 써줘야한다.
2.4.4. 불필요한 WikiSeed는 어떻게 해야하는가? ¶
- TitleIndex로 들어가서 일일이 DeletePage로 지운다.
- 쉘에서 data/text 로 들어가서 rm으로 지운다. 시스템 관련 페이지까지 지울 수 있으니 주의해야 한다.
- 그냥 놔두고 신경 쓰지 않는다.
2.4.5. 아이디 생성을 제한하기 ¶
Q : 설치후에 개인적으로 사용하기 위해 사용사의 추가 프로파일 생성을 막으려면 어떻게 해야하나?
A : 설정을 통해 막는 기능은 제공하지 않지만, 소스에서 UserPreferences의 Create Profile 버튼이 표시되는 부분을 제거하는 꽁수를 쓰면 된다.
2.4.6. 회원만 글 내용 수정할 수 있게 하기 ¶
moin_config.py에 변수 3개를 설정한다.
access_requires_login, edit_requires_login : 이 둘은 0 혹은 1의 값을 가지게 한다.
guestbook_page : 회원이 아니더라도 편집할 수 있는 페이지의 이름을 튜플로 넣어준다.
access_requires_login, edit_requires_login : 이 둘은 0 혹은 1의 값을 가지게 한다.
guestbook_page : 회원이 아니더라도 편집할 수 있는 페이지의 이름을 튜플로 넣어준다.
그리고 Page.py에서 send_editor에서 다음 코드를 찾아보면 된다.
if not config.access_requires_login and config.edit_requires_login and (self.page_name not in config.guestbook_page) and (not user.current.valid): Page(self.page_name).send_page(form, msg='<strong>%s</strong>' % user.current.text('<b>Please <a href="UserPreferences">log in</a> before editing</b>')) return
튜플은 파이썬 기본 데이터 타입의 하나를 말하는데,
tuple=(1,2,3)
처럼 괄호와 , 로 만든다. 항목이 1개만 있을 때도 (1,) 식으로 , 를 넣어줘야 한다.2.4.7. 이모티콘 이미지 바꾸기, 추가하기 ¶
이미지를 바꿀 때는 img 디렉토리에 같은 이름의 파일로 덮어씌우면 된다.
추가할 때는 wikiutil.py 소스를 수정하면 된다.
추가할 때는 wikiutil.py 소스를 수정하면 된다.
2.4.8. 백업 파일(히스토리)이 너무 많아서 rm -f *으로 지워지지 않는다 ¶
몇 달만에 히스토리를 삭제하려고
cd public_html/cgi-bin/data/backup && rm -f *
을 했는데, /bin/rm: Arg list too long
이라는 메세지가 뜬다.쉘에서 쓰이는 * 문자는 일정 갯수를 넘는 파일을 처리하지 못하기 때문에 뜨는 메세지다. 대처법은
- GUI FTP 클라이언트로 접속해서 파일목록을 보고 지운다.
- find를 사용한다.
find public_html/cgi-bin/data/backup -exec rm {} \;
2.4.11. 위키네임 뒤에 붙는 빨간 물음표를 없애려면? ¶
- {{{내용}}} 형식으로, 원하는 단어를 중괄호를 사용하여 묶는다.
- #format plan 을 페이지 처음에 적는다.
- 여섯따옴표를 사용하여 원하는 단어를 묶는다.
- 소스 고칠 필요없이 moin_config.py 에서 nonexist_qm = 0 으로 설정.