postfix-3.8.1 on CentOS 5.8
다음과 같이 설치할 것이다.
- PostgreSQL 지원
- tls 1.3 지원(openssl-1.1.1u 이용)
- Dovecot SASL 지원
1. 준비작업
1.1. 다운로드
https://www.postfix.org/download.html 에서 다운로드 한다.
http 이므로 CentOS 5.8 에서 직접 다운로드 할 수 있다.
$ wget http://cdn.postfix.johnriley.me/mirrors/postfix-release/official/postfix-3.8.1.tar.gz
1.2. gcc 및 make 설치
yum install gcc make -y
1.3. 의존성
db4-devel(Berkeley DB) 을 설치한다.
$ yum install db4-devel
openssl-1.1.1u 및 postgresql-13.12 가 있어야 하며, 설치방법은 필자가 작성한 다른 글을 참조한다.
2. 컴파일 및 설치
--prefix
는 없다.
여러가지 옵션으로 설치디렉토리를 변경할 수 있을 것으로 보이지만 그렇게 하지는 않기로 한다.
그렇게 할 요량이라면, 소스파일에 동봉된 INSTALL 파일을 참조하라.
$ unset LD_LIBRARY_PATH $ mkdir -p logs/postfix-3.8.1 $ tar xvfz postfix-3.8.1.tar.gz > logs/postfix-3.8.1/tar.`date +%Y%m%d.%H%M%S`.log 2>&1 $ cd postfix-3.8.1 $ make makefiles shared=yes openssl_path=/opt/openssl-1.1.1u \ CCARGS='-DUSE_TLS -DUSE_SSL -I/opt/openssl-1.1.1u/include -DHAS_PGSQL -I/opt/postgresql-13.12/include -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"' \ AUXLIBS_PGSQL="-L/opt/postgresql-13.12/lib -lpq" \ AUXLIBS="-lrt -L/opt/openssl-1.1.1u/lib -lssl -lcrypto" > ../logs/postfix-3.8.1/config.`date +%Y%m%d.%H%M%S`.log 2>&1 $ make > ../logs/postfix-3.8.1/make.`date +%Y%m%d.%H%M%S`.log 2>&1
\"dovecot\"
는 오타가 아니다.
ld.so.conf 에 PostgreSQL 및 OpenSSL lib 경로를 추가하고, 반영한다.
$ echo "/opt/postgresql-13.12/lib" > /etc/ld.so.conf.d/postgresql-13.12.conf $ echo "/opt/openssl-1.1.1u/lib" > /etc/ld.so.conf.d/openssl-1.1.1u.conf $ ldconfig
이미 설치되어 있다면,
$ make upgrade > ../logs/postfix-3.8.1/upgrade.`date +%Y%m%d.%H%M%S`.log 2>&1
그렇지 않다면, 먼저 user 및 setgid_group 을 만든다.
$ useradd -s /bin/false postfix $ groupadd postdrop
설치과정에서 물어보는 것에 답을 해야 하는 일이 있기 때문에, 다음과 같이 설치한다.
$ make install
필자는 물어오는 것에 전부 Enter 로 대답했다.
3. 문제해결
해결방법은 전술한 의존성 있는 모듈 설치에 대한 내용을 참조한다.
3.1. ATTENTION: Not supported: building with LD_LIBRARY_PATH
$ unset LD_LIBRARY_PATH
3.2. No <db.h> include file found.
db4-devel(Berkeley DB) 설치가 누락되었다.
3.3. postgres_ext.h 및 libpq-fe.h 파일 위치를 찾을 수 없다.
dict_pgsql.c:81:26: error: postgres_ext.h: No such file or directory dict_pgsql.c:82:22: error: libpq-fe.h: No such file or directory
make makefiles
에서 다음과 같은 명령행 옵션이 생락되었거나 경로가 잘못되었다.
"CCARGS=-DHAS_PGSQL -I/opt/postgresql-13.12/include" \ "AUXLIBS_PGSQL=-L/opt/postgresql-13.12/lib -lpq" \
3.4. clock_gettime 참조를 찾을 수 없다.
src/util/ldseed.c:102: undefined reference to `clock_gettime' src/util/ldseed.c:114: undefined reference to `clock_gettime'
make makefiles
에서 다음과 같은 명령행 옵션이 생락되었다.
"AUXLIBS=-lrt"
3.5. dovecot 이 정의되지 않았다.
smtpd.c: In function ‘main’: smtpd.c:6630: error: ‘dovecot’ undeclared (first use in this function) smtpd.c:6630: error: (Each undeclared identifier is reported only once smtpd.c:6630: error: for each function it appears in.) make: *** [smtpd.o] Error 1 make: *** [update] Error 1
다음을 확인한다.
CCARGS='-DHAS_PGSQL -I/opt/postgresql-13.12/include -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"'
-DDEF_SERVER_SASL_TYPE
이 "dovecot"
혹은 dovecot 인 경우에 발생하는 에러이다.
에러가 발생한 gcc 파라미터가 -DDEF_SERVER_SASL_TYPE="dovecot"
혹은 -DDEF_SERVER_SASL_TYPE=dovecot
일 것이다.
gcc 옵션에 -DDEF_SERVER_SASL_TYPE=\"dovecot\"
로 공급되어야 한다.
3.6. libpq.so.5 를 찾을 수 없다.
make upgrade 할 때 발생하는 에러는 다음과 같다.
postfix: To disable backwards compatibility use "postconf compatibility_level=3.6" and "postfix reload" /usr/sbin/postconf: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory /usr/sbin/postlog: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory
make install 할 때 발생하는 에러는 다음과 같다.
bin/postconf: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory
선행해서 LD_LIBRARY_PATH 를 설정하는 것으로 문제가 해결되지 않는다.
전술한 바와 같이 ld.so.conf 에 PostgreSQL lib 경로를 추가하고, 반영한다.
$ echo "/opt/postgresql-13.12/lib" > /etc/ld.so.conf.d/pgsql.conf $ ldconfig
3.7. postfix 사용자가 없다.
postfix-install: Error: "postfix" needs an entry in the passwd file. Remember, "postfix" needs a dedicated user and group id.
postfix 사용자를 만드는 과정이 누락되었다.
$ useradd -s /bin/false postfix $ groupadd postdrop
3.8. postfix 와 postdrop 의 gid 가 같은 값이다.
postfix: fatal: file /etc/postfix/main.cf: parameters mail_owner and setgid_group: user postfix and group postdrop have the same group ID: 500
이건 필자가 실수로 postfix 사용자의 group 을 postdrop 으로 지정해서 발생한 오류였다.
만약 필자와 동일한 실수를 했다면 postfix 사용자를 지웠다가 다시 만들면 된다.
4. 읽을거리
Postfix 는 GNU Autotools 와 같이 전형적인 설치 script 를 사용하지 않지만, 설치에 관한 보다 자세한 설명을 제공한다.
소스코드와 함께 제공되는 INSTALL 파일이나, 홈페이지를 참조한다.