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

postgresql-13.12 on CentOS 5.8

제목

postgresql-13.12 on CentOS 5.8

0. 주의사항

0.1. postgresql-15.4 및 postgresql-14.9 에 대해서

postgresql-15.4 및 postgresql-14.9 는 epoll_create1() and EPOLL_CLOEXEC 이 없는 Linux < 2.6.27 and glibc < 2.9 을 지원하지 않는다.

CentOS 5.8 은 Linux Kernel 2.6.18 및 glibc 2.5 이므로 postgresql-14.9 내지 postgresql-15.4 혹은 그 이후 버전은 CentOS 5.8 을 공식적으로 지원하지 않는다.

이에 대해서는 PostgreSQL Weekly News - March 7, 2021 을 참조한다.

(postgresql-13.12 를 참조해서) latch.c 를 변경하는 방법이 있기는 하겠지만, 그렇게 까지 할 필요는 없을 것 같다.

0.2. PostgreSQL 버전 호환성

다음과 같은 PostgreSQL 의 이전 버전들도 같은 방법으로 컴파일을 성공했다.

  • postgresql-12.16
  • postgresql-11.21
  • postgresql-10.23
  • postgresql-9.6.24

1. 준비작업

1.1. 다운로드

https://www.postgresql.org/ftp/source/ 에서 다운로드 한다.

CentOS 5.8 에서 직접 다운로드 할 수 없고, 다른 장비에서 다운로드 한 파일을 sftp 따위로 올려야 한다.

$ curl -O https://ftp.postgresql.org/pub/source/v13.12/postgresql-13.12.tar.gz

1.2. gcc 및 make 설치

yum install gcc make -y

1.3. 의존성

configure 명령에서 --without-readline --without-zlib 옵션을 추가하거나, 다음 2개의 라이브러리를 설치한다.

  • zlib-devel
  • readline-devel
$ yum install zlib-devel readline-devel

오래된 이야기지만, 오픈소스 라이선스 간의 차이 때문에 발생한 해프닝이 있었다. 해프닝 직후에는 더 오래된 readline 라이브러리가 더 안정적일 가능성이 높다는 생각이 있었고, 지금은 관성의 법칙이 지배하고 있는 것으로 생각된다.

2. 컴파일 및 설치

설치 디렉토리(--prefix) 는 알아서 변경한다.

$ mkdir -p logs/postgresql-13.12
$ env > logs/postgresql-13.12/env.`date +%Y%m%d.%H%M%S`.log 2>&1
$ tar xvfz postgresql-13.12.tar.gz > logs/postgresql-13.12/tar.`date +%Y%m%d.%H%M%S`.log 2>&1
$ cd postgresql-13.12
$ ./configure \
--without-readline \
--without-zlib \
--prefix=/opt/postgresql-13.12 > ../logs/postgresql-13.12/config.`date +%Y%m%d.%H%M%S`.log 2>&1
$ make > ../logs/postgresql-13.12/make.`date +%Y%m%d.%H%M%S`.log 2>&1
$ make install > ../logs/postgresql-13.12/install.`date +%Y%m%d.%H%M%S`.log 2>&1

3. 설치후의 작업

다음과 같은 절차에 따라 postgresql 을 기동시킨다.

$ adduser postgres
$ mkdir /opt/postgresql-13.12/data
$ chown postgres /opt/postgresql-13.12/data
$ mkdir /opt/postgresql-13.12/log
$ chown postgres /opt/postgresql-13.12/log
$ su - postgres
$ export LANG=ko_KR.UTF-8
$ export LC_ALL=ko_KR.UTF-8
$ /opt/postgresql-13.12/bin/initdb -D /opt/postgresql-13.12/data
$ /opt/postgresql-13.12/bin/pg_ctl -D /opt/postgresql-13.12/data -l /opt/postgresql-13.12/log/postgresql.log start

한국어 UTF-8 인코딩을 사용할 예정이라면, initdb 전에 locale 을 변경해서 ko_KR.UTF-8 로 template* 데이타베이스를 생성하지 않으면, 나중에 이를 변경하는 것이 번거로울 수 있다.

다음과 같이 접속한다.

$ /opt/postgresql-13.12/bin/psql

데이타베이스 목록을 확인한다.

postgres=# \list

결과는 다음과 같다.

List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 |
template0 | postgres | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 rows)

다음은 필자가 작성한 Postgresql 설치 을 참조해서 사용자, 테이블스페이스, 데이타베이스를 생성한다.

PGTune, 최소한의 튜닝 도 참고한다.

CentOS 5.8 시절에는 다음과 같이 /etc/init.d/pgsql.sh 와 같은 스크립트를 만들고, /etc/rc3.d/S99pgsql.sh 와 같이 Symbolic link 를 생성하는 관행이 있었다.

#!/bin/bash
export POSTGRES_HOME=/opt/postgresql-13.12
export PGLIB=$POSTGRES_HOME/lib
export PGDATA=$POSTGRES_HOME/data
export MANPATH=$MANPATH:$POSTGRES_HOME/man
export PATH=$POSTGRES_HOME/bin:$PATH
start() {
su -c '/opt/postgresql-13.12/bin/pg_ctl start -D /opt/postgresql-13.12/data/ -l /opt/postgresql-13.12/log/postgresql.log' postgres
RETVAL=$?
return $RETVAL
}
stop() {
su -c '/opt/postgresql-13.12/bin/pg_ctl stop -m fast -D /opt/postgresql-13.12/data/ -l /opt/postgresql-13.12/log/postgresql.log' postgres
RETVAL=$?
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
*)
echo $"Usage: $0 {start|stop}"
esac
exit $RETVAL

4. 문제해결

해결방법은 전술한 의존성 있는 모듈 설치에 대한 내용을 참조한다.

4.1. configure: error: zlib library not found

configure 에서 발생한다.

zlib-devel 를 설치하거나 다음과 같이 --without-zlib 옵션을 추가한다.

$ ./configure \
--without-zlib \
--prefix=/opt/postgresql-13.12 > ../logs/postgresql-13.12/config.`date +%Y%m%d.%H%M%S`.log 2>&1

4.2. configure: error: readline library not found

configure 에서 발생한다.

readline-devel 를 설치하거나 다음과 같이 --without-zlib 옵션을 추가한다.

$ ./configure \
--without-readline \
--prefix=/opt/postgresql-13.12 > ../logs/postgresql-13.12/config.`date +%Y%m%d.%H%M%S`.log 2>&1

4.3. EPOLL_CLOEXEC 내지 EPOLLRDHUP 가 선언되어 있지 않다는 에러

postgresql-15.4 및 postgresql-14.9 는 CentOS 5.8 에서 컴파일 할 수 없다.

컴파일 에러의 직접적인 원인은 epoll.h 에 EPOLL_CLOEXEC 내지 EPOLLRDHUP 가 선언되어 있지 않는 것이지만, Linux Kernel 과 glibc 버전과 관련이 있다.

이에 대해서는 이 글의 도입부에서 기술한 내용을 참고하라.

4.4. 읽을거리

  • INSTALL : 설치방법에 대한 안내
제목

첨부파일