· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/Majordomo-KLDP

메이저도모 하우투

메이저도모 하우투

메이저도모 설치, 관리 및 그 사용법

심상현 artsilly@kuls.korea.ac.kr

1999년 9월 30일 v0.8 (레드햇 6.0 문제 해결판 ^^)
이 문서는 메일링 리스트에 대한 간략한 정보와 리눅스 시스템에서 널리 쓰이고 있는 메일링 리스트 매니저(MLM)인 메이저도모를 설치, 운영하는 방법에 대해 담고 있다.

1. Quick Links

아직까지는 HTML 버전에서만 Quick Links 가 가능합니다. 문서의 작성이 정리되면 몇째줄에 있다는 식으로 명시하도록 하죠. 여기에 있는 것은 여러 질문이 많이 나오는 내용에 대한 것입니다.

2. 문서의 소개

2.1 작성동기

학교 학회에서 졸업한 선배들과의 긴요한 연락을 위해 메일링리스트를 운영하려 했는데 메이저도모의 설치가 그리 간단하지 않았다. 함께 제공되는 문서를 읽어보는 것도 시간이 오래 걸리고 그리 쉽지 않았다 - 영어니까 ^^;;. 설정이 올바로 되지 않아, 메일이 보낸 사람에게 되돌아 가거나 없어져 버리곤 했다. 혹은 아예 메일링리스트 관리자에게 메일을 보내지 못하는 일까지 있었다! 이에 설치했던 경험을 살려 새로 메일링 리스트를 운영하려는 리눅서를 위해 도움이 될까 하고 이 문서를 작성하게 되었다.

2.2 이 문서의 최신 버전

이 문서의 최신 버전은 http://kulsnet.korea.ac.kr/~artsilly/을 통해서 txt, html 형식과 두 형식을 압축한 tgz파일로 구할 수 있다. 또한 어느 정도 문서의 신뢰성이 갖추어진다면, 리눅스 한글문서 프로젝트 http://kldp.linux-kr.org를 통해서도 문서를 구할 수 있을 것이다. 정식버전 이전에는 홈페이지를 이용하기 바란다.

이 문서의 버전 정보 및 변경사항은 말미의 버전정보를 참고하기 바란다.

2.3 저작권

This document is copyrighted (C) 1999 Korea University Linux Study, KULS. Distributed under LDP copyright license.

특별한 말이 없을 경우 리눅스 하우투 문서의 저작권은 그 문서를 작성한 사람에게 있다. 리눅스의 하우투 문서는 여러가지 방법을 통해 일부나 전체를 임의로 바꾸거나 배포할 수 있다. 상업적인 재 배포 역시 권장되고 허락된다. 그러나 그럴 상황이 되면 꼭 필자에게 공적으로 연락해 주길 바란다. 이 문서에 대한 번역이나 이 문서로부터의 발췌, 혹은 재 편집에 대한 내용에도 저작권을 꼭 표시해 주기 바란다. 다른 리눅스 하우투 문서 역시 이런 규칙을 지켜주기 바란다. 규칙을 지키지 않고는 이 글을 이용한 다른 문서의 작성은 허용되지 않는다. 특정 상황 하에서 예외가 인정될 수 있다. - 이 경우는 리눅스 하우투 관리자와 접촉하기 바란다. 결론적으로 많은 방법으로 이 문서가 배포되고 전달되기를 바란다. 그러나 모든 경우에 있어서 저작권을 표시해 주고 재배포시는 필자에게 통보해주길 바란다.

2.4 도움을 주신 분들

이 문서를 작성하는 동안 많은 분들이 E메일과 비비에스, 유즈넷을 통해 필자가 알지 못하는 점에 대한 정보를 주거나, 문서의 내용을 검증해 주었다. 문서 곳곳에서 도움을 주신분의 이름을 찾을 수 있다. 특별히 언급하지 않았어도 많은 질문을 통해 좀 더 창조적인 생각과 여러 테스트를 하게 해주신 분들께 감사의 말을 전한다.

그밖에 이 문서를 시작하는 계기가 되게 해 준 꼬마전구의 모든 사람들과 조그마한 그 사람에게 감사드린다.

3. 시작하기

3.1 메일링 리스트란 무엇인가?

메일링 리스트는 일정 주제에 대해 관심이 있는 사람들이 그 주제에 대해 메일을 통해 서로의 생각을 나누는 일종의 토론 그룹이다. 토론 그룹은 유즈넷이나, 비비에스등의 다른 방법을 통해서도 구현되고 있으며 메일링 리스트 역시 이런 토론 그룹과 크게 다르지 않다. 다른 토론 그룹과 비교하자면 다음과 같은 특징을 지녔다고 할 수 있다.

  1. 메일링 리스트는 어느 정도 수동적이다. 다른 사람들의 의견이나 정보를 수집하는 경우, 유즈넷이나 비비에스는 직접 접속하여 관심있는 분야를 찾아가야 하지만, 메일링 리스트는 한번 가입하고는 가만히 앉아 기다리기만 하면 된다. 그것으로 끝이다.
  2. 메일링 리스트는 서버 공간을 거의 필요로 하지 않는다. 유즈넷이나 비비에스를 운영하기 위해서는 그 내용을 저장할 서버의 물리적인 저장장치를 필요로 하지만 - 때로는 엄청난 용량의 저장장치를 - 메일링 리스트 서버는 메일을 받아 각 가입자에게 전달하기만 하면 된다. 즉 데이터가 서버에 머물러 있지 않는다. 각 가입자는 자신의 필요에 따라 자신의 공간에 주어진 데이터를 삭제하거나 보존하거나 자신의 판단에 맡기면 된다.(많은 경우에 데이터를 저장할 수 있게 세팅하기도 한다.)
  3. 운영 방식에 따라서는 가입자의 참여를 막아 읽기 전용 메일링 리스트 형태로도 변형 가능하다. 이 경우에는 일방적인 정보, 소식등의 전달 목적으로 쓰이게 된다. 주로 사업체에서 소비자를 상대로 최신 정보를 알려주기 위해 쓰이나 나름대로 사내신문이나, 학과 소식등의 목적으로도 사용가능하다.
  4. 메일링 리스트의 정보는 현재적이며 일시적이다. 메일링 리스트 관리자가 가입 이전에 보내졌던 메일을 보관해 놓지 않는 이상 가입 이전의 메일에 대해서는 어떠한 정보도 얻을 수 없다.(이것 역시 서버 운영자가 충분히 고려한다면 이전 정보를 얻을 수도 있다. 이것에 대해서는 추후 설명하도록 한다.)
  5. 메일링 리스트는 사용자가 메일을 실시간으로 받아볼 수 있다면 함께 나누는 내용을 거의 바로 받아 볼 수 있다. 메일링 리스트가 설치 되어 있는 시스템의 설정이나 랜 환경등이 중대한 변수가 되겠지만 메일링 리스트를 이용한 토론그룹은 다른 토론그룹에 비해 대화의 내용이 빠르다.

3.2 왜 메일링 리스트 매니저(MLM)를 써야하는가?

여러 사람이 어떤 주제에 대해 메일을 통해 대화를 나눈다고 생각해 보자. 몇몇 안되는 사람 사이라면 각기 메일을 보낼 때 cc:(카본 카피 - 복사본을 보낼 대상)나 bcc:(블라인드 카본 카피 - 복사본을 받은 사람이 복사본을 받은 다른 사람을 알 수 없음)를 이용하여 충분히 서로간에 메일을 주고 받을 수 있다. 그러나 그 메일에 참여하는 사람들이 많아진다면 매번 cc:bcc:를 쓰는 것은 매우 번잡스러운 일이 될 것이다. 게다가 누군가가 그 리스트에 새로 참여 하고자 한다면 모든 리스트의 사용자가 추가를 해주는 노력을 해야 할 것이다. 메일링 리스트 매니저는 이러한 과정을 쉽고 편하게 해주는 프로그램이다. 또한 부가적으로 다음과 같은 기능을 얻을 수 있다.

  1. 여러 곳으로 메일을 보낼 필요 없이(즉 cc:나 bcc:가 필요 없이) MLM이 관리하는 한 곳에 메일을 보냄으로 그 메일링 리스트에 가입한 모든 사람에게 메일을 보낼 수 있다.
  2. 메일링 리스트에 참여, 탈퇴하고자하는 사람을 자동으로 처리해 준다. 뿐만 아니라 메일링 리스트를 체계적으로 관리할 수 있게 해줌으로 여러 유용하고 귀찮은 일을 대신 해준다. 또한 그 동안 주고 받은 메일을 보관하는 작업까지도 해 준다.
  3. 설정을 통해 읽기 전용 메일링 리스트로 만들거나, 모데레이트(검증 후 중계기능), 머리말 꼬리말 추가 기능, 스팸 방지 기능등 꽤나 쓸모있는 기능들을 제공해 준다.
  4. 관리자가 메일을 통해서 메일링 리스트를 설정할 수 있는 기능을 제공해 준다.
  5. 웹, ftp, 유즈넷등과 연동하여 메일링 리스트를 운영하도록 해 준다.

3.3 왜 메이저도모인가?

리눅스에서 사용가능한 메일링 리스트 매니저로는 본 문서에서 다룰 메이저도모를 비롯하여, 리스트서브(LISTSERV), 리스트프로크(Listproc), 스마트 리스트(SmartList)등 몇몇 가지가 있다. 선택하는 기준으로는 여러가지가 있겠지만 다음과 같은 것들을 일반적으로 생각해 봐야 할 것이다.

  • 상용이냐 프리냐?
  • 어느 정도의 가입자를 처리할 수 있느냐?
  • 사용하기에 편리한가?
  • 소스가 공개되어 있어 나의 목적에 맞게 변환 가능한가?
  • 시스템에 무리를 주지 않는가?
  • 여러 다양한 시스템에서 사용 가능한가?

메이저도모는 위의 기준에 맞추어 보았을 때, 리눅스 사용자들에게 꽤나 적합한 프로그램이라 할 수 있겠다. 우선 GPL을 따르는 프로그램이고, 소스가 공개되어 있어 특정 목적에 맞추어 변경가능하다(한글 명령어 지원등). 물론 사용하기에 무리 없을 정도의 가입자를 수용할 수 있다. 게다가 메이저도모는 시스템 자원을 안쓰기로 유명한 프로그램이다.(Mailing list management software FAQ 에서 인용) 또한 메이저도모는 Perl로 쓰여진 프로그램이다. 다양한 시스템에서 범용적으로 쓰이는 Perl을 사용하기 때문에 다양한 Unix 시스템에서 사용이 가능하다. 물론 요즘과 같이 자고 일어나면 버전이 바뀌는 레드햇 배포판의 홍수에서도 특별히 새로 컴파일 하거나 할 일이 거의 없다.

마지막으로 메이저도모는 한국에서 운영되고 있는 메일링 리스트에서 광범위하게 쓰여지고 있어 여러모로 편리할 것이다. 또한 메이저도모와 웹을 연동하는 여러 프로젝트가 진행되고 있으므로 요즘에 유행하는 웹 인터페이스를 지원하기에도 쉬울 것이다. 다음의 URL을 참고하기 바란다.

만일 유즈넷과의 연동을 준비한다면 newsgate라는 프로그램을 이용할 수도 있을 것이다.

각 메일링 리스트에 대해 좀 더 알고 싶다면 ftp://ftp.uu.net/usenet/news.answers/mail/list-admin/software-faq을 구해 읽어보기 바란다. 각각의 MLM에 대해서 비교와, 소개를 한 문서이다.

마지막으로 메이저도모를 이용하다가 생기는 여러 오류들에 대해서는 메이저도모와 함께 배포되는 FAQ를 반드시 참조하기 바란다. 가장 최신의 FAQ는 http://www.greatcircle.com/majordomo/majordomo-faq.html에서 구할 수 있다.

3.4 메이저도모 구하기, 그밖의 프로그램들.

이 문서를 작성하는 시점에서 메이저도모의 최신 버전은 1.94.4였으며 곧 2.0 버전이 나올 것이라는 프로그램 제작자의 홍보가 있었다. 메이저도모는 다음 공식 ftp를 비롯한 여러 미러 사이트에서 구할 수 있다. ftp://ftp.greatcircle.com/pub/majordomo 또한 홈페이지에서는 메이저도모에 대한 내용을 알아볼 수 있다. http://www.greatcircle.com/majordomo/

레드햇 사용자일 경우 레드햇사의 ftp를 통해 RPM으로도 구할 수 있다. 레드햇 4.x대의 사용자는 ftp://contrib.redhat.com/libc5/RPMS/ 에서 레드햇 5.x대의 사용자는 ftp://contrib.redhat.com/libc6/RPMS/ 에서 구할 수 있다. 레드햇의 미러 사이트는 http://www.redhat.com을 통해 알아보기 바란다. 우리나라의 인증 미러 사이트는 보라넷이다.

데비안 패키지 역시 쉽게 구할 수 있다. 그러나 데비안에서는 메이저도모를 설치하는 것이 그리 쉽지 않다. 오히려 데비안에서 권장하는 스마트리스트(SmartList)를 권한다. 뒤에 나오는 '데비안 사용자는' 절을 참고하라.

이 문서에서는 메이저도모와 sendmail을 연동하는 것에 대해 설명한다. 다른 MTA를 사용할 경우에는 조금 다른 설정이 필요할 것이다. Exim과 Qmail에 대한 프로젝트가 진행중에 있다.

메이저도모는 펄 스크립트(Perl Script - 아하 펄)로 이루어진 프로그램이다. 메이저도모를 사용할 리눅스 박스에 펄이 없다면 프로그램이 실행되지 않을 것이다. 다음의 명령으로 리눅스 박스에 펄이 설치되어 있는지 확인해 보라.

[root@kuls /root]# find / -name perl

일반적인 배포본이라면 /usr/bin 에 위치하며 다음과 같이 하여도 될 것이다.

[root@kuls /root]# whereis perl

펄을 찾으면 펄이 있는 디렉토리를 보여 줄 것이다. 그러면

[root@kuls /root]# 펄의 패스/perl -V

을 통해 버전을 확인한다. 펄이 없다면 펄을 구해서 설치 해야 한다.

펄의 버전은 4.019이상 이어야 한다.(1.94.4버전에서). 펄의 버전이 4.019 이하라면 설치과정에서 에러를 내며 설치가 되지 않을 것이다. 최신 버전의 white펄로 업그레이드 하기 바란다. 펄의 최신버전은 5.x 일 것이다. 펄 5는 현재 진행형으로 만들어지고 디버깅하고 있는 버전이기 때문에 좀 더 신중하게 선택해야 한다. 메이저도모 2.0버전부터는 펄4에 대한 지원을 더 이상 하지 않겠다고 했다. 게다가 펄을 쓰는 다른 프로그램들도 펄5 환경으로 거의 옮겨진 상태이므로 펄5로 업그레이드 하는 것은 좋은 생각이다. 아마도 배포본으로 구입한 리눅스를 쓰고 있다면 거의 대부분이 알게 모르게 펄5를 설치해 놓고 사용중에 있을 것이다.

충분히 동작이 검증된 펄의 버전은 4.036버전과 5.002버전인다. 5.001버전에서는 동작하지 않는다!! 또한 레귤러 익스프레션의 변화가 생긴 펄 5.004 버전에서 동작시키려면 최소한 1.94.3 이상의 메이저도모를 써야 할 것이다. 또한 5.005_01 버전에서는 펄의 버그로 인해 메이저도모를 사용할 수 없다.

우리나라에서 많은 사용자층을 가지고 있는 배포본으로는 레드햇을 들 수 있다. 안타깝게도 레드햇의 몇몇 배포본에 포함된 펄에서 메이저도모가 돌아가지 않는다. 위의 펄 버전을 구하는 명령을 통해 나온 버전 정보에서 MAINT_TRIAL_4 - 5.004_05 maintenance trial 4를 발견할 수 있다면 이것은 5.004m4 버전으로 알려진 트라이얼 버전이다. 이 버전에서는 "Unknown mailer error 9" 라는 에러를 날려준다. 반드시 펄을 업그레이드 하기 바란다. 배포본으로 레드햇 5.2 가 속한다. 레드햇 5.1의 펄은 버전이 5.004_6으로 이런 문제가 생기지 않는다고 이재광 leesop@uriweb.net님께서 연락주셨다. 레드햇 5.2를 사용중인 사용자는 반드시 펄의 버전을 확인하고, 펄의 판올림을 해야 할 것이다. 레드햇 6.0 및 그것의 한글화 버전인 여러 배포본에 들어있는 펄에서는 아직 아무런 문제도 발견되지 않았다.

4. 최종점검

4.1 메일링 리스트 설치를 위해 필요한 사항

위에 언급한 것처럼 메이저도모는 펄 스크립트로 되어있기 때문에 펄이 설치되어 있어야 한다. 또한 메이저도모의 소스를 가지고 설치하려고 할 때는 gcc나 egcs와 같은 c 컴파일러가 필요하다. 메이저도모는 모두 설치하게 되면 약 500KB정도의 적은 용량만을 차지하게 됨으로 디스크 용량에 대해서는 그리 걱정할 필요가 없다. 물론 오가는 메일을 파일로 보관하겠다고 한다면 메일이 오가는 수준에 맞추어 적절한 저장공간이 필요할 것이다.

4.2 메일링 리스트 관리자 만들기

수퍼유저의 권한으로 메일링 리스트 관리자를 만들어야 한다. 보통은 majordom.daemon등으로 아이디를 만들어 준다. 그밖에 자신이 사용하기를 바라는 다양한 아이디를 사용할 수 있을 것이다.

자신의 서버에 적합한 관리자 아이디를 만드는 것도 좋을 것이다. 만일 그룹을 daemon이 아닌 다른 것으로 정했다면 메일링 리스트 관리자 ID는 반드시 /etc/senmail.cf에 있는 Trusted users 섹션에 등록이 되어 있어야 한다. 즉


##################### 
# Trusted users # 
#####################

# this is equivalent to setting class "t" 
#Ft/etc/sendmail.ct 
Troot
Tdaemon 
Tuucp 
T메일링 리스트 관리자 아이디
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

과 같이 sendmail.cf에 등록을 해 주어야 한다. 'T'를 붙여주는 것을 잊지 말자. 이 문서에서는 kulslist.daemon을 메일링 리스트 관리자로 하도록 하겠다. 사실 이 유저는 동아리에서 쓰는 아이디이다. 그룹이 daemon이기 때문에 특별히 'Trusted users' 섹션에 넣을 필요는 없다.

5. 일반적인 방법으로 설치하기

이 방법은 직접 소스를 받아 컴파일하고 설치하는 방법이다. 모든 리눅스 유저에게 유용하고 특히 슬렉웨어 사용자에게 더욱 그렇다. 내가 선호하는 방법이기도 하다. ^^; (메이저도모는 특성상 패키지 방식의 인스톨 보다는 수동으로 직접 설치하는 것이 어쩜 더 편할 지도 모르겠다.

위의 ftp사이트로부터 다운로딩한 majordomo-1.94.4.tgz를 푼다. tar.Z나 tar파일도 찾아볼 수 있다. 적당한 디렉토리 밑에 메이저도모를 푼다.

[root@kuls /root]# tar xvfz majordomo-1.94.4.tgz

다운로딩에 실패하지 않았거나 믿을 수 있는 사이트에서 받았다면 아무런 에러없이 풀릴 것이다. 메이저도모를 컴파일하고 설치하는 것은 무척이나 간단하다. 이제

[root@kuls /root]# cd majordomo-1.94.4

를 통해 메이저도모 디렉토리로 들어가 다음의 과정을 따르도록 한다.^^;;

5.1 Makefile 설정하기

지금부터는 루트 권한으로 프로그램을 설치하고, 설정한다. 개인의 디렉토리에 설치할 수도 있으나 몇몇 과정은 루트가 아니면 안된다.

그 첫째로 Makefile을 바꾸어주어야 한다. 자신에게 익숙한 에디터를 이용하여 Makefile을 연다. 우선은 Perl과 C 컴파일러에 대한 설정을 맞추어주어야 한다. C 컴파일러의 경우 일반적인 리눅스 배포본이라면 특별히 손대지 않아도 될 것이다. 펄의 경우에는 좀 더 신경을 쓰고 정확한 디렉토리를 맞추어주기 바란다. 펄의 위치를 찾는 방법은 위에서 한번 언급했다.

이제 메이저도모의 설치 디렉토리를 정해주어야 한다. 특별히 손대지 않을 경우 디폴트로 /usr/test/majordomo-1.94.4/에 설치되므로 좀더 유용한 디렉토리로 바꾸어주는 것이 좋을 것 같다. 여기서는/usr/lib/majordomo/로 설정하고 설명을 계속하겠다. 마지막으로 메일링 리스트 관리자의 UID와 GID를 적어준다. 유저 아이디와 그룹명이 아니라는 것을 명심하기 바란다. UID와 GID는 id 명령으로 알아볼 수 있다. 나머지 옵션의 경우는 리눅스에 맞추어져서 설정이 되어 있으므로 특별히 손댈 곳이 없다. 다음은 지금까지 변경한 Makefile이다.


# Put the location of your Perl binary here:
PERL = /usr/bin/perl
^^^^^^^^^^^^^^^^^^^^
# What do you call your C compiler?
CC = cc
 
# Where do you want Majordomo to be installed?  This CANNOT be the
# current directory (where you unpacked the distribution)
W_HOME = /usr/lib/majordomo
^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Where do you want man pages to be installed?
MAN = $(W_HOME)/man
#MAN = /usr/man    #이런 식으로 매뉴얼 디렉토리에 모으는 것도 좋은 생각이다.
^^^^^^^^^^^^^^^ 
# You need to have or create a user and group which majordomo will run as.
# Enter the numeric UID and GID (not their names!) here:
W_USER = 503 
W_GROUP = 2

물론 그렇겠지만, 위의 내용은 나의 시스템에 맞추어져 있다! 그냥 배껴서는 안된다.

5.2 majordomo.cf 설정하기

소스와 함께 제공되는 sample.cf를 majordomo.cf로 복사한다.

[root@kuls /root/majordomo-1.94.4]# cp sample.cf majordomo.cf

majordomo.cf에서는 다음의 내용을 고쳐야 한다.

$whereami : 메일링 리스트를 운영할 서버의 도메인 네임을 써준다.

$whoami : 메일링 리스트에서 가입자의 요청을 처리하는 메일 엘리어스, 에이전트, 디폴트 값인 majordomo를 쓰도록 하자. 반드시 "사용자@도메인이름"의 형식으로 써주어야 한다. 밑에 예제와 같이 변수 형태로 써주어도 된다.

$whoami_owner : owner라는 단어가 많이 나오는데 이에 대해서는 뒤에 설명하도록 한다. 여기에는 우리가 만든 메일링 리스트 관리자 kulslist를 써주도록 한다.

$homedir : 당연히, Makefile에서와 똑같은 곳이어야 한다.

$listdir, $log : 특별히 변경하지 않아도 된다. 설치 후 자동으로 만들어진다.

$sendmail_command : 펄의 위치 다음으로 중요하다. 펄의 위치를 확인하는 방법과 비슷한 방법을 써서 정확히 적도록 한다.


$whereami            "kuls.korea.ac.kr";       #서버이름
$whoami              "Majordomo\@$whereami"; #메일링 리스트 에이전트
#이 에이전트는 특별히 바꾸지 않는 것이 가입자들에게 편리하다.
$whoami_owner        "kulslist\@$whereami";  #메일링 리스트 에이전트 소유자(?)
$homedir             "/usr/lib/majordomo";   #Makefile에서와 같이
$listdir             "$homedir/lists";       #리스트 디렉토리
$log                 "$homedir/Log";         #로그 파일 디렉토리
$sendmail_command    "/usr/lib/sendmail";    #sendmail이 있는 위치

나머지는 아직까지 특별히 변경할 필요가 없다. 추후 필요한 경우 설정하도록 한다. 설치 과정에서는 위의 내용정도만 정확히 써 주면 될 것이다. 펄 형식에 맞게 ;를 붙이는 것을 잊지 말자.

5.3 컴파일 및 설치하기

이제 다음 명령을 통해 설치을 해야 한다. 각 과정에서 에러가 발생하지 않는다면 다음 과정으로 넘어간다. 에러가 난다면 gcc의 버전이 너무 낮거나, 펄의 위치가 잘못되었거나, Makefile이 잘못되었거나등의 원인을 찾아볼 수 있다.

[root@kuls /root/majordomo-1.94.4]# make wrapper
[root@kuls /root/majordomo-1.94.4]# make install
[root@kuls /root/majordomo-1.94.4]# make install-wrapper

중요한 것은 make wrappper;make install까지는 메일링리스트 관리자 아이디로 해도 되지만 make install-wrapper는 루트아이디로 해야 한다는 것이다. 개인의 디렉토리에 설정하더래도 이 과정은 루트가 해야 한다. 어쨌건 지금은 설치하려고 하는 사람은 쉽게 루트권한을 얻을 수 있는 사람으로 가정한다. 개인의 디렉토리에 설치하고, 루트의 도움을 받기 힘든 경우에 대해서는 문서 중간 중간에 짧게 소개하도록 하겠다.

메이저도모와 wrapper의 설치가 올바르게 되었는지 확인하기 위해서 메이저도모 디렉토리로 이동한 후 메일링 리스트 관리자나 루트가 아닌 일반계정으로 다음 명령을 수행한다. wrapper는 일종의 "권한얻기" 프로그램인데 이 프로그램이 올바로 수행되기 위해서는 일반 계정으로 동작하는지 알아봐야 하기 때문이다.

[kuls /usr/lib/majordomo]$ cd /usr/lib/majordomo
[kuls /usr/lib/majordomo]$ ./wrapper config-test

위의 명령은 설치 확인 과정인 동시에 설치의 마지막 과정을 수행한다. 메일링 리스트가 들어갈 lists 디렉토리 로그 파일, 임시 디렉토리 등을 만들고 /usr/lib/majordomo/majordomo.cf 파일을 읽어 설정을 마무리 짓는다. 테스트 되는 내용은 다음과 같이 화면으로 출력이 된다.


--------------------- Obvious things: ---------------------
------------------ environment variables ------------------
   HOME=/usr/lib/majordomo
   LOGNAME=kulslist
   MAJORDOMO_CF=/usr/lib/majordomo/majordomo.cf
   PATH=/bin:/usr/bin:/usr/ucb
   SHELL=/bin/sh
   USER=kulslist
--------------------- euid/egid checks ---------------------
   effective user  = kulslist (uid 503)
   effective group = daemon daemon (gid 2 2 )
---------------------- uid/gid checks ----------------------
   real      user  = kulslist (uid 503)
   real      group = daemon daemon (gid 2 2 )
------------------------------------------------------------
Good: 'require'd /usr/lib/majordomo/majordomo.cf okay.
Good: found ctime.pl okay.
Good: found majordomo_version.pl okay.
Good: found majordomo.pl okay.
Good: found shlock.pl okay.
Good: found config_parse.pl okay.

You're running Majordomo Version 1.94.4.

--==> Majordomo home directory is /usr/lib/majordomo.
------------------- Include directories -------------------
        /usr/lib/majordomo
        /usr/lib/perl5/5.00502/i386-linux-thread
        /usr/lib/perl5/5.00502
        /usr/lib/perl5/site_perl/5.005/i386-linux-thread
        /usr/lib/perl5/site_perl/5.005
        .
--------------------------- Home ---------------------------
Good: changedir to /usr/lib/majordomo succeeded.
Good: Created a mock lock file.
---------------------- temp directory ----------------------
Good: Created a temp file in $TMPDIR (/usr/tmp).
---------------------- list directory ----------------------
Good: list directory /usr/lib/majordomo/lists has good permissions.
--------------------------- log ---------------------------
Good: logfile /usr/lib/majordomo/Log exists and is writeable.
------------------------- Mailers -------------------------
You have defined a mailer for delivery.
Attempting to verify that this is a valid mailer...looks okay.
You have defined a mailer for delivering administrative messages.
Attempting to verify that this is a valid mailer...looks okay.
------------------ Checking majordomo.cf ------------------
Checking to see if there are new variables that should be in
your majordomo.cf file...Nope, none that I see.

Have you configured where Majordomo is?
        $whereami is kuls.korea.ac.kr
Good: yup!
----------------------- end of tests -----------------------

Nothing bad found!  Majordomo _should_ work correctly.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

밑으로는 제작자의 프로그램 제작에 사용하기 위한 레지스터 요청이 나올것이다. 특별히 숨어살고 싶은 사람이 아니라면 등록을 하기 바란다. 만일 'no'라고 대답하면 '어라? 죽고 잡냐? 잉?(Ooooh, like to live dangerously, eh?!)' 이란 메세지가 나온다.:)

에러가 나와서 멈춘다면 에러 메세지를 확인하고 위의 과정을 되풀이하기 바란다. 모든 것이 올바르게 된 것 같은데에도 잘 되지 않는다면 Makefile, majordomo.cf 그리고 wrapper config-test를 하고 나온 메세지를 캡춰한 파일 세가지를 보내주기 바란다. 최대한 도와주도록 하겠다.

5.4 sendmail 엘리어스 설정하기

만일 메일링 리스트 관리자의 그룹이 daemon이 아니라면 위에 언급하고 지나갔던 sendmail.cf에 메일링 리스트 관리자를 'Trusted user'로 등록하는 것을 잊지 말자. 지금 하는 말이 무슨 말인지 모르겠는 독자는 '메일링 리스트 관리자 만들기' 절을 다시 읽어보기 바란다.

이제는 메이저도모에 관계된 엘리어스를 sendmail의 엘리어스 파일에 추가해 주는 것이다. 일반적으로 /etc/aliases파일에 적어도 되지만, 8.6이상의 sendmail을 사용중이라면 다음과 같은 방법으로 메이저도모 디렉토리에 있는 엘리어스를 다른 파일로 추가해 주는 것으로 관리를 좀 더 깔끔하게 할 수 있다. sendmail.cf에 "OA"라인을 추가한다. 코드는 다음과 같다. 최근의 버전에서는 "O AliasFile="이라는 스타일의 옵션을 쓴다. sendmail의 메뉴얼을 참고하라.


OA/usr/lib/majordomo/majordomo.aliases

혹은


O AliasFile=/usr/lib/majordomo/majordomo.aliases

를 추가한다. 아마 자신의 sendmail.cf 가 어떤 스타일의 문법을 쓰는지 금새 알 수 있을 것이다.

이제는 majordomo.aliases 파일을 작성해야 한다. 프로그램을 설치하면 설치된 디렉토리에 majordomo.aliases가 없을 것이다. 맨손으로 시작해도 되지만 좀 더 쉽게 하기 위해 압축을 푼 디렉토리에 있는 majordomo.aliases를 메이저도모 디렉토리로 카피해서 쓰도록 하자.

[root@kuls /root/majordomo-1.94.4]# cp majordomo.aliases /usr/lib/majordomo/majordomo.aliases

만일 소유자가 메일링 리스트 관리자가 아니라면 소유자를 바꿔주도록 한다.

[kulslist@kuls majordomo]$ chown kulslist.daemon /usr/lib/majordomo/majordomo.aliases

이제 메일링 리스트 관리자로 majordomo.aliases파일을 편집하도록 한다..


majordomo:       "|/usr/lib/majordomo/wrapper majordomo"
majordomo-owner: kulslist
owner-majordomo: kulslist

test:           "|/usr/lib/majordomo/wrapper resend -l test test-list"
test-list:      :include:/usr/lib/majordomo/lists/test
owner-test:     kulslist
test-owner:     kulslist
test-request:   kulslist

위의 파일은 소스와 함께 제공되는 예제파일에서 'you' 만 'kulslist'로 바꾸고 디렉토리 설정을 위에서 설치한 디렉토리로 바꾸어 준 것 뿐이다. majordomo.aliases를 설정하는 것에 대해서는 뒤쪽에 한 챕터로 분리해서 다룰 것이다. 지금은 설치와 설치확인과정이다. test:라고 쓰인 섹션은 정말 테스트 용이다. 밑의 과정을 거치고 나면 더 이상 쓸 일이 없을 것이지만 지금은 함부로 삭제하는 일이 없도록 하자. 그러나 모든 설치가 끝나고 새로운 리스트를 만들어 본격적인 서비스를 하게 될 때에는 test를 지우도록 하자. 무심코 남겨놓은 test를 이용하여 누군가가 스팸 메일을 보내는 통로로 사용할 수도 있다.

위의 -owner 와 등에 majordomo를 쓰는 것은 치명적인 결과를 낳을 수 있다. 즉 위의 -owner 등의 앨리어스는 문제가 생기거나 결과등을 보내주는 메일 엘리어스인데 만일 그곳에다가 majordomo를 써 놓는다면 리스트의 가입 탈퇴등 리스트에 사용하는 명령들을 받는 이 majordomo라는 아이디로 메일을 보내게 된다. 이 경우 만일 문제가 생겨서 메일이 -owner에게로 포워딩 되는 경우 majordomo는 명령이 아닌 메일을 받게 되고 이 메일은 잘 못 된 형식이라고 -owner 에게 보내게 되고 이것은 다시 majordomo에게 가는 치명적인 결과를 낳게 된다. 물론 여기서는 majordomo라고 딱 잘라 말했지만 위의 majordomo.cf설정에서 $whoami를 다르게 설정한 사람은 다른 아이디가 될 것이다. 하여간 주의하기 바란다.

sendmail에서는 이 aliases들을 바이너리의 데이터 베이스로 관리한다. 위와 같이 텍스트로 제작된 aliases를 newaliases 명령을 통해 바이너리로 바꾼다. 이 명령은 루트로 해야 한다.(메이저도모를 사용하는데 있어서 루트의 권한이 필요한 경우는

  1. make wrapper-install을 할 때(혹은 개인 디렉토리가 아닌 공용디렉토리(/usr/등)에 설치한다면 설치하는 모든 과정에서)
  2. sendmail.cf를 수정할 때
  3. newaliases를 할 때
  4. sendmail을 재시작할 때

이다. 만일 루트가 한 번만 도와준다고 한다면 sendmail.cf 내에 O AutoRebuildAliase 옵션을 사용가능하게 설정해 놓아 자동으로 엘리어스를 갱신하는 것도 좋은 방법 중 하나이다.)

어쨌든 루트로 aliases를 갱신한다.

[root@kuls /root]# newaliases

이때 majordomo.aliases를 위 예제와 같이 /usr/lib/majordomo/ 에 위치시켰다면 데이터 베이스를 생성할 수 없다면서 에러를 낸다. 즉 newaliases를 해주기 전에 다음과 같이 데이터베이스 파일을 만들어 주어야 할 것이다. 이때는 반드시 root가 해주어야 한다. 일반 계정으로 하게 되면 생성이 안된다는 에러메세지를 만나게 될 것이다. 아래 majordomo.aliases.db 파일은 root.root소유에 644로 생기게 된다.

[kulslist@kuls majordomo]$ su -
[root@kuls /root]# touch /usr/lib/majordomo/majordomo.aliases.db
[root@kuls /root]# newaliases

또한 보안문제로 majordomo.aliases.db가 위치하는 디렉토리의 퍼미션 역시 주의하여야 한다. 물론 디렉토리 퍼미션을 777같은 식으로 만들지는 않으리라 믿는다. 아래와 같이 majordomo.aliases.db 파일이 올바르게 갱신되었다면 설치는 끝난 것이다.


/etc/aliases: 16 aliases, longest 17 bytes, 190 bytes total
/usr/lib/majordomo/majordomo.aliases: 15 aliases, longest 141 bytes, 782 bytes total

위에서 살펴본 내용은 대부분 메일링 리스트 관리자의 관점에서 생각한 것이다. 필자에게 온 메일중에 계정 서비스를 하는 시스템이나 자신이 관리하는 서버에 사용자가 메일링 리스트를 운영하고자 하는데 어떻게 해야 하느냐는 질문이 몇몇 왔다. 만일 위에서와 같이 자동 엘리어스 갱신 옵션을 켜 놓고, 각 메일링 리스트 관리자로 하여금 각자의 메일링 리스트 엘리어스 파일(majordomo.aliases)를 수정하게끔 했을 경우, 메일링 리스트 관리자가 악의를 품고 엘리어스를 마음대로 수정했을 경우 심각한 보안문제를 일으킬 수 있다. 따라서 메일링 리스트 관리는 시스템 관리자에 준하는 신뢰를 갖춘 사람에게 맡겨야 할 것이다.

5.5 최종점검하기

설치의 최종단계로는 다음과 같이 리스트 디렉토리에 test라는 가짜 리스트를 만들어 메이저도모를 테스트 하는 것이다. 이 리스트에 대한 엘리어스는 이미 위에서 만들어 놓았다.(혹은 만들어져 있었다.)

[kulslist@kuls majordomo]$ touch /usr/lib/majordomo/lists/test
[kulslist@kuls majordomo]$ echo 'lists' | /usr/lib/sendmail -v majordomo
               ^^^^^^^^^^^^^^^^^
              자신의 sendmail 디렉토리

위의 과정은 메일링 리스트 관리자 아이디로 하기 바란다. 더 이상 루트는 필요치 않다! 메일의 대상이 majordomo임을 명심하라! 이것은 우리가 만든 majordomo.aliases에 있는 대상중의 하나이다. 다음과 같은 메세지가 출력될 것이다.

majordomo... aliased to "|/usr/lib/majordomo/wrapper majordomo"
"|/usr/lib/majordomo/wrapper majordomo"... Connecting to prog...
                                       ^^^^^^^^^^^^^^^^^^^^^^^^^
"|/usr/lib/majordomo/wrapper majordomo"... Sent
                                       ^^^^^^^^

밑줄 친 부분을 주의해 보도록 하자. 에러가 난다면 거의 모든 경우에 밑줄친 부분에서 나게 될 것이다. 잠시 기다리면 메일이 다시 날아올 것이다. 밑줄 부분에 에러가 난다면 가끔 만나게 되는(잘못된 주소로 메일을 보냈다던지, 네트워크가 고장났던지 하는 이유로) MAILER-DAEMON 이란 작자에게서 메일이 되돌아 오게 될 것이다. 아마 밤 샐 각오하고 위의 과정을 반복하거나 모두 때려치고 밖에 나가서 술을 마셔야 할 것이다. 무언가 잘못되었다!!

그밖에 잘못된 것이 없지만 다음과 같은 메시지가 나올 수도 있다.

majordomo... aliased to "|/usr/lib/majordomo/wrapper majordomo"
"|/usr/lib/majordomo/wrapper majordomo"... Connecting to prog...
"|/usr/lib/majordomo/wrapper majordomo"... Service unavailable
postmaster... aliased to root
root... Connecting to local...
root... Sent                                         

꾸엑. 그러나 지금까지의 설정에서 잘못된 것은 없는 것 같다. 이것은 레드햇 6.0의 sendmail설정이 바뀌어서 센드메일 앨리어스를 통해 불리우는 프로그램이 과연 수행해도 좋은 프로그램인지를 확인하는 과정에서 생기는 문제이다. 실제로 문제이기 보다는 메이저도모의 wrapper 프로그램을 등록하지 않아 생기는 에러메시지이다. sendmail에 wrapper를 등록하는 과정은 무척이나 간단하여 /etc/smrsh (이것은 아마 SendMailReliableSHell과 같이 들린다.)에 앨리어스를 통해 불릴 프로그램을 링크하는 것으로 해결된다. 즉

# cd /etc/smrsh
# ln -sf /usr/lib/majordomo/wrapper .

물론 etc 디렉토리 밑을 건드리는 것이기 때문에 루트계정으로 수행해야 한다. 위의 두 라인을 해결한다면 레드햇 6에서도 메이저도모는 쉽게 설치된다. 사실 최근 메이저도모 질문의 90%가 위의 내용에 관한 것이다.

이제 아래와 같은 메일이 와야 하며, 메일이 온다면 성공한 것이다.


Date: Sun, 3 Jan 1999 16:21:54 +0900
From: majordomo@kuls.korea.ac.kr
To: kulslist@kuls.korea.ac.kr
Subject: Majordomo results

--

>>>> lists
majordomo@kuls.korea.ac.kr serves the following lists:

  test                    

Use the 'info <list>' command to get more information
about a specific list.

지금 설치된 메일링 리스트에는 test라는 메일링 리스트가 있다는 응답이다. 하여간 위와 같이 메이저도모에게서 메일이 온다면, 이제 성공한 것이다. 나가서 술한잔 하고 오자. 여기까지 성공했으면 필자에게 메일을 보내도 좋다. artsilly@kuls.korea.ac.kr ^^;; 이제 리스트를 추가하도록 하자!

오! 아직! 마지막 한가지가 남았다. 위와 같이 메일링 리스트가 다 된다고 안심하면 그것으로 끝나지 않는다. 즉 내부 사용자들에게는 majordomo나 test가 보이지만 외부에서는 여전히 보이지 않는다. 이를 위해 sendmail을 재시동 시켜 주어야 한다. 레드햇 사용자라면

[root@kuls /root]# /etc/rc.d/init.d/sendmail restart

와 같이 해 주면 될 것이다. 일반적으로 sendmail의 PID를 찾아 프로세스를 닫고

[root@kuls /root]# /usr/lib/sendmail -bd
와 같이 다시 실행시키면 될 것이다.

5.6 좀 더 편한 사용을 위해

  1. /etc/passwd 파일을 편집하여 메일링 리스트 관리자의 홈 디렉토리를 메이저도모 디렉토리와 같게 해도 좋을 것 같다. /usr/lib/majordomo등으로 바꾸어 주는 것이다. 이렇게 되면 관리자가 일하기가 편해진다.
  2. 메이저도모 디렉토리 밑에 있는 man/디렉토리에 있는 매뉴얼을 매뉴얼을 모아놓은 /usr/man/ 밑으로 옮기는 것도 나쁘지 않다. 아예 처음부터 Makefile의 설정을 바꾸어 설치하는 것도 좋다. 'Makefile 설정하기'에 언급하였다.
  3. 설치 과정에서 메이저도모의 배포 파일에 들어있는 여러 문서들이 메이저도모 디렉토리로 복사되지 않는다. 이 문서들은 앞으로 메일링 리스트를 관리하는데 무척 유용한 파일들이므로 복사해 놓도록 하자.

6. 레드햇에서 설치

여기서는 레드햇을 사용하며 직접 소스를 가지고 설치하지 않고 패키지를 이용해 이미 컴파일 된 바이너리를 이용하는 방법에 대해 설명한다. 물론 레드햇에서도 위와같은 방법으로 직접 인스톨하여 사용하여도 된다.

6.1 패키지 다운로딩 하기

위의 레드햇 ftp를 이용하여 메이저도모 패키지를 다운로딩 한다. 이 문서 작성시 인텔버전으로는 majordomo-1.94.4-6.i386.rpm 이 최신버전이다.

6.2 패키지 설치하기

glint나 rpm명령을 이용하여 설치한다. 나는 보통 rpm명령을 더 선호한다.

[root@kuls /root]# rpm -Uvh majordomo-1.94.4-6.i386.rpm

레드햇 rpm 패키지를 이용하여 인스톨 했을 경우 다음과 같은 것들이 달라진다.

  • 메일링 리스트 관리자로 majordomo.majordomo를 자동으로 만든다. UID=GID=91이다.
  • 메이저도모는 /usr/lib/majordomo에 설치되고, lists디렉토리와 Log 파일은 /var/lib/majordomo 밑에 설치된다. 매뉴얼이나 문서 파일은 레드햇에 맞추어 /usr/man 과 /usr/doc밑에 설치된다.
  • sendmail.cf가 /etc/ 밑에 설치되고 majordomo는 이 파일을 참조한다. 그런데 sendmail.cf를 편집할 때 무언가 어색하게 되어 있는 부분을 발견할 지도 모른다. $whereami = `/bin/dnsdomainname` 처럼 되어있는 부분은 잘못 배포된 것이다. 물론 수정 과정에서 도메인 네임을 넣으면 되겠지만 그래도 꼭 주의 하기 바란다. 특히 작은 따옴표가 아니라 큰 따옴표를 써야 한다는 것을 잊지말자. 최신의 패키지에서 이 버그가 고쳐졌는지 확인하지는 못했다.

6.3 설치후 해야 할 것

그밖의 내용은 위 과정과 다를 바 없다. majordomo.cf 설정하기 과정 이하를 따라야 한다. 특히 메일링 리스트 관리자 그룹이 majordomo이므로 sendmail.cf에 Trusted users 섹션에 추가하는 것을 잊지 말도록 하자.

7. 데비안에서 설치

데비안 사용자에게는 메이저도모가 그리 권장할 만한 것이 되지 못한다. 다음은 박주연 kokids@wdb.co.kr님이 유즈넷을 통해 전해준 정보이다.

하지만, 데비안에서는 메이저도모가 권장 사항은 아닙니다. Debian-KR 메일링 리스트도 메이저도모를 설정해서 사용하지만 이만저만 문제가 많은 게 아닙니다. 설정도 복잡하구요. 그래서 데비안에서는 smartlist를 권장 사항으로 하고 있습니다. 순전히 처음 만들어 놓을 때 손에 익은 것(majordomo)을 사용했었는데 제 생각엔 procmail을 기반으로 한 smartlist도 문서 번역이 이루어지는 것이 좋겠습니다. 데비안에서는 남들이 안쓰는(?) 것들을 주로 씁니다. 데비안 표준 MTA로는 smail을 사용하고, 메일링 리스트용으로는 smartlist를 사용합니다.

8. FreeBSD에서 설치

여기서는 FreeBSD에서 majordomo패키지를 설치하는 방법에 대해 설명한다.

이 절은 최준호님 junker@jazz.snu.ac.kr에 의해 작성되었다. 여기의 내용은 문서 전체에서 다루는 예제 설정(관리자 ID나 디렉토리등)과는 조금 다르므로 혼란이 없기를 바란다. 최준호님께 감사를 드린다.

8.1 포트 스켈러튼 다운로딩

majordomo는 설치하기 위해 다른 프로그램을 필요로 하지 않지만, FreeBSD CDROM이나 FTP사이트에서 패키지를 구할 수는 없다. 그 이유는 majordomo설치 과정에서 패키지로 해결할 수 없는 몇몇 질문을 설치 시스템이 하기 때문이다. 이런 패키지(대화형(interactive)패키지라한다)은 포트의 Makefile에 IS_INTERACTIVE=yes로 지정되어 있다(포트에 대한 자세한 내용은 FreeBSD 핸드북의 포트에 대한 장( http://www.kr.freebsd.org/handbook/ports.shtml)을 보기 바란다.

FreeBSD의 프로그램 포팅 시스템인 포트에서는 mail카테고리에서 majordomo를 찾을 수 있다. 본인의 시스템에 FreeBSD를 설치할 때 포트 콜렉션을 설치하도록 하였거나(그렇지 않은 사람은 /stand/sysinstall을 실행하고 Configure - Distribution옵션을 선택하여 ports를 추가로 선택해 주고 CDROM이나 FTP사이트를 지정해 주면 된다) CVS/CVSup을 통해 포트 소스를 받은 경우에는 /usr/ports/mail/majordomo디렉토리에서 majordomo를 설치하기 위한 스켈러튼 파일을 찾을 수 있다. 그렇지 않고 해당 패키지의 포트만을 구하기 위해서는, 다음과 같이 하기 바란다.

# ftp ftp.kr.freebsd.org    (또는 다른 FreeBSD미러 사이트)
....anonymous로 로그인한다...
ftp> cd pub/FreeBSD/ports/mail
ftp> get majordomo.tar.gz
...majordomo디렉토리를 압축해서 tar.gz로 묶어준다...
ftp> quit

이후 받은 majordomo.tar.gz를 아무 디렉토리에 풀면 된다.

# cd your/work/dir
# tar xzvf majordomo.tar.gz

8.2 컴파일하여 설치하기

포트 시스템에서 majordomo를 설치하려면 루트 권한으로 다음과 같이 한다.

# cd /usr/ports/mail/majordomo  (또는 majordomo를 풀어놓은 디렉토리)
# make install clean

만약 여러분이 지금 인터넷에 연결되어 있다면 포트 시스템은 자동적으로 majordomo의 소스를 받아온다. 하지만 지금 인터넷에 연결되어 있지 않다면, 그 디렉토리의 Makefile에 있는 MASTER_SITES에 지정된 FTP경로 중 어느 한 곳에 접속해서 majordomo-1.94.4.tgz(또는 해당 버전)을 받아 /usr/ports/distfiles디렉토리(없다면 만들기 바란다)에 넣고 다시 make install clean를 실행하면 된다. 그러면 다음과 같은 화면이 지나간다.


# make install clean
...
===>  Installing for majordomo-1.94.4
Testing for perl (/usr/bin/perl)...
Configuring scripts...
./install.sh -m 751 -O 54 -g 54 . /usr/local/majordomo
./install.sh -m 755 -O 54 -g 54 . /usr/local/majordomo/bin
Copying tools to /usr/local/majordomo/bin
Copying Majordomo files to /usr/local/majordomo
Copying archiving and other tools to /usr/local/majordomo/Tools
./install.sh -m 755 -O 54 -g 54 . /usr/local/majordomo/Tools
Using majordomo.cf
Installing manual pages in /usr/local/man

To finish the installation, 'su' to root and type:

            make install-wrapper

If not installing the wrapper, type

            cd /usr/local/majordomo; ./wrapper config-test

(no 'su' necessary) to verify the installation.
./install.sh -o root -g 54  -m 4755 wrapper /usr/local/majordomo/wrapper


To verify that all the permissions and etc are correct,
run the command

             cd /usr/local/majordomo; ./wrapper config-test
===>   Generating temporary packing list
Post-Install Notes for Majordomo
================================

...(여러분은 이 메시지를 반드시 읽어보아야 한다)...

===>   Compressing manual pages for majordomo-1.94.4
===>   Registering installation for majordomo-1.94.4
===>  Cleaning for majordomo-1.94.4

이제 설치가 끝났다. majordomo는 설치하기 위해 사용자와 그룹 ID를 필요로 하는데, 최근의 FreeBSD시스템에서는 /etc/passwd안에 uid/gid 54로 설정이 되어 있다(없다면 하나 만들기 바란다).

majordom:*:54:54:Majordomo Pseudo User:/usr/local/majordomo:/nonexistent

8.3 설치후 주의사항

majordomo 파일은 /usr/local/majordomo에 설치되는 것을 주의하기 바란다. 모든 설정 파일과 문서 파일은 그 안에 들어간다.

9. 리스트 추가하기

9.1 어떤 리스트를 만들 것인가?

어떤 리스트를 만들 것인가에 대해 고민해 본 적이 있는가? 우선 리스트의 이름은 반드시 "[a-z0-9_-]+" 형태를 따라야 한다. 즉 영문자(대문자 포함, 그러나 여러가지 이유로 소문자로 만드는 것을 권장한다) 및 숫자, 언더바(_), 빼기가 된다는 것이다.(빼기를 대쉬라 하기도 하더군요... ^^) 구형시스템과의 호환을 생각하여 길이가 8자 이내의 리스트를 만드는 것은 꽤나 괜찮은 생각이다.

본 예제에서는 bbs이라는 리스트를 추가 하겠다.

9.2 리스트 파일의 작성

우리가 설정한 $listdir로 가서 다음과 같은 파일들을 만든다. '.*'이 붙지 않는 화일이 우리가 만들 리스트 화일이다. 참고로 리스트 디렉토리에는 각 메일링 리스트의 관리에 필요한 '.config', 정보를 담고 있는 '.info', 메일링 리스트의 쓰기 권한을 가진 '.allow'등의 여러 화일이 있다. '.config'파일은 저절로 생기니 특별히 만들어 줄 필요는 없다.

[kulslist@kuls majordomo]$ cd /usr/lib/majordomo/lists/
[kulslist@kuls lists]$ touch bbs
[kulslist@kuls lists]$ touch bbs.info
[kulslist@kuls lists]$ touch bbs.intro

나의 경우는 알짜 레드햇 5.2를 사용하는데 touch로 작성하면 644 모드로 생긴다. 그렇지 않다면 다음과 같이 모드를 바꿔준다.

[kulslist@kuls lists]$ chmod 644 bbs
[kulslist@kuls lists]$ chmod 644 bbs.info
[kulslist@kuls lists]$ chmod 644 bbs.intro

9.3 majordomo.aliases의 설정 - 시작 수준

프로그램 작성자의 메뉴얼에 보면 세가지로 구분을 해 놓았다. 첫째는 그냥 동작만 하게 하는 방법, 두번째는 메이저도모의 중계기능을 이용하는 방법, 세번째로는 메이저도모의 보관 기능을 이용하는 방법으로 나눠놓았다. 우선은 첫번째 방법을 보도록 하자.

위에 만든 list를 사용하기 위해서 majordomo.aliases 파일에 다음과 같은 라인을 추가한다. 이제 위에 만들었던 test 화일과 test 섹션을 지우도록 하자. 반드시 지우도록 하자. 나중에라도 제게 멜 보내서 함께 고민을 나누신 분들은 제가 꼭 test가 있는지 확인해 보도록 하겠습니다. --+


# 쿨스게시판 메일링 리스트 - bbs
bbs:             :include:/usr/lib/majordomo/lists/bbs
owner-bbs:       kulslist
bbs-request:     "|/usr/lib/majordomo/wrapper request-answer bbs"
bbs-approval:    kulslist

위의 각 항목 - 엘리어스 이름 - 은 다음과 같다. 우선은 bbs, 이것은 리스트 이름이고, owner-bbs은 잘못된 일이 생길 때 bbs에 대한 에러를 보내줄 소유자이다. bbs-request는 메일링 리스트에 가입한 가입자가 보내는 여러 명령 메세지(subscribe, unsubscribe등)을 처리해 달라고 보내는 메일 엘리어스가 쓰는 명령행이다. bbs-approval은 가입/탈퇴등 메이저도모가 자동으로 한 일에대한 결과 메세지를 보내는 엘리어스이다. 이 내용이 이해가 되든 안 되든 간에 위의 설정한 aliases를 쓰기 위해서는 반드시 newaliases명령으로 갱신 시켜주어야 하는 것을 잊지말자.

지금까지의 모든 과정이 올바르게 되었다면 다음과 같은 상황에서 올바른 결과를 낼 것이다. lists/bbs에는 테스트로 artsilly@kuls.korea.ac.kr와 neokim@kuls.korea.ac.kr을 수동으로 넣어놓았다. 단순히 에디터로 한줄에 한 사람의 이메일 어드레스만 적으면 된다. 이런 식이다.


artsilly@kuls.korea.ac.kr
neokim@kuls.korea.ac.kr

이제 다음과 같은 상황에서 어떤 결과가 일어날지에 대해 알아보고 그것을 통해 메이저 도모의 운영방식을 이해하도록 하자.

  1. kulslist ID(메일링 리스트 관리자)로 date | mail bbs 명령을 통해 bbs@kuls.korea.ac.kr로 메일을 보낸다.
  2. artsilly ID로 date | mail bbs 명령을 통해 bbs에게로 메일을 보낸다.
  3. molla ID로 date | mail bbs 명령을 통해 bbs에게로 메일을 보낸다.
  4. artsilly ID로 echo 'who bbs' | mail kulslist 명령을 통해 kulslist에게로 메일을 보낸다.
  5. artsilly ID로 echo 'who bbs' | mail bbs 명령을 통해 bbs에게로 메일을 보낸다.
  6. artsilly ID로 echo 'who bbs' | mail majordomo 명령을 통해 majordomo에게로 메일을 보낸다.

간단한 결과를 예측해 보자. 우선 메일링 리스트로 메일을 보낼 때는 그 리스트 이름으로 보내야 한다. 우리가 쓰는 메일링 리스트는 bbs 이므로 bbs로 보내는 메일은 전체 메일링 리스트 가입자에게 보내질 것이다. 그리고 majordomo는 메일링 리스트의 가입 및 탈퇴 및 여러 가입자의 요청(가입자 확인, 도움말)의 요청을 받는 아이디이다. 메일링 리스트를 운영할 때 많은 가입자들이 이 점을 모르고 탈퇴를 하고 싶었을 때 메일링 리스트로 메일을 보내기 때문에 수 많은 메일링 리스트 가입자들은 쓰레기 같은 탈퇴 메세지를 받게 되고 탈퇴가 되지 않는 일이 많이 벌어지고 있다.

  1. 의 경우에는 kulslist(보낸 사람)가 bbs(메일링 리스트)에게 보낸 메일을 artsilly와 neokim(메일링 리스트 가입자)이 받게 된다. 내용은 당연히 메일을 보냈을 때의 시간이다.
  2. 의 경우에는 artsilly가 bbs에게 보낸 메일이 neokim에게만 메일이 간다. 보낸 사람에게는 메일링 리스트를 통해 메일이 돌아오지 않도록 기본 설정이 되어있다. 사실 이런 설정은 약간 불편하다. 즉 자신의 메일이 올바로 전달되었는지 확인하기가 힘들다는 것이다. 두번째 방법을 이용하면 자신이 보낸 메세지를 메이저도모가 다시 돌려보내주기 때문에 자신의 메일에 대한 피드백이 쉬울것이다.
  3. 지금까지 우리에게 친숙하지 않던 즉 제 3의 사용자 - 이 사람은 가입자가 아니다 - 가 메일링 리스트에 메일을 보냈을 경우 artsilly와 neokim이 메일을 받게 된다. 즉 기본적으로 메일링 리스트는 오픈 되어있다. 메일링 리스트를 오픈 시켜 놓는 경우는 스패머로부터 엄청난 재난을 불러 일으키는 공격을 받게 될 수 있다. 한다.(1000명의 메일링 리스트로 10MB씩 만 보내도 10GB의 패킷이 네트워크를 타고 날아다니게 된다. 주의하라!) 이런 여러 상황에 대비하기 위한 여러 메일링 리스트 설정을 원한다면 다음의 두번째 방법을 쓰기 바란다.
  4. kulslist가 'who bbs'이라는 내용의 메일을 artsilly로부터 받게된다. 아무일 없다. 즉 artsilly는 메일링 리스트 관리자로부터 아무런 응답도 받지 못한다. 즉 kulslist는 메일링 리스트 프로그램인 메이저도모의 소유자고 관리자이지만 메일에 대한 응답을 해주는 기능을 갖지 않는다. 사실 이런 경우는 매우 드물다. 가입자가 받는 메일은 대부분 우리가 위에 만든 엘리어스의 주소들만으로 이루어져 있다. 따라서 가입자가 관리자가 kulslist라는 것을 알지 못한다.
  5. 이 경우는 바운스 메일이라고 하는 메일을 kulslist가 받게 된다. 즉 어떤 메일링 리스트에 대한 요청은 majordomo로 해야 하는데 잘못보냈기 때문에 관리자에게 메일로 보내지게 된다. 또한 이 내용은 메일링 리스트 가입자인 neokim에게도 보내진다. 이 역시 두번째 방법 이상을 이용하면 바운스 메일을 걸러낼 수 있을 것이다.
  6. 올바른 요청이다. 이때는 artsilly에게 메이저도모로부터 응답이 간다. 2명의 가입자가 있다는 응답이 올 것이다.

위와 같이 올바르게 동작하지 않을 경우에는 대부분 kulslist(관리자, -owner)에게로 에러 메세지가 담긴 메일이 갈 것이다. 설치의 마지막 부분까지 이 문서에 설명한대로 되었다면 에러가 발생할 확률이 적겠지만, 만일 에러 메세지를 받게 된다면 꼼꼼히 읽어보고 대처하기 바란다. 위 예제의 mail 명령을 /usr/lib/sendmail -v 명령으로 바꾸어 보는 것은 디버깅시에 많은 도움이 된다. 계속 하는 말이지만 이유없이 안된다면, 메일을 보내도 좋다.

올바로 작동하지 않을 때 /usr/lib/sendmail -v 명령으로 메일을 보내자마자 다음과 같은 에러 메세지를 만나게 될 지도 모른다.

bbs... aliased to :include:/usr/lib/majordomo/lists/bbs
:include:/usr/lib/majordomo/lists/bbs... including file /usr/lib/majordomo/lists/bbs
:include:/usr/lib/majordomo/lists/bbs... Cannot open /usr/lib/majordomo/lists/bbs: Group writable directory
bbs... aliasing/forwarding loop broken
/usr/lib/majordomo/dead.letter... Saved message in /usr/lib/majordomo/dead.letter

우선 리스트 파일 안에 가입자가 한명도 없다면 위와 같은 메세지가 나올 수 있다는 점을 언급하고 넘어가자. 그러나 지금처럼 가입자가 있을 경우에도 위와 같은 메세지가 나온다면 lists 디렉토리의 모드를 751로 바꾸고(자동으로 생성된 default는 770) 다시 한번 1번과 같이 메일을 보내보자. 아마 잘 될 것이다. 이것에 대한 문제는 sendmail의 버전과 관계 있는 것 같다.(이 의문점에 대해서는 여전히 궁금증으로 남는다. 즉 자동으로 생성하는 코드에서 751로 만들어야 하는데 770으로 잘못 만드는 즉 majordomo의 버그인지 혹은 sendmail에서 읽는 형식이 버전에 따라 좀 달라져서 동작을 안하는지는 모르겠다. 내가 쓰는 sendmail은 8.9.1a인데 혹 다른 버전에서 lists의 모드를 770으로 놓고 성공한 사례가 있다면 꼭 알려주기 바란다. 혹, 자동으로 생성될 때 모드가 다른 것으로 나오는 지에 대해서도 알려주기 바란다.) 모드(퍼미션)을 바꾸는 것은 chmod 751 /usr/lib/majordomo/lists 처럼 한다.

지금 우선은 메일링 리스트가 된다는 것에 감동하는 사람이 있을 지도 모르겠다. 혹은 이게 뭐야? 라며 불만을 토로하는 사람도 있을 것이다. 사실 첫번째 방법은 많은 문제점을 가지고 있다. 우선은 스팸 메일에 무방비로 노출되어 있다는 점이다. 또한 전반적으로 메일링 리스트를 관리하도록 구성이 되어있지 않다. 실제로 위와 같은 설정만으로 사용하는 것은 권장하지 않는다. 보통은 두번, 세번째 방법을 사용한다.

9.4 majordomo.aliases의 설정 - 중급수준

중급 정도의 수준에서는 메이저도모의 중계기능을 쓰는 것이다. 이 방법을 이용하면 메이저도모의 여러 메일링 리스트 매니저로서의 기능 - 헤더 조작, 스팸 걸러내기, 머릿말 꼬릿말 추가등을 할 수 있다. 실제로 위의 방법은 메이저도모를 쓴다기 보다는 단지 센드메일의 엘리어스를 적절히 이용했다는 표현이 맞을 것이다. 이제부터 실제 메이저도모의 기능을 쓰는 것이라 보아도 무방하다. 우선 위에서 majordomo.aliases에 추가한 bbs의 엘리어스를 '#'을 이용해 주석처리 하든지 삭제 함으로 지금부터 설정할 내용을 사용할 준비를 한다.(둘다 써 놓고 이상하게 동작하거나 메일이 2개씩 온다고 질문 하면 안됩니다.TT;;) 추가할 내용은 다음과 같다.


bbs:          "|/usr/lib/majordomo/wrapper resend -l bbs bbs-list"
bbs-list:     :include:/usr/lib/majordomo/lists/bbs
owner-bbs:    kulslist
bbs-owner:    kulslist
bbs-request:  "|/usr/lib/majordomo/wrapper majordomo -l bbs"
bbs-approval: kulslist

위와 같이 동작하는 것은 마찬가지이다. 그러나 한번 메일을 보내보도록 하자. 계속 작업은 메일링 리스트 관리자로 하는 것으로 한다.

[kulslist@kuls majordomo]$ echo 'Bbs open!!' | /usr/lib/sendmail -v bbs

다음과 비슷한 메시지가 출력될 것이다.

bbs... aliased to "|/usr/lib/majordomo/wrapper resend -l bbs bbs-list"
"|/usr/lib/majordomo/wrapper resend -l bbs bbs-list"... Connecting to prog...
"|/usr/lib/majordomo/wrapper resend -l bbs bbs-list"... Sent

위와 같은 메시지가 아닌 에러가 난다면, 역시 같은 list디렉토리 퍼미션에 대한 문제일 지도 모른다. lists 디렉토리의 모드가 770일 때 메일 보낸 사람이 아래와 같은 메일을 받게 되고 메일이 올바로 전달되지 않을 지도 모른다. 이 경우 부담없이 751로 lists 디렉토리의 퍼미션을 바꿔주기 바란다. 아마 올바로 동작할 것이다. 첫번째 방법을 테스트해 보고 따라온 독자의 경우 아무런 문제가 없을 것이다. 아래는 에러 메일의 예이다.

   ----- The following addresses had permanent fatal errors -----
bbs-list
:include:/usr/lib/majordomo/lists/bbs
    (expanded from: bbs-list)
   ----- Transcript of session follows -----
550 :include:/usr/lib/majordomo/lists/bbs... Cannot open
/usr/lib/majordomo/lists/bbs: Group writable directory
554 bbs-list... aliasing/forwarding loop broken

올바르게 된다면 artsilly와 neokim이 kulslist로부터 메일을 받게 된다. 또한 kulslist는 자기자신이 보낸 메일을 되돌려 받게 된다. 그렇다면 첫번째 것과 달라진 것이 특별히 무엇인가? 거의 아무것도 변화없지 않은가? 그렇지 않다. lists 디렉토리로 가보기 바란다. 올바로 메일이 보내진다면(혹은 보내지지 않더라도) bbs.config 파일이 생길 것이다. 이것이 바라던(?) 메일링 리스트 설정 파일이다. 앞으로 이것을 통해서 좀 더 세밀한 설정을 할 수 있을 것이다.

9.5 majordomo.aliases의 설정 - 고급수준

이런 식으로 단계를 나눈 것(제가 나눈 것입니다^^;)은 사실 우습기도 하다. 프로그램 제작자의 말로는 이 마지막 방법의 aliases를 이용함으로 보관 기능과 헤더 조작 기능을 추가할 수 있다고 한다. 보관은 아카이브(archive)라 불리우는 기능이며 헤더 조작 기능은 다이제스트(digest)라 한다. 아카이브는 일정기간(1달)동안 메일링 리스트를 통해 나누어진 모든 메일을 mbox 형식의 하나의 파일로 만든다. 이 파일은 가입자가 메일을 통하거나 ftp, 웹등을 통해 쉽게 가져갈 수 있으며 일반적인 메일러(pine등)를 통해 개개의 메일처럼 조회할 수 있다.

다이제스트는 용량이 작은 여러 메일이 자주 메일링 리스트를 통해 전달되는 것을 보완한 기능으로 일반적으로 리스트이름-digest라는 새로운 메일링 리스트를 만들게 된다. 다이제스트를 이용하면 우선 메일에서 헤더를 선별하여 제거하고, 메일 본문만으로 정리한 후 이렇게 모인 메일이 특정 용량 이상되면 하나의 메일로 한번에 보내게 된다. cron과 연동하여 너무 가끔 메일이 전달되는 것을 막기위해 용량에 다 차지 않더라도 일정 기간안에 메일을 보내도록 할 수 있다. 이 기능은 비록 메일을 바로 바로 받아볼 수는 없지만 그렇게 급하지 않은 메일링 리스트를 운영하며 메일의 내용이 짧고, 하루에 오가는 메일이 많다면 다이제스트 기능을 운영하여 가입자로 하여금 메일링 리스트에 가입한 메일의 폭주를 막을 수 있을 것이다. 물론 이런 기능은 리스트이름-digest에 가입한 사람에 한해 사용가능하다. 즉 다이제스트 기능을 하는 메일링 리스트를 하나 더 추가하는 것이다.

9.6 주의사항

리스트를 추가하고는 다음과 같은 사항을 꼭 지켜서 올바르게 사용할 수 있도록 한다.

  1. 계속 이야기했지만 newaliases를 해 주어야 한다. 엘리어스가 올바르게 갱신되지 않고는 메일링 리스트가 운영될 리 없다.
  2. 마찬가지지만 센트메일 데몬을 다시 띄워주어야 한다. 보통 내부에서 테스트 해보고 다 된 것인양 생각하는데 이경우 외부에서는 절대 엘리어스가 보이지 않는다.
위의 사항을 지켜 다 설정해 놓고 메이저도모가 작동하지 않아 당황하는 일이 없기 바란다.

10. 고급수준의 설정 I - 아카이브의 설정

여기에서는 아카이브의 설정 및 아카이브에 저장된 파일을 어떻게 가져갈 것인가에 대해 이야기 하도록 하겠다.

10.1 아카이브를 위한 majordomo.aliases 설정하기

아래는 아카이브를 위한 majordomo.aliases 파일의 예이다. 설명의 편의를 위해 #으로 막아놓은 주석문으로 설명하였다.


bbs:          "|/usr/lib/majordomo/wrapper resend -l bbs bbs-outgoing"
# 위에서 bbs-list이던 엘리어스가 bbs-outgoing으로 바뀌었다.

bbs-outgoing: :include:/usr/lib/majordomo/lists/bbs,
"|/usr/lib/majordomo/wrapper archive2.pl -a -m -f /usr/lib/majordomo/archive/bbs/bbs.archive"
# 일반적인 리스트 파일 인클루드 외에 , 로 구분된 아카이브 프로그램과
# 연결되었다. 아카이브 프로그램의 옵션을 보면 '-a'는 mbox 형식으로
# 아카이브를 만든다는 옵션이고 -m 은 매월 단위로 아카이브 파일을 
# 만든다는 옵션이다. -f로는 아카이브 파일 이름을 적는다.

owner-bbs-outgoing:owner-bbs
owner-bbs:    kulslist
bbs-request: "|/usr/lib/majordomo/wrapper majordomo -l bbs"
bbs-approval: kulslist
# bbs-outgoing의 owner- 엘리어스가 생긴 것 외에 다른 것은 없다. 

위 설정에 대해 알아보기 전에 세번째 방법을 사용하려는 서버는 반드시 다음 사항을 주지하기 바란다! 일반적으로 -outgoing 엘리어스를 통해 직접 메일을 보냄으로 외부인이 서버에 스패밍 공격을 할 수 있다. 특별히 심각한 보안문제는 아니지만 서버의 하드디스크 공간을 차지하게 만들거나 가입자에게 올바로된 아카이브를 제공할 수 없다. 일반적으로 서버의 하드 공간이 모자라게 되면 몇몇 프로그램을 올바로 수행시킬 수 없다. 따라서 이 방법을 시험해 보고자 하는 사람은 -outgoing이라 되어있는 엘리어스를 자신만이 알 수 있는 다른, 특히 -outgoing 이라 짐작도 할 수 없는 엘리어스를 만들기 바란다. 필자는 보통 만든날의 날짜나 그냥 주섬주섬 생각나는 것으로 만든다.

아카이브는 archive2.pl 파일에 의해 생성된다. archive2.pl 역시 펄스크립트 이고 주석으로 옵션들에 대한 설명이 주어진다. 좀 더 자세히 알고 싶은 사람은 자신에게 익숙한 에디터를 사용하여 확인해 보기 바란다. 다음은 일반적인 옵션이다.

archive2.pl -f archive {-u|-a} [-d|-m|-y]

-f archive 아카이브 파일 이름은 이 옵션 다음에 절대경로나 상대경로로 표시되며 우리가 주어준 파일 이름 뒤에는 날짜 구분용 확장자가 붙게된다.

{-u|-a} 아카이브 파일 형식이다. 일반적으로 -a를 쓰면 될 것이다.

-m 옵션 몇일 단위로 아카이브를 만들 것인가와 아카이브 파일 확장자의 형식을 정해준다. 단위는 하루(d), 한달(m), 일년(y)이며 만일 대문자를 이용한다면 년도를 4자리로 표시한다. 일반적인 소문자일때는 년도는 2자리로 표현된다.

위의 예제와 같은 설정을 통해 메일링 리스트를 운영하면 위의 디렉토리에 다음과 같은 파일이 생성되게 된다.

[kulslist@kuls bbs]$ pwd
/usr/lib/majordomo/archive/bbs
[kulslist@kuls bbs]$ ls
total 24
  20 bbs.archive.9901     4 bbs.archive.9902
[kulslist@kuls bbs]$

일반적인 메일링 리스트라면 한달단위로 저장하는 것으로도 충분할 것이다.

10.2 아카이브를 제공하기 위한 설정사항들

지금까지 설정한 것을 통해 아카이브 파일이 만들어졌다. 사실 아카이브 파일의 목적은 가입자로 하여금 가입 이전 메일의 내용을 얻을 수 있도록 해 주거나, 실수로 지워버린 메일을 다시 가져갈 수 있게 해 주는데 있다. 따라서 이 절에서는 가입자를 위한 설정을 하도록 하겠다. majordomo.cf 에서 다음 설정사항을 찾아보자.


#--------------------------------------------------------------------
#    Stuff below here isn't commonly changed....
#--------------------------------------------------------------------
#
# Majordomo will look for "get" and "index" files related to $list in
# directory "$filedir/$list$filedir_suffix", so set $filedir and
# $filedir_suffix appropriately.  For instance, to look in
# /usr/local/mail/files/$list, use:
#   $filedir = "/usr/local/mail/files";
#   $filedir_suffix = "";               # empty string
# or to look in $listdir/$list.archive, use:
#   $filedir = "$listdir";
#   $filedir_suffix = ".archive";

$filedir = "/usr/lib/majordomo/archive/$list";
$filedir_suffix = "";

# What command should I use to process an "index" request?
#
$index_command = "/bin/ls -lRL";

가입자는 index 명령을 통해 사용가능한 파일을 알아볼 수 있다. 위의 설정에서는 절대경로나 상대경로, 또한 $로 시작하는 변수들을 이용하여 설정가능하다. 하나의 메일링 리스트를 운영한다면 단지 디렉토리만을 써주면 되겠지만, 여러개의 메일링 리스트라면 적절히 변수를 이용해 모든 메일링 리스트가 공통된 형식을 유지할 수 있도록 하는 것이 좋을 것이다. index명령은 내부적으로 'ls -lRL'로 사용되게 된다. 가입자가 echo 'index bbs' | mail majordomo@kuls.korea.ac.kr 명령으로 인덱스를 알아보면 다음과 같은 답신이 온다. majordomo.cf에 올바로 디렉토리를 명시하지 않는다면 아무런 결과도 나오지 않을 것이다. 한번 확인해 보도록 한다.

참고로 $filedir = "/usr/lib/majordomo/archive/$list" 에 설정된 디렉토리는 만들어 주어야 한다.

Date: Wed, 3 Feb 1999 23:16:48 +0900
From: majordomo@kuls.korea.ac.kr
To: artsilly@kuls.korea.ac.kr
Subject: Majordomo results
--
>>>> index bbs
total 24
-rw-rw----   1 kulslist daemon      18480 Feb  3 21:19 bbs.archive.9901
-rw-rw----   1 kulslist daemon       3282 Feb  3 21:19 bbs.archive.9902

가입자는 목록을 살펴보고 원하는 파일이 있다면 echo 'get bbs bbs.archive.9901' | mail majordomo@kuls.korea.ac.kr 과 같이 'get 리스트이름 파일이름' 과 같은 형식의 메일을 메이저도모에게 보냄으로 원하는 파일을 메일로 받을 수 있다. 가입자는 메일을 받아 파일로 저장한다든지 한 후 pine과 같은 메일리더를 이용하여 일반 메일 박스를 읽듯이 읽을 수 있다.

서비스 제공자는 아카이브 디렉토리에 아카이브 파일 외에 가입자에게 제공하려는 파일을 만들어 놓음으로 가입자를 위한 서비스를 개선할 수 있다.

만일 아카이브 파일을 index, get등 명령으로 전송해 주는 것 외에 웹이나 ftp등의 파일전송 프로토콜을 이용하려 한다면 아카이브 저장 디렉토리를 좀 더 평범한(COMMON) 곳에 위치시키는 것은 좋은 생각일 것이다. /var/mail/archive나 /var/majordomo/archive 등을 생각해 볼 수 있다. 웹과 FTP등과의 연동에 대해서는 추후 논의하도록 한다.

11. 고급수준의 설정 II - 다이제스트의 설정

다이제스트는 필요로 하는 사람이 적고 해서 여기서는 특별히 다루지 않도록 하겠다. 방학중 갱신된 문서를 참고하기 바란다.

12. 메일링 리스트의 설정

위의 약간은 복잡하고, 약간은 헛갈리는 작업을 통해서 메이저도모를 인스톨할 수 있었을 것이다. 이제는 서비스 하고자하는 리스트를 각 서비스의 특성에 맞추어 설정해 주는 과정이 필요하다. 각 설정에 대한 설명 보다는 예제 중심으로 하나씩 설명하는 방식으로 정리해 보도록 하겠다. 여기에 나온 설정을 위해서는 majordomo.aliases를 최소한 두번째 방법으로 사용해야 한다. 메일링 리스트를 설정하기위해 .config, .allow, .info, .intro등 수정해야 한다.

설정을 모두 마치고 나서 메일링 리스트를 운영하자면 가입자도 메이저도모 메일링 리스트 사용법을 어느정도는 알아야겠지만 특히나 운영자는 메이저도모 사용법에 대해 꽤 많은 정도 알고 있어야 하겠다. 두번째 문서에서는 메이저도모 사용법에 대해 다루도록 하겠다.

12.1 안내 파일의 작성

안내 파일로는 .info, .intro 파일등을 들 수있다. 우선 .intro 파일은 가입자가 각 리스트에 가입했을 때 가입 환영 메세지와 함께 전달된다. 손에 익숙한 에디터를 이용하여 이 파일을 편집한다.(* 계속 해서 나오는 .info, .intro등은 특정 리스트와 결합된 파일 형식이다. 즉 bbs 리스트의 정보 파일은 bbs.info 라는 의미이다. ".info" 라는 파일이 아님을 기억하기 바란다.)

그렇다면 .intro 파일에는 어떤 내용을 담을 것인가? 메일링 리스트 운영자라고 가입한번 해보지 않고, 운영하는 사람은 이번기회에 자신이 운영하는 메일링 리스트에 한번 가입해보고 어떤 식으로 운영되는지 확인해 보기 바란다. 일반적인 형식은 다음과 같다. 각기 내용은 보내는 메일의 내용이다.

가입자 : 가입 -            (         - 인증답장 -         )
운영자 :        가입답장 + (인증요청              인증확인) + 환영메일

물론 운영자 측에서 해주는 일은 메이저도모가 자동으로 해주는 것이기 때문에 그리 걱정하지 않아도 된다. 인증하게 끔 설정이 되어있지 않을 경우 ()의 과정이 생략된다. 인증 설정에 대한 것은 아래에 설명하도록 하겠다. .intro 파일은 위에 과정 중 제일 마지막 과정인 환영 메일에 포함되어 전달된다. 환영 메일에는 메이저도모에서 제공하는 일반적인 환영메세지와 .intro 파일의 내용이 들어가게 된다.

따라서 .intro 에는 가입자를 위한 인사말과 주의사항, 메일링 리스트 운영 방향등에 대한 내용 및 문제가 있을 경우, 사람이 받을 수 있는 E메일 주소등을 담으면 된다. 마지막으로 이 파일은 사용자가 intro 명령을 이용해서도 전달된다.

.intro 파일과 .info 파일에는 몇몇 차이점이 있다. 쉽게 이야기 하자면 .intro 파일은 가입자에게 주어지는 안내이고 .info 파일은 누구에게나 열려있는 정보이다. 메일링 리스트 설정에 따라 다르겠지만 아래 설명할 닫힌 메일링 리스트일 경우 가입자는 .info 파일과 .intro 파일 모두를 각각 info 명령과 intro 명령을 통해 얻을 수 있으나, 비 가입자는 info 명령만을 이용할 수 있다. 위의 내용을 인식하고 .info 파일을 작성하면 될 것이다. 귀찮은 경우에는 .intro 파일과 같은 내용으로 해도 된다.

메일링 리스트 운영중에 관리자가 직접 받게되는 많은 요청이나, 질문, 또한 사용법을 잘 몰라서 생기는 바운스 메일들을 원하지 않는다면 .info 파일과 .intro 파일을 구체적으로 작성해서 가입자가 쉽게 정보를 얻게 하는 것이 좋을 것이다. 본인의 경우 보통 메이저도모 가입자 하우투 문서를 .intro 파일로 링크시켜 놓는다.

12.2 닫힌 메일링 리스트의 구현

여기에 설명할 내용은 위에 언급한 동아리에서 쓰던 설정의 일부이다. 우선 이 리스트는

  1. 졸업생 및 재학생 외엔 이 리스트에 가입할 수 없다.
  2. 게다가 어느 누구도 탈퇴하지 못한다! ^^;;
  3. 외부인은 리스트로 메일을 보낼 수 없다.
  4. 위쪽에는 쿨스게시판이라고 타이틀을 만들어 달았다.
  5. 리스트의 절반을 차지하는 학부생의 E-mail 주소가 한 서버에 몰려있으므로 누군가 큰 파일을 어태치해서 보내게 되면 그 때마다 그 서버는 같은 파일을 20정도씩 저장하며 하드 공간을 차지했다. 이에 용량이 큰 파일 제한을 두었다.

과 같은 성격을 지녔다. 위와 같은 설정을 위해 bbs.config 파일을 적절히 바꾸어 주어야 한다. 이 파일에 대해서는 특별히 문서나, 매뉴얼이 제공되지 않고 파일안의 주석에 충분한 설명이 주어진다 - 물론 영어다. 만일 쓰고 있는 메이저도모가 구버전이라면 .config 파일 형식이 조금은 다를 것이다.

각 항목은 아래와 같은 형식을 가지고 있다.


     # admin_passwd         [word]    (bbs.admin) <majordomo>   /        /
==>    ~~~~~~~~~~~~       ~~~~~~~~~~~  ~~~~~~~~~~~ ~~~~~~~~~~~~  ~~~~~~~~~~~
          항목            데이터 형식   디폴트 값  사용프로그램   가능한 값
     # The password for handling administrative tasks on the list.
admin_passwd        =   bbs.admin

주석문 첫줄에는 항목, 데이터 형식, 디폴트 값, 항목을 사용하는 프로그램, 그리고 [enum]형식에만 쓰이는 사용 가능한 값들이 나열된 부분이 있다. 아랫 줄에는 항목에 대한 간단한 설명이 나와있고, 마지막으로는 주석이 아닌, 실제 적용되는 라인이 있다. 여기에서는 데이터 형식 을 주의해서 사용해야 한다. 데이터 형식은 .config 파일 윗쪽에 나와있다. 특히 다음 형식은 주의해서 사용해야 한다.

absolute_* 이 형식으로는 absolute_dir, absolute_file 등이 있다. / 부터 시작하는 경로를 모두 써주어야 한다.

enum 위에 간단히 설명한대로 이 형식에는 가능한 값이 항목 설명부분에 나열된다. 가능한 값 중 하나를 써 주어야 한다.

word 공백 없는 문자

string 문자열

string-array 뒤에 나오는 예를 보도록 한다.

regexp '/'로 시작하거나 끝나는 펄 스타일의 레귤러 익스프레션

regexp의 형식이 쓰이는 곳을 살펴보면, taboo_body나 taboo_header등으로 메일링 리스트를 어지럽히는 몰지각한 사람의 무분별한 메일링이나, 상업 광고등을 적절히 추출해내는 부분쪽에 쓰인다. 생각에 따라서는 그리 필요치 않을 지도 모르지만 때로는 무척 유용할 것이다.

자 이제는 우리의 설정에 맞추어 bbs.config 파일을 바꾸어 보도록 하자.

우선 이 메일링 리스트는 가입자의 가입(subscribe)과 탈퇴(unsubscribe)을 모두 받아들이지 않는다. 다음처럼 해 줘야 한다. 물론 이렇게 해 놓으면 메일링 리스트 관리자가 일일이 수동으로 파일을 편집해야 한다. 귀찮지만 몇몇 되지 않기 때문에 그냥 닫아버리자.

subscribe_policy    =   close

이 항목의 가능한 값으로는 open, auto, close 가 있다. auto로 했을때는 subscribe lists address 의 형식을 이용하여 다른 주소로 메일링 리스트를 신청할 수 있다. 혹은 타인을 대신해 신청가능하다. open일 경우 메일을 보낸 주소로만 가입이 가능하다. 이 항목에는 +confirm 이라는 형식을 이용할 수있다. 만일 open+confirm을 이용하면 가입 절차로 메이저도모가 가입자에게 인증넘버를 메일로 보내주고 그 인증넘버를 이용해 다시 가입(확인) 해 줘야 끝나게 된다. 아래와 같은 메일일 것이다.

Someone (possibly you) has requested that your email address be added
to or deleted from the mailing list "bbs@kuls.korea.ac.kr".

If you really want this action to be taken, please send the following
commands (exactly as shown) back to "majordomo@kuls.korea.ac.kr":

        auth f7972eb6 subscribe bbs shadow@linux.korea.ac.kr

                                   :
                                   :

번역하자면 다음과 같이 시작된다.

당신의 email 주소가 "bbs@kuls.korea.ac.kr" 메일링 리스트에 가입이나
탈퇴를 요청하였습니다.

만일 정말로 위의 요청을 수행하고 싶다면 다음의 내용을 가진 메일을  
"majordomo@kuls.korea.ac.kr" 에게로 보내주시기 바랍니다.

        auth f7972eb6 subscribe bbs shadow@linux.korea.ac.kr

아직은 영문 메세지이지만 곧 한글화 작업에 착수할 것이다. 하여간 이것으로 우리는 아무도 마음대로 가입을 못하게 하였다. 비슷하게 unsubscribe_policy 가 있다. 이 역시 close로 해 준다. 메이저도모에서는 탈퇴시에는 확인을 하지 않는다. 메이저도모 2에서는 이 기능이 추가되길 바란다.

두번째 요구사항은 가장 중요한 내용으로 생각된다. 즉 비 가입자의 메일링 리스트에 포스팅을 막는 것이다. 이것은 일반적인 리스트에도 유용하다. 가입자만 메일을 보낼 수 있도록 하고, 가입자중 악의를 가지고 스패밍을 하거나 메일링 리스트의 주제에 맞지 않는 메일을 계속해서 포스팅할 경우 단지 좇아내기만 하면 된다. 이렇게 함으로 악성 스팸 메일로부터 리스트를 보호할 수 있다. 메이저도모의 보안문제에 대해서는 다음 버전에 추가할 것이다.

restrict_post       =   bbs bbs.allow

이 항목에는 특정한 형식이 사용된다. 여러개의 파일 이름이 공백이나 : 을 통해 사용된다. 또한 파일 이름은 절대 경로가 사용되지 않고 $listdir을 기준으로한 상대경로가 사용된다. 우리의 메일링 리스트에는 가입자만 포스팅이 가능하게 해 주어야 한다. 따라서 메일링 리스트 파일인 bbs에 있는 사람이 포트팅 가능하며 bbs.allow라는 특정 파일에 있는 사용자만 추가로 포스팅 가능하게 하였다.

위와 같은 형식은 소수의 안정적인 폐쇄 그룹에 맞을 듯 싶다. 수가 많지 않고, 변동 없는 사람들을 관리자가 직접 가입시키고, 관리자를 통해 탈퇴를 하는 형식이다. 사람이 많아지면 이런 방식은 조금 운영하기에 벅차다. 위 리스트에는 학부생 20여명 정도였고 신입생이 들어 오거나 할 때 정도만 URL을 바꿔주면 되기 때문에 그리 부담없는 수준이었다.

메일의 길이는 다음과 같이 설정해 줄 수 있다.

maxlength           =   40000

이 값은 캐릭터 갯수를 나타내므로 대충 byte로 계산해도 될 것이다. 바이너리 데이터를 많이 보내며 쓰는 메일링 리스트의 경우 이 값을 늘려주어야 할 것이다.

마지막으로 메일의 머리말이나 꼬리말을 장식해 보도록 하자.

message_footer      <<  END
 
                  ------------------------------------------
                    $LIST!! 쿨스게시판 메일링 리스트 입니다.
                  ------------------------------------------
END

이런 식으로 설정해 주면 이 메일링 리스트를 통과하는 메일의 맨 마지막 중간 쯤에 위와 같은 글이 붙게 된다. 그러나 메일을 실제로 받아보면 꼬리가 붙지 않는다. 이 항목의 형식은 string-array인데 여기서는 '빈 공백들 + 개행문자'나 'END'를 끝으로 알아듣는다. 한줄 띄기 위해서 비워놓은 줄을 끝으로 알고 끝나게 되는 것이다. 또한 그 문제를 단순히 없에기 위해 한 줄 띄어놓은 줄을 삭제하고 바로 글자가 나오게 했을 때 즉

message_footer      <<  END
                  ------------------------------------------
                    $LIST!! 쿨스게시판 메일링 리스트 입니다.
                  ------------------------------------------
END

이런 식으로 만들었을 때 받은 메일은 꼬리말이 나오긴 하지만 좀 이상하다.


Date: Tue, 12 Jan 1999 04:21:01 +0900
From: neokim <neokim@kuls.korea.ac.kr>


테스트 메일입니다.
------------------------------------------
bbs!! 쿨스게시판 메일링 리스트 입니다.
------------------------------------------

그리 원하지 않은 결과를 낳게 된다. 이 역시 '개행문자 + 빈 공백들' = 없다 로 알아듣기 때문이다 이를 위해 메이저도모 제작자는 '-'표시를 사용함으로 이 문제에 대한 문법을 설정해 주고 있다. 위의 예제에서 예리한 사람은 알아채렸을 지도 모르지만 '-'를 연결한 줄이 설정한 것보다 하나 줄었다는 것을 알 수 있다.(사실 아무도 못 알아 차릴 것 같다. --;) 이는 문법에 의해 맨 처음의 '-'가 control 문자로 쓰였기 때문이다. 따라서 다음과 같이 설정해 줘야 한다.

message_footer      <<  END
-
-                  ------------------------------------------
-                    $LIST!! 쿨스게시판 메일링 리스트 입니다.
-                  ------------------------------------------
END

빈 줄은 '-' 하나를 쓰고, '-'로 시작하는 줄은 하나 더 써주고, 빈칸으로 시작하는 줄은 '-'로 시작해야 한다. 이런 식으로 설정해 주면 우리가 원하는 결과 - 가운데 정렬한 꼬리말- 가 나오게 될 것이다.

12.3 뉴스 메일링 리스트 만들기

본인의 E메일 주소로도 IBM으로부터 메일이 온다. 이 메일은 약 2주에 한번씩 IBM의 새소식을 알려준다. 물론 이 메일링 리스트로 가입자가 메일을 쓰는 것은 금지되어있다. 오직 사업체에서 허용된 사람(홍보부등)만이 쓸 수 있다. 이 방식은 위에 언급한대로 꼭 사업체가 아니더래도, 정보를 원하는 사람에게 일방적인 정보를 줄 수 있는 기능을 제공해준다. 예를 들어 학부 사무실에서 제공하는 메세지나, 프로그램 제작자가 배포처에 제공하는 메세지등 여러가지 목적으로 쓸 수 있다.

위와 같은 스타일의 메일링 리스트를 만드는 것은 무척 쉽다. 우선은 가입과 탈퇴는 자유로워야 한다. 기본 설정값으로 놓아두면 된다. 그리고 허용된 사람에게만 쓰기를 허용함으로 bbs.allow 파일만 restrict_post에 설정해 주고 쓰기 가능한 사람만을 담은 파일로 생성해 주면 된다. 물론 뉴스의 목적에 맞게 머리말 꼬리말을 이용하여 적절한 장식을 해 줄 수 있을 것이다.

12.4 제한 사항 설정

보안 문제라든지 정보유출 그 밖의 여러 문제로 인해 가입자가 사용할 수 있는 여러 명령들을 사용하지 못하게 막을 수 있다. *_access 등의 항목이 그것이다. open의 경우 모든 사람이 사용 가능하고, close의 경우는 모든 사람이 사용할 수 없다. lists로 되어있는 경우 restrict_post에 설정된, 즉 메일링 리스트에 쓰기 가능한 가입자만이 사용가능하다. 각각의 경우를 읽어보고 적절히 사용하면 유용할 것이다. 일례로

info_access         =   open

info 명령은 리스트이름.info 파일, 위의 예에서 bbs.info 파일을 메일로 보내주는 역할을 한다. 일반적으로 위 파일은 그 메일링 리스트에 대한 정보를 담고 있다. 가입자및 미래의 가입자를 위해서 info_access 를 open으로 해놓는 것은 좋을 것이다.

그러나 특정리스트의 가입자의 주소를 알려주는 who 명령이나 메일링 리스트의 문자열 검색을 해주는 which 명령은 보안 관계로 사용하지 못하게 하는 것도 좋을 것이다.(실제로 많은 리스트들이 이 명령을 사용하지 못하게 하고 있다.)

12.5 (펄형식)레귤러 익스프레션을 이용한 메일의 필터링

위에 언급한 것처럼 레귤러 익스프레션을 이용하여 올바르지 못한 메일을 필터링 할 수 있다. 레귤러 익스프레션에는 다음과 같은 형식문자가 쓰이며 반드시 '/' 사이에 둘러쌓여야 한다.

\@ @ 문자 자체

. 한글자의 문자, 쉘에서 와일드카드 문자 ? 와 같음

.* 여러글자, 쉘에서 와일드카드 문자 * 와 같음

a* a나 aa, aaa등 여러개의 그 문자, 아무 것도 없어도 된다.

a+ a나 aa, aaa등 여러개의 그 문자, 하나이상 있어야 한다.

\ 여러 특수 형식문자 자체를 표시하고 싶을 때(. 이나 * 등을 직접 표현하고 싶을 때 \ 뒤에 쓴다. ;\. 문자그대로 마침표

^ 문자열의 시작 ;^a a로 시작하는 문자열의 시작

$ 문자열의 종료 ;$a a로 종료하는 문자열의 시작

부족한 설명만으로 이해가 안갈지도 모르겠다. 몇몇 예제를 통해 알아보도록 하자. 이 내용은 문서와 함께 제공되는 list-owner-info를 통해 원문으로 알아볼 수 있다.

/.*\@.*korea\.ac\.kr/

위 구문은 다음과 같은 문자열을 의미한다.

artsilly@kuls.korea.ac.kr
artsilly@kuls.korea.ac.kr
neokim@brain.korea.ac.kr

만일 아래와 같이 바뀐다면

/^a.*\@.*korea\.ac\.kr/

다음과 같이 a로 시작하는 문자열만을 올바른 구문으로 인정할 것이다.

artsilly@kuls.korea.ac.kr
acim@rio.korea.ac.kr
Andongkim@case.korea.ac.kr
일반적으로 위 구문은 대소문자를 구분하지 않는다. 이경우 대소문자를 구분하고 싶다면 구문 뒤에 i를 붙여준다. 즉 /^a.*\@.*korea\.ac\.kr/i 처럼 해준다. 그렇다면 소문자로 시작하는 것만이 선택된다.

구문에 사용하는 형식문자를 직접표시하고 싶다면 '\'를 쓴다.

/\*\..*/

이 구문은

*.this
*.kamnth

등 직접 * 와 . 이 들어있는 문자가 된다. 마지막의 .* 는 '어떤 문자들' 이라는 의미로 쓰였다.

자 이제는 이 레귤러 익스프레션을 이용하여 taboo_body를 작성해보자. 아직도 우리나라에는 비비에스나 유즈넷, 메일링 리스트에 욕설을 담거나 주제에 맞지 않는 글을 올리는 사람이 많다. 이런 것을 방지하기 위해 필터링을 해준다면 메일링 리스트를 운영하는데 많은 도움이 될 것이다.

taboo_body          <<  END
/씨팔//좆.*//개새.*//병신//지랄/
/.*팝니다//.*팔아요//.*파라요//싸게//.*판매.*/
/야.*씨디//게.*씨디//VCD/
/사오정/
END

위와 같은 필터링을 통해 욕설이나, 판매광고, 그리고 이제는 더이상 재미없는 사오정 시리즈를 필터링 할 수 있다. 필터링 된 메일은 가입자들에게 전달되지 않고 '리스트이름-owner'에게로 바운스 메일이라는 제목으로 날아가게 된다. 관리자는 금지해 놓은 말을 사용하는 불량 가입자를 바운스 메일을 통해 확인해 볼 수 있고 계속될 경우 탈퇴 시킬 수 있다. 제목을 통해 나쁜 말이 날아오는 것은 taboo_header를 통해 막을 수 있다. 물론 적절히 사용해야 사용자의 불편을 막을수 있다.

12.6 그 밖의 옵션들에 대해서...

administrivia 누군가가 리스트로 명령을 보내면 그 명령을 어떻게 할 것인지 결정한다. 이 옵션을 yes로 해 놓으면 그 명령을 관리자에게로 돌려 버리고 잘못된 메일이 리스트로 가지 않게 한다.

advertise 여기에 설정된 호스트로부터 어떤 요청이 오면 항상 자동으로 lists 명령을 해서 지금 어떤 메일링 리스트가 운영되고 있는지를 알려준다.

announcements 가입이나 탈퇴의 상황을 리스트이름-approval이라는 엘리어스에게 알려준다.

description lists 명령을 이용해서 한 서버에서 사용중인 메일링 리스트의 종류를 알아볼 때 함께 출력되는 각 리스트에 대한 간략한 소개이다.(50자 이내)

subject_prefix 메일의 제목에 일정한 문자열을 추가시킨다.

이 밖에도 많은 옵션이 있으니 각 운영자들은 .config 파일을 잘 읽어보고 세팅하기 바란다.

13. 고급 사용자를 위한 설정

여기에 설명하는 내용은 메이저도모를 이용하는 메일링 리스트 서버를 좀 더 고급사양에 대해 설정한다. 메이저도모의 요약, 압축 기능 사용에 대한 내용과 ftp나 유즈넷, WEB과 연동하는 방법, 그리고 메일링 리스트 성능 개선을 위해 벌크메일러를 사용하는 방법등에 대해 이야기 하도록 한다. 아직! 여기의 내용은 완전한 것이 아니다.

13.1 스패머로부터 메일링 리스트 보호하기

기본적으로는 메이저도모가 스팸 메일을 처리하지 않는 것 보다는 서버 자체가 스팸 메일 자체를 거부해 버리는 것이 더 함당한 것 같이 보인다. 스팸 메일이 날아오는 주소들을 정리해 놓아 서버가 메일을 받지 않도록 설정하도록 한다. 다음을 참고하기 바란다. http://spam.abuse.net/ 그리고 위에 설명한 것 처럼 restrict_post를 통해 메일링 리스트에 가입하지 않는 이상 포스팅 하지 못하도록 제한을 두는 것도 좋을 것이다.

물론 위와 같은 방법으로도 치고 빠지는 스패밍을 방지하기에는 어느정도 힘겹긴 하다. 통신망의 자료실에 보니까 삐삐 쳐주는 프로그램이 있던데... 메일링 리스트에 몇개 이상의 메일이 오면 삐삐를 쳐주도록 스크립트를 짜 놓는 것은 급작스런 스패밍 공격을 방지하는데 좋은 방법인 것 같다. 하여간 항상 주의하는 것은 나쁘지 않다.

13.2 좀 더 효율적인 메이저도모

이절의 내용과 벌크메이러의 내용은 지승훈 shjee@metaland.com님께서 작성하신 글을 인용, 변환한 글이다. 원문에 충실하려고 노력했으며 이 글의 원문을 원하는 사람은 다음 홈페이지에서 구할 수 있다. http://ns.metaland.com/~shjee/system/majordomo.html 지승훈님께 다시 한번 감사를 드린다.

위에 말한 첫번째 방법만을 보았을 때 메이저도모는 메일을 리스트 내의 사용자에게 넘겨주는 단순한 역할을 한다. 두번째 세번째 방법등, resend 기능을 사용하는 경우는 좀 더 복잡하지만 이 역시 리스트의 내용을 메일러를 통해 전달하는 것은 동일하다 할 수 있다. 대용량의 메일링 리스트를 운영하는 시스템에서 메이저도모의 기능을 개선하기 위해서는 우선 다음과 같은 부분들을 점검하고 개선할 필요가 있다.

  1. Sendmail을 사용하고 있다면 8.X 버젼으로 업그레이드 하라! (최신 버젼은 8.9.1입니다. 요건 스팸 필터링 기능도 있죠. ^^) 이전 버젼에 비해 각각의 메일 접속이 효과적으로 개선되었으므로 이전 버젼보다 성능이 월등히 향상 될 것이다. 대부분의 메일링 리스트에서는 이정도면 충분하다.
  2. 서버의 메모리를 추가하라. 메이저도모는 메일 전송시에 페이징 메모리를 많이 사용하는 것을 제외하고는 시스템에 큰 부하를 주지 않는다. 메모리가 적은 시스템의 경우 메모리 추가로 상당한 효과를 볼 수 있다.
  3. Sendmail 대신에 다른 메일러(MTA)를 사용하라 (예를 들면 Zmailer, qmail등) qmail 은 sendmail의 성능을 상당히 개선한 제품으로 메이저도모와 함께 사용할 경우 상당한 성능 향상을 기대할 수 있다. 게다가, qmail은 Sendmail에 비해서 보안성도 높다.
  4. 만일 리스트의 크기가 아주 크다면, 벌크메일러를 사용하기 바란다. 벌크메일러는 메일을 보내기 전에 메일을 보낼 주소 사이트 그룹별로 정렬한 후 각각의 도메인별로 Sendmail 을 통한 접속을 한번씩만 함으로써 속도 뿐만 아니라 메시지 큐의 크기도 줄여 전체적인 시스템 부하를 줄인다.

이렇게 함으로써 무척 빠르면서도 효율적인 메일링 리스트를 만들수가 있다. (영문에서는 dramatic speedups in delivery 라고 표현하고 있다.)

이런 bulk mailer는 다음의 URL에서 구할 수 있다.

위 내용은 메이저도모 FAQ에 있는 'How can I improve Majordomo's performance ?' 라는 부분을 요약, 정리한 것이다.

13.3 벌크메일러 소개 및 설치 방법

메이저도모 같은 메일링 리스트 프로그램을 보면 리스트에 포함되어 있는 이용자에게 메일을 보내기 위해 한번씩 Sendmail process를 띄워서 해당 호스트에 접속을 하게 된다. 그러나 다수의 이용자에게 메일을 보낼 경우 이런 방법은 상당한 시간이 걸릴 뿐더러 각각의 메일큐를 관리해야 하기 때문에 시스템 성능을 저하시키는 요인이 된다. 이런 단점을 개선하기 위해 만들어진 것이 벌크메일러 류의 프로그램이다. 이것은 리스트에 포함된 수신자를 도메인별로 구분하고 해당 도메인에 단 한번 접속을 통해 해당 이용자에게 메일을 보낸다. 이 방법은 /usr/lib/sendmail -bs 옵션을 사용하여 전자봉투를 만듦으로서 가능하다.

벌크메일러의 문서 파일을 보면 이 프로그램은 5000명에게 동시에 보내기 위해 디자인되었으며 짧은 시간내에 12.000명에게 메일을 보내는데 무리가 없다고 한다. Qmail www.qmail.org을 사용할 경우에는 자체가 그런 기능을 가지고 있기 때문에 이것을 적용하는게 의미가 없다고 한다. 현재 공개되어 있는 몇개의 bulk mailer 중 메이저도모개발자가 추천하는 벌크메일러 를 설치해 보기로 하자.

우선 위의 Site에서 builk_mailer.tar.gz 파일을 받아서 푼다.

# tar xvfz builk_mailer.tar.gz

그 다음 해당 디렉토리로 가서 다음과 같이 컴파일 한다.

# ./configure 
# make
# make install

위와 같이 하면 /usr/local/bin 에 bulk_mailer 라는 실행파일이 생긴다.

이를 적용하기 위해 majordomo.aliases 를 다음과 같이 수정한다. test 라는 메일링 리스트에 적용해 보면 다음과 같다.


# test mailing-list aliases
test : "|/usr/local/majordomo-1.94.4/wrapper resend -l test -h metaland.com test-outgoing,nobody" 
test-owner : shjee@metaland.com
test-outgoing : "|/usr/local/bin/bulk_mailer -domain metaland.com owner-test@metaland.com /usr/local/majordomo-1.94.4/lists/test"
owner-test : shjee@metaland.com 
test-request : shjee@metaland.com 
test-approval : shjee@metaland.com

자 이제 test 라는 메일링 리스트에 메일을 보내 보자.. 엄청난 속도 향상을 느낄수 있을 것이다. ^^; 사실 엄청난 속도 향상을 느껴보진 못했습니다. -_-; test 메일링 리스트에 겨우 10명도 들어있지 않거든요. 이용자가 많은 메일링 리스트를 운영하시는 분이라면 꼭 한번 적용해 보시길 바랍니다.

13.4 다음버전의 메이저도모, v2.0

저자도 밝혔지만 메이저도모는 처음에는 무척 작고 작은 프로그램에서 시작되었다. 지금 1.94.x 버전까지 왔지만 많은 사람들이 더 이상 뜯어고칠 수 없는 프로그램임을 알게되었고, 새로운 v2.0 이 준비되고 있다. v2.0은 거의 모든 것을 처음부터 작성하고 있으며 새롭고 더욱 강력해진 많은 내용을 담고있다. v2.0은 아직 제작중이며 곧! 새롭게 등장할 것이다. 관심있는 사람은 http://www.hpc.uh.edu/majordomo/을 참고하기 바란다.

메이저도모2의 주요 변동 사항

  1. MIME 의 완벽지원
  2. 설치 과정의 편이성 강화
  3. 유일하게 C 로 쓰여진 wrapper 프로그램의 다양한 플랫폼 지원
  4. 몇몇 엘리어스의 변경, 삭제
  5. 보안 측면 강화

13.5 한글 메이저도모 1.94.4

본 필자가 메이저도모의 메시지를 한글화 한 l10n 타입의 한글 메이저도모를 테스트 중이다. 메이저도모의 배포에 대한 라이센스로 쉽게 배포하기 어렵지만 베타 테스트가 거의 끝나서 메이저도모 메인 사이트를 통해 7-8월 중에 배포가 가능할 것이다.

14. 버전정보

  • v0.3s beta, 1998년 12월 31일 베타버전
  • v0.4s, 1999년 1월 6일 / 홈페이지로 공개, 설치내용 추가, 내용 갱신, '리스트 추가하기' 이후 추가 안함, 제목을 Majordomo mini-HOWTO에서 Majordomo-ML HOWTO로 변경
  • v0.4.2s 1999년 1월 9일 / 버그 수정, ** 이전 버전에서는 올바로 설치 안됨 **
  • v0.5s, 1999년 1월 12일 / 최준호님의 도움으로 FreeBSD에서의 설치 추가
  • v0.5.2s, 1999년 1월 14일 / 여러 OS에서 사용가능한 MLM 소개, 추후 삭제 가능(?), Web과 연동할 수 있게 해주는 프로그램 사이트 추가(올바른지 테스트 해야함)
  • v0.5.4s, 1999년 1월 14일 / sendmail을 재시작해야 한다는 엄청난 일을 빼먹은 것 고침, aliases.db 파일의 퍼미션 문제 언급
  • v0.5.9s, 1999년 1월 20일 / 지승준님의 도움으로 벌크 메일러의 사용법 추가
  • v0.6 beta, 1999년 1월 21일 / 전면개정판
  • v0.6.1, 1999년 1월 28일 / 가입자를 위한 메일링 리스트의 설정
  • v0.7, 1999년 2월 3일 / 메일링 리스트 아카이브의 설정 Majordomo HOWTO로 개선함.
  • v0.7.4, 1999년 3월 2일 / 다이제스트에 대해 잘못 설명한 것을 수정함, 아카이브와 다이제스트에 대한 장, 절 구분 개선.
  • v0.8, 1999년 9월 30일 / 7달만에 업데이트 미친척하고 버전올리다. --; 한것은 아무것도 없구먼... 레드햇 6.0에서 메이저도모 설치시의 문제에 대해 해결점을 올리다. 더이상 다른 OS에서 돌아가는 메일링 리스트 소개를 하지 않다. 잦은 질문(FAQ)꺼리가 되는 내용에 대해 QuickLinks를 만들어 달다.


ID
Password
Join
It is Fortune, not wisdom that rules man's life.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2003-08-10 11:52:30
Processing time 0.0032 sec