4,637,651 th visitor since 2017.2.1 ( Today : 10854 )
Computer ???
No. 234
Name. swindler
Subject. Sendmail Compile 1998/04/27
Main Cate. Linux
Sub Cate.
Date. 2007-01-04 11:39
Hit. 4102 (211.36.27.8)
File.
* 센드메일을 컴파일 해보자! *
* 제가 센드메일 8.8.6 을 컴파일 하면서 생겼던 몇가지 문제 때문에 그것들에 대해
글을 써 봅니다. *

* 참고한 글들... *

이상로님의 센드메일 이야기 중에 설치 부분입니다.
http://suny.multi.co.kr/~leesl/mail/sendmail.install.html
신정식님의 sendmail + procmail 이야기입니다.
http://pantheon.yale.edu/~jshin/faq/procmail.html

* sendmail-8.8.6 소스를 구할수 있는곳 *

ftp://ftp.sendmail.org/pub/sendmail

* 중요 중요 중요 *

현재 자신의 센드메일과 설정 파일들을 백업 하십시요. 백업하십시요.
/etc/sendmail.cf /etc/aliases /etc/aliases.db /usr/sbin/sendmail
그외 알아서 백업 하십시요.

* 처음 할 일은? *

우선 센드메일 소스를 /usr/local/src 정도에 풀어 주세요...
FAQ RELEASE_NOTES mail.local rmail
KNOWNBUGS cf mailstats smrsh
Makefile contrib makemap src
READ_ME doc praliases test
이러한 파일과 디렉토리들이 생깁니다...
우선 src 디렉토리로 가야겠지요... ^^
makesendmail 란 파일이 있습니다. ./makesendmail 을 실행시키고 약간 진행되면 중
단 시키세요...
자신의 시스템에 따라 obj.Linux.2.0.30.i586 이런식의 디렉토리가 생깁니다.
이곳으로 이동해야죠.. ^^

* Makefile 을 고치자. (ReadOnly 로 되 있습니다. vi 의 경우 w!,wq! 로 저장을) *

obj.Linux.2.0.30.i586 밑의 Makefile 을 자신의 시스템에 맞게 고쳐야겠네요...
가장 많이 에러가 나는것이 데이터베이스 관련 문제인데... 저또한 그곳에서 에러가
났습니다.

센드메일이 사용하는 데이터베이스는 NDBM 과 NEWDM 두개가 있다고 이상로님이 말하
시는군요. 상로님의 글을 참시 잘라서...

- NDBM은 new DBM포맷으로 거의 모든 시스템에 설치되어 있다.
이의 공개버전으로 GDBM이 있는데 NDBM를 좀 개량하여 성능을 향상시킨 것이다.
NEWDB는 BSD를 개발한 버클리 대학에서 만든 것으로 long recores, multiple open
databases, real in-memory cashing를 사용할 수 있다. NEWDB가 NDBM에 대해 갖는
장점은 첫째,
hash기능이 있어 NDBM보다 빠르다는 것과 둘째 NEWDB에 생성되는 데이터 베이스
파일은 시스템이 바뀌어도 여전히 사용할 수 있다는 것이다. 예를 들어 리눅스에
서 만들어 놓은 데이터 베이스화일을 솔라리스에서도 사용할 수 있다는 것이다.
현재 2.0(97/4/22)버전이 베포되고 있다.

데이터 베이스 설정은 두 개를 다해도 상관없다. 그러나 NDBM, NEWDB를 함께 설정
해놓으면 NDBM 포맷을 NEWDB로 변경하므로 처음 설치하는 경우 NEWDB만 지정 해도
좋다. 그러나 NEWDB가 자신의 시스템에 설치되어야 한다.

만일 NEWDB, NDBM, NIS를 모두 설정해 놓으면 센드메일은 NEWDB, NDBM두개 포맷으
로 앨리어스를 만든다. 그러나 센드메일이 파일을 읽을때는 NEWDB포맷만 이용한다.
NDBM을 만들어 놓는 이유는 NIS가 NDBM포맷을 이용하기 때문이다.

만일 둘중 아무것도 설정되지 않으면 센드메일이 메일을 보내고 받을때마다
앨리어스 파일을 메모리에 올리므로 속도가 느려진다. -

버클리 DB 는 어디서?
http://mongoose.bostic.com/db/
http://trade.chonbuk.ac.kr/mail/db.html
http://suny.multi.co.kr/mail/db.html

일반적으로 이 부분에서 New Berkeley DB로만 설정하면 문제가 없다고 생각합니다.
(NDBM 을 같이 설정하면 map.c 컴파일 부분에서 에러가 나는 문제가 있어서)
DBMDEF= -DNEWDB

컴파일할 환경이 어떠한 환경인지를 나타내어준다. 리눅스외엔 conf.h 를 살펴보기
바란다. 리눅스의 경우 그곳에 #ifdef __linux__ 이런식으로 지정이 되 있음 ^^
ENVDEF=-D__linux__

센드메일 소스에서 이부분이 /usr/local/include, /usr/local/lib 로 설정이 되있더
군요... (레드햇은 거의 local 을 안 쓰니... 그래서 전 바꿨습니다.)
INCDIRS=-I/usr/include (헤더위치르르 알려 줍니다.)
LIBDIRS=-L/usr/lib (라이브러리의 위치를 알려 줍니다.)

이 부분은 자신이 어떤 데이타 베이스를 쓰느냐에 따라 틀려집니다.
LIBS= -ldb (뉴 버클리 디비 사용시)
ex) -lndbm (NDBM 사용시) -lgdbm (GNU NDBM 사용시)

나머지는 이정도만 바꿔 주심 되지 않을까 생각합니다.
STDIR= ${DESTDIR}/var/log (sendmail.st 파일의 저장 위치를 지정합니다.)

* 컴파일과 설치 *

obj.Linux.2.0.30.i586 디렉토리에서...
make -n 을 해보세요... 컴파일을 하지 않고 make 가 하게 될일을 보여줍니다.
문제가 있는지 파악할수 있습니다.
그리고 이상이 없다고 판단이 되면 간단하게 make 를 치셔서 진짜 컴파일로 들어갑
니다. 컴파일이 이상없이 끝나면... make install 로 설치를 합니다.
그런데 이상하게 죽어라 그룹을 kmem 으로 잡더군요...
그래서 전 직접 다 바꿔 버렸습니다.
/usr/sbin/sendmail 의 퍼미션은 -r-sr-sr-x 1 root mail 이렇게
그외 /var/log/sendmail.st 와 /usr/lib/sendmail.hf 의 그룹을 모두 root 로

* sendmail.cf 를 만들자 *

센드메일의 소스를 푼곳에 보면 cf 라는 디렉토리가 있습니다.
그 밑에 또 cf 라는 디렉토리가 있습니다.. 글로 가지요 ^^
기본이 되는건 tcpproto.mc 화일입니다. (직접 만들어 줘야 합니다.)
저 같은 경우엔 이렇게 했습니다.
- mine.mc
OSTYPE(linux) 운영체제가 어떤것인지 지정해주구요
FEATURE(always_add_domain)dnl
FEATURE(mailertable)dnl 메일러 테이블을 쓴다...
FEATURE(local_procmail)dnl 프로크메일을 쓰겠다...
FEATURE(redirect)dnl
FEATURE(use_cw_file)dnl
MAILER(local)dnl

컴파일을 해볼까요?
m4 ../m4/cf.m4 mine.mc > sendmail.cf

*** 주의 하실점 하나
이렇게 만들어진 sendmail.cf 에서 procmail 의 위치를 죽어라 /usr/local/bin
에서 찾습니다... (레드햇 이용자가 문제임. 거의 모든 프로그램이 /usr/bin 으
로 들어가기 때문에... rpm 패키지 procmail 의 위치를 정확히 해 줘야 합니다.
Mlocal 이 부분을 찾으시면 P=/usr/local/bin/procmail 이런식으로 위치가 지정
되어 있습니다... 정확한 위치로 고쳐 주셔야 합니다.

* procmail 의 설정 *

이 부분은 신정식님의 sendmail + procmail 로 한글 처리 부분의 글을
보시는게 좋겠습니다. 젤 위에 주소를 적었습니다.

* 메일러테이블 구성 *

sendmail 8.8.x 대는 메일을 전송할 상대방의 MTA (Mail Transport Agent) 가 8비트
메일을 통과시킬수 있는지 우선 확인하여 통과시킬수 있다면 그데로 보내게 되고 통
과 시킬수 없다고 판단되면 base64 나 QP 엔코딩을 해서 8비트 메일을 전송합니다.

그런데 나우누리,하이텔,천리안 등에서 한글 sendmail 을 쓰는관계로 8비트 메일을
이상없이 통과 시킬수 있음에도 ESMTP 교환 규칙을 제데로 지키지 않고 만들어진 관
계로 8비트 MIME 를 수신할수 없다고 sendmail 이 판단해서 base64 나 QP 로 엔코딩
을 해서 보내버립니다. (근데 그쪽에선 요 두개 디코딩 할줄을 모르거든요...)

그래서 필요한것이 메일러테이블입니다. 강제적으로 저쪽 MTA 는 8비트MIME 통과 가
능하다 이눔아 알겄냐... 라고 말해 주는 겁니다.

아까 sendmail.cf 구성에서 FEATURE(mailertable) 이 부분이 메일러 테이블을 쓴다
는거이구요... 메일러 테이블의 구성은 우선 etc 디렉토리에 mailertable 이라는 파
일을 만듭니다.
내용은 이런식으로 적으시면 됩니다.
- /etc/mailertable
chollian.dacom.co.kr smtp8:chollian.dacom.co.kr
mail.hitel.net smtp8:home.hitel.net
nownuri.net smtp8:nownuri.net
unitel.co.kr smtp8:unitel.co.kr

자 그리고 이 파일을 sendmail 이 알아 먹도록 db 파일로 바꿔야 하겠지요...
NEWDB 를 쓸 경우에는
makemap hash /etc/mailertable.db < /etc/mailertable

NDBM 을 쓸 경우에는
makemap dbm /etc/mailertable.dbm < /etc/mailertable
sendmail.cf에서 Kmailertable hash -o /etc/mailertable란 줄을 찾아서
Kmailertable dbm /etc/mailertable로 고칩니다.

*** 주의 하실점 하나
sendmail 과 makemap 이 같은 DB 라이브러리를 사용해야 합니다.
sendmail 이 NEWDB 를 사용했다면 makemap 도 NEWDB 를 사용해야 한다는거죠.
센드메일 소스에 보시면 makemap 이라는 디렉토리가 있습니다...
거기 있는 Makefile.dist 를 Makefile 로 이름을 바꾸시고 편집해야 합니다.

* makemap 의 Makefile 편집 *

어떤 DB 를 쓰느냐의 정의 (sendmail 에 쓴것과 일치하여야 합니다.)
DBMDEF= -DNEWDB

이 부분 또한 자신의 시스템에 맞게 고쳐 주시기 바랍니다.
LIBDIRS=-L/usr/lib
LIBS= -ldb

* 잘 돌아가나 테스트? *

sendmail -bt -C/etc/sendmail 이런식으로 하셔서
3,1 root
3,1 root@localhost
3,1 xxxx@nownuri.net 머 이런식으로 해보십시요...
잘 돌아가는지... 흐흐흐

* 자 다 끝났습니다. *

*** 주의 하실점이 하나더 있습니다.

/etc/aliases.db 를 만든다고 makemap hash 어쩌고 절데로 하지 마십시요.
(sendmail 포트인 25번으로 접속조차 안되는 일이 발생합니다.)

newaliases 란 명령을 사용하십시요...

* 감사 *

진호형, 장헌형, 상기형, 신정식님, 이상로님....
헤헤 덕분에 잘 컴파일 했습니다...
신정식님과 이상로님의 글을 다수 배낀거에 대해 사과 드립니다.

*** 제가 쓴 글은 언제나 GPL ok?


- 리눅스 왕 초짜 적수 -
- redhands@soback.kornet.nm.kr -

[바로가기 링크] : http://coolx.net/cboard/computer/234



Name
Password
Comment
Copyright © 1999-2017, swindler. All rights reserved. 367,611 visitor ( 1999.1.8-2004.5.26 ), 2,405,771 ( -2017.01.31)

  2HLAB   2HLAB_Blog   RedToolBox   Omil   Omil_Blog