Commit 2d619d0a authored by HooYoungAhn's avatar HooYoungAhn
Browse files

upload manual 1903

parent 79e12f98
Pipeline #809 canceled with stages
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 인공지능 프레임워크 개요
---
KSB 인공지능 프레임워크는 다양한 학습모델과 지식/경험을 선택조합하여 서비스를 생성할 수 있는 DIY 자가학습형 지식융합 인공지능 서비스 프레임워크를 지향합니다.
분산병렬 인프라를 기반으로, 다양한 데이터 소스로부터 도메인의 응용서비스를 제공하기까지의 전주기적 솔루션을 지향합니다. 데이터의 수집-적재-처리-분석-서빙에 이르는 시스템을 구성할 수 있는 프레임워크 기능과 이를 실행하고 운영할 수 있는 플랫폼 기능을 제공합니다.
KSB 인공지능 프레임워크는 프레임워크 개발자들이 기능을 확장할 수 있도록 컴퍼넌트와 API를 개발할 수 있는 인터페이스를 제공합니다. 또한 개발자들에 의해서 만들어진 컴퍼넌트나 API 들을 이용하여 응용을 개발하고 실행하도록 하는 사용자 인터페이스를 제공합니다.
KSB 인공지능 프레임워크의 **주요 이해관계자** 는 다음과 같습니다.
- **<span style="font-size: 14pt; color:green">응용 개발자</span>** KSB 인공지능 프레임워크에 탑재된 모듈 및 소프트웨어 컴퍼넌트를 이용하여 응용을 개발하고 이를 실행하여 최종사용자에게 응용을 이용한 서비스를 제공하고자 하는 자
- **<span style="font-size: 14pt; color:green">개발자</span>** 프레임워크 기능을 확장할 수 있도록 컴퍼넌트와 API를 개발하는 자로서 **소프트웨어 컴퍼넌트 개발자**, **파이썬 모듈 개발자**, **지식전문가** 가 포함됩니다.
- **소프트웨어 컴퍼넌트 개발자** 프레임워크의 개발자 인터페이스를 통하여 새로운 소프트웨어 컴퍼넌트를 개발하여 프레임워크에 탑재하는 자
- **파이썬 모듈 개발자** 프레임워크에서 제시하는 인터페이스를 만족하는 파이썬 모듈을 개발하여 프레임워크에 탑재하는 자
- **지식 전문가** 경험이나 지식을 구조화하여 저장하고 이를 활용할 수 있도록 인터페이스를 생성하여 탑재하는 자
- **<span style="font-size: 14pt; color:green">운용자</span>** 프레임워크를 통해 실행된 시스템(엔진)들을 중단없이 안정적으로 실행되도록 자원을 할당하고 운영하고자 하는 자
- **<span style="font-size: 14pt; color:green">관리자</span>** 프레임워크 및 웹툴킷 사용자에 대한 관리 및 시스템 전반적인 관리를 담당하는 자
- **<span style="font-size: 14pt; color:green">최종사용자</span>** 프레임워크를 통해 실행된 응용 시스템으로부터 제공되는 서비스를 최종적으로 제공받는 자
---
## 주요개념
KSB 인공지능 프레임워크는 유기적인 관계에 있는 일련의 작업의 흐름을 **워크플로우** 라는 개념으로 정의합니다. 워크플로우는 독립적인 실행 시스템에 해당하는 단위인 **엔진** 을 하나 이상 선언함으로써 정의될 수 있습니다. 독립적인 논리 배포단위인 **엔진** 은 엔진의 틀에 해당하는 **엔진 컨테이너** 에 필요한 **컴퍼넌트** 를 선언함으로써 정의됩니다. 이러한 과정에 의해 정의된 워크플로우 스펙에 따라 프레임워크는 실행시스템을 동적으로 구성하고, 이를 도메인의 응용에 필요한 서비스를 제공하도록 클러스터 상에 실행합니다.
### 워크플로우
일련의 작업을 정의하고 실행하기 위한 단위입니다. 하나의 워크플로우는 하나 이상의 엔진컨테이너의 정의로 구성될 수 있으며, 워크플로우를 구성하는 각각의 엔진들은 배치실행과 동시실행 방식으로 구동될 수 있습니다.
- **배치실행 방식** 엔진의 순서정보에 의해 순차적으로 일련의 엔진이 실행되고 종료되는 방식
- **동시실행 방식** 워크플로우에 정의된 엔진이 동시에 실행되는 방식
### 엔진컨테이너
엔진컨테이너는 워크플로우 상에서 필요한 목적에 맞게 구성할 수 있는 하나의 실행 시스템인 엔진에 대한 틀로서, 엔진컨터이너 상에 컴퍼넌트들을 탑재하여 각 컴퍼넌트의 값을 설정하여 엔진에 대한 정의를 합니다. 엔진의 유형은 현재 총 12 종이 제공되고 있으며, 자세한 내용은 <a href="./2.4.1.EngineTypeList.html">엔진 유형 목록</a>을 참조하시기 바랍니다.
### 컴퍼넌트
엔진컨테이너를 구성하는 구성체로서, 5가지의 컴퍼넌트의 유형이 존재하며 각각 다음과 같은 역할을 수행합니다.
- **Reader** 데이터 발생지로부터 데이터를 읽어오기 위한 컴퍼넌트 유형
- **Writer** 데이터 저장소로 데이터를 출력하기 위한 컴퍼넌트의 유형
- **Operator** 데이터를 처리하기 위한 컴퍼넌트의 유형
- **Runner** 실행 런타임을 실행하기 위한 컴퍼넌트 유형
- **Controller** 엔진컨테이너 내의 처리절차를 구성하고 실행을 주관하는 컴퍼넌트의 유형
현재 프레임워크 상에는 데이터처리/학습/서빙 관련 총 73종의 컴퍼넌트가 탑재되어 있으며, 자세한 내용은 <a href="./2.4.2.ComponentList.html">컴퍼넌트 목록</a>을 참조하시기 바랍니다. 개략적인 분류는 다음과 같습니다.
- **데이터 수집/처리 컴퍼넌트 (62종)**: 수집/적재 17종, 미니배치 32종, 실시간 처리 13종
- **학습 SW (2종)**: 분산텐서플로우 스케툴러(CoDDL), AutoSparkML
- **모델서빙 관련 컴퍼넌트 (3종)**: 온디맨드 DL 모델 서빙, 스트림 DL 모델서빙, 스트림 ML모델서빙
- **융합서빙 관련 컴퍼넌트 (6종)**: 컨트롤러 1종, 오퍼레이터 5종
------
## KSB 인공지능 프레임워크 SW v19.03 구성요소
### KSB 클라이언트
**KSB 클라이언트** 는 워크플로우를 작성하고, 이를 **KSB 프레임워크** 에서 구동하도록 지시하기 위해 **KSB 프론트엔드** 로 요청하는 역할을 수행하는 도구입니다. **KSB 프레임워크** 의 클라이언트 모듈은 웹기반의 클라이언트 모듈인 **KSB 웹툴킷** 과 스칼라 기반의 클라이언트 모듈인 **KSB Client SDK** 두 가지 형태로 제공됩니다.
#### KSB 웹툴킷
**KSB 웹툴킷** 은 워크플로우를 정의할 수 있는 편집기, 워크플로우를 실행하고 제어하기 위한 모니터링, 데이터의 업로드 및 시각화 등을 웹 방식의 그래픽 환경에서 수행할 수 있도록 제공되는 클라이언트 모듈입니다. 자세한 내용은 <a href="./2.1.IntroductionWebToolkit.html">KSB 웹툴킷 소개</a> 를 참조하시기 바랍니다.
#### KSB Client SDK
**KSB Client SDK** 는 스칼라(자바) 기반의 클라이언트 개발도구로서, 개발자가 **KSB 프레임워크** 상에서 실행하고자 하는 워크플로우를 개발할 수 있는 환경과 작성한 워크플로우를 실행할 수 있는 API 를 함께 제공합니다 (자세한 설명은 <a href="./3.1.HowToConfigureDevelopEnvironment.html">KSB 프레임워크 SW 개발환경 구성</a>을 참조). 또한 **KSB 프레임워크** 상에 실행가능한 다양한 종류의 워크플로우 예제를 포함하고 있으므로, 이를 참조하여 다양한 워크플로우 시나리오 예제를 작성할 수 있습니다.
### KSB 프론트엔드
**KSB 프론트엔드****KSB 웹툴킷** 이나 **KSB Client SDK** 를 이용하여 작성된 워크플로우 스펙을 받아서 **KSB 오케스트레이터** 로 넘겨 줌으로써 워크플로우를 수행하도록 하는 매개역할을 수행합니다. 이 외에도 사용자 관리나 저장소 관리 등의 다양한 요청에 대해 대응하는 front-end 로서의 역할을 수행합니다.
### KSB 메세지 인터페이스
**KSB 메세지 인터페이스** 는 각 컴퍼넌트들에 대한 속성값을 정의하고 값을 전달하기 위한 **KSB 메세지 인터페이스** 객체에 해당합니다.
### KSB 오케스트레이터
**KSB 프론트엔드** 로부터 넘겨받은 워크플로우 사양에 따라 필요한 엔진을 구성하여 실행하도록 요청하고, 각각의 엔진에 대한 구동과 종료 및 제어를 수행하는 등의 역할을 수행합니다.
### KSB 엔진 컴퍼넌트
엔진컨테이너를 구성하는 구성체로서 5가지 유형이 있으며, 이들 5가지의 컴퍼넌트의 조합에 의해 엔진이 생성됩니다. 현재 **KSB 프레임워크** 에는 약 73종 이상의 컴퍼넌트가 구현되어 있습니다. ( 상기 **컴퍼넌트** 설명 참조 )
### KSB 연동플랫폼
**KSB 프레임워크** 는 목적에 따른 다양한 외부 실행 플랫폼과 연동할 수 있는 인터페이스를 제공합니다. 각각의 **KSB 연동플랫폼****엔진컴퍼넌트****Runner** 에 의해 연동과 실행이 제어됩니다. 현재 **KSB 프레임워크** 에는 Spark, Tensorflow, Tensorflow Serving, Jena Knowledge Base 등을 연동하기 위한 모듈이 각각의 **Runner 컴퍼넌트** 로 구현되어 있습니다.
### KSB 저장소
**KSB 프레임워크** 는 수집한 데이터를 적재하기 위한 저장소인 **데이터 저장소**, 자원이나 응용에 필요한 자원이나 룰, 컨텍스트 정보 등을 저장할 수 있는 **자원/룰 저장소**, 프레임워크 자체적인 워크플로우를 보관하기 위한 **워크플로우 저장소**, 크게 3가지 유형의 저장소 기능을 제공합니다.
------
## KSB 배포
**KSB 인공지능 프레임워크**<a href="https://csleoss.etri.re.kr">KSB 인공지능 프레임워크 웹페이지</a> 를 통해 **툴박스 버전****클러스터 버전**, 두 가지의 배포버전에 대한 설치방법을 제공하고 있습니다.
### KSB 툴박스
**KSB 툴박스****KSB 웹툴킷** 과 stand-alone 버전의 **KSB 런타임(실행환경)** 을 지원하는 툴박스 형태의 **KSB 프레임워크** 로서, 사용자의 로컬환경에서 KSB 프레임워크 실행환경을 쉽고 빠르게 구성하여 사용하기 위한 환경을 제공합니다.
### KSB 클러스터
**KSB 클러스터** 는 실제 클러스터 환경에서 운영하기 위한 배포 형태로서 **KSB 웹툴킷** 과 분산병렬 버전의 **KSB 런타임** 을 지원하는 **KSB 프레임워크** 로 구성되어 있습니다. 설치와 사용에 관한 자세한 사항은 <a href="./3.1.HowToConfigureDevelopEnvironment.html">KSB 인공지능 프레임워크 설치</a> 매뉴얼을 참조하시기 바랍니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 1.0 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
(메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] java-8-oracle 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] java-8-oracle 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y python-software-properties && \
sudo add-apt-repository -y ppa:webupd8team/java && \
sudo apt-get update && \
echo "oracle-java8-installer \
shared/accepted-oracle-license-v1-1 select true" \
| sudo debconf-set-selections && \
sudo apt-get install -y oracle-java8-installer
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
가끔 오라클에서 jdk 버전을 업데이트 하면 아래와 같은 에러가 발생하며 jdk가 설치되지 않는 경우가 있습니다.
```sh
접속 download.oracle.com (download.oracle.com)|23.35.220.157|:80... 접속됨.
HTTP request sent, awaiting response... 404 Not Found
2018-10-17 11:08:56 ERROR 404: Not Found.
download failed
Oracle JDK 8 is NOT installed.
dpkg: error processing package oracle-java8-installer (--configure):
설치한 post-installation 스크립트 하위 프로세스가 오류 1번을 리턴했습니다
처리하는데 오류가 발생했습니다:
oracle-java8-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)
```
해결방법은 오라클 사이트에 방문하여 최신 버전(2018.10.21. 기준 : 8u191)을 jdk-8u191-linux-x64.tar.gz 파일을 다운받습니다.
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
그리고, 아래의 스크립트에서 다운받은 파일의 위치와 버전 부분만을 수정한 후, 터미널에 복사하면 직접 설치가능합니다.
```sh
sudo mkdir /usr/lib/jvm
cd /usr/lib/jvm
sudo tar -xvzf /home/csle/jdk-8u191-linux-x64.tar.gz # 수정 필요
sudo mv jdk1.8.0_191/ java-8-oracle/ # 수정 필요
sudo truncate -s0 /etc/environment
echo "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:\
/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:\
/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin" |\
sudo tee -a /etc/environment >/dev/null && \
echo "J2SDKDIR=/usr/lib/jvm/java-8-oracle" | \
sudo tee -a /etc/environment >/dev/null && \
echo "J2REDIR=/usr/lib/jvm/java-8-oracle/jre*" | \
sudo tee -a /etc/environment >/dev/null && \
echo "JAVA_HOME=/usr/lib/jvm/java-8-oracle" | \
sudo tee -a /etc/environment >/dev/null && \
echo "DERBY_HOME=/usr/lib/jvm/java-8-oracle/db" | \
sudo tee -a /etc/environment >/dev/null
sudo update-alternatives --install \
"/usr/bin/java" "java" "/usr/lib/jvm/java-8-oracle/bin/java" 0
sudo update-alternatives --install \
"/usr/bin/javac" "javac" "/usr/lib/jvm/java-8-oracle/bin/javac" 0
sudo update-alternatives --set java /usr/lib/jvm/java-8-oracle/bin/java
sudo update-alternatives --set javac /usr/lib/jvm/java-8-oracle/bin/javac
update-alternatives --list java
update-alternatives --list javac
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart
```
## [Host PC] Docker 설치하기
Host PC에 docker-ce 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo apt-key add - && \
sudo add-apt-repository \
"deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
apt-cache policy docker-ce && \
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu && \
sudo systemctl status docker
```
#### [참고사항] 기존 docker-engine 삭제
```sh
sudo apt-get purge -y docker docker-engine docker.io
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
# 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cd && \
wget \
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 툴박스 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox:1.0.0
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 현재 docker image 버전은 1.0.0 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox 1.0.0 01f760746a56 7 hours ago 15.4GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
이상으로 KSB 툴박스를 구동하기 위해 필요한 프로그램 설치 및 설정 변경을 완료하였습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기(nvidia-docker버전)
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 v19.03 nvidia-docker 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
(메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 사용시 유의사항
- 제한된 GPU 카드에 대해서만 테스트 되어 있습니다.(Titanx, 1080Ti). 따라서 저사양 GPU 카드나 최신 GPU 카드를 사용하는 경우 동작하지 않을 수 있습니다.
- 현재 KSB 툴박스 nvidia-docker 버전은 CUDA 9.0, CUDNN 7.3.1 이 포함되어 있습니다.
```sh
cat /usr/local/cuda/version.txt
CUDA Version 9.0.176
cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 3
#define CUDNN_PATCHLEVEL 1
```
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
- [Host PC] openjdk-8 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] nvidia-docker 2.0 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
- [Host PC] startDockerCsle.sh, stopDockerCsle.sh 추가하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
```sh
sudo add-apt-repository ppa:graphics-drivers
sudo apt-get update
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "자세히 보기" 아이콘 클릭 -->
하단의 "업데이트 설치" 버튼 클릭
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "소프트웨어&업데이터" 아이콘 클릭 -->
상단 메뉴에서 "추가 드라이버" 메뉴 선택 -->
NVIDIA 드라이버 사용 선택(예:NVIDIA binary driver-version 396.54(독점,확인함)) -->
"바뀐 내용 적용" 후 컴퓨터 재부팅
```
```sh
csle@csle1:~$ nvidia-smi
Sat Oct 24 13:17:41 2018
+----------------------------------------------------------------------------+
| NVIDIA-SMI 396.54 Driver Version: 396.54 |
|------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|==============================+======================+======================|
| 0 TITAN X (Pascal) Off | 00000000:01:00.0 On | N/A |
| 25% 40C P8 17W / 250W | 1186MiB / 12190MiB | 0% Default |
+------------------------------+----------------------+----------------------+
+----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|============================================================================|
| 0 1021 G /usr/lib/jvm/java-8-oracle/bin/java 632MiB |
+----------------------------------------------------------------------------+
```
PC를 재부팅합니다.
## [Host PC] openjdk-8 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
sudo apt-get -y install openjdk-8-jdk
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart
```
## [Host PC] Docker 설치하기
Host PC에 docker-ce 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
현재 2018년 10월 최신 버전은 18.06.1\~ce\~3-0\~ubuntu 입니다.
```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo apt-key add - && \
sudo add-apt-repository \
"deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
apt-cache policy docker-ce && \
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu && \
sudo systemctl status docker
```
#### [참고사항] 기존 docker-engine 삭제 방법
```sh
sudo apt-get purge -y docker docker-engine docker.io
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
# 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] nvidia-docker 2.0 설치하기
```sh
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add - && \
curl -s -L \
https://nvidia.github.io/nvidia-docker/\
ubuntu16.04/amd64/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list && \
sudo apt-get update && \
sudo apt-get install -y nvidia-docker2 && \
sudo pkill -SIGHUP dockerd
```
아래의 질의에 대해서 Y를 누르면 설치가 완료됩니다.
```sh
Configuration file '/etc/docker/daemon.json'
==> File on system created by you or by a script.
==> File also in package provided by package maintainer.
어떻게 하시겠습니까? 다음 중에 하나를 선택할 수 있습니다:
Y 또는 I : 패키지 관리자의 버전을 설치합니다
N 또는 O : 현재 설치된 버전을 유지합니다
D : 버전 간의 차이점을 표시합니다
Z : 프로세스를 백그라운드로 하고 상황을 알아봅니다
기본값으로 현재 버전을 그대로 유지합니다.
*** daemon.json (Y/I/N/O/D/Z) [기본값=N] ? Y
```
```sh
csle@csle1:~$ nvidia-docker version
NVIDIA Docker: 2.0.3
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:24:56 2018
OS/Arch: linux/amd64
Experimental: false
```
```sh
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:21 2018
OS/Arch: linux/amd64
Experimental: false
```
### [참고사항] 기존 nvidia-docker 1.0 버전을 삭제 방법
```sh
docker volume ls -q -f driver=nvidia-docker | \
xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker
```
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cd && \
wget \
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 프레임워크 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1903.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1903.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1903.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 19.03 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox_nvidia:19.03.5-cuda9.0-cudnn7
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 2019.05.24일 docker image 버전은 19.03.5-cuda9.0-cudnn7 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox_nvidia 19.03.5-cuda9.0-cudnn7 4b0ba4b5b184 5 hours ago 9.48GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb.conf 수정하기
KSB 툴박스 nvidia 이미지 버전은 tensorflow 1.6 gpu 버전과 cpu 버전이 설치되어있습니다. 따라서, 아래와 같이 ksb.conf 파일을 수정합니다.
```sh
tensorflow {
enable = "true"
# python_path = "/anaconda3/envs/tensorflow/bin/python"
python_path = "/anaconda3/envs/tensorflow16_gpu/bin/python"
python_code_project_path = "/analysis"
}
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
## [Host PC] startDockerCsle.sh stopDockerCsle.sh 추가하기
아래의 스크립트를 복사하여 터미널에서 실행하면 startDockerCsle.sh 파일이 생성됩니다.
```sh
mkdir -p /home/csle/ksb-csle/docker/19.03-nvidia
cat <<EOT >> /home/csle/ksb-csle/docker/19.03-nvidia/startDockerCsle.sh
#!/bin/bash
sudo service postgresql stop
docker network rm csle_cluster csle_standalone
docker rm -f csle1
echo "start csle1 slave container..."
docker run --rm -itd \\
--runtime=nvidia \\
--net=host \\
-v /home/csle/ksb-csle:/home/csle/ksb-csle \\
-v /etc/localtime:/etc/localtime:ro \\
-v /etc/timezone:/etc/timezone \\
--user=csle \\
--name=csle1 \\
--hostname=csle1\\
ksbframework/ksb_toolbox_nvidia:19.03.5-cuda9.0-cudnn7 bash
docker exec -it csle1 bash
EOT
chmod +x /home/csle/ksb-csle/docker/19.03-nvidia/startDockerCsle.sh
cat <<EOT >> /home/csle/ksb-csle/docker/19.03-nvidia/stopDockerCsle.sh
#!/bin/bash
docker rm -f csle1
EOT
chmod +x /home/csle/ksb-csle/docker/19.03-nvidia/stopDockerCsle.sh
```
KSB 인공지능 프레임워크 실행하기 위해 <a href="https://csleoss.etri.re.kr/images/contents/manual_1903/1.5.HowToRunFirst-1903.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동합니다.
단, nvidia-docker 버전 KSB 프레임워크 구동시 기존 cpu버전 툴박스와의 차이점은 위에서 생성한 /home/csle/ksb-csle/docker/19.03-nvidia/startDockerCsle.sh을 실행하여 KSB 툴박스 docker 컨테이너를 실행하고 접속하는 것일 뿐 모두 동일합니다.
```sh
csle@csle1:~/ksb-csle/docker/19.03-nvidia$ ./startDockerCsle.sh
Error response from daemon: network csle_cluster not found
Error response from daemon: network csle_standalone not found
csle1
start csle1 slave container...
4918997cd2dac93fe0b52f3df3a45a46db6df1f3f052854061696695451d2f22
csle@csle1:/$
```
이상으로 nvidia-docker 버전 KSB 툴박스를 구동하기 위해 준비가 완료되었습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기(nvidia-docker버전)
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 1.0 nvidia-docker 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
(메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 사용시 유의사항
- 제한된 GPU 카드에 대해서만 테스트 되어 있습니다.(Titanx, 1080Ti). 따라서 저사양 GPU 카드나 최신 GPU 카드를 사용하는 경우 동작하지 않을 수 있습니다.
- 현재 KSB 툴박스 nvidia-docker 버전은 CUDA 9.0, CUDNN 7.3.1 이 포함되어 있습니다.
```sh
cat /usr/local/cuda/version.txt
CUDA Version 9.0.176
cat /usr/include/cudnn.h | grep CUDNN_MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 3
#define CUDNN_PATCHLEVEL 1
```
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
- [Host PC] openjdk-8 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] nvidia-docker 2.0 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
- [Host PC] startDockerCsle.sh, stopDockerCsle.sh 추가하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
```sh
sudo add-apt-repository ppa:graphics-drivers
sudo apt-get update
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "자세히 보기" 아이콘 클릭 -->
하단의 "업데이트 설치" 버튼 클릭
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "소프트웨어&업데이터" 아이콘 클릭 -->
상단 메뉴에서 "추가 드라이버" 메뉴 선택 -->
NVIDIA 드라이버 사용 선택(예:NVIDIA binary driver-version 396.54(독점,확인함)) -->
"바뀐 내용 적용" 후 컴퓨터 재부팅
```
```sh
csle@csle1:~$ nvidia-smi
Sat Oct 24 13:17:41 2018
+----------------------------------------------------------------------------+
| NVIDIA-SMI 396.54 Driver Version: 396.54 |
|------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|==============================+======================+======================|
| 0 TITAN X (Pascal) Off | 00000000:01:00.0 On | N/A |
| 25% 40C P8 17W / 250W | 1186MiB / 12190MiB | 0% Default |
+------------------------------+----------------------+----------------------+
+----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|============================================================================|
| 0 1021 G /usr/lib/jvm/java-8-oracle/bin/java 632MiB |
+----------------------------------------------------------------------------+
```
PC를 재부팅합니다.
## [Host PC] openjdk-8 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
sudo apt-get -y install openjdk-8-jdk
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
만약 사용자가 openSSH를 사용한다면, 위의 스크립트이 적용되지 않습니다. 따라서, 직접 port 번호와 PermitRootLogin를 수정합니다.
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart
```
## [Host PC] Docker 설치하기
Host PC에 docker-ce 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
현재 2018년 10월 최신 버전은 18.06.1\~ce\~3-0\~ubuntu 입니다.
```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo apt-key add - && \
sudo add-apt-repository \
"deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
apt-cache policy docker-ce && \
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu && \
sudo systemctl status docker
```
#### [참고사항] 기존 docker-engine 삭제 방법
```sh
sudo apt-get purge -y docker docker-engine docker.io
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
# 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] nvidia-docker 2.0 설치하기
```sh
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add - && \
curl -s -L \
https://nvidia.github.io/nvidia-docker/\
ubuntu16.04/amd64/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list && \
sudo apt-get update && \
sudo apt-get install -y nvidia-docker2 && \
sudo pkill -SIGHUP dockerd
```
아래의 질의에 대해서 Y를 누르면 설치가 완료됩니다.
```sh
Configuration file '/etc/docker/daemon.json'
==> File on system created by you or by a script.
==> File also in package provided by package maintainer.
어떻게 하시겠습니까? 다음 중에 하나를 선택할 수 있습니다:
Y 또는 I : 패키지 관리자의 버전을 설치합니다
N 또는 O : 현재 설치된 버전을 유지합니다
D : 버전 간의 차이점을 표시합니다
Z : 프로세스를 백그라운드로 하고 상황을 알아봅니다
기본값으로 현재 버전을 그대로 유지합니다.
*** daemon.json (Y/I/N/O/D/Z) [기본값=N] ? Y
```
```sh
csle@csle1:~$ nvidia-docker version
NVIDIA Docker: 2.0.3
Client:
Version: 18.06.1-ce
API version: 1.38
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:24:56 2018
OS/Arch: linux/amd64
Experimental: false
```
```sh
Server:
Engine:
Version: 18.06.1-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: e68fc7a
Built: Tue Aug 21 17:23:21 2018
OS/Arch: linux/amd64
Experimental: false
```
### [참고사항] 기존 nvidia-docker 1.0 버전을 삭제 방법
```sh
docker volume ls -q -f driver=nvidia-docker | \
xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge nvidia-docker
```
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cd && \
wget \
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 프레임워크 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox_nvidia:1.0.1-cuda9.0-cudnn7
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 2019.05.24일 docker image 버전은 1.0.1 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox_nvidia 1.0.1-cuda9.0-cudnn7 e3661c94fd07 7 hours ago 9.39GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb.conf 수정하기
KSB 툴박스 nvidia 이미지 버전은 tensorflow 1.6 gpu 버전과 cpu 버전이 설치되어있습니다. 따라서, 아래와 같이 ksb.conf 파일을 수정합니다.
```sh
tensorflow {
enable = "true"
# python_path = "/anaconda3/envs/tensorflow/bin/python"
python_path = "/anaconda3/envs/tensorflow16_gpu/bin/python"
python_code_project_path = "/analysis"
}
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
## [Host PC] startDockerCsle.sh stopDockerCsle.sh 추가하기
아래의 스크립트를 복사하여 터미널에서 실행하면 startDockerCsle.sh 파일이 생성됩니다.
```sh
mkdir -p /home/csle/ksb-csle/docker/1.0-nvidia
cat <<EOT >> /home/csle/ksb-csle/docker/1.0-nvidia/startDockerCsle.sh
#!/bin/bash
sudo service postgresql stop
docker network rm csle_cluster csle_standalone
docker rm -f csle1
echo "start csle1 slave container..."
docker run --rm -itd \\
--runtime=nvidia \\
--net=host \\
-v /home/csle/ksb-csle:/home/csle/ksb-csle \\
-v /etc/localtime:/etc/localtime:ro \\
-v /etc/timezone:/etc/timezone \\
--user=csle \\
--name=csle1 \\
--hostname=csle1\\
ksbframework/ksb_toolbox_nvidia:1.0.1-cuda9.0-cudnn7 bash
docker exec -it csle1 bash
EOT
chmod +x /home/csle/ksb-csle/docker/1.0-nvidia/startDockerCsle.sh
cat <<EOT >> /home/csle/ksb-csle/docker/1.0-nvidia/stopDockerCsle.sh
#!/bin/bash
docker rm -f csle1
EOT
chmod +x /home/csle/ksb-csle/docker/1.0-nvidia/stopDockerCsle.sh
```
KSB 인공지능 프레임워크 실행하기 위해 <a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동합니다.
단, nvidia-docker 버전 KSB 프레임워크 구동시 기존 cpu버전 툴박스와의 차이점은 위에서 생성한 /home/csle/ksb-csle/docker/1.0-nvidia/startDockerCsle.sh을 실행하여 KSB 툴박스 docker 컨테이너를 실행하고 접속하는 것일 뿐 모두 동일합니다.
```sh
csle@csle1:~/ksb-csle/docker/1.0-nvidia$ ./startDockerCsle.sh
Error response from daemon: network csle_cluster not found
Error response from daemon: network csle_standalone not found
csle1
start csle1 slave container...
4918997cd2dac93fe0b52f3df3a45a46db6df1f3f052854061696695451d2f22
csle@csle1:/$
```
이상으로 nvidia-docker 버전 KSB 툴박스를 구동하기 위해 준비가 완료되었습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 1.0 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 메모리 16GB 이상이 요구됩니다.
(메모리 8GB 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] java-8-oracle 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] java-8-oracle 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y python-software-properties && \
sudo add-apt-repository -y ppa:webupd8team/java && \
sudo apt-get update && \
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections && \
sudo apt-get install -y oracle-java8-installer
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
가끔 오라클에서 jdk 버전을 업데이트 하면 아래와 같은 에러가 발생하며 jdk가 설치되지 않는 경우가 있습니다.
```sh
접속 download.oracle.com (download.oracle.com)|23.35.220.157|:80... 접속됨.
HTTP request sent, awaiting response... 404 Not Found
2018-10-17 11:08:56 ERROR 404: Not Found.
download failed
Oracle JDK 8 is NOT installed.
dpkg: error processing package oracle-java8-installer (--configure):
설치한 post-installation 스크립트 하위 프로세스가 오류 1번을 리턴했습니다
처리하는데 오류가 발생했습니다:
oracle-java8-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)
```
해결방법은 오라클 사이트에 방문하여 최신 버전(2018.10.21. 기준 : 8u191)을 jdk-8u191-linux-x64.tar.gz 파일을 다운받습니다.
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
그리고, 아래의 스크립트에서 다운받은 파일의 위치와 버전 부분만을 수정한 후, 터미널에 복사하면 직접 설치가능합니다.
```sh
sudo mkdir /usr/lib/jvm
cd /usr/lib/jvm
sudo tar -xvzf /home/csle/jdk-8u191-linux-x64.tar.gz # 수정 필요
sudo mv jdk1.8.0_191/ java-8-oracle/ # 수정 필요
sudo truncate -s0 /etc/environment
echo "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/lib/jvm/java-8-oracle/bin:/usr/lib/jvm/java-8-oracle/db/bin:/usr/lib/jvm/java-8-oracle/jre/bin" | sudo tee -a /etc/environment >/dev/null
echo "J2SDKDIR=/usr/lib/jvm/java-8-oracle" | sudo tee -a /etc/environment >/dev/null
echo "J2REDIR=/usr/lib/jvm/java-8-oracle/jre*" | sudo tee -a /etc/environment >/dev/null
echo "JAVA_HOME=/usr/lib/jvm/java-8-oracle" | sudo tee -a /etc/environment >/dev/null
echo "DERBY_HOME=/usr/lib/jvm/java-8-oracle/db" | sudo tee -a /etc/environment >/dev/null
sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/java-8-oracle/bin/java" 0
sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/java-8-oracle/bin/javac" 0
sudo update-alternatives --set java /usr/lib/jvm/java-8-oracle/bin/java
sudo update-alternatives --set javac /usr/lib/jvm/java-8-oracle/bin/javac
update-alternatives --list java
update-alternatives --list javac
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri 's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
```
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" | sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" | sudo tee -a /etc/ssh/ssh_config >/dev/null
```
## [Host PC] Docker 설치하기
Host PC에 docker 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add - && \
sudo apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D && \
sudo add-apt-repository -y "deb https://apt.dockerproject.org/repo/ ubuntu-xenial main" && \
sudo apt-get update && \
sudo apt-get -y install docker-engine && \
sudo systemctl enable docker
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다. 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 프레임워크 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox:1.0.0
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 현재 docker image 버전은 1.0.0 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox 1.0.0 01f760746a56 7 hours ago 15.4GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
이상으로 KSB 툴박스를 구동하기 위해 필요한 프로그램 설치 및 설정 변경을 완료하였습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 1.0 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
(메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] csle 사용자 계정(권한: administrator) 생성하기
- [Host PC] hostname을 csle1으로 변경하기
- [Host PC] openjdk-8 설치하기
- [Host PC] KSB 툴박스 관련 프로그램 설치하기
- [Host PC] SSH port 변경 및 root 로그인 가능하도도록 SSHD config 수정하기
- [Host PC] SSH config 수정하기
- [Host PC] Docker 설치하기
- [Host PC] /etc/hosts 수정하기
- [Host PC] bashrc 설정 추가하기
- [Host PC] 크롬 설치하기
- [Host PC] KSB 툴박스 설치 및 docker image 다운받기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
Host PC에 기존 Ubuntu 사용자와 설치환경을 분리하기 위해 아래의 명령으로 csle 계정을 추가 생성합니다.
```sh
sudo adduser csle
Adding user 'csle' ...
Adding new group 'csle' (1001) ...
Adding new user 'csle' (1001) with group 'csle' ...
Creating home directory '/home/csle' ...
Copying files from '/etc/skel' ...
새 UNIX 암호 입력:
새 UNIX 암호 재입력:
passwd: password updated successfully
Changing the user information for csle
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
```
/etc/sudoers를 열어 csle 계정에 administrator 권한을 추가합니다.
"경고: 읽기 전용 파일을 고치고 있습니다" 경고는 무시하고 저장하고 나옵니다.
```sh
sudo vi /etc/sudoers
# User privilege specification
root ALL=(ALL:ALL) ALL
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경하기
docker 컨테이너가 호스트 pc의 네트워크를 동일하게 사용하는 host 모드로 동작하기 위해 docker 컨테이너와 호스트 pc의 호스트네임을 동일하게 합니다.
```sh
sudo vi /etc/hostname
csle1
```
PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] openjdk-8 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
sudo apt-get -y install openjdk-8-jdk
```
터미널을 다시 시작한 후, 아래의 명령으로 java 설치 여부를 확인합니다.
```sh
csle@csle1:~$ java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
```
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
Host PC에 아래의 명령으로 KSB 툴박스 관련 프로그램을 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo apt-get update && \
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y ssh locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
아래의 명령을 수행하여 포트 정보를 2243로 수정하고, root 로그인을 허용합니다.
```sh
sudo sed -ri 's/^Port 22/Port 2243/g' /etc/ssh/sshd_config
sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
만약 사용자가 openSSH를 사용한다면, 위의 스크립트이 적용되지 않습니다. 따라서, 직접 port 번호와 PermitRootLogin를 수정합니다.
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
sudo truncate -s0 /etc/ssh/ssh_config
echo "Host localhost" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 0.0.0.0" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host 127.0.0.1" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host csle*" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "Host master" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "StrictHostKeyChecking no" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
echo "UserKnownHostsFile=/dev/null" \
| sudo tee -a /etc/ssh/ssh_config >/dev/null
sudo service ssh restart
```
## [Host PC] Docker 설치하기
Host PC에 docker-ce 프로그램을 설치하기 위해 아래 명령어를 순차적으로 입력합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo apt-key add - && \
sudo add-apt-repository \
"deb [arch=amd64]
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && \
sudo apt-get update && \
apt-cache policy docker-ce && \
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu && \
sudo systemctl status docker
```
#### [참고사항] 기존 docker-engine 삭제
```sh
sudo apt-get purge -y docker docker-engine docker.io
```
Docker 명령시 root 권한이 필요합니다. root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가합니다.
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
# 단, 현재 터미널에서만 적용됩니다.
sudo su csle
PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csle1
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래의 내용 추가
192.168.0.5 csle1 master
```
## [Host PC] bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=\$PATH:\$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:\$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:\$PYTHONPATH
EOT
source ~/.bashrc
```
## [Host PC] 크롬 설치하기 (optional)
KSB 툴박스의 웹툴킷을 안정적으로 사용하기 위해서 크롬 브라우저를 설치합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
```sh
cd && \
wget \
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt-get update && \
sudo apt-get install -y libxss1 libappindicator1 libindicator7 && \
sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## [Host PC] KSB 툴박스 설치 및 docker image 다운받기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스(docker image 별도) 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh, webToolkit_db)
<br>
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox:1.0.1-miniconda3
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 2019.05.24일 docker image 버전은 1.0.1 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox 1.0.1-miniconda3 1b49af6336c7 7 hours ago 7.54GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
## [Host PC] SSH 재시작하기
```sh
sudo service ssh restart
```
## [Host PC] ksb-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
이상으로 KSB 툴박스를 구동하기 위해 필요한 프로그램 설치 및 설정 변경을 완료하였습니다.
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.5.HowToRunFirst.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 인공지능 프레임워크 설치
-----------
제공된 KSB 툴박스를 사용하지 않고, 직접 Host PC에 KSB 인공지능 프레임워크를 설치하기 위해서 아래의 오픈소스 프레임워크들을 설치합니다. 사용자 csle 계정을 생성한 후 아래 프로그램들을 설치합니다.
## csle 사용자 계정(권한 : administrator) 생성하기
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-csle-%EC%82%AC%EC%9A%A9%EC%9E%90-%EA%B3%84%EC%A0%95%EA%B6%8C%ED%95%9C-administrator-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0" title="KSB 툴박스 설치">KSB 툴박스 설치</a>의 csle 사용자 계정 생성 부분을 참고합니다.
## java-8-oracle 설치하기
<a href="https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-java-8-oracle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0" title="KSB 툴박스 설치">KSB 툴박스 설치</a>의 java-8-oracle 설치 부분을 참고합니다.
## Apache Hadoop 2.7.3 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://hadoop.apache.org/docs/r2.7.3/
다운로드 링크 : https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/
## spark-2.3.0-bin-hadoop2.7 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://spark.apache.org/downloads.html
다운로드 링크 : https://spark.apache.org/downloads.html
## hbase 1.2.4(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://hbase.apache.org/book.html
다운로드 링크 : https://archive.apache.org/dist/hbase/1.2.4/
## kafka 2.11-0.10.0.1(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://kafka.apache.org/
다운로드 링크 : https://kafka.apache.org/downloads
## zookeeper 3.4.9(optional) 설치하기
아래 링크를 참고하여 사용자의 PC 혹은 클러스터 환경에 맞게 설치합니다.
참고링크 : https://zookeeper.apache.org/
다운로드 링크 : https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/
## KSB 프레임워크 설치하기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지로부터 KSB 툴박스 파일을 다운로드합니다.
- ksb_toolbox_v1.tar.gz : KSB 툴박스 파일
<br>
csle 사용자 계정의 home에 ksb_toolbox_v1.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
csle@csle1:~$ tar zxvf ksb_toolbox_v1.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
- /bin : KSB 프레임워크 shell 스크립트 파일 저장 폴더
- /components : tensorflow train 예제 프로그램 저장 폴더
- /conf : KSB 프레임워크 환경설정 파일 저장 폴더
- /docker : KSB 툴박스 docker 컨테이너 실행 스크립트 저장 폴더
- /examples : CLI(Command Line Interface)를 통해 워크플로우 생성 및 submit 할 수 있는 프로젝트 폴더
- /jars : KSB 프레임워크 1.0 버전의 jar 파일 저장 폴더
- /ksblib : python 전처리 라이브러리 폴더
- /kubernetes : 쿠버네티스 환경설정 폴더
- /logs : log 저장 폴더
- /pyML : autoML python 프로젝트 폴더
- /tools: 예제 테스트를 위한 프로그램(jmeter, hadoop, kafka, maven, .ssh)
<br>
## ksb-csle conf 파일 설정하기
/home/csle/ksb-csle/conf/ksb.conf 파일을 사용자 PC에 맞게 수정합니다.
```sh
csle {
user {
home = "/home/csle" # 사용자 home 디렉토리를 지정합니다.
}
home = "/home/csle/ksb-csle" # KSB home 디렉토리를 지정합니다.
submit.cli = "true"
scheduler.initialization = "false"
}
servers {
gateway {
baseUrl = "http://KSB_GATEWAY:SERVICEPORT"
}
kubernetes {
enable = "false"
baseUrl = "http://SERVICENAME.ksb.local:30100"
imgRepositoryUrl = "docker.io"
kubernetes_yaml_path = "/kubernetes"
masterIp = "csle1" # Kubernetes 마스터 도메인 이름 혹은 IP를 지정합니다.
masterPort = "2243" # Kubernetes SSH 포트 번호를 지정합니다.
nodesIp = "csle2, csle3" # Kubernetes 노드들의 도메인 이름 혹은 IP들을 지정합니다.
user = "csle" # Kubernetes 서버의 사용자 ID를 지정합니다.
externalKafka {
brokerHostName = "csle1" # 외부 Kafka broker서버 도메인 이름을 지정합니다.
brokerHostIp = "192.168.0.xxx" # 외부 Kafka broker서버 IP을 지정합니다.
}
}
tensorflow {
enable = "true"
python_path = "/anaconda3/envs/tensorflow/bin/python" # 사용자 PC의 tensorflow python 위치를 지정합니다.
python_code_project_path = "/analysis"
}
pyspark {
python_path = "/anaconda3/bin/python" # 사용자 PC의 python 위치를 지정합니다.
python_code_project_path = "/pyML"
}
spark {
home = "/spark" # 사용자 PC의 spark home 위치를 지정합니다.
bin = "/spark/bin/spark-submit"
master = "local[*]" # spark master 모드를 지정합니다.
deploy = "client" # spark deploy 모드를 지정합니다.
logging = "true"
autoIncreaseModelPath = "true"
}
yarn {
home = "/hadoop/bin" # 사용자 PC의 yarn 위치를 지정합니다.
}
postgres {
db = "csledb"
uri = "jdbc:postgresql://localhost:5432/csledb"
user = "csle"
password = "csle1234"
}
hadoop {
home = "/hadoop/" # 사용자 PC의 hadoop 위치를 지정합니다.
master = "csle1" # 사용자 PC의 hadoop master 이름을 지정합니다.
port = "9000" # 사용자 PC의 hadoop master port를 지정합니다.
hdfs {
activated = "true"
baseDir = "/user/"
modelPath = "/model"
datasetPath = "/dataset"
}
webhdfs {
port = "50070"
baseDir = "/webhdfs/v1"
}
}
hbase.zookeeper.quorum = "localhost"
kbe {
serverIp = "localhost"
serverPort = "9876"
serverType = "jena"
}
}
```
## bashrc 설정 추가하기
csle 계정의 bashrc 파일을 업데이트 합니다.
```sh
cat <<EOT >> ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export PATH=$PATH:$JAVA_HOME/bin
export KSB_HOME=/home/csle/ksb-csle
export PYTHONPATH=/home/csle/ksb-csle/pyML/:$PYTHONPATH
export PYTHONPATH=./:/home/csle/ksb-csle/ksblib:$PYTHONPATH
EOT
source ~/.bashrc
```
## KSB 웹툴킷을 사용하기 위한 사용자 계정 추가하기
KSB 웹툴킷에 저장된 다양한 예제를 사용하기 위해서는 웹툴킷 사용자(id: ksbuser@etri.re.kr)에 대한 Ubuntu 및 Hadoop hdfs 계정 추가가 필요합니다.
### Ubuntu 사용자 계정 추가하기
```sh
csle$myHostName: sudo adduser ksbuser_etri_re_kr
[sudo] password for csle:
'ksbuser_etri_re_kr' 사용자를 추가 중...
새 그룹 'ksbuser_etri_re_kr' (1011) 추가 ...
새 사용자 'ksbuser_etri_re_kr' (1011)() 그룹 'ksbuser_etri_re_kr' ()로 추가 ...
'/home/ksbuser_etri_re_kr' 홈 디렉터리를 생성하는 중...
'/etc/skel'에서 파일들을 복사하는 중...
새 UNIX 암호 입력: # ksbuser_etri_re_kr를 입력하세요
새 UNIX 암호 재입력: # ksbuser_etri_re_kr를 입력하세요
passwd: 암호를 성공적으로 업데이트했습니다
새로운 값을 넣거나, 기본값을 원하시면 엔터를 치세요
이름 []:
방 번호 []:
직장 전화번호 []:
집 전화번호 []:
기타 []:
정보가 올바릅니까? [Y/n] Y
```
### sudo 권한 부여하기
```sh
csle$myHostName: sudo usermod -aG sudo ksbuser_etri_re_kr
```
### 계정 추가 확인하기
```sh
csle$myHostName: su - ksbuser_etri_re_kr
ksbuser_etri_re_kr$myHostName: sudo ll
합계 32
drwxr-xr-x 2 ksbuser_etri_re_kr ksbuser_etri_re_kr 4096 6월 30 08:37 ./
drwxr-xr-x 14 root root 4096 6월 30 08:36 ../
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 220 6월 30 08:36 .bash_logout
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 3771 6월 30 08:36 .bashrc
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 655 6월 30 08:36 .profile
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 0 6월 30 08:37 .sudo_as_admin_successful
-rw-r--r-- 1 ksbuser_etri_re_kr ksbuser_etri_re_kr 8980 6월 30 08:36 examples.desktop
```
### Hadoop Hdfs 사용자 계정 추가하기
사용자 환경에 맞게 설치되어 있는 Hadoop Hdfs를 가동한 후, 아래 명령을 이용하여 hdfs에 ksbuser_etri_re_kr 사용자 폴더를 추가합니다.
```sh
csle$myHostName: su - csle
csle$myHostName: hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset
csle$myHostName: hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/model
csle$myHostName: hdfs dfs -chown ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/
csle$myHostName: hdfs dfs -chown ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/dataset
csle$myHostName: hdfs dfs -chown ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/model
```
## KSB 웹툴킷 설치하기
<a href="http://csleoss.etri.re.kr:8088/images/contents/manual_1.0/1.4.HowToInstallKsbWebToolkit.html" title="KSB 웹툴킷 설치하기"> KSB 웹툴킷 설치하기</a> 페이지를 통해 KSB 웹툴킷을 설치합니다.
## KSB 지식베이스 엔진 설치하기
KSB 지식베이스엔진(KSB-Knowledge Engine)을 사용하기 위한 절차 및 예제를 소개합니다.
### Play framework Activator 설치하기
KSB 지식베이스 엔진은 Play framework 기반 엔진이며, 이를 실행하기 위해서는 [Play framework Activator][8580869d]를 사전에 설치해야 합니다.
[8580869d]:
https://downloads.typesafe.com/typesafe-activator/1.3.12/typesafe-activator-1.3.12.zip "Play framework Activator"
```sh
# Play framework Activator 다운로드
wget https://downloads.typesafe.com/typesafe-activator/1.3.12/typesafe-activator-1.3.12.zip
# 압축해제
unzip typesafe-activator-1.3.12.zip
# Activator bin 경로를 환경변수에 등록
export PATH="/home/csle/activator-dist-1.3.12/bin:$PATH"
```
### KSB 지식베이스 엔진 시작 및 종료 하기
KSB 지식베이스 엔진을 시작하려면, 해당폴더 (/home/csle/ksb-csle/bin)로 이동하여, startknowledge_service.sh 스크립트를 ip address와 port 번호와 함께 실행합니다.
```sh
# KSB 지식베이스 실행 스크립트가 있는 경로로 이동
cd /home/csle/ksb-csle/bin
# KSB 지식베이스 엔진 시작 (./startknowledge_service.sh ip_address port_number)
./startknowledge_service.sh 127.0.0.1 9876
```
KSB 지식베이스 엔진을 종료하려면, 해당폴더 (/home/csle/ksb-csle/bin)로 이동하여, stopKnowledge_service.sh 스크립트를 실행합니다.
```sh
# KSB 지식베이스 엔진 종료
./stopKnowledge_service.sh
```
### 온톨로지 파일 Upload 하기
KSB 지식베이스 엔진이 Start 되어 있는 상황에서, 사용자가 로컬 파일에 작성된 온톨로지 파일(.owl, .rdf, .rdfs)을 KSB 지식베이스 엔진에 Upload 하는 기능을 설명합니다. 본 예제에서는 KSB 지식베이스 엔진 내부 폴더에 제공하는 공통 온톨로지 파일을 이용합니다.
```sh
# 예제 수행 온톨로지 확인을 위해 해당 경로로 이동
cd /home/csle/ksb-knowledge/KBE/ontologies
```
![KSB 공통 온톨로지](./images/1.3_HowToInstallKsbFrameWork_02.png "KSB 공통 온톨로지")
```sh
# Curl 명령어 restful request 수행 (url: /loadOntologies, parameter: 온톨로지 경로)
curl -X POST http://127.0.0.1:9876/loadOntologies -H 'Cache-Control: no-cache' -H 'Content-Type: text/plain' -d ./ontologies
```
![KSB 지식베이스 엔진 온톨로지 upload 화면](./images/1.3_HowToInstallKsbFrameWork_03.png "KSB 지식베이스 엔진 온톨로지 upload 화면")
KSB 지식베이스 엔진에 Upload된 온톨로지는 KSB 지식베이스 엔진이 제공하는 쿼리 Restful API(``http://127.0.0.1:9876/query``)를 통해 확인할 수 있습니다. 이를 위해 Restful Client(본 예제에서는 Postman)를 실행하고, URL과 질의 쿼리 내용을 아래와 같이 입력하여 실행합니다.
```sh
# 본 쿼리는 SPAQRL 1.1의 형태의 질의이며, 이는 온톨로지 thing:Thing 클래스의 서브 클래스를 검색하기 위한 쿼리입니다.
PPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX workflow: <http://csle.etri.re.kr/Workflow/>
PREFIX thing: <http://csle.etri.re.kr/Thing/>
select * where {
?s rdfs:subClassOf thing:Thing.
FILTER (!isBlank(?s))
}
```
![온톨로지 Upload 결과 확인 화면](./images/1.3_HowToInstallKsbFrameWork_04.png "온톨로지 Upload 결과 학인 화면")
## IoE 사물 등록
KSB 지식베이스 엔진은 IoE 정보를 지식화하여 정보의 연계, 추론을 통한 지식정보를 사용자에게 제공하는 기능이 있습니다. IoE 표준(oneM2M)의 사물 스펙을 지식화하는 기능을 제공합니다.
본 예제에서는 Json 포맷의 사물 스펙을 사용합니다.
```sh
# Json 포맷의 사물 스펙(예제로 사용한 IoE 사물의 id는 a1234이며, indoor temperature and humidity 센서입니다.)
{
"version": "1.0",
"id": "a1234",
"registrationTime": "20170102112233",
"properties": {
"name": "indoor_env_1",
"owner": "foo@gmail.com",
"description": "indoor temperature and humidity",
"gid": "global_unique_id_1",
"model": "modelA",
"coordinates": {
"latitude": 33.3,
"longitude": 122.2,
"altitude": 0
},
"location": "seoul korea",
"users": ["bar@gmail.com"],
"tag": ["my room", "temperature", "humidity"],
"madeBy": "companyA",
"hostedBy": "companyB"
},
"resources": [
{
"name": "sensors",
"description": "temperature and humidity in my room",
"attributes": [
{
"name": "temperature",
"dataType": "double",
"unit": "celsius",
"min": "-80",
"max": "80",
"description": "temperature in my room"
},
{
"name": "humidity",
"dataType": "double",
"unit": "percent",
"min": "0",
"max": "100",
"description": "humidity in my room"
}
],
"operations": [
{
"opType": "get",
"args": ["temperature", "humidity"],
"description": "get current temperature and humidity"
}
]
}
]
}
```
KSB 지식베이스 엔진이 제공하는 사물등록 Restful API (``http://127.0.0.1:9876/registThing``)를 통해 KSB 지식베이스 엔진에 사물 스펙정보를 등록 할 수 있습니다.
![사물등록 화면](./images/1.3_HowToInstallKsbFrameWork_05.png "사물등록 화면")
다음과 같은 쿼리 Restful API을 수행하여 결과를 확인합니다.
```sh
# 본 쿼리는 SPAQRL 1.1의 형태의 질의이며, 이는 온톨로지 thing:Thing 클래스의 인스턴스를 검색하기 위한 쿼리입니다.
PPREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX workflow: <http://csle.etri.re.kr/Workflow/>
PREFIX thing: <http://csle.etri.re.kr/Thing/>
select * where {
?s rdf:type thing:Thing.
}
```
![사물등록확인화면](./images/1.3_HowToInstallKsbFrameWork_06.png "사물등록확인화면")
## IoE 사물 센서데이터를 통해 지식추론하기
KSB 지식베이스 엔진은 IoE 디바이스의 센서데이터를 이용하여, 상황을 추론할 수 있는 기능을 제공합니다.
본 예제의 시나리오는 앞에서 등록된 온도센서(thing id : a1234)로부터 온도가 28도 이상이면 더운 상황(HotContext)을 추론하고,
추론된 정보를 통해 Hue(thing id : S_HUE_light_3)를 파란색으로 켜는 동작을 하는 간단한 시나리오 입니다.
이를 위해 Hue의 제어 명령을 등록합니다. (Restful API: ``http://127.0.0.1:9876/addDeviceControl``)
```sh
# Json 포맷의 사물제어 스펙(id S_HUE_light_3의 Hue)
[
{"id":"hue_turnon_Blue",
"thingId":"S_HUE_light_3",
"resourceId":"controller",
"operationId":"setState",
"controlContents":[
{"name":"on","value":"true"},
{"name":"bri","value":"254"},
{"name":"hue","value":"46920"},
{"name":"sat","value":"254"}
]
},
{"id":"hue_turnon_Red",
"thingId":"S_HUE_light_3",
"resourceId":"controller",
"operationId":"setState",
"controlContents":[
{"name":"on","value":"true"},
{"name":"bri","value":"254"},
{"name":"hue","value":"65535"},
{"name":"sat","value":"254"}
]
},
{"id":"hue_turnon_Green",
"thingId":"S_HUE_light_3",
"resourceId":"controller",
"operationId":"setState",
"controlContents":[
{"name":"on","value":"true"},
{"name":"bri","value":"254"},
{"name":"hue","value":"25500"},
{"name":"sat","value":"254"}
]
}
]
```
추론 규칙을 적용하기 위해, KSB-Knowledge/KBE/rules 폴더의 "KBE.rues" 파일을 열고 아래와 같이 추론 규칙을 추가합니다.
```sh
# 온도센서의 센싱값이 28이상이면 이벤트 Temp_HOT을 생성합니다.
[domain_temperature_hot:
(?e event:hasEventValue ?v),
(?v thing:hasType ?t),
(?t thing:attributeName ?name),
equal(?name, "temperature"),
(?v thing:hasValue ?value),
ge(?value, 28)
->
(?e event:hasEventStatus domain:Temp_HOT)
]
# 이벤트 Temp_HOT이면 더운 상황(HotContext)을 생성합니다.
[HotContext_context:
(?e event:hasEventStatus domain:Temp_HOT)
-> (?e rdf:type domain:HotContext)
]
# 더운 상황(HotContext)이면 Hue를 파란색으로 켭니다.
[HotContext_service:
(?e rdf:type domain:HotContext)
->
(?e service:derives domain:hue_turnon_Blue)
]
```
본 예제를 실행하기 위해 온도센서(thing id: a1234)의 값을 32.6으로 설정하고, Restful API(``http://127.0.0.1:9876/recommendDeviceControl``)를 실행합니다.
```sh
# 온도센서(thingId : a1234)의 센싱값이 32.6으로 설정합니다.
{
"thingId": "a1234",
"resourceId": "sensors",
"time": "20170330103347",
"values": [
{
"name": "temperature",
"value": "32.6"
}
]
}
```
Restful API를 실행한 결과는 다음과 같습니다.
```sh
# 상황(context)가 "HotContext"이고, 상황에 따른 서비스(service)가 "hue_turnon_Blue"이며 그것에 해당하는 사물 제어정보를 리턴합니다.
[
{
"thingId": "S_HUE_light_3",
"resourceId": "controller",
"context": [
"HotContext"
],
"service": "hue_turnon_Blue",
"controls": {
"sat": "254",
"hue": "46920",
"bri": "254",
"on": "true"
}
}
]
```
![사물추론 확인화면](./images/1.3_HowToInstallKsbFrameWork_07.png "사물추론 확인화면")
This diff is collapsed.
This diff is collapsed.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 웹툴킷 설치
---
UI 기반으로 KSB 인공지능 프레임워크를 사용할 수 있는 KSB 웹툴킷 설치 과정을 설명합니다.
## 설치 요구사항
- Docker 기반 KSB 툴박스 환경에서는, KSB 웹툴킷 실행을 위한 기능들이 사전에 설치 되어 있거나 설치 과정에 포함 되어 있으므로, 본 과정이 필요하지 않습니다.
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 웹툴킷은 KSB 인공지능 프레임워크를 기반으로 구동됩니다. 따라서 startKsbApiServing 을 실행하여 KSB 인공지능 프레임워크를 구동하고 있어야 합니다.
- KSB 웹툴킷은 저장소로 HDFS를 사용합니다. 따라서, 저장소로 사용할 PC에 Hadoop 및 관련 소프트웨어가 설치 되어 있어야 합니다. Hadoop을 설치한 후에는 ksb-csle/conf/ksb.conf 파일에서 hadoop.master 정보를 설치한 호스트명으로 설정해 주어야 합니다. 또한 hadoop.hdfs.activated 도 true로 설정해야 정상적으로 HDFS 를 저장소로 이용할 수 있습니다.(기본적으로 true로 설정 되어 있습니다.)
- DB에서 한글을 정상적으로 사용하기 위해, 호스트 운영체제의 언어를 한글로 설정 합니다. 변경 하는 방법은 다음 링크를 참고 합니다.
[Ubuntu 언어 변경](https://askubuntu.com/questions/509174/how-can-i-change-the-language-from-english-to-spanish)
- Postgresql 9.6.8 이상이 설치되어야 합니다.
- Pgadmin3 1.22.2 이상이 설치되어야 합니다.
- JDK 8 이 설치되어야 합니다. 설치 방법은 다음 링크를 참고 합니다. [JDK 8 설치](https://csleoss.etri.re.kr/images/contents/manual_1.0/1.2.HowToInstallKsbToolBox.html#host-pc-java-8-oracle-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0)
- Apache Tomcat 7.x가 설치되어야 합니다.
## KSB 인공지능 프레임워크 DB 설치하기
KSB 인공지능 프레임워크는 프레임워크 사용자 정보, 생성 및 구동된 워크플로우 정보, KSB 웹툴킷에서 이용하는 UI Component 관련 정보를 관리하기 위해 Postgresql DB를 사용 합니다.
Postgresql 설치 버전은 9.6.8 이상를 권장하며, 다음과 같이 설치한 후 재시작합니다.
```sh
$ sudo apt-get update
$ sudo apt-get install -y software-properties-common
$ sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install -y postgresql-9.6
$ sudo service postgresql restart
```
또한 Postgresql DB 접근 및 이용을 편리하게 하기 위해 Pgadmin을 설치하여 사용합니다. pgadmin3는 1.22.2 이상을 설치합니다. (Postgresql 9.6.8 이상을 설치해야 잘 동작합니다.) 툴박스 내에서 제공하는 DB restore 파일 등도 위 두 버전을 통해 백업 되었습니다.
```sh
$ sudo apt-get update
$ sudo apt-get install -y pgadmin3
```
## 외부에서 DB 접근 가능하도록 수정하기
설치된 Postgresql은 기본적으로는 localhost에서만 사용 가능합니다. 외부에서도 접근 가능하도록 하기 위해서는 다음 두 파일을 수정해야 합니다.
```sh
** postgresql remote access
$ sudo vi /etc/postgresql/9.6/main/pg_hba.conf/pg_hba.conf
host all all 0.0.0.0/0 md5
$ sudo vi /etc/postgresql/9.6/main/postgresql.conf
listen_addresses = '*'
$ sudo service postgresql restart
```
## KSB 인공지능 프레임워크 DB 정의
Postgresql 설치가 완료되면, DB에 접속하여 DB 사용자 계정과 권한을 생성하고, SDK 압축파일에 포함된 백업파일(csledb_v1.0.backup)을 이용하여 KSB 인공지능 프레임워크 DB 정보를 restore 합니다.
```sh
# create user csle
$ sudo -u postgres bash -c "psql -c \"CREATE USER csle password '사용자암호' superuser;\""
# alter csle as a superuser
$ sudo -u postgres bash -c "psql -c \"ALTER USER csle WITH CREATEROLE REPLICATION CREATEDB SUPERUSER;\""
# create database csledb
$ sudo -u postgres bash -c "psql -c \"CREATE DATABASE csledb WITH OWNER = csle ENCODING = 'UTF-8' CONNECTION LIMIT = -1;\""
$ PGPASSWORD=사용자암호 pg_restore -h localhost -U csle -C -d csledb /home/csle/ksb-csle/tools/webToolkit_db/csledb_v1.0.backup
```
postgresql 에 접속하여 정상적으로 복구 되었는지 확인 합니다.
```sh
$ sudo -su postgres
$ psql
postgres=# \c csledb;
csledb=# select * from "UIEngineComponent" where "MsgVersion" = '1.0'
EngineID | EngineName | EngineType | MsgComponentID | MsgVersion
--------------------------------------+-------------------------------+-----------------------------+--------------------------------------+------------
49dd0271-e7a9-b43e-f1c0-698d42372e2f | BatchEngine | BATCHENGINE | 2b2fa4ec-7cd3-3cc1-1e7c-b11ab3d3ac1b | 1.0
6536ab61-9f9f-1119-6cbf-a3c25e8cb350 | StreamToStreamEngine | STREAMTOSTREAMENGINE | 3819b564-a79e-394d-7bbe-ddc2380f5f68 | 1.0
6f3d98a1-2b69-c711-f8f1-e5336eee2957 | StreamToBatchEngine | STREAMTOBATCHENGINE | 0abe3dab-c535-edcb-141b-a0d9e7746a6d | 1.0
c1ea8c60-afd7-1c75-4686-af114173775e | OnDemandStreamEngine | ONDEMANDSTREAMENGINE | 1bfc7496-d2d3-2140-c137-af09b423a2fe | 1.0
1bfe0c14-7257-b56b-683c-7eb2c7f38fa4 | OnDemandServingEngine | ONDEMANDSERVINGENGINE | cfb9b524-7457-b910-0261-587c5bfe74de | 1.0
aa301492-6d85-2aae-cbf7-ee640d5a2c1d | ExternalEngine | EXTERNALENGINE | e960e289-54df-1790-6e4a-05a75b326cec | 1.0
69686c51-3a70-29bf-608c-7721ac37d98d | GenericEngine | GENERICENGINE | 1dfb7769-8a34-304e-d9d5-00b2cffbbca7 | 1.0
a52ccda4-c59a-01a2-af7d-025cb03fff10 | BatchToBatchStreamEngine | BATCHTOBATCHSTREAMENGINE | cd0758ae-b150-850a-9d73-b29152e820ce | 1.0
5da27056-c880-7917-5e6f-d7db44083e92 | OnDemandStreamServingEngine | ONDEMANDSTREAMSERVINGENGINE | 03ecfbd2-1a3d-2e6c-2448-06f3f2dcfe89 | 1.0
7b4e13dd-bb5d-289e-6022-9c651f2ca1c1 | StreamPipeEngine | STREAMTOSTREAMENGINE | 58b47983-3a49-386a-6403-b6a0ec5c4c67 | 1.0
790be3d3-4f2c-0318-021c-999b8ab59db3 | StreamJoinEngine | INOUTTWIGS2SENGINE | 50f1fd26-49e0-5d70-3ff0-0d14f0c6d19a | 1.0
2043f861-2298-4cd8-7633-97fc06f6f1ab | OnDemandPipeServingEngine | ONDEMANDCOMPOSITEENGINE | 4aff5c80-8b63-527a-7fe9-0e12e8c21735 | 1.0
8f8a4039-46c1-acc5-c425-4e2688b2eb84 | BatchDummyEngine | BATCHDUMMYENGINE | d625a81a-ad0f-0822-3752-c040c1d4ebf6 | 1.0
05761a24-af7e-eda6-428d-fba552ef1cf7 | OnDemandExternalServingEngine | EXTERNALENGINE | fe67950b-aadb-0094-186d-797ad573c84c | 1.0
(14개 행)
```
## KSB 웹툴킷 DB 정의
SDK 압축파일에 포함된 백업파일(uidb_v1.0.backup)을 이용하여 KSB 웹툴 DB 정보를 restore 합니다.
```sh
$ sudo -u postgres bash -c "psql -c \"CREATE DATABASE uidb WITH OWNER = csle ENCODING = 'UTF-8' CONNECTION LIMIT = -1;\""
$ PGPASSWORD=사용자암호 pg_restore -h localhost -U csle -C -d uidb /home/csle/ksb-csle/webToolkit_db/uidb_v1.0.backup
```
postgresql 에 접속하여 정상적으로 복구 되었는지 확인 합니다.
```sh
$ sudo -su postgres
$ psql
postgres=# \c uidb;
uidb=# SELECT count(*) FROM template where msg_version = '1.0';
count
-------
23
(1개 행)
```
## Apache Tomcat 다운로드
KSB 웹툴킷은 웹컨테이너로 Apache tomcat 7을 이용합니다. https://tomcat.apache.org/download-70.cgi 사이트에서 binary distribution을 다운로드 받아, 적당한 위치에 압축을 해제 합니다.
본 매뉴얼 에서는 '/home/csle/ui_of_csle/apache-tomcat-7.0.88/' 에
압축을 해제 한 것으로 가정합니다.
## Tomcat 설정 업데이트
### web.xml 파일 업데이트
/home/csle/ui_of_csle/apache-tomcat-7.0.88/conf/ 디렉토리에 있는 web.xml 파일을 열어 UTF-8 설정 및 Session timeout을 조정합니다.
```xml
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>
.....
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
.....
<session-config>
<session-timeout>360</session-timeout> <!-- minutes -->
</session-config>
```
### server.xml 파일 업데이트
다음으로, server.xml 파일을 열어 UTF-8 설정을 조정 합니다.
```xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="2000000"
redirectPort="8443" disableUploadTimeout="true" URIEncoding="UTF-8"/>
.....
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
```
## 웹파일 설치 및 KSB 인공지능 프레임워크 DB 접속정보 설정
압축된 SDK에서 /home/csle/ksb-csle/tools/webToolkit_db/csle-web_20181025.war 파일을 /home/csle/ui_of_csle/apache-tomcat-7.0.88/webapps 디렉토리로 복사 합니다.
그리고, csle-web_20181025.war 파일의 이름을 ROOT.war로 변경 합니다.
### Tomcat 서버 구동
/home/csle/ui_of_csle/apache-tomcat-7.0.88/bin 디렉토리에 있는
``catalina.sh`` 파일을 통해 Tomcat을 구동하면 웹파일이 압축해제 되어
/home/csle/ui_of_csle/apache-tomcat-7.0.88/webapps/ROOT 폴더가 생성되고, 서버가 구동 됩니다.
```sh
$ cd /home/csle/ui_of_csle/apache-tomcat-7.0.88/bin
$ ./catalina.sh start -Dfile.encoding=UTF-8
(2018-06-30 12:22:37) <localhost-startStop-1> [DEBUG] SQL: SELECT * FROM system_configuration WHERE name = ?, name: [csle.gw.host] (SystemConfigurationDao.java:130)
(2018-06-30 12:22:37) <localhost-startStop-1> [DEBUG] SQL: SELECT * FROM system_configuration WHERE name = ?, name: [csle.gw.port] (SystemConfigurationDao.java:130)
6월 30, 2018 12:22:38 오후 org.apache.catalina.startup.HostConfig deployWAR
정보: Deployment of web application archive /home/kbe/ui_of_csle/apache-tomcat-7.0.81/webapps/ROOT.war has finished in 5,246 ms
6월 30, 2018 12:22:38 오후 org.apache.coyote.AbstractProtocol start
정보: Starting ProtocolHandler ["http-bio-8080"]
6월 30, 2018 12:22:38 오후 org.apache.coyote.AbstractProtocol start
정보: Starting ProtocolHandler ["ajp-bio-8009"]
6월 30, 2018 12:22:38 오후 org.apache.catalina.startup.Catalina start
정보: Server startup in 5339 ms
```
### Tomcat 로그 보기
Tomcat 이 잘 구동되고 있는지 확인하기 위해 Tomcat 로그 파일을 엽니다.
```sh
$ tail -f ../logs/catalina.out
```
## 구글 Chrome 브라우저 설치하기
KSB 웹툴킷은 기본적으로 HTML5 호환 브라우저에서 동작하도록 개발 되었으나, 일부 기능은 Chrome 브라우저에서만 이용 가능합니다. 따라서, Chrome 브라우저를 이용하기를 권장 합니다. 다음 절차를 통해 Chrome 브라우저 최신 버전을 설치 합니다.
```sh
# 운영체제와 CPU 아키텍처에 따라 별도의 링크를 통해 다운 받아야 할 수도 있습니다.
$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo apt-get install -y libxss1 libgconf2-4 libappindicator1 libindicator7
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
```
## KSB 인공지능 프레임워크 구동
KSB 인공지능 프레임워크 툴박스를 설치하거나 소스를 빌드한 후,
ksb-csle/bin 디렉토리에 있는 startKsbApiServing.sh 파일을 실행 합니다.
파일 실행 전에 ls와 같이 간단한 명령을 sudo를 통해 한 번 실행 합니다.
```sh
$ sudo ls
$ ./startKsbApiServing.sh
```
구동이 성공적으로 이루어지면, 다음과 같은 로그가 생성되며,
[akka://KsbApi-serving/user/IO-HTTP/listener-0] Bound to /0.0.0.0:19999
위 메시지를 통해 현재 호스트 PC의 19999 포트를 통해 구동 되는 것을 확인할 수 있습니다.
```sh
2018-10-22 16:51:12.113 [INFO] [ConfigUtils$] KSB config file path :/home/csle/ksb-csle/conf/ksb.conf (ConfigUtils.scala:29)
2018-10-22 16:51:13.355 [INFO] [KsbApiServing$] [Local mode] Update status of incompletely terminated [0] job(s) in previous operation (KsbApiServing.scala:60)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13,905 INFO StdSchedulerFactory: Using default implementation for ThreadExecutor
2018-10-22 16:51:13,910 INFO SimpleThreadPool: Job execution threads will use class loader of thread: main
2018-10-22 16:51:13,923 INFO SchedulerSignalerImpl: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2018-10-22 16:51:13,923 INFO QuartzScheduler: Quartz Scheduler v.2.3.0 created.
2018-10-22 16:51:13,924 INFO RAMJobStore: RAMJobStore initialized.
2018-10-22 16:51:13,925 INFO QuartzScheduler: Scheduler meta-data: Quartz Scheduler (v2.3.0) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
2018-10-22 16:51:13,925 INFO StdSchedulerFactory: Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2018-10-22 16:51:13,925 INFO StdSchedulerFactory: Quartz scheduler version: 2.3.0
2018-10-22 16:51:13,925 INFO QuartzScheduler: Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[INFO] [10/22/2018 16:51:13.979] [KsbApi-serving-akka.actor.default-dispatcher-2] [akka://KsbApi-serving/user/IO-HTTP/listener-0] Bound to /0.0.0.0:19999
[INFO] [10/22/2018 16:51:13.981] [KsbApi-serving-akka.actor.default-dispatcher-3] [akka://KsbApi-serving/deadLetters] Message [akka.io.Tcp$Bound] from Actor[akka://KsbApi-serving/user/IO-HTTP/listener-0#1547261392] to Actor[akka://KsbApi-serving/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
2018-10-23 08:22:18,351 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
```
## KSB 웹툴킷 설정 업데이트
KSB 웹툴킷과 KSB 인공지능 프레임워크는 다음 사용자 정보가 저장되어 있습니다.
&nbsp;&nbsp;&nbsp;&nbsp;User ID: ksbuser@etri.re.kr / User Password: ksbuser@etri.re.kr
Chrome 브라우저(또는 HTML5 표준 호환 브라우저)를 열고 위 사용자 정보를 입력하여 로그인합니다.
```sh
http://localhost:8080
```
![login](./images/1.4_01.png)
정상적으로 로그인에 성공하면, Management 메뉴를 클릭해서 KSB 인공지능 프레임워크가 구동되고 있는 환경 정보를 csle.gw.host 와 csle.gw.port 정보에 반영 합니다.
본 매뉴얼에서는 localhost 와 19999 포트가 되겠습니다.
![management](./images/1.4_02.png)
설정이 완료되면, Tomcat 서버를 재구동 하고, KSB 웹툴킷을 이용 합니다.
```sh
$ ./catalina.sh stop
$ ./catalina.sh start
```
## KSB 웹툴킷 회원 가입 기능 활성화를 위한 설정
KSB 웹툴킷은 이메일을 통해 사용자 가입을 처리하도록 되어 있습니다. 이를 위해 관리자의 메일 계정을 설정 하도록 되어 있으며, Gmail 계정을 통해 설정할 수 있습니다. 관리자는 uidb 의 system_configuration 테이블에 자신의 Gmail 계정을 설정할 수 있으며, 사용자가 회원 가입을 신청하면 관련 메일이 관리자의 Gmail 계정을 통해 발송 됩니다.
설정 방법은, KSB 웹툴킷에 관리자 계정(ksbuser@etri.re.kr)으로 로그인 하여 Management 메뉴의 System Configuration 탭에서 'javax.mail.session.prop.id' property에서 수정아이콘을 클릭하여 Gmail 계정(aaa@gmail.com 이면 aaa)을 'javax.mail.session.prop.password' 에 Gmail 암호를 입력하고 저장 아이콘을 클릭하여 수정한 사항을 저장 합니다.
이메일의 발송 시, 사용자에게 메일로 안내 되는 링크의 ip는 KSB 웹툴킷이 구동 중인 서버의 설정을 따릅니다. 만약 localhost로 구동 하였다면, KSB 웹툴킷이 구동 중인 서버에서만 가입 절차를 진행할 수 있으므로, 외부에서 접속 가능한 ip로 실행 하시기 바랍니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 웹툴킷 설치
---
UI 기반으로 KSB 인공지능 프레임워크를 사용할 수 있는 KSB 웹툴킷 설치 과정을 설명합니다.
## 설치 요구사항
- Docker 기반 KSB 툴박스 환경에서는, KSB 웹툴킷 실행을 위한 기능들이 사전에 설치 되어 있거나 설치 과정에 포함 되어 있으므로, 본 과정이 필요하지 않습니다.
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 웹툴킷은 KSB 인공지능 프레임워크를 기반으로 구동됩니다. 따라서 소스를 빌드하고 startKsbApiServing.sh 를 실행하여 KSB 인공지능 프레임워크를 구동하고 있어야 합니다.
- KSB 웹툴킷은 저장소로 HDFS를 사용합니다. 따라서, 저장소로 사용할 PC에 Hadoop 및 관련 소프트웨어가 설치 되어 있어야 합니다. Hadoop을 설치한 후에는 ksb-csle/conf/ksb.conf 파일에서 hadoop.master 정보를 설치한 호스트명으로 설정해 주어야 합니다. 또한 hadoop.hdfs.activated 도 true로 설정해야 정상적으로 HDFS 를 저장소로 이용할 수 있습니다.(기본적으로 true로 설정 되어 있습니다.)
- DB에서 한글을 정상적으로 사용하기 위해, 호스트 운영체제의 언어를 한글로 설정 합니다. 변경 하는 방법은 다음 링크를 참고 합니다.
[Ubuntu 언어 변경](https://askubuntu.com/questions/509174/how-can-i-change-the-language-from-english-to-spanish)
- Postgresql 9.6.8 이상이 설치되어야 합니다.
- Pgadmin3 1.22.2 이상이 설치되어야 합니다.
## KSB 인공지능 프레임워크 DB 설치하기
KSB 인공지능 프레임워크는 프레임워크 사용자 정보, 생성 및 구동된 워크플로우 정보, KSB 웹툴킷에서 이용하는 UI Component 관련 정보를 관리하기 위해 Postgresql DB를 사용 합니다.
Postgresql 설치 버전은 9.6.8 이상를 권장하며, 다음과 같이 설치한 후 재시작합니다.
```sh
$ sudo apt-get update
$ sudo apt-get install -y software-properties-common
$ sudo add-apt-repository "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main"
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install -y postgresql-9.6
$ sudo service postgresql restart
```
또한 Postgresql DB 접근 및 이용을 편리하게 하기 위해 Pgadmin을 설치하여 사용합니다. pgadmin3는 1.22.2 이상을 설치합니다. (ostgresql 9.6.8 이상을 설치해야 잘 동작합니다.)
```sh
$ sudo apt-get update
$ sudo apt-get install -y pgadmin3
```
## KSB 인공지능 프레임워크 DB 정의
Postgresql 설치가 완료되면, DB에 접속하여 DB 사용자 계정과 권한을 생성하고, SDK 압축파일에 포함된 백업파일(csledb_v1.0.backup)을 이용하여 KSB 인공지능 프레임워크 DB 정보를 restore 합니다.
```sh
$ sudo -u postgres bash -c "psql -c \"CREATE USER csle password '사용자암호' superuser;\""
$ sudo -u postgres bash -c "psql -c \"CREATE DATABASE csledb WITH OWNER = csle ENCODING = 'UTF-8' CONNECTION LIMIT = -1;\""
$ PGPASSWORD=사용자암호 pg_restore -h localhost -U csle -C -d csledb /home/csle/ksb-csle/tools/webToolkit_db/csledb_v1.0.backup
```
postgresql 에 접속하여 정상적으로 복구 되었는지 확인 합니다.
```sh
$ sudo -su postgres
$ psql
postgres=# \c csledb;
csledb=# select * from "UIEngineComponent" where "MsgVersion" = '1.0'
EngineID | EngineName | EngineType | MsgComponentID | MsgVersion
--------------------------------------+-------------------------------+-----------------------------+--------------------------------------+------------
49dd0271-e7a9-b43e-f1c0-698d42372e2f | BatchEngine | BATCHENGINE | 2b2fa4ec-7cd3-3cc1-1e7c-b11ab3d3ac1b | 1.0
6536ab61-9f9f-1119-6cbf-a3c25e8cb350 | StreamToStreamEngine | STREAMTOSTREAMENGINE | 3819b564-a79e-394d-7bbe-ddc2380f5f68 | 1.0
6f3d98a1-2b69-c711-f8f1-e5336eee2957 | StreamToBatchEngine | STREAMTOBATCHENGINE | 0abe3dab-c535-edcb-141b-a0d9e7746a6d | 1.0
c1ea8c60-afd7-1c75-4686-af114173775e | OnDemandStreamEngine | ONDEMANDSTREAMENGINE | 1bfc7496-d2d3-2140-c137-af09b423a2fe | 1.0
1bfe0c14-7257-b56b-683c-7eb2c7f38fa4 | OnDemandServingEngine | ONDEMANDSERVINGENGINE | cfb9b524-7457-b910-0261-587c5bfe74de | 1.0
aa301492-6d85-2aae-cbf7-ee640d5a2c1d | ExternalEngine | EXTERNALENGINE | e960e289-54df-1790-6e4a-05a75b326cec | 1.0
69686c51-3a70-29bf-608c-7721ac37d98d | GenericEngine | GENERICENGINE | 1dfb7769-8a34-304e-d9d5-00b2cffbbca7 | 1.0
a52ccda4-c59a-01a2-af7d-025cb03fff10 | BatchToBatchStreamEngine | BATCHTOBATCHSTREAMENGINE | cd0758ae-b150-850a-9d73-b29152e820ce | 1.0
5da27056-c880-7917-5e6f-d7db44083e92 | OnDemandStreamServingEngine | ONDEMANDSTREAMSERVINGENGINE | 03ecfbd2-1a3d-2e6c-2448-06f3f2dcfe89 | 1.0
7b4e13dd-bb5d-289e-6022-9c651f2ca1c1 | StreamPipeEngine | STREAMTOSTREAMENGINE | 58b47983-3a49-386a-6403-b6a0ec5c4c67 | 1.0
790be3d3-4f2c-0318-021c-999b8ab59db3 | StreamJoinEngine | INOUTTWIGS2SENGINE | 50f1fd26-49e0-5d70-3ff0-0d14f0c6d19a | 1.0
2043f861-2298-4cd8-7633-97fc06f6f1ab | OnDemandPipeServingEngine | ONDEMANDCOMPOSITEENGINE | 4aff5c80-8b63-527a-7fe9-0e12e8c21735 | 1.0
8f8a4039-46c1-acc5-c425-4e2688b2eb84 | BatchDummyEngine | BATCHDUMMYENGINE | d625a81a-ad0f-0822-3752-c040c1d4ebf6 | 1.0
05761a24-af7e-eda6-428d-fba552ef1cf7 | OnDemandExternalServingEngine | EXTERNALENGINE | fe67950b-aadb-0094-186d-797ad573c84c | 1.0
(14개 행)
```
## KSB 웹툴킷 DB 정의
SDK 압축파일에 포함된 백업파일(uidb_v1.0.backup)을 이용하여 KSB 웹툴 DB 정보를 restore 합니다.
```sh
$ sudo -u postgres bash -c "psql -c \"CREATE DATABASE uidb WITH OWNER = csle ENCODING = 'UTF-8' CONNECTION LIMIT = -1;\""
$ PGPASSWORD=사용자암호 pg_restore -h localhost -U csle -C -d uidb /home/csle/ksb-csle/webToolkit_db/uidb_v1.0.backup
```
postgresql 에 접속하여 정상적으로 복구 되었는지 확인 합니다.
```sh
$ sudo -su postgres
$ psql
postgres=# \c uidb;
uidb=# SELECT count(*) FROM template where msg_version = '1.0';
count
-------
23
(1개 행)
```
## KSB 웹툴킷 회원 가입 기능 활성화를 위한 설정
KSB 웹툴킷은 이메일을 통해 사용자 가입을 처리하도록 되어 있습니다. 이를 위해 관리자의 메일 계정을 설정 하도록 되어 있으며, Gmail 계정을 통해 설정할 수 있습니다. 관리자는 uidb 의 system_configuration 테이블에 자신의 Gmail 계정을 설정할 수 있으며, 사용자가 회원 가입을 신청하면 관련 메일이 관리자의 Gmail 계정을 통해 발송 됩니다.
설정 방법은, KSB 웹툴킷에 관리자 계정(ksbuser@etri.re.kr)으로 로그인 하여 Management 메뉴의 System Configuration 탭에서 'javax.mail.session.prop.id' property에서 수정아이콘을 클릭하여 Gmail 계정(aaa@gmail.com 이면 aaa)을 'javax.mail.session.prop.password' 에 Gmail 암호를 입력하고 저장 아이콘을 클릭하여 수정한 사항을 저장 합니다.
이메일의 발송 시, 사용자에게 메일로 안내되는 링크의 ip는 KSB 웹툴킷이 구동중인 서버의 설정을 따릅니다. 만약 localhost로 구동 하였다면, KSB 웹툴킷이 구동중인 서버에서만 가입 절차를 진행할 수 있으므로, 외부에서 접속 가능한 ip로 실행 하시기 바랍니다.
## Apache Tomcat 다운로드
KSB 웹툴킷은 웹컨테이너로 Apache tomcat 7을 이용합니다. https://tomcat.apache.org/download-70.cgi 사이트에서 binary distribution을 다운로드 받아, 적당한 위치에 압축을 해제 합니다.
본 매뉴얼 에서는 '/home/csle/ui_of_csle/apache-tomcat-7.0.88/' 에
압축을 해제 한 것으로 가정합니다.
## Tomcat 설정 업데이트
### web.xml 파일 업데이트
/home/csle/ui_of_csle/apache-tomcat-7.0.88/conf/ 디렉토리에 있는 web.xml 파일을 열어 UTF-8 설정 및 Session timeout을 조정합니다.
```xml
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<async-supported>true</async-supported>
</filter>
.....
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
.....
<session-config>
<session-timeout>360</session-timeout> <!-- minutes -->
</session-config>
```
### server.xml 파일 업데이트
다음으로, server.xml 파일을 열어 UTF-8 설정을 조정 합니다.
```xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="2000000"
redirectPort="8443" disableUploadTimeout="true" URIEncoding="UTF-8"/>
.....
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
```
## 웹파일 설치 및 KSB 인공지능 프레임워크 DB 접속정보 설정
압축된 SDK에서 /home/csle/ksb-csle/tools/webToolkit_db/csle-web_20181025.war 파일을 /home/csle/ui_of_csle/apache-tomcat-7.0.88/webapps 디렉토리로 복사 합니다.
그리고, csle-web_20181025.war 파일의 이름을 ROOT.war로 변경 합니다.
### Tomcat 서버 구동
/home/csle/ui_of_csle/apache-tomcat-7.0.88/bin 디렉토리에 있는
``catalina.sh`` 파일을 통해 Tomcat을 구동하면 웹파일이 압축해제 되어
/home/csle/ui_of_csle/apache-tomcat-7.0.88/webapps/ROOT 폴더가 생성되고, 서버가 구동 됩니다.
```sh
$ cd /home/csle/ui_of_csle/apache-tomcat-7.0.88/bin
$ ./catalina.sh start -Dfile.encoding=UTF-8
(2018-06-30 12:22:37) <localhost-startStop-1> [DEBUG] SQL: SELECT * FROM system_configuration WHERE name = ?, name: [csle.gw.host] (SystemConfigurationDao.java:130)
(2018-06-30 12:22:37) <localhost-startStop-1> [DEBUG] SQL: SELECT * FROM system_configuration WHERE name = ?, name: [csle.gw.port] (SystemConfigurationDao.java:130)
6월 30, 2018 12:22:38 오후 org.apache.catalina.startup.HostConfig deployWAR
정보: Deployment of web application archive /home/kbe/ui_of_csle/apache-tomcat-7.0.81/webapps/ROOT.war has finished in 5,246 ms
6월 30, 2018 12:22:38 오후 org.apache.coyote.AbstractProtocol start
정보: Starting ProtocolHandler ["http-bio-8080"]
6월 30, 2018 12:22:38 오후 org.apache.coyote.AbstractProtocol start
정보: Starting ProtocolHandler ["ajp-bio-8009"]
6월 30, 2018 12:22:38 오후 org.apache.catalina.startup.Catalina start
정보: Server startup in 5339 ms
```
### Tomcat 로그 보기
Tomcat 이 잘 구동되고 있는지 확인하기 위해 Tomcat 로그 파일을 엽니다.
```sh
$ tail -f ../logs/catalina.out
```
## KSB 인공지능 프레임워크 구동
KSB 인공지능 프레임워크 툴박스를 설치하거나 소스를 빌드한 후,
ksb-csle/bin 디렉토리에 있는 startKsbApiServing.sh 파일을 실행 합니다.
파일 실행 전에 ls와 같이 간단한 명령을 sudo를 통해 한 번 실행 합니다.
```sh
$ sudo ls
$ ./startKsbApiServing.sh
```
구동이 성공적으로 이루어지면, 다음과 같은 로그가 생성되며,
[akka://KsbApi-serving/user/IO-HTTP/listener-0] Bound to /0.0.0.0:19999
위 메시지를 통해 현재 호스트 PC의 19999 포트를 통해 구동 되는 것을 확인할 수 있습니다.
```sh
2018-10-22 16:51:12.113 [INFO] [ConfigUtils$] KSB config file path :/home/csle/ksb-csle/conf/ksb.conf (ConfigUtils.scala:29)
2018-10-22 16:51:13.355 [INFO] [KsbApiServing$] [Local mode] Update status of incompletely terminated [0] job(s) in previous operation (KsbApiServing.scala:60)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13.644 [INFO] [ApiServingActor] KSB ApiServingActor has been started. (ApiServingActor.scala:820)
2018-10-22 16:51:13,905 INFO StdSchedulerFactory: Using default implementation for ThreadExecutor
2018-10-22 16:51:13,910 INFO SimpleThreadPool: Job execution threads will use class loader of thread: main
2018-10-22 16:51:13,923 INFO SchedulerSignalerImpl: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2018-10-22 16:51:13,923 INFO QuartzScheduler: Quartz Scheduler v.2.3.0 created.
2018-10-22 16:51:13,924 INFO RAMJobStore: RAMJobStore initialized.
2018-10-22 16:51:13,925 INFO QuartzScheduler: Scheduler meta-data: Quartz Scheduler (v2.3.0) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'
Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.
NOT STARTED.
Currently in standby mode.
Number of jobs executed: 0
Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.
Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.
2018-10-22 16:51:13,925 INFO StdSchedulerFactory: Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2018-10-22 16:51:13,925 INFO StdSchedulerFactory: Quartz scheduler version: 2.3.0
2018-10-22 16:51:13,925 INFO QuartzScheduler: Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
[INFO] [10/22/2018 16:51:13.979] [KsbApi-serving-akka.actor.default-dispatcher-2] [akka://KsbApi-serving/user/IO-HTTP/listener-0] Bound to /0.0.0.0:19999
[INFO] [10/22/2018 16:51:13.981] [KsbApi-serving-akka.actor.default-dispatcher-3] [akka://KsbApi-serving/deadLetters] Message [akka.io.Tcp$Bound] from Actor[akka://KsbApi-serving/user/IO-HTTP/listener-0#1547261392] to Actor[akka://KsbApi-serving/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'.
2018-10-23 08:22:18,351 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
```
## KSB 웹툴킷 설정 업데이트
KSB 웹툴킷과 KSB 인공지능 프레임워크는 다음 사용자 정보가 저장되어 있습니다.
&nbsp;&nbsp;&nbsp;&nbsp;User ID: ksbuser@etri.re.kr / User Password: ksbuser@etri.re.kr
Chrome 브라우저(또는 HTML5 표준 호환 브라우저)를 열고 위 사용자 정보를 입력하여 로그인합니다.
```sh
http://localhost:8080
```
![login](./images/1.4_01.png)
정상적으로 로그인에 성공하면, Management 메뉴를 클릭해서 KSB 인공지능 프레임워크가 구동되고 있는 환경 정보를 csle.gw.host 와 csle.gw.port 정보에 반영 합니다.
본 매뉴얼에서는 localhost 와 19999 포트가 되겠습니다.
![management](./images/1.4_02.png)
설정이 완료되면, Tomcat 서버를 재구동 하고, KSB 웹툴킷을 이용 합니다.
```sh
$ ./catalina.sh stop
$ ./catalina.sh start
```
<!--stackedit_data:
eyJoaXN0b3J5IjpbLTkwNzQ1NDQ0OCwxMDExMjI4NjhdfQ==
-->
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 인공지능 프레임워크 실행하기
---
KSB 인공지능 프레임워크를 실행하는 방법에 대해서 설명합니다.
아래와 같은 절차로 KSB 프레임워크를 구동합니다.
. [Host PC] KSB 툴박스 docker 컨테이너 실행하기
. [Docker 컨테이너] KSB 툴박스 docker 컨테이너 초기화
. [Docker 컨테이너] KSB 인공지능 프레임워크 API serving 구동
## [Host PC] KSB 툴박스 docker 컨테이너 실행하기
<a href="http://csleoss.etri.re.kr:8088/kor/sub02_01.do" title="다운로드"> 다운로드</a> 페이지에서 KSB 툴박스 (ksb_toolbox_v1_0.tar.gz 파일)를 다운받아 압축을 해제하여 생성된 ```/home/csle/ksb_csle/docker/1.0-host```로 이동합니다.
아래의 명령을 통해 KSB 툴박스 docker 컨테이너를 실행하고 접속합니다.
```sh
csle@csle1:~/ksb-csle/docker/1.0-host$ ./startDockerCsle.sh
Error response from daemon: network csle_standalone not found
csle1
start csle1 slave container...
4918997cd2dac93fe0b52f3df3a45a46db6df1f3f052854061696695451d2f22
csle@csle1:/$
```
. (참고사항) KSB 툴박스 docker 컨테이너를 실행할 경우, Host pc의 /home/csle/ksb-csle 폴더를 volume 마운트해서 사용합니다. 따라서 예제 파일이나 모델 파일 등 사용자 파일은 ksb-csle 폴더를 통해 docker 컨테이너에서 접근 할 수 있습니다.
## [Docker 컨테이너] KSB 툴박스 docker 컨테이너 초기화하기
KSB 툴박스 docker 컨테이너 접속한 후, 다양한 KSB 툴박스 예제들을 실행하기 위해서 아래 명령을 통해 docker 컨테이너를 초기화 합니다. Zookeeper/Hadoop/Kafka/Hbase/웹툴킷 등 초기화를 진행합니다. PC사양에 따라 다소 시간이 걸릴 수 있습니다. 아래와 같은 메세지가 나오면 초기화가 완료된 상태입니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 Host PC IP가 출력되면 정상입니다.)
```sh
csle@csle1: cd
csle@csle1:~$ ./startService.sh
* Restarting OpenBSD Secure Shell server sshd [ OK ]
* Restarting PostgreSQL 9.6 database server [ OK ]
ZooKeeper JMX enabled by default
Using config: /home/csle/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
Warning: Permanently added 'master,192.168.0.5' (ECDSA) to the list of
known hosts.
ZooKeeper JMX enabled by default
Using config: /home/csle/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 174.
Warning: Permanently added 'csle1,192.168.0.5' (ECDSA) to the list of
known hosts.
ZooKeeper JMX enabled by default
Using config: /home/csle/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... already running as process 174.
Starting namenodes on [csle1]
csle1: Warning: Permanently added 'csle1,192.168.0.5' (ECDSA) to the
list of known hosts.
< 중간 생략 >
[info] Loading project definition from
/home/csle/ksb-knowledge/KBE/project
[info] Set current project to KBE
(in build file:/home/csle/ksb-knowledge/KBE/)
[warn] The start command is deprecated, and will be removed in a
future version of Play.
[warn] To run Play in production mode, run 'stage' instead, and then
execute the generated start script in target/universal/stage/bin.
[warn] To test your application using production mode, run 'testProd'
instead.
[info] Wrote /home/csle/ksb-knowledge/KBE/target/scala-2.11/
kbe_2.11-1.0-SNAPSHOT.pom
Warning: node.js detection failed, sbt will use the Rhino based
Trireme JavaScript engine instead to run JavaScript assets compilation,
which in some cases may be orders of magnitude slower than using
node.js.
(Starting server. Type Ctrl+D to exit logs, the server will remain in
background)
<!DOCTYPE html>
<html lang="en">
<head>
<title>Select inference rules</title>
<link rel="stylesheet" media="screen"
href="/assets/stylesheets/main.css">
<link rel="shortcut icon" type="image/png"
href="/assets/images/favicon.png">
<script src="/assets/javascripts/hello.js"
type="text/javascript"></script>
</head>
<body>
< 중간 생략 >
<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome to Play</title>
<link rel="stylesheet" media="screen"
href="/assets/stylesheets/main.css">
<link rel="shortcut icon" type="image/png"
href="/assets/images/favicon.png">
<script src="/assets/javascripts/hello.js"
type="text/javascript"></script>
</head>
<body>
<h1>addDeviceControl</h1>
</body>
</html>
csle@csle1:~$
```
jps명령을 이용하여 초기화 상태를 확인합니다.
```sh
csle@csle1:~$ jps
2336 HRegionServer
2161 HMaster
3681 Jps
1890 NodeManager
1219 DataNode
885 QuorumPeerMain
1413 SecondaryNameNode
1078 NameNode
3542 ProdServerStart
2475 Kafka
3228 Bootstrap
1597 ResourceManager
```
## [Docker 컨테이너] KSB Base Ontology 로드하기
KSB 툴박스에 포함된 RealtimeIngestToServingWithKbInTwoEngines 예제를 실행하기 위해 온톨로지를 로드합니다.
```sh
cd ~/ksb-csle/bin/
./loadKnowledge_BaseOntologies.sh localhost 9876
```
## [Docker 컨테이너] KSB 인공지능 프레임워크 구동하기
KSB 툴박스의 다양한 예제를 실행하기 위해 아래 명령으로 KSB 인공지능 프레임워크 API serving을 실행합니다.
```sh
csle@csle1:~/ksb-csle/bin$ ./startKsbApiServing.sh
```
KSB 인공지능 프레임워크 사용을 위한 모든 준비가 완료되었습니다.
이제 <a href="http://csleoss.etri.re.kr:8088/kor/sub05_03.do" title="사용자가이드"> 사용자 가이드</a>로 이동하셔서 워크플로우 예제들을 실행해 보시기 바랍니다.
## FAQ
#### 1. 호스트 PC에서 sudo 명령을 할때 sudo: could not resolve host 에러가 날때
. [Host PC] 호스트 PC의 hostname이 csle1으로 설정되었는지 확인합니다.
. sudo vi /etc/hosts 명령을 통해 아래의 줄이 추가되었는지 확인합니다.
<자신의 IP> csle1 master
#### 2. 웹툴킷 홈페이지(csle1:8080)에 접속이 안될때
. [Docker 컨테이너] tomcat이 제대로 구동되지 않았을 경우가 있습니다. 따라서 docker내에서 아래의 명령으로 tomcat을 재구동한 후 재접속합니다.
```sh
csle@csle1:/$ ~/ui_of_csle/apache-tomcat-7.0.81/bin/catalina.sh stop
csle@csle1:/$ ~/ui_of_csle/apache-tomcat-7.0.81/bin/catalina.sh start
```
#### 3. 크롬을 이용해서 웹툴킷에 잘 접속 되었으나, 아래와 같이 웹페이지가 업데이트 되지 않고 멈춰있을때
![](./images/1.5.HowToRunFirst_01.png)
Host PC에 기존의 웹툴킷 버전이 캐쉬에 남아있어서 문제가 되는 경우입니다.
먼저, 크롬 브라우저에서 F12를 클릭합니다. 그리고, 아래 그림과 같이 '새로고침' 아이콘에서 마우스 오른쪽 버튼을 클릭하면 '캐시 비우기 및 강력 새로고침'을 클릭합니다. 그리고 F12를 클릭해서 디버깅 모드를 빠져나옵니다.
![](./images/1.5.HowToRunFirst_02.png)
This diff is collapsed.
This diff is collapsed.
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment