ENVI 5.6 Linux용 설치 경험(작성 중 : 2020. 08. 23.)

Ubuntu 20.04.1 LTS에 ENVI 5.6을 설치하여 보았습니다. IDL 8.8도 같은 방법으로 설치합니다.

ENVI 5.6은 Linux Kernel 2.x 버전을 지원하지 않습니다. Kernel 2.x를 사용하는 대표적인 버전이 Redhat 6.x 계열(CentOS 6.x 계열)입니다. Redhat6.x 계열은 2018년에 6.10 이 출시된 OS로 여전히 현역이지만, 안타깝게도 IDL 8.8, ENVI 5.6은 Kernel 3.10.0 이상부터 지원합니다(Redhat 7 계열 이후입니다).

기본설치

  • 늘 그렇듯이 envi56-linux.tar.gz 을 다운받습니다. 이후 자유로운 Linux의 특성상 설치 폴더 등은 자유롭게 지정할 수 있지만 디폴트 설치의 예를 들겠습니다.
  • /usr/local/harris 폴더를 만듭니다. (기존에 다른 버전이 있었다면 새로 만들 필요도 없고, 과거 버전을 지울 필요도 없습니다).
  • 다운받은 파일을 /usr/local/harris 아래에 envi56-linux.tar.gz 을 복사합니다.
  • envi56-linux.tar.gz 의 압축을 풉니다. # sudo tar -zxvf envi56-linux.tar.gz
  • 압축을 풀어서 나온 install.sh 를 실행합니다. # sudo ./install.sh
  • 다시 세부적으로 압축을 풀며 설치를 진행합니다. 사용 동의 사항을 물어보는 부분은 당연히 y 입니다.
  • 설치 폴더는 디폴트 /usr/local/harris 로 할 것이면 그냥 엔터를 쳐도 됩니다.
  • ENVI 도움말을 설치할 것인지, IDL DICOM Network Service를 실행할 것인지 등을 묻는데, 도움말은 설치하고(y), DICOM은 의료 영상이어서 일반적으로 n입니다.
  • 제시한 심볼릭 링크를 받아들이는 것이 일반적입니다. 이렇게 되면 /usr/local/bin 에 실행파일들과 관련된 심볼릭 링크가 생성됩니다. /usr/local/bin은 대부분의 사용자가 PATH로 잡아 놓게 되기 때문에, 따로 경로 설정 없이 idl 이나 envi 명령으로 IDL과 ENVI를 실행할 수 있게 됩니다.
  • 라이선스 관리자(harrislicense)를 실행할 것인지 마지막에 묻는데, y 로 지금 실행해도 되고, 추후에 # harrislicense 명령으로 언제든 실행할 수 있습니다.

libtinfo.so.5 가 없다고 나옵니다.

harrislicense 프로그램이나, idl, envi 모두 idl이 실행되어야 하는 프로그램이므로, 시스템에 libtinfo.so.5가 없다면 다음과 같은 에러가 발생합니다. (다른 소프트웨어 설치 중에 필요해서 이미 설치된 경우가 아니라면, OS 설치 시 디폴트로 설치되는 것은 아닌 것 같습니다. OS에서 추가로 설치하면 되니 이 부분은 간단하게 넘길 수 있습니다).

yi@gompyo:/usr/local/harris$ sudo harrislicense
/usr/local/harris/envi56/idl88/bin/bin.linux.x86_64/idl: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

yi@gompyo:/usr/local/harris$ idl
/usr/local/harris/envi56/idl88/bin/bin.linux.x86_64/idl: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

위와 같이 libtinfo.so.5가 없으면 아무것도 실행되지 않습니다.
UBUNTU에서는 아래와 같이 Libtinfo5 버전을 설치하였습니다.

yi@gompyo:/usr/local/harris$ apt-cache search libtinfo
libncurses-dev – developer’s libraries for ncurses
libtinfo-dev – transitional package for libncurses-dev
libtinfo6 – shared low-level terminfo library for terminal handling
libtinfo5 – shared low-level terminfo library (legacy version)
yi@gompyo:/usr/local/harris$ sudo apt install libtinfo5 #이 부분만 실행하면 됩니다.

CentOS(Redhat에서는 libtinfo 패키지를 바로 찾을 수는 없었는데, ncurses-compat-libs.x86_64를 설치하면 libtinfo5가 함께 설치됩니다.

[root@hite ~]# yum install ncurses-compat-libs.x86_64

대부분의 경우 여기까지 진행하면 ENVI, IDL의 설치는 완료됩니다. harrislicense 프로그램을 이용하여 라이선싱(라이선스 활성화)을 진행하십시오.

GSF 설치

ENVI 서버를 실행하기 위해서는 GSF(Geospatial Service Framework)를 설치해야 합니다. GSF 는 ISO(디스크 파일)로 제공되며, 디스크 안에 Windows 폴더와 Linux 폴더가 있습니다. (Windows 의 경우 디스크만 인식하면 자동으로 설치합니다. 별로 할 일이 없습니다).

GSF23.ISO 디스크의 Linux 폴더

자세한 설명은 위 그림에 보이는 INSTALL_LINUX.html 에 친절하게 기술되어 있습니다. 정말 저대로 따라하니 되었습니다. INSTALL_LINUX.html 에 기술되어 있는 내용을 제가 따라하며 겪은 내용을 공유합니다.

  • Python2가 필요합니다. 요즘 리눅스 배포판에는 디폴트 설치가 Python3 만 설치되는 경우가 있는 것 같습니다.
  • g++ 이 필요합니다. 각 OS 배포판에 맞게 g++을 설치하십시오.
  • node.js과 redis가 먼저 설치되고, 그 위에 GSF를 설치하게 됩니다. 문서에서는 node.js와 redis를 직접 컴파일해서 설치하는 방법을 알려주고 있습니다. 저는 그렇게 따라해서 설치는 잘 되었습니다(어렵지는 않았습니다). 다만 node.js는 컴파일 시간이 꽤 오래 걸렸습니다(make 단계). 그래서인지 문서에서도 node.js는 Linux 배포판에서 제공하는 것을 찾아 설치하는 벙법이 있다고 알려주고 있습니다.

Node.js 설치

  • cd /media/linux # 마운트 포인트에 따라 조금 다를 수 있습니다. 제 경우는 /media/yi/GSF23/linux 였습니다. GSF 디스크의 linux 폴더입니다.
  • mkdir ~/nodejs_tmp #홈디렉토리에 임시로 파일을 풀 곳을 만듭니다.
  • tar -xvf node*.gz -C ~/nodejs_tmp # 압축을 임시 폴더에 풀어 놓습니다.
  • cd ~nodejs_tmp/node* # 압축을 푼 곳에 작업 디렉토리로 이동
  • ./configure
  • ./make # 컴파일이 진행됩니다. 오래 걸립니다.
  • ./make install # 실제 설치입니다. 금방 끝납니다.
  • node -e “console.log(‘Hello from Node.js ‘ + process.version)” # 잘 설치되었는지 테스트
  • rm -r ~/nodejs_tmp # 임시 폴더를 삭제합니다.

Redis 설치

설치과정은 Node.js 와 거의 같습니다. 설치시간(컴파일 시간)은 훨씬 짧기 때문에, Node.js를 설치한 경우라면 Redis는 쉽습니다(이미 필요한 설치 도구 – g++ 등 – 이 모두 완비된 상태).

  • cd /media/linux #역시 마운트 포인트에 따라 조금 다를 수 있습니다.
  • mkdir ~/redis_tml #홈디렉토리에 임시로 파일을 풀 곳을 만듭니다.
  • tar -xvf redis.gz -C ~/redis_tmp # 압축을 임시 폴더에 풀어 놓습니다.
  • cd ~/redis_tmp/redis* # 압축을 푼 곳에 작업디렉토리로 이동
  • ./make # Node.js에 비하면 컴파일 금방 끝납니다.
  • ./make install
  • cd utils
  • ./install_server.sh #백그라운드 데몬을 설치합니다. 질문에 디폴트(엔터)를 계속 선택하면 됩니다. 저는 아래와 같이 디폴트 설정을 모두 수용하였습니다.

yi@gompyo:~/redis_tmp/redis-3.2.3/utils$ sudo ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server
Please select the redis port for this instance: [6379]
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf]
Selected default – /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log]
Selected default – /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379]
Selected default – /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server]
Selected config:
Port : 6379
Config file : /etc/redis/6379.conf
Log file : /var/log/redis_6379.log
Data dir : /var/lib/redis/6379
Executable : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service…
Success!
Starting Redis server…
Installation successful!
yi@gompyo:~/redis_tmp/redis-3.2.3/utils$

Redis 서비스 테스트는 다음과 같이 해 볼 수 있습니다.

yi@gompyo:/media/yi/GSF23/linux$ redis-cli ping
PONG

Redis 서비스 중지/시작/상태확인은 다음과 같이 수행합니다.

$ /etc/init.d/redis_6379 stop
$ /etc/init.d/redis_6379 start
$ /etc/init.d/redis_6379 status

yi@gompyo:/media/yi/GSF23/linux$ /etc/init.d/redis_6379 status
Redis is running (767)

  • rm -r ~/redis_tmp # 임시 파일을 삭제합니다.

Redis 설치 완료!

GSF 설치

GSF 는 상용 S/W이고 컴파일 없이 설치합니다(make 과정이 없습니다). 압축 풀어 install 프로그램을 실행합니다.

  • cd /media/linux # 마운트 포인트에 따라 조금 다를 수 있습니다.
  • mkdir ~/gsf_tmp # 홈디렉토리에 임시 폴더를 만듭니다.
  • tar -xvf gsf*setup.tgz -C ~/gsf_tmp # 임시 폴더에 압축을 풉니다.
  • cd ~/gsf_tmp/gsf*
  • ./install_unix.sh # 이 명령으로 설치는 완료됩니다.
  • rm -r ~/gsf_tmp # 임시 폴더 삭제

설치과정 중에 묻는 내용은 다음과 같습니다.

Do you accept all of the terms of the preceding license agreement? (y/n): y

Please enter the directory to install in [/opt/gsf23]:
Installing files to /opt/gsf23…

Do you want to configure the IDL Service Engine now [y/n]? y

Please enter the directory of the IDL installation. [/usr/local/harris/envi55/idl87]:
/usr/local/harris/envi/idl # 두 개의 IDL 버전 8.7 & 8.8 이 설치되어 있는데 디폴트는 구버전으로 잡히는 것 같습니다. 새 버전의 설치 폴더를 입력하였습니다.

Do you want to configure the ENVI Service Engine now [y/n]? y
Please enter the directory of the ENVI installation. [/usr/local/harris/envi55]:
/usr/local/harris/envi #두개의 ENVI 버전 5.5 & 5.6이 설치되어 있는데 디폴트는 구 버전으로 잡히는 것 같습니다. 새 버전의 설치 폴더를 입력하였습니다.

Please specify the number of concurrent workers [1]:
2
# 워커(worker)는 동시 진행 프로세스의 최대값입니다. ENVI 라이선스에 디폴트로 2개의 ENVI Task Engine이 포함되어 있으므로 일반적으로 2가 적당합니다. 추후에 변경 가능합니다.

Please specify the external address by which your machine may be accessed [gompyo]:
# 컴퓨터 이름입니다. 디폴트를 수용하였습니다.

Enter the path to the workspace location [/var/opt/gsf/workspace]:
# Workspace는 ENVI Server가 실행되어 결과들이 저장(또는 임시저장)되는 곳입니다. 다른 컴퓨터의 ENVI와 연동할 계획이라면, 이 폴더는 확인해 두어야 합니다. 저는 디폴트 수용.

이후 GSF 서비스가 실행(Startup)되는 과정과 9191 포트로 서비스하는 과정, 그리고
– gsf 운영 관련하여 서비스를 중단, 실행, 재실행 하는 방법,
– 로그가 저장되는 곳
– 설정 파일을 바꿀 수 있는 곳(config.json)
등을 리포트 하고 설치가 완료됩니다.

추후에 GSF 서비스가 자동으로 등록되지 않아서 서비스 목록에 등록하고자 할 경우 gsfxx (xx는 버전) 폴더에서 다음을 실행하면 됩니다. (일반적으로는 위 설치 과정에서 이미 등록이 완료됩니다). 제 경우 gsfxx 폴더는 /opt/gsf23/ 이었습니다. 설치과정에서 해당 폴더를 선택할 수 있습니다. 디폴트가 /opt/gsf23

  • node service add

Linux GSF 설치 시 node.js 와 redis 설치의 다른 방법

리눅스에 GSF를 설치할 때(물론 ENVI 5.6을 제일 먼저 설치합니다 그 후에) Node.js, Redis, GSF 의 순으로 설치합니다. 이 중 Node.js와 Redis는 리눅스 배포판에서 제공하는 패키지로 설치할 수 있습니다.

CentOS 7 에서 node.js를 설치하는 방법은 다음과 같습니다.

;먼저 Extra Packages for Enterprise Linux를 설치합니다.
# yum install epel-release

;그리고 node.js를 설치합니다.
# yum install nodejs

; 설치가 잘 되었는지 확인을 해 볼 수 있습니다.
# node –version
v6.17.1 (버전은 리눅스 배포판에 따라 달라집니다).

CentOS 7 에서 Redis를 설치하는 방법은 다음과 같습니다.

# yum install redis.x86_64

; 이후 redis를 서비스로 등록합니다.
# systemctl enable redis
# systemctl start redis
; redis 서비스가 잘 되는지 테스트를 해 볼 수 있습니다.
# redis-cli ping
PONG

GSF는 상용 소프트웨어이므로 L3Harris에서 배포하는 패키지를 설치합니다.