다음 이전 차례

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. 마찬가지지만 센트메일 데몬을 다시 띄워주어야 한다. 보통 내부에서 테스트 해보고 다 된 것인양 생각하는데 이경우 외부에서는 절대 엘리어스가 보이지 않는다.
위의 사항을 지켜 다 설정해 놓고 메이저도모가 작동하지 않아 당황하는 일이 없기 바란다.


다음 이전 차례