다음 이전 차례

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. 설치 과정에서 메이저도모의 배포 파일에 들어있는 여러 문서들이 메이저도모 디렉토리로 복사되지 않는다. 이 문서들은 앞으로 메일링 리스트를 관리하는데 무척 유용한 파일들이므로 복사해 놓도록 하자.


다음 이전 차례