이번에 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 내부로 들어가시기 바랍니다.
postgresql client 프로그램인 psql 을 테스트해봅시다.
아래처럼 입력해서 해서 db 내에 테이블 목록들이 보인다면 성공입니다.
## Host OS 에 설치한 DB 와 통신하는 간단한 테스트
PGPASSWORD=postgres psql -h 192.168.56.1 \
-p 10011 -d postgres postgres -c "\dt"
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
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
vagrant upload "로컬 pc 파일 또는 디렉토리 경로" "vm 내의 파일 또는 디렉토리 경로" gdal_server