본문 바로가기
데이터베이스/Postgresql

postgis 확장모듈 소스 컴파일 설치

by cbwstar 2023. 2. 5.
728x90
반응형

설치운영체제 centos8 stream 버전

postgis를 설치하기 위해서는 순서대로 의존성을 설치후 마지막에 설치를 하여야 한다.

 

설치 버전 정보

1. postgresql-15.0

2. geos-3.8.0

3. proj-6.2.1

4. cgal-4.14.2

5. sfcgal-v1.3.7

6. gdal-3.5.3

7. postgis-3.3.1

 

직접 소스를 컴파일 해서 설치 하는 경우 os배포판과 분리 하기 위해서 각 패지지 설치 경로를 만든다.

1. geos 소스 컴파일 설치

./configure --prefix=/apps/geos

make all

make install

 

2. proj6.6 소스 컴파일 설치

sqlite 의존성 패키지를 먼저 설치한다.

yum install sqlite-devel.x86_64

./configure --prefix=/apps/proj

make all

make install

잘 설치 되었는지 설치 라이브러리 확인

ldd /apps/proj/bin/proj

 

3. cgal 설치

의존성 설치

yum -y install epel-release

yum -y install cmake3

yum install gmp-devel.x86_64

yum install mpfr-devel.x86_64

yum install boost-devel.x86_64

yum install PackageKit-Qt5-devel.x86_64

 

cmake3 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/apps/cgal

make all

make install

 

4.sfcgal 설치

CGAL_DIR=/apps/cgal cmake3 -DCMAKE_INSTALL_PREFIX=/apps/sfcgal -DCMAKE_BUILD_TYPE=Release .

 

OS 배포판에 설치된 c++ 컴파일 환경에서는 빌드 과정에서 nullptr 오류가 발생할 수 있습니다. 이 부분운 CMakeFiles/3.20.2/CMakeCXXCompiler.cmake 파일에, 
set(CMAKE_CXX_STANDARD "11") 
줄도 하나 추가해 주어야 합니다.

추가후에 아래 명령어 실행하여 컴파일 한다.

LD_RUN_PATH=/apps/cgal/lib64 make all && make install

 

설치후에 sfcgal 라이브러리 참조 확인

ldd /apps/sfcgal/lib64/libSFCGAL.so.1.3.7

 

libCGAL_Core,libCGAL 이 두 라이브러리가 소스를 컴파일해서 설치한 위치의 라이브러리를 참조해야 합니다.

 

5. GDAL 설치

가장 거대한 라이브러리라서 컴파일 시간이 아주 오래 걸림

./configure \
--prefix=/apps/gdal \
--with-proj=/apps/proj \
--with-geos=/apps/geos/bin/geos-config \
--with-sfcgal=/apps/sfcgal/bin/sfcgal-config
sfcgal 패키지 설치가 번거로워 만들지 않았다면, 빼도 상관 없습니다. 
gdal 빌드 환경 설정 작업은 OS 배포판으로 설치된 패키지들이 있다면 위와 같이 특별히 옵션을 지정하지 않아도 추가 가능한 환경이면 자동으로 추가합니다.
이 빌드 환경 설정이 끝나면, gdal 빌드 요약 정보를 쭉 보여줍니다. 여기서 꼭 필요한 드라이버나 기능들이 있다면, 그 관련 라이브러리와 헤더를 설치하고, 다시 configure 작업을 하면 됩니다. 
 
예를 들어, configure 요약 화면에, 
LIBPNG support:            no
이렇게 보이는데, png 이미지 변환이 필요하다면, libpng, libpng-devel 패키지를 yum 명령으로 설치하고 다시 configure 작업을 하면 됩니다.
다음 make 하기 전, sfcgal 라이브러리를 사용한다면, 이 라이브러리에 대해서는 rpath 설정이 잘 안됩니다. 그래서,  GNUmakefile 파일을 좀 수정할 필요가 있습니다.  -R 옵션으로 sfcgal 라이브러리가 있는 경로를 지정해줍니다.
$(LIBGDAL):     $(GDAL_OBJ:.o=.lo)
        $(LD) $(LDFLAGS) $(LIBS) -o $@ \
        $(wordlist 1,$(MIDL),$(SORTED)) \
        $(wordlist $(MIDR),$(words $(SORTED)),$(SORTED)) \
            -rpath $(INST_LIB) \
            -R /apps/sfcgal/lib64 \
            -no-undefined \
            -version-info $(LIBGDAL_CURRENT):$(LIBGDAL_REVISION):$(LIBGDAL_AGE)
 

make all

make install

 

5. 마지막 postgis 설치

의존성 설치

yum -y install json-c-devel protobuf-c-devel

yum install libxml2-devel.x86_64

 

/* 환경설정 명령이 기존과 좀 다름 복사해서 필요한 부분 수정후 실행 */

PKG_CONFIG_PATH=/apps/proj/lib/pkgconfig:/usr/lib64/pkgconfig \

LDFLAGS="-Wl,-rpath,/apps/geos/lib:/apps/proj/lib:/apps/sfcgal/lib64:/apps/gdal/lib -Wl,--enable-new-dtags" \

./configure \

  --with-pgconfig=/apps/postgresql-15.0/bin/pg_config \

  --with-geosconfig=/apps/geos/bin/geos-config \

  --with-gdalconfig=/apps/gdal/bin/gdal-config \

  --with-sfcgal=/apps/sfcgal/bin/sfcgal-config

 

make all

make install

POSTGIS 모듈을 데이터베이스에서 사용하기

CREATE EXTENSION POSTGIS

postgis 모듈이 잘 설치 되었다면, 데이터베이스 서버에서 CREATE EXTENSION 명령으로 해당 모듈을 등록해서 사용하면 됩니다.

psql 접속

GDAL 드라이버

래스터 자료를 다루기 위해, gdal 라이브러리를 포함해서 postgis 모듈을 만들었다면, (기본값) 이미지 변환 관련 작업을 gdal 라이브러리를 이용해서 할 수 있습니다. 이 때 사용할 각 이미지 처리용 드라이버를 지정할 수 있는데, 이것은 postgis.gdal_enabled_drivers 데이터베이스 서버 환경 변수로 지정할 수 있습니다. 즉 postgresql.conf 파일에 지정하거나, SET 명령으로 데이터베이스별, 세션별로 지정할 수 있습니다.
 
기본 값이 모든 드라이버를 사용하지 않음으로 되어 있기 때문에, 이미지 변환 관련 작업을 gdal 라이브러리를 통해서 하려면, 사용 가능한 드라이버들을 지정해 주어야합니다.

에러발생시 확장팩 설치

create extension postgis_raster;

 

이런 상황에서는 st*gdal* 관련 함수가 정상 작동하지 않습니다.  그래서, 해당 서버는(또는 데이터베이스는, 또는 세션은) 사용할 수는 gdal 이미지 처리용 드라이브를 지정하는 작업을 해야합니다.

SET postgis.gdal_enabled_drivers = 'ENABLE_ALL';

이 set 작업은 postgresql.conf에 지정할 수 있고(reload로 반영 가능), 쉘에서 OS 환경 설정 값으로 지정할 수 있습니다.
export POSTGIS_GDAL_ENABLED_DRIVERS=ENABLE_ALL
이 설정은 반드시 데이터베이스 서버가 실행되는 쉘에 미리 지정되어야 있어야 서버가 시작되면서 이 설정값을 사용합니다.
설치가 끝났습니다.
728x90
반응형

댓글



"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

loading