Microsoft 社는 2022년 6월 15일 Internet Explorer 11의 지원을 종료했습니다.

postfix-3.8.1 on CentOS 5.8

제목

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 파일이나, 홈페이지를 참조한다.

https://www.postfix.org/INSTALL.html

제목

첨부파일