[Vagrant] Centos7 + GDAL(v.3.2.x, PostGres Support : yes) 설치법

식빵·2023년 11월 3일
0

CI CD

목록 보기
7/9
post-thumbnail
post-custom-banner

GDAL 설치를 해봅시다.

이번에 centos7 환경에 GDAL 이라는 라이브러리를 설치해야 될 일이 생겼습니다.
그래서 VirtualBox 에 먼저 설치해서 테스트하는 작업을 했는데,
이때 사용한 Vagrant 의 Vagrantfile 스크립트의 내용을 공유합니다.

참고1 : GDAL 라이브러리는 Postgres DB 와 통신하는 기능들이 몇몇 있습니다.
그런 기능을 동작시키기 위해서는 PostGres Support 를 활성화해야 하는데,
제가 한 설치 방법을 따라하면 자연스럽게 될 겁니다 😎

참고2 : 아마 어떤 분들은 yum install gdal 하면 되지 않냐? 라고
말씀하시겠지만, 그러면 상당히 낮은 버전을 다운 받습니다 😂




설치 방법

!!! 주의 !!!
이상하게 아래 스크립트를 복사하는 과정에서 들여쓰기가
잘 안될 때가 있습니다. 복붙하시고 나서 꼭 한번 확인해보시기 바랍니다!
Vagrantfile 은 ruby 문법을 사용하는데, ruby 는 python 처럼 들여쓰기가
구문을 나누는 역할을 합니다.

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|
  ## GDAL SERVER
  config.vm.define "gdal_server" do |gdal_server|
    gdal_server.vm.box = "generic/centos7"
    gdal_server.vm.hostname = 'gdal-server'
    gdal_server.vm.provider "virtualbox" do |vb|
      vb.name = 'gdal_server'
      vb.cpus = '2'
      vb.memory = '1024'
    end
    gdal_server.vm.provision :shell, :inline => "echo 'changing sshd config';sudo sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config; sudo systemctl restart sshd;", run: "always"
    gdal_server.vm.provision "shell", inline: <<-SHELL
      echo "GDAL INSTALLATION PROCESS START"

	  ############################ 1. 업데이트 ############################
      yum -y update
      
      
      ####################### 2. 필요한 패키지들 설치 #######################
      
      # 'Development Tools', readline-devel zlib-devel 는 postgresql 설치 시 필요
      # sqlite-devel 은 proj 설치 시 필요
      yum groupinstall -y 'Development Tools'
      yum install -y sqlite-devel readline-devel zlib-devel
      
      ################# 3. proj 설치. gdal 설치시 필요. ####################
      cd /opt
      wget https://download.osgeo.org/proj/proj-6.1.0.tar.gz
      tar -xvf proj-6.1.0.tar.gz
      cd proj-6.1.0
      ./configure
      make
      make install
      
      ########################  4. POSTGRESQL 설치 ########################
      cd /opt
      wget https://ftp.postgresql.org/pub/source/v15.3/postgresql-15.3.tar.gz
      tar -xvf postgresql-15.3.tar.gz
      cd postgresql-15.3
      ./configure
      make
      make install

      ##### 4-1. postgresql 테스트하고 싶다면?
      # PGPASSWORD=postgres /opt/postgresql-15.3/src/bin/psql/psql -h 192.168.56.1 \
      # -p 10011 -d postgres postgres -c "\dt"
      

	  ###################### 5. Postgresql 추가 설정 ###########################
	  ##### 5-1. psql 사용 편의성을 위해서 소프트 링크 추가
      ln -s /usr/local/pgsql/bin/psql /usr/local/bin/

      ##### 5-2. gdal 설치시 libpq.so.5 참조함. 이를 위해서 소프트 링크 추가
      ln -s /usr/local/pgsql/lib/libpq.so.5 /usr/lib64/libpq.so.5
      ll  /usr/local/pgsql/lib/libpq.so.5
      ll  /usr/lib64/libpq.so.5
      
      ##### 5-3. ln 설정을 실적용
      ldconfig


	  ############################## 6. gdal 설치  ##################################
	  cd /opt
      wget https://github.com/OSGeo/gdal/releases/download/v3.2.1/gdal-3.2.1.tar.gz
      tar -xvf gdal-3.2.1.tar.gz
      cd gdal-3.2.1
      PKG_CONFIG_PATH=/usr/local/pgsql/lib/pkgconfig ./configure --with-proj=/usr/local --with-pg 
      make -j2 # 엄청 오래 걸린다. 한 20분 정도? 걸린다.
      make install

      ################################ 7. 부가 작업 ################################
      echo "alias ll='ls -alF --color=auto'" | sudo tee -a /etc/bashrc
    SHELL
    gdal_server.vm.network "private_network", ip: "192.168.31.12"
  end
end




테스트 방법

설치를 끝내고 테스트도 해보고 싶으신 분들을 위한 목차입니다.
vagrant ssh gdal_server 를 통해서 먼저 vm 내부로 들어가시기 바랍니다.


1. psql 테스트

postgresql client 프로그램인 psql 을 테스트해봅시다.
아래처럼 입력해서 해서 db 내에 테이블 목록들이 보인다면 성공입니다.

## Host OS 에 설치한 DB 와 통신하는 간단한 테스트
PGPASSWORD=postgres psql -h 192.168.56.1 \
-p 10011 -d postgres postgres -c "\dt"

2. gdal 테스트

gdalinfo --version 이라고 한번 입력해보시기 바랍니다.
아래처럼 출력되면 좋은 신호입니다.

[vagrant@gdal-server ~]$ gdalinfo --version
GDAL 3.2.1, released 2020/12/29

ogr2ogr 도 테스트해보겠습니다.
테스트 내용은 아래와 같습니다.

  • csv => postgresql table 로 등록
  • shp => postgresql table 로 등록

### CSV => Postgresql DB Table 생성 테스트
cd /tmp
sudo tee ogr_csv_test.csv > /dev/null << EOT
id,name
1,dailyCode1
2,dailyCode2
3,dailyCode3
EOT
ogr2ogr -f PostgreSQL -overwrite -nln public.ogr_csv_test \
PG:"dbname='postgres' host='192.168.56.1' port='10011' user='postgres' password='postgres'" \
"./ogr_csv_test.csv" -progress

### SHP => Postgresql DB Table 생성 테스트
cd /tmp
wget http://www.gisdeveloper.co.kr/download/admin_shp/ctprvn_20230729.zip 
unzip ctprvn_20230729.zip -d ./cptrvn
cd cptrvn
PGCLIENTENCODING=EUC-KR ogr2ogr \
-f PostgreSQL PG:"dbname='postgres' host='192.168.56.1' port='10011' user='postgres' password='postgres'" \
./ctprvn.shp -lco GEOMETRY_NAME=geom -lco FID=gid -lco SPATIAL_INDEX=GIST \
-nlt PROMOTE_TO_MULTI -nln ctprvn_test -overwrite -progress
  • 당연하지만 위 설정에서 dbname, host, port, user, password 등은 모두
    여러분들의 DB 정보를 사용해야 됩니다.
  • PGCLIENTENCODING=EUC-KR 는 connection 중에 인코딩 에러 나면 사용하세요!

참고: ERROR 1: PQconnectdb failed. 해결법

# 아래 명령어 입력해보고, 출력확인
netstat -rn

# 예시로 출력이 아래처럼 나온다고 가정해보죠.
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG        0 0          0 eth0
10.0.2.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.31.0    0.0.0.0         255.255.255.0   U         0 0          0 eth1

여기서 Gateway 가 0.0.0.0 이 아닌 IP 를 사용하면 host 에 접근 가능합니다.
위와 같이 출력되면 10.0.2.2 을 사용하면 되겠죠?

그러니 에러가 나시는 분들은 PostgreSQL PG:"host='10.0.2.2' ... 생략...
처럼 host 옵션의 값을 수정하고 다시 테스트하시길 바랍니다~

참고: https://superuser.com/questions/310697/connect-to-the-host-machine-from-a-virtualbox-guest-os



참고: 로컬 PC 의 테스트 파일을 vm 에 넣는 법

vagrant upload "로컬 pc 파일 또는 디렉토리 경로" "vm 내의 파일 또는 디렉토리 경로" gdal_server
  • 참고로 vm 내의 디렉토리가 존재하지 않으면 새로 생성하게 됩니다.
profile
백엔드를 계속 배우고 있는 개발자입니다 😊
post-custom-banner

0개의 댓글