Commit 1c94813a authored by HooYoungAhn's avatar HooYoungAhn
Browse files

upload manual_1903

parent 2d619d0a
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 설치하기
---
KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 19.03 버전 설치 방법을 설명합니다.
## 설치 요구사항
- Ubuntu 16.04.5가 설치된 메모리 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.5를 처음 설치한 경우 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 install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y openssh-server locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python pillow requests numpy
```
## [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
```
**<span style="font-size: 11pt; color:red"> [참고사항]
사용자의 우분투 환경에 따라 위의 스크립트가 적용되지 않는 경우가 간혹 발생합니다.
sudo vi /etc/ssh/sshd_config 명령을 통해 ssh port 2243 번호와 PermitRootLogin yes로 수정되었는지 확인합니다.</span>**
```sh
# What ports, IPs and protocols we listen for
Port 2243
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
```
## [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 내용을 수정합니다.
**<span style="font-size: 11pt; color:red">[중요]
아래의 설정은 사용자의 host pc의 IP를 192.168.0.5로 가정하였을때입니다.
따라서, 자신의 HOST 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
# 각 사용자의 Host PC IP 주소에 맞게 아래 내용 추가
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="https://csleoss.etri.re.kr/kor/sub02_04.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:19.03.4-miniconda3
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
**<span style="font-size: 10pt; color:red">[참고사항] 현재 2020.05.18일 docker image 버전은 19.03.4 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다**
```sh
csle@csle1:~/ksb-csle$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox 19.03.4-miniconda3 56344a4d15de 7 days ago 7.92GB
```
## [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 가능)로 변경합니다.
```sh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
**<span style="font-size: 10pt; color:red">[참고사항] 만약 보안을 위해 새로운 SSH 키를 Host PC와 docker 컨테이너가 공유할 수 있습니다.** <a href="https://csleoss.etri.re.kr/images/contents/manual_1903/2019-07-18-ssh_key_new_generation.html" title="SSH키 생성 및 공유하기">[바로가기] SSH키 생성 및 공유하기</a>
## [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_1903/1.5.HowToRunFirst-1903.html" title="KSB 인공지능 프레임워크 처음 실행하기">[바로가기] KSB 인공지능 프레임워크 처음 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동하도록 하겠습니다.
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB 툴박스 버전 업그레이드 하기(nvidia-docker버전)
---
KSB 툴박스 v19.03 nvidia-docker 버전을 업그레이드 하는 방법을 설명합니다.
본 메뉴얼은 v19.03.1 버전에서 v19.03.2 버전으로 업그레이드하는 경우를 예를들어 설명합니다.
## 설치 순서
Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로 설치합니다.
- [Host PC] KSB 툴박스 다운로드 및 압축 풀기
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
- [Host PC] KSB 툴박스 docker 컨테이너 실행하기
## [Host PC] KSB 프레임워크 설치 및 docker image 다운받기
업그레이드를 위해 새로운 KSB 툴박스 파일을 다운로드합니다.<a href="https://csleoss.etri.re.kr/images/contents/manual_1903/ksb_toolbox_nvidia_v1903.tar.gz" class="link_btn"> [다운로드 링크]</a>
- ksb_toolbox_nvidia_v1903.tar.gz : KSB 툴박스 파일
기존 /home/csle/ksb-csle 폴더 이름을 변경합니다.
```sh
cd ~
mv ksb-csle ksb-csle-bak
```
csle 사용자 계정의 home에 ksb_toolbox_nvidia_v1903.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_nvidia_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 이미지내 SSH 키를 host pc에 복사하기
KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/tools 폴더에 있는 .ssh 폴더를 csle 홈에 카피합니다.
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```sh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
**<span style="font-size: 10pt; color:red">[참고사항] 만약 보안을 위해 새로운 SSH 키를 Host PC와 docker 컨테이너가 공유할 수 있습니다.** <a href="https://csleoss.etri.re.kr/images/contents/manual_1903/2019-07-18-ssh_key_new_generation.html" title="SSH키 생성 및 공유하기">[바로가기] SSH키 생성 및 공유하기</a>
## [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/
```
## [Host PC] KSB 툴박스 docker 컨테이너 실행하기
```cd /home/csle/ksb_csle/docker/19.03-host```로 이동합니다.
아래의 명령을 통해 KSB 툴박스 docker 컨테이너를 실행하고 접속합니다. **<span style="font-size: 10pt; color:red">
이때 새로운 KSB 툴박스 docker image를 docker hub로 부터 자동으로 다운 받습니다.**
```sh
csle@csle1:~/ksb-csle/docker/19.03-host$ ./startDockerCsle.sh
Error response from daemon: network csle_standalone not found
csle1
start csle1 slave container...
4918997cd2dac93fe0b52f3df3a45a46db6df1f3f052854061696695451d2f22
csle@csle1:/$
```
KSB 인공지능 프레임워크 실행하기 위해 <a href="https://csleoss.etri.re.kr/images/contents/manual_1903/1.5.HowToRunFirst-1903.html" title="KSB 인공지능 프레임워크 실행하기">KSB 인공지능 프레임워크 실행하기</a> 페이지로 이동하여 KSB 프레임워크를 구동합니다.
......@@ -11,7 +11,7 @@ KSB 프레임워크를 쉽게 사용하기 위한 KSB 툴박스 v19.03 nvidia-do
## 설치 요구사항
- Ubuntu 16.04가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- Ubuntu 16.04.5가 설치된 메모리 16GB 이상 데스트탑이나 노트북이 요구됩니다.
- KSB 툴박스는 Hadoop, hbase, kafka, zookeeper, spark 등 빅데이터 처리 프레임워크과 연동합니다. 따라서 다양한 워크플로우 예제를 실행하기 위해서는 16GB 이상의 메모리와 cpu 코어 8개이상의 PC 사양이 요구됩니다.
(메모리 8GB 및 cpu 코어 4개 사양 PC에서는 제한적으로 워크플로우 예제 실행이 가능합니다.)
......@@ -46,7 +46,6 @@ Host PC에 KSB 툴박스를 설치하기 위해서 아래와 같은 절차로
- [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
- [Host PC] SSH 재시작하기
- [Host PC] ksb-csle 폴더 권한 변경하기
- [Host PC] startDockerCsle.sh, stopDockerCsle.sh 추가하기
## [Host PC] csle 사용자 계정(권한 : administrator) 생성하기
......@@ -96,7 +95,7 @@ PC를 재부팅하여 csle 계정으로 로그인합니다.
## [Host PC] NVIDIA 그래픽카드 드라이버 설치하기
```sh
sudo add-apt-repository ppa:graphics-drivers
sudo add-apt-repository ppa:graphics-drivers && \
sudo apt-get update
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "자세히 보기" 아이콘 클릭 -->
......@@ -104,9 +103,12 @@ sudo apt-get update
왼쪽 우분투 "시스템설정" 아이콘 클릭 --> "소프트웨어&업데이터" 아이콘 클릭 -->
상단 메뉴에서 "추가 드라이버" 메뉴 선택 -->
NVIDIA 드라이버 사용 선택(예:NVIDIA binary driver-version 396.54(독점,확인함)) -->
NVIDIA 드라이버 사용 선택(예: NVIDIA binary driver-version 396.54(독점,확인함)) -->
"바뀐 내용 적용" 후 컴퓨터 재부팅
```
**<span style="font-size: 11pt; color:red;">[참고사항] 사용자의 NVIDIA 그래픽 카드에 적합한 NVIDIA binary driver version을 선택합니다.**
```sh
csle@csle1:~$ nvidia-smi
Sat Oct 24 13:17:41 2018
......@@ -130,7 +132,7 @@ Sat Oct 24 13:17:41 2018
PC를 재부팅합니다.
## [Host PC] openjdk-8 설치하기
Host PC에 Ubuntu 16.04를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
Host PC에 Ubuntu 16.04.5를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
......@@ -151,12 +153,11 @@ Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
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 \
sudo apt-get install -y openssh-server locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
pip3 install kafka-python pillow requests numpy
```
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
......@@ -168,6 +169,18 @@ sudo sed -ri \
's/^PermitRootLogin prohibit-password/PermitRootLogin yes/g' \
/etc/ssh/sshd_config
```
**<span style="font-size: 11pt; color:red">[참고사항]
사용자의 우분투 환경에 따라 위의 스크립트가 적용되지 않는 경우가 간혹 발생합니다.
sudo vi /etc/ssh/sshd_config 명령을 통해 ssh port 2243 번호와 PermitRootLogin yes로 수정되었는지 확인합니다.</span>**
```sh
# What ports, IPs and protocols we listen for
Port 2243
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
```
## [Host PC] SSH config 수정하기 (known_hosts에 호스트 저장 질문을 하지 않도록 설정)
아래의 명령을 수행하여 ssh_config의 기존 내용을 모두 삭제하고 설정을 추가합니다. 아래의 내용을 터미널에 복사하여 설정가능합니다.
......@@ -204,7 +217,6 @@ 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 | \
......@@ -296,7 +308,10 @@ sudo apt-get purge nvidia-docker
## [Host PC] /etc/hosts 수정하기
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다. (host pc의 IP는 192.168.0.5로 가정합니다. 자신의 PC IP에 맞게 설정합니다.)
KSB 툴박스의 docker 컨테이너 주소에 쉽게 접근하기 위해 아래와 같이 /etc/hosts 내용을 수정합니다.
**<span style="font-size: 11pt; color:red">[중요]
아래의 설정은 사용자의 host pc의 IP를 192.168.0.5로 가정하였을때입니다.
따라서, 자신의 HOST PC IP에 맞게 설정합니다.**
```sh
127.0.0.1 localhost
......@@ -310,7 +325,7 @@ ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 아래 내용 추가
# 각 사용자의 Host PC IP 주소에 맞게 아래 내용 추가
192.168.0.5 csle1 master
```
......@@ -342,14 +357,13 @@ 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>
먼저 KSB 툴박스 파일을 다운로드합니다.<a href="https://csleoss.etri.re.kr/images/contents/manual_1903/ksb_toolbox_nvidia_v1903.tar.gz" class="link_btn"> [다운로드 링크]</a>
- ksb_toolbox_nvidia_v1903.tar.gz : KSB 툴박스 파일
csle 사용자 계정의 home에 ksb_toolbox_v1903.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
csle 사용자 계정의 home에 ksb_toolbox_nvidia_v1903.tar.gz 압축을 해제합니다. 결과적으로 /home/csle/ksb-csle 폴더가 생성됩니다.
```sh
tar zxvf ksb_toolbox_v1903.tar.gz -C /home/csle/
tar zxvf ksb_toolbox_nvidia_v1903.tar.gz -C /home/csle/
```
/home/csle/ksb-csle 폴더는 다음의 하위 폴더들로 구성됩니다.
......@@ -369,16 +383,18 @@ tar zxvf ksb_toolbox_v1903.tar.gz -C /home/csle/
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 docker hub로부터 pull 합니다.
```sh
docker pull ksbframework/ksb_toolbox_nvidia:19.03.5-cuda9.0-cudnn7
docker pull ksbframework/ksb_toolbox_nvidia:19.03.6-cuda9.0-cudnn7
```
Host PC에서 다음 명령으로 KSB 툴박스 docker image를 확인합니다.
(참고사항: 2019.05.24일 docker image 버전은 19.03.5-cuda9.0-cudnn7 버전이며, 추후 TAG 정보 및 SIZE 정보는 배포 버전에 따라 다를 수 있습니다)
**<span style="font-size: 10pt; color:red">
[참고사항] 현재 2019.07.10일 docker image 버전은 19.03.6 nvidia 버전이며, 추후 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
REPOSITORY TAG IMAGE ID CREATED SIZE
ksbframework/ksb_toolbox_nvidia 19.03.6-cuda9.0-cudnn7 f7114dea842b 43 minutes ago 9.78GB
```
## [Host PC] KSB 툴박스 docker 이미지내 SSH 키를 host pc에 복사하기
......@@ -388,7 +404,7 @@ KSB 툴박스 docker 컨테이너의 인증키를 공유하기 위해 ksb-csle/t
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```
```sh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
......@@ -397,69 +413,11 @@ chmod 600 ~/.ssh/authorized_keys
```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 프레임워크를 구동하도록 하겠습니다.
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 2.7.3 설치하기](https://csleoss.etri.re.kr/images/contents/manual_1.0/1.3.HowToInstallKsbFrameWork.html#host-pc-hadoop-273-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0))
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 인공지능 프레임워크 DBMS (Postgresql) 설치하기
KSB 인공지능 프레임워크는 프레임워크 사용자 정보, 생성 및 구동된 워크플로우 정보, KSB 웹툴킷에서 이용하는 UI Component 관련 정보를 관리하기 위해 Postgresql을 사용 합니다.
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 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
$ sudo vi /etc/postgresql/9.6/main/postgresql.conf
#listen_addresses = 'localhost'
listen_addresses = '*'
$ sudo service postgresql restart
```
## KSB 인공지능 프레임워크 DB 정의
Postgresql 설치가 완료되면, DB에 접속하여 DB 사용자 계정과 권한을 생성하고, 백업파일을 이용하여 KSB 인공지능 프레임워크 DB 정보를 restore 합니다.
#### KSB 인공지능 프레임워크 DB 생성
```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;\""
```
#### Restore 방법 1: Postgresql 9.6.8 에서 백업 pg_dump를 통해 백업된 파일을 pg_restore로 restore 하기
백업 파일: [csledb_backup_20190110_1_19.03.backup](https://csleoss.etri.re.kr/images/contents/manual_1903/csledb_backup_20190110_1_19.03.backup)
- 본 파일은 pgadmin3 상에서도 restore 할 수 있습니다.
```sh
$ PGPASSWORD=사용자암호 pg_restore -h localhost -U csle -C -d csledb /home/csle/Downloads/csledb_backup_20190110_1_19.03.backup
```
#### Restore 방법 2: PSQL로 백업된 sql로 restore 하기
백업 파일: [csledb_backup_plain_20190110_1_19.03.backup](https://csleoss.etri.re.kr/images/contents/manual_1903/csledb_backup_plain_20190110_1_19.03.backup)
- SQL로 Restore 하는 방법은, pg_dump, pg_restore와는 달리 버전에 종속적이지 않습니다.
```sh
$ sudo -su postgres
$ psql
# backup 파일 내에 csledb를 생성하고, csledb에 connect 하는 명령이 포함되어 있음. 따라서, 'create database csledb' 과정을 생략해도 됨
$ \i /home/csle/Downloads/csledb_backup_plain_20190110_1_19.03.backup
```
postgresql 에 접속하여 정상적으로 복구 되었는지 확인 합니다.
```sh
$ sudo -su postgres
$ psql
postgres=# \c csledb;
csledb=# csledb=# select * from "VersionMap" where "KsbVersion" = '19.03';
MsgVersion | KsbVersion | IsCurrent | Description | Default
------------+------------+-----------+--------------+---------
1.0 | 19.03 | 1 | branch 19.03 | 1
(1개 행)
```
## KSB 웹툴킷 DB 정의
KSB 웹툴킷 DB를 생성하고, 백업파일을 이용하여 KSB 웹툴킷 DB 정보를 restore 합니다.
#### KSB 웹툴킷 DB 생성
```sh
$ sudo -u postgres bash -c "psql -c \"CREATE DATABASE uidb WITH OWNER = csle ENCODING = 'UTF-8' CONNECTION LIMIT = -1;\""
```
#### Restore 방법 1: Postgresql 9.6.8 에서 백업 pg_dump를 통해 백업 된 파일을 pg_restore로 restore 하기
백업 파일: [uidb_backup_20190110_19.03.backup](https://csleoss.etri.re.kr/images/contents/manual_1903/uidb_backup_20190110_19.03.backup)
- 본 파일은 pgadmin3 상에서도 restore 할 수 있습니다.
```sh
$ PGPASSWORD=사용자암호 pg_restore -h localhost -U csle -C -d uidb /home/csle/Downloads/uidb_backup_20190110_19.03.backup
```
#### Restore 방법 2: PSQL로 백업 된 sql로 restore 하기
백업 파일: [uidb_backup_plain_20190110_19.03.backup](https://csleoss.etri.re.kr/images/contents/manual_1903/uidb_backup_plain_20190110_19.03.backup)
- SQL로 Restore 하는 방법은, pg_dump, pg_restore와는 달리 버전에 종속적이지 않습니다.
```sh
$ sudo -su postgres
$ psql
# backup 파일 내에 uidb를생성하고, uidb에 connect 하는 명령이 포함되어 있음. 따라서, 'KSB 웹툴킷 DB 생성' 과정을 생략해도 됨
$ \i /home/csle/Downloads/uidb_backup_plain_20190110_19.03.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 접속정보 설정
웹파일 [csle-web_20190304.war](https://csleoss.etri.re.kr/images/contents/manual_1903/csle-web_20190304.war) 을 다운 받아 /home/csle/ui_of_csle/apache-tomcat-7.0.88/webapps 디렉토리로 복사 합니다.
그리고, csle-web_20190304.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/csle/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
```
## 구글 Chrome 브라우저에서 캐시 제거
KSB 웹툴킷을 업데이트 하면, Chrome에서 처음에는 정상적으로 동작하지 않을 수 있습니다. Chrome이 이전 정보를 캐싱 하고 있기 때문인데요. 그럴때는 다음 절차로 캐시를 지워 주시기 바랍니다.
- KSB 웹툴킷 사이트를 오픈한 상태에서 F12 버튼을 누른다
- Chrome 의 새로고침 버튼 위에서 마우스 오른쪽 버튼을 누른 다음, '캐시 비우기 및 강력 새로고침' 을 선택한다.
## KSB 웹툴킷 회원 가입 기능 활성화를 위한 설정
KSB 웹툴킷은 이메일을 통해 사용자 가입을 처리하도록 되어 있습니다. 이를 위해 관리자의 메일 계정을 설정 하도록 되어 있으며, Gmail 계정을 통해 설정할 수 있습니다. 관리자는 uidb 의 system_configuration 테이블에 자신의 Gmail 계정을 설정할 수 있으며, 사용자가 회원 가입을 신청하면 관련 메일이 관리자의 Gmail 계정을 통해 발송 됩니다.
설정 방법은, KSB 웹툴킷에 관리자 계정(ksbuser@etri.re.kr)으로 로그인 하여 Management 메뉴의 System Configuration 탭에서 'javax.mail.session.prop.id' property에서 수정아이콘을 클릭하여 csle.manager 을 'javax.mail.session.prop.password' 에 csle1234를 입력하고 저장 아이콘을 클릭하여 수정한 사항을 저장 합니다.
이메일의 발송 시, 사용자에게 메일로 안내 되는 링크의 ip는 KSB 웹툴킷이 구동 중인 서버의 설정을 따릅니다. 만약 localhost로 구동 하였다면, KSB 웹툴킷이 구동 중인 서버에서만 가입 절차를 진행할 수 있으므로, 외부에서 접속 가능한 ip로 실행 하시기 바랍니다.
---
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_03.do" title="다운로드"> 다운로드</a> 페이지에서 KSB 툴박스 (ksb_toolbox_v1903.tar.gz 파일)를 다운받아 압축을 해제하여 생성된 ```/home/csle/ksb_csle/docker/19.03-host```로 이동합니다.
아래의 명령을 통해 KSB 툴박스 docker 컨테이너를 실행하고 접속합니다.
```sh
csle@csle1:~/ksb-csle/docker/19.03-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사양에 따라 다소 시간이 걸릴 수 있습니다. 아래와 같은 메세지가 나오면 초기화가 완료된 상태입니다.
**<span style="font-size: 11pt; color:red">[중요]
사용자의 host pc의 IP를 192.168.0.5로 가정하였을때 자신의 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)
......@@ -15,19 +15,22 @@ csle3 : 192.168.0.7 (node2)
## 모든 서버에 공통으로 설치하기
### [모든 서버 공통] java 8 설치하기
<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 설치 부분을 참고합니다.
## [모든 서버 공통 openjdk-8 설치하기
Host PC에 Ubuntu 16.04.5를 처음 설치한 경우 java openjdk 8을 설치합니다. 아래의 내용을 터미널에 복사하여 설정 가능합니다.
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
sudo apt-get -y install openjdk-8-jdk
```
### [모든 서버 공통] 기타 우분투 프로그램 설치하기
```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
sudo apt-get install -y --no-install-recommends apt-utils curl bc jq && \
sudo apt-get install -y openssh-server locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python
```
### [모든 서버 공통] SSHD port 변경 및 root 로그인 가능하게 SSHD config 수정하기
......@@ -111,64 +114,6 @@ PC 재부팅
```
PC 재부팅을 통해서 sudo 명령없이 docker 명령을 사용할 수 있습니다.
## [모든 서버 공통] 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
```
nvidia-docker 버전을 확인합니다.
```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
```
#### [참고사항] 기존 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
```
### [모든 서버 공통] Kubernetes 설치하기
```sh
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | \
......@@ -183,13 +128,21 @@ kubectl version
```sh
sudo su -
kubeadm reset
rm /usr/local/bin/kubectl
rm -r /etc/kubernetes
rm -r /var/lib/etcd
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
ifconfig cni0 down && ip link delete cni0
ifconfig flannel.1 down && ip link delete flannel.1
apt-get autoremove --purge -y kubelet kubeadm kubectl kubernetes-cni
rm -rf /var/lib/kubelet/*
# rm -rf /etc/cni/
rm -rf /run/flannel
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
apt-get purge -y kubeadm kubectl kubelet kubernetes-cni kube*
apt-get autoremove
sudo rm -rf ~/.kube
systemctl start docker
```
### [모든 서버 공통] /etc/fstab 수정 후 재부팅하기
......@@ -580,6 +533,11 @@ KSB 프레임워크의 엔진이 Kubernetes 마스터에 접속할때 인증 키
```sh
cp -r ~/ksb-csle/tools/.ssh/ /home/csle/
```
authorized_keys를 다른 계정이 읽고 쓸 수 없게 600 mode(소유자만 rw 가능)로 변경합니다.
```sh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```
### [모든 서버 공통] hadoop 프로그램을 설치하기
......@@ -599,7 +557,7 @@ ln -s hadoop-2.7.3 hadoop
```sh
sudo vi ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
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
......@@ -732,7 +690,7 @@ Tasktrackers | 50060 | mapred.task.tracker.http.address
Jobracker | 50030 | mapred.job.tracker.http.address
###5. 쿠버네티스 kubectl 명령 alias 방법
```
```sh
echo "alias k=kubectl" >> ~/.bashrc
source <(kubectl completion bash | sed s/kubectl/k/g)
```
---
html:
offline: false
toc: true
offline: true
toc:
depth_from: 1
depth_to: 6
ordered: false
export_on_save:
html: true
print_background: true
---
# Python 모듈 사용하기: KSB Dockerize
---
`ksblib.dockerize` 라이브러리는 사용자가 프로그래밍한 Python 코드를 Docker 이미지로 자동변환하는 기능을 제공합니다. 또한 REST API 기능을 자동으로 추가하여, 사용자 Python 코드로 입력자료를 보내고 결과를 받을 수 있도록 해줍니다.
## 필요 라이브러리
- Python 3.5+
- Docker 18+
- 명령창에서 `docker` 명령어가 실행되는지 확인
......@@ -34,7 +45,7 @@ KSB 프레임워크가 설치되어있지 않다면 설치매뉴얼 (https://csl
### 2. base.py 와 main_func 생성하기
사용자 Python 코드들이 아래처럼 "modules" 폴더 안에 들어있다고 가정합니다. <b>참고</b>: 아래 구조는 하나의 예이고, 폴더이름 및 구조는 사용자 임의로 생성할 수 있습니다.
사용자 Python 코드들이 아래처럼 "modules" 폴더 안에 들어있다고 가정합니다. <b>참고</b>: 아래 구조는 하나의 예이고, 폴더이름 (여기서는 "modules") 및 구조는 사용자 임의로 생성할 수 있습니다.
```sh
# Example of user-provided folder structure.
......@@ -50,14 +61,13 @@ KSB 프레임워크가 설치되어있지 않다면 설치매뉴얼 (https://csl
- ...
```
`ksb.dockerize` 라이브러리를 이용하기위해서는 반드시 두개의 파일이 "modules" 폴더 안에 들어있어야 합니다. 하나는 `__init__.py` 이고 다른 하나는 `base.py` 입니다. `__init.py__` 는 비어있는 Python 파일이어도 상관없습니다 . `base.py` `main_func` 이라는 함수를 포함하고 있어야 합니다. 예를 들면 아래와 같습니다.
`ksb.dockerize` 라이브러리를 이용하기위해서는 반드시 두개의 파일이 "modules" 폴더 안에 들어있어야 합니다. 하나는 `__init__.py`이고 다른 하나는 `base.py`입니다. `__init.py__`는 비어있는 Python 파일이어도 상관없습니다 . `base.py``main_func`이라는 함수를 포함하고 있어야 합니다. `ksb.dockerize` 라이브러리는 이 `main_func`을 불러 수행합니다. 예를 들면 아래와 같습니다.
`ksb.dockerize` 라이브러리는 이 `main_func` 을 불러 수행합니다. `x` 는 REST API를 통해 입력받을 데이터로, <b>문자열</b>형태입니다. `x` 는 단순한 Python 문자열이어도 되고 (예: `'Hello World'`), 혹은 Json 문자열이어도 됩니다 (예: `'{"input": 4}'`). 아래 보이는 예제코드는 입력값 `x`가 Json 문자열이라고 가정하고 작성된 코드입니다.
```python
import json
def main_func(x):
def main_func(x, user_args=None):
# In this example, x is Python string containing Json data.
x = json.loads(x)
input = x['input']
......@@ -68,11 +78,12 @@ def main_func(x):
# Return results in Python string type.
return str(added_input)
```
`x`는 REST API를 통해 입력받을 데이터로, <b>문자열</b> 형태입니다. `x`는 단순한 Python 문자열이어도 되고 (예: `'Hello World'`), 혹은 Json 문자열이어도 됩니다 (예: `'{"input": 4}'`). 위에 작성된 예제코드는 입력값 `x`가 Json 문자열이라고 가정하고 작성된 `main_func`입니다.
아래 코드는 `x` 가 단순 문자열이라고 가정하고 작성된 코드입니다.
아래 코드는 `x` 가 단순 문자열이라고 가정하고 작성된 `main_func`입니다.
```python
def main_func(x):
def main_func(x, user_args=None):
# In this example, x is Python string.
input = x
......@@ -83,13 +94,15 @@ def main_func(x):
return str(added_input)
```
`x` 를 어떤 형태로 정의하고, 이를 `main_func` 에서 어떻게 사용할지는 <b>전적으로 사용자 자유</b>입니다. 물론, 입력으로 오는 `x`의 형태와 그를 처리하는 방식이 <b>잘 맞아야만</b> 합니다. 또한, `main_func` 은 마지막 줄에 보이는 것처럼, <b>반드시 문자열</b>형태의 결과를 `return` 해야합니다.
`x`를 어떤 형태로 정의하고, 이를 `main_func`에서 어떻게 사용할지는 <b>전적으로 사용자 자유</b>입니다. 물론, 입력으로 오는 `x`의 형태와 그를 처리하는 방식이 <b>잘 맞아야만</b> 합니다. 또한, `main_func`은 마지막 줄에 보이는 것처럼, <b>반드시 문자열</b>형태의 결과를 `return`해야합니다.
아래에서 설명하는 모든 내용들은 `x`가 Json 문자열이라고 가정하고 작성된 코드를 사용합니다. `user_args`에 대한 사용법은 아래에서 설명합니다.
아래에서 설명하는 모든 내용들은 `x` 가 Json 문자열이라고 가정하고 작성된 코드를 사용합니다.
<b>참고</b>: "modules" 폴더 안에 있는 모든 파일들은 Docker 이미지 생성 시에 이미지 내부로 복사됩니다. 따라서 `base.py`에서 자유롭게 불러들여 사용할 수 있습니다. 또한 "modues" 폴더 안에 `base.py` 외에도 여러 사용자 Python 파일들을 넣은 후 `base.py`에서 불러들여 수행할 수도 있습니다.
### 3. main_func 수행 실험하기
`ksb.dockerize` 를 이용하기 전에 `main_func` 이 성공적으로 수행되는지 <b>반드시</b> 테스트되야 합니다. 이를 위해, "modules"의 상위 폴더에서 Python console을 열고 (e.g. `$> python` 혹은 `$> ipython`), 아래와 같이 입력합니다.
`ksb.dockerize`를 이용하기 전에 `main_func`이 성공적으로 수행되는지 <b>반드시</b> 테스트되야 합니다. 이를 위해, "modules"의 상위 폴더에서 Python console을 열고 (e.g. `$> python` 혹은 `$> ipython`), 아래와 같이 입력합니다.
```python
from modules.base import main_func
......@@ -98,33 +111,37 @@ x = '{"input": 4}'
main_func(x)
```
작성한 `main_func` 이 에러없이 수행되도록 `main_func` 및 사용자 Python 코드들을 수정해야합니다.
작성한 `main_func`이 에러없이 수행되도록 `main_func` 및 사용자 Python 코드들을 수정해야합니다.
<b>참고</b>: 실험 중 발생하는 에러는 주로, 1) 해당 모듈이 없다거나 혹은 2) 해당 파일이 없다는 에러일 것입니다. 두 에러 모두 기본적인 Python 프로그래밍 에러로, Google 검색을 통해 해결할 수 있습니다. 간단하게 예를 들면,
- 해당 모듈이 없는 경우
`import` 시에 "modules" (즉, 최상위 폴더이름) 로부터 시작하면 대부분 해결됩니다. 즉, `from modules.xxx import xxx` 혹은 `import modules.xxx.xxx` 와 같은 식이 됩니다.
- 사용자가 만든 Python script 파일을 "modules" 폴더 안에 넣은 후 `base.py`에서 `import`하여 사용하고자 할 때 발생할 수 있습니다. 이 경우에는, `import`시에 "modules" (즉, 최상위 폴더이름) 로부터 시작하면 대부분 해결됩니다. 즉, `from modules.xxx import xxx` 혹은 `import modules.xxx.xxx`와 같은 식이 됩니다.
- 해당 파일이 없는 경우
`os.path.dirname(__file__)` 을 파일경로 앞에 붙여주면 대부분 해결됩니다.
- `base.py`에서 "modules" 폴더 안에 있는 파일에 접근하고자 할 때 이 에러가 발생할 수 있습니다. 간단한 경로 문제로, Python 코드에서 `os.path.dirname(__file__)` 읽어오는 파일경로 앞에 붙여주면 대부분 해결됩니다.
### 4. Docker 이미지 생성하기
위 과정까지 문제없이 끝났다면, 아래 Python 코드와 같이 `ksb.dockerize` 를 실행합니다.
이미지는 Python 혹은 CLI를 이용하여 생성할 수 있습니다. 아래에서 각각에 대해 설명합니다.
#### 4.1 Python 이용하여 생성하기
위 과정까지 문제없이 끝났다면, 아래 Python 코드와 같이 `ksb.dockerize`를 실행합니다.
```python
from ksblib.dockerize import Dockerize
drize = Dockerize('docker_image_name', '/path/to/modules',
requirements=['numpy:scipy>=1.1.0'],
user_args='any_string_values')
requirements=['numpy:scipy>=1.1.0'])
drize.build()
drize.run()
```
위 명령어는 "modules" 폴더에 있는 Python 코드들을 Docker 이미지로 만듭니다. 폴더경로 (`/path/to/modules`) 는 절대경로입니다. 생성되는 이미지의 이름을 변경하려면 `docker_image_name` 를 바꾸면 됩니다. `ksblib.dockerize` 는 8080 포트로 REST API를 제공합니다. 다른 포트로 변경하려면, 마지막 줄을 `drize.run(port=9090)` 처럼 변경하면 됩니다.
위 명령어는 "modules" 폴더에 있는 Python 코드들을 Docker 이미지로 만듭니다. 폴더경로 (`/path/to/modules`)는 절대경로입니다. 생성되는 이미지의 이름을 변경하려면 `docker_image_name`를 바꾸면 됩니다. `ksblib.dockerize`는 8080 포트로 REST API를 제공합니다. 다른 포트로 변경하려면, 마지막 줄을 `drize.run(port=9090)`처럼 변경하면 됩니다.
사용자 Python 코드에서 사용하는 Python 라이브러리가 있다면 Docker 이미지 생성시에 `requirements` 옵션을 이용해 설치할 수 있습니다. 각각의 라이브러리는 `:` 로 구분하면 되며, 버전 정보도 명시할 수 있습니다.
사용자 Python 코드에서 사용하는 Python 라이브러리가 있다면 Docker 이미지 생성시에 `requirements` 옵션을 이용해 설치할 수 있습니다. 각각의 라이브러리는 `:`로 구분하면 되며, 버전 정보도 명시할 수 있습니다.
라이브러리를 설치하는 또 다른 방법은, "modules" 폴더 안에 "requirements.txt" 파일을 생성하는 것입니다. "requirements.txt" 의 내용은 아래처럼 작성하면 됩니다.
......@@ -133,33 +150,38 @@ numpy
scipy>=1.1.0
```
`ksb.dockerize` 는 "requirements.txt" 안의 라이브러리를 먼저 설치하고, 그 후에 `requirements` 로 명시된 라이브러리들을 설치합니다. 따라서 동일한 라이브러리가 두 곳에 모두 명시되었다면, `requirements` 에 명시된 라이브러리가 최종설치됩니다.
`ksb.dockerize`는 "requirements.txt" 안의 라이브러리를 먼저 설치하고, 그 후에 `requirements`로 명시된 라이브러리들을 설치합니다. 따라서 동일한 라이브러리가 두 곳에 모두 명시되었다면, `requirements`에 명시된 라이브러리가 최종 설치됩니다.
만일 이미 생성된 Docker 이미지가 있, 다시 만들고 싶지 않다면 위 예제 코드에서 `drize.build()` 부분을 주석처리하면 됩니다.
이미 생성된 Docker 이미지가 있어서, 다시 만들고 싶지 않다면 위 예제 코드에서 `drize.build()` 부분을 주석처리하면 됩니다.
만약, 입력값 `x`에 정보를 담아보내지 않고 Docker 이미지로 따로 전달하고 싶은 값이 있다면, `user_args`를 사용하면 됩니다. 예를 들면, `drize.run(user_args='Hello World')`와 같이 사용자변수를 전달할 수 있습니다. 새로 이미지를 생성하지 않더라도, 사용자변수는 기존 이미지로 전달됩니다. 전달받은 `user_args``main_func`에서 사용할 수 있습니다. 예를 들면 아래와 같습니다.
```python
def main_func(x, user_args=None):
if user_args is not None:
user_args_str = 'User arguments: {0}'.format(user_args)
else:
user_args_str = 'No user arguments'
```
#### 사용자 변수사용
<b>참고</b>: `user_args`로 전달되는 값은 반드시 <b>문자열</b>이어야 합니다.
만일, 특수한 이유로, 입력값 (예: `x`) 에 정보를 담아보내지 않고 따로 전달하고 싶은 파라미터가 있다면, `user_args` 를 사용하면 됩니다. `user_args` 로 전달된 문자열값은 Docker 이미지 생성시에 "ksb_user_args.pkl" 파일로 저장되며, "modules" 폴더에 위치한 Python 코드에서 읽어올 수 있습니다. 예를 들면:
#### 4.2 CLI 이용하여 생성하기
KSB 프레임워크 소스코드 폴더 안의 "ksblib" 폴더로 이동합니다. 해당 폴더에서 아래와 같이 입력합니다.
```python
# Any python script in the "modules" folder.
def read_user_args():
import os
import pickle
$> python ksblib/dockerize/call_dockerize.py -h
```
# Read the pickle file.
dir_name = os.path.dirname(__file__)
user_args = pickle.load(open(os.path.join(dir_name,
'ksb_user_args.pkl'), 'rb'))
위 명령어는 CLI를 이용하여 Docker 이미지를 생성하는 Python script의 도움말을 출력합니다. 이 script를 이용하여 Docker 이미지를 생성하는 방법은 아래와 같습니다.
return user_args
```python
$> python ksblib/dockerize/call_dockerize.py json_image /path/to/modules --port 8080 --user_args="\"Hello World\"" --python_libraries=numpy:scipy
```
"ksb_user_args.pkl" 은 최상위 폴더 (이 예제에서는 "modules")에 저장됩니다. <b>참고</b>: 이 기능은 실험중인 기능으로, 차후에 다른 형태로 변경될 수 있습니다.
이미지 이름 (`json_image`)와 폴더경로 (`/path/to/modules`)만 필수이며, 나머지는 모두 옵션사항입니다. `--port`는 접속 포트번호이고, `--user_args`는 문자열로 표현된 사용자변수, `--python_libraries`는 설치할 Python 라이브러리를 나타냅니다.
### 5. 생성된 Docker 이미지 실험하기
### 6. 생성된 Docker 이미지 실험하기
위 과정에 따라 Docker 이미지가 성공적으로 만들어지고 실행되었다면, 아래처럼 실험해 볼 수 있습니다.
......@@ -169,9 +191,9 @@ $> curl -d '{"input": 4}' http://localhost:8080
위 명령어를 실행하면, 아래와 같은 작업이 순차적으로 수행됩니다.
1. `curl` 명령어가 문자열 `'{"input": 4}'` 를 REST API를 통해 Docker image 로 전송
2. `ksb.dockerize` 가 입력값을 `main_func` 에 전달
3. `main_func` 이 문자열 `16` 을 반환
1. `curl` 명령어가 문자열 `'{"input": 4}'`를 REST API를 통해 Docker 이미지 로 전송.
2. `ksb.dockerize`가 입력값을 `main_func` 전달. <b>참고</b>: 위에서 설명한 예제들의 경우, `x` 전달됨.
3. `main_func`이 문자열 `'8'`을 반환
혹은, 아래처럼 Python 명령어를 이용해 테스트해볼 수도 있습니다.
......@@ -183,4 +205,77 @@ status_code = r.status_code
response = r.text
```
반환되는 값 `response` 의 형식은 Python 문자열입니다.
반환되는 값 `response`의 형식은 Python 문자열입니다.
### 7. 다양한 형태의 입력자료 사용법
위 예제에서는 문자열로 표현된 Json에 대해 처리하는 방법에 대해 설명하였습니다. 이번 장에서는 Json이 아닌 다른 형태의 Python 자료를 넘기고 싶을 경우에 대해 설명합니다.
#### 7.1 Numpy Array 넘기기
상술하였듯이 KSB Dockerize는 문자열로 입력자료를 주고 받습니다. 따라서 어떠한 형태의 자료든 상관없이, 문자열로 표현이 된다면 입력자료로 사용가능합니다. 먼저 입력자료를 전송받을 `base.py`를 아래와 같이 작성합니다.
```python
import numpy as np
def main_func(x, user_args=None):
data = np.frombuffer(eval(x)).copy()
data /= 10.
return str(np.median(data))
```
위 코드는, Docker 이미지로 전송된 입력값을 Numpy Array로 변환한 후, 10으로 나누는 코드입니다. 리턴값은 Array의 평균값입니다 (주: 상술하였듯이 리턴값은 항상 문자열 형태여야 함).
작성된 파일을 기반으로 Docker 이미지를 생성합니다. 생성된 Docker 이미지로 자료를 전송하기 위해서는 아래와 같은 Python script를 이용합니다.
```python
import requests
import numpy as np
data = np.random.randn(100)
r = requests.post('http://localhost:8080', data=str(data.tobytes()))
```
위 코드에서 보이듯이 Numpy Array를 `tobytes()` 함수를 이용하여 Bytes Array로 변환한 후에 문자열로 변환합니다. 변환된 문자열을 생성된 Docker 이미지에 전송할 때에는 `requests` 라이브러리를 사용합니다.
결과값으로는, 위에 코드에 보이듯이, 표준정규분포에서 랜덤으로 선택된 100개의 수치를 10으로 나눈 후 평균값을 낸 값이 문자열로 리턴됩니다.
#### 7.2 Image 자료 전송하기
Numpy Array가 아닌 다른 형태의 자료도 동일한 방법으로 전송이 가능합니다. 예를 들어, 그림 파일을 전송받아 조작하고 싶은 경우의 `base.py`
```python
from PIL import Image
from io import BytesIO
def main_func(x, user_args=None):
# For Image data.
im = Image.open(BytesIO(eval(x)))
# Do whatever you want.
...
return 'Some string value'
```
와 같이 작성하면 됩니다. 위 예제에서는 Pillow 라이브러리를 사용하였습니다. 따라서 Docker 이미지 생성시에 설치 라이브러리로 `pillow`를 명시해 주어야 합니다. 위 코드에서는 결과값으로 단순문자열을 돌려주지만, 그림 파일을 돌려줄 수도 있습니다 (주의: 물론 이 때도 문자열 형태로 돌려주어야 합니다).
자료를 전송하는 Python scrip는
```python
import numpy as np
from PIL import Image
with open('image.png', 'rb') as image:
f = image.read()
b = bytearray(f)
# Image manipulation.
r = requests.post('http://localhost:8080', data=str(b))
```
의 형태가 됩니다. Numpy Array 전송시와 마찬가지로, 그림 파일의 Bytes Array 값을 문자열 형태로 넘겨주면 됩니다.
이와 같은 방법으로 영상은 물론 음성을 포함하는 어떠한 형태의 자료도 Docker 이미지로 전송할 수 있습니다.
......@@ -17,25 +17,25 @@ export_on_save:
만약 자신의 PC 환경이 아래와 같다고 가정한 경우, HOST PC에서 수정해야 하는 사항과 KSB 웹툴킷 docker 이미지를 변경하는 방법에 대해서 알려드립니다.
[중요] hostname은 소문자로 설정하시기 바랍니다. hadoop을 사용한다면 uppercase 사용시 문제가 됩니다.
```
HOST PC hostname : csleserver
HOST PC IP : 192.168.1.102
HOST PC SSH PORT : 22
HOST PC 사용자 계정 : csle
```sh
HOST PC hostname : csleserver
HOST PC IP : 192.168.1.102
HOST PC SSH PORT : 22
HOST PC user name : csle
```
## [Host PC] csle 사용자 계정(권한: administrator) 생성하기
기존 메뉴얼 참고
## [Host PC] hostname을 csle1으로 변경하기
기존 메뉴얼 참고
## [Host PC] java-8-oracle 설치하기
## [Host PC] openjdk-8 설치하기
기존 메뉴얼 참고
## [Host PC] KSB 툴박스 관련 프로그램 설치하기
기존 메뉴얼 참고
## [Host PC] SSH port 변경 및 root 로그인 가능하도록 SSHD config 수정하기
sudo vi /etc/ssh/sshd_config 명령을 이용해서 자신이 원하는 port로 수정합니다.
```
```sh
Port 22
# Authentication:
LoginGraceTime 120
......@@ -51,7 +51,7 @@ StrictModes yes
## [Host PC] /etc/hosts 수정하기
아래와 같이 자신의 hostname을 추가 설정합니다.
```
```sh
127.0.0.1 localhost
# 아래 주석처리. Hdfs 연동시 문제가 생김.
#127.0.1.1 csleserver
......@@ -63,6 +63,7 @@ ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# 사용자는 변경하고자 하는 Host PC IP 주소로 수정
192.168.1.102 csleserver master
```
......@@ -86,12 +87,12 @@ ff02::2 ip6-allrouters
## [HOST PC] startDockerCsle.sh 수정하기
바뀐 hostname을 이용하여 KSB 웹툴킷 docker 컨테이너를 실행하기 위해서 아래와 같이 수정합니다.
```
cd ~/ksb-csle/docker/1.0-host
```sh
cd ~/ksb-csle/docker/19.03-host
vi startDockerCsle.sh
```
```
```sh
#!/bin/bash
sudo service postgresql stop
......@@ -108,13 +109,13 @@ docker run --rm -itd \
--user=csle \
--name=csle1 \
[수정] --hostname=$HOSTNAME \
ksbframework/ksb_toolbox:1.0.0 bash
ksbframework/ksb_toolbox:19.03.3-miniconda3 bash
docker exec -it csle1 bash
```
## [HOST PC] ksb 웹툴킷 실행하기
```
```sh
./startDockerCsle.sh
```
......@@ -122,10 +123,10 @@ docker exec -it csle1 bash
먼저 docker 컨테이너의 ssh 포트를 변경합니다.
## [Docker 컨테이너] sshd_config port 변경하기
```
```sh
sudo vi /etc/ssh/sshd_config
```
```
```sh
Port 2243
# Authentication:
LoginGraceTime 120
......@@ -136,66 +137,66 @@ StrictModes yes
## [Docker 컨테이너] Hadoop 수정하기
바뀐 docker 컨테이너의 ssh 포트 (2243)을 이용해서 hadoop을 사용하기 위해 아래와 같이 환경설정 파일을 수정합니다.
```
```sh
cd
cd hadoop/etc/hadoop
```
### core-site.xml 수정하기
```
```sh
vi core-site.xml
:%s/csle1/csleserver/g
```
### master 수정하기
```
```sh
vi masters
:%s/csle1/csleserver/g
```
### slaves 수정하기
```
```sh
vi slaves
:%s/csle1/csleserver/g
```
### yarn-site.xml 수정하기
```
```sh
vi yarn-site.xml
:%s/csle1/csleserver/g
```
### hadoop-env.sh 추가하기
```
```sh
vi hadoop-env.sh
export HADOOP_SSH_OPTS="-p 2243"
```
## [Docker 컨테이너] Hbase 수정하기
### hbase-site.xml 수정하기
```
```sh
cd ~/hbase/conf
vi hbase-site.xml
:%s/csle1/csleserver/g
```
### regionservers 수정하기
```
```sh
vi regionservers
:%s/csle1/csleserver/g
```
### hbase-env.sh 수정하기
```
```sh
vi hbase-env.sh
export HBASE_SSH_OPTS="-p 2243"
```
## [Docker 컨테이너] startService.sh 수정하기
```
```sh
cd
vi startService.sh
```
```
```sh
#!/bin/bash
export TERM=xterm
stty rows 36 cols 150
......@@ -217,75 +218,26 @@ cd /home/csle/ksb-csle/bin
```
## [Docker 컨테이너] zookeeper 수정하기
```
```sh
vi ~/zookeeper/conf/zoo.cfg
```
```
```sh
server.1=csleserver:2888:3888
```
## [Docker 컨테이너] kafka 수정하기
```
```sh
vi ~/kafka/config/server.properties
```
```
```sh
advertised.listeners=PLAINTEXT://csleserver:9092
zookeeper.connect=csleserver:2181
```
## [Docker 컨테이너] initHdfs.sh 수정하기
사용자 편의를 위해서 예제를 실행하기 위한 파일들을 hadoop 파일시스템에 등록합니다.
```
vi ~/ksb-csle/bin/initHdfs.sh
```
```
#!/bin/bash
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset/
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/model
hdfs dfs -chown ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/
hdfs dfs -chown ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/dataset
hdfs dfs -chown ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/model
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset/input
hdfs dfs -put /home/csle/ksb-csle/examples/input/input_kmeans.csv /user/ksbuser_etri_re_kr/dataset/input/
hdfs dfs -put /home/csle/ksb-csle/examples/input/201509_2.csv /user/ksbuser_etri_re_kr/dataset/input/
hdfs dfs -put /home/csle/ksb-csle/examples/input/adult.csv /user/ksbuser_etri_re_kr/dataset/input/
hdfs dfs -put /home/csle/ksb-csle/examples/input/input.csv /user/ksbuser_etri_re_kr/dataset/input/
hdfs dfs -put /home/csle/ksb-csle/examples/input/trainset.csv /user/ksbuser_etri_re_kr/dataset/input/
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset/BatchAutoMLTrainInSingleEngine/hue_train_dataset
hdfs dfs -put /home/csle/ksb-csle/examples/dataset/BatchAutoMLTrainInSingleEngine/hue_train_dataset/*.* /user/ksbuser_etri_re_kr/dataset/BatchAutoMLTrainInSingleEngine/hue_train_dataset
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/model/autosparkml/test/0000
hdfs dfs -put /home/csle/ksb-csle/examples/autosparkml/test/automl_test/0000/* /user/ksbuser_etri_re_kr/model/autosparkml/test/0000
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset/tensorflowTrainSource/recurrent
hdfs dfs -put /home/csle/ksb-csle/components/src/main/python/recurrent/* /user/ksbuser_etri_re_kr/dataset/tensorflowTrainSource/recurrent
hdfs dfs -chown -R ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/dataset/tensorflowTrainSource/
hdfs dfs -chown -R ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/model/autosparkml/
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset/pyModules/ChatbotServing
hdfs dfs -put /home/csle/ksb-csle/examples/pyModules/ChatbotServing/* /user/ksbuser_etri_re_kr/dataset/pyModules/ChatbotServing
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/model/kangnam
hdfs dfs -put /home/csle/ksb-csle/examples/models/kangnam/model/0001 /user/ksbuser_etri_re_kr/model/kangnam
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset/input/traffic/
hdfs dfs -put /home/csle/ksb-csle/examples/input/traffic_kangnam_cols.txt /user/ksbuser_etri_re_kr/dataset/input/traffic/
hdfs dfs -put /home/csle/ksb-csle/examples/input/traffic_kangnam_cols2.txt /user/ksbuser_etri_re_kr/dataset/input/traffic/
hdfs dfs -put /home/csle/ksb-csle/examples/input/trafficStreamingSplitSample.json /user/ksbuser_etri_re_kr/dataset/input/traffic/
hdfs dfs -put /home/csle/ksb-csle/examples/input/traffic_processing.csv /user/ksbuser_etri_re_kr/dataset/input/traffic/
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset/tensorflowTrainSource/kangnam
hdfs dfs -put /home/csle/ksb-csle/components/src/main/python/kangnam/* /user/ksbuser_etri_re_kr/dataset/tensorflowTrainSource/kangnam
hdfs dfs -mkdir -p /user/ksbuser_etri_re_kr/dataset/iris_dataset
hdfs dfs -put /home/csle/ksb-csle/examples/dataset/iris_dataset/*.* /user/ksbuser_etri_re_kr/dataset/iris_dataset
hdfs dfs -chown -R ksbuser_etri_re_kr:supergroup /user/ksbuser_etri_re_kr/dataset/iris_dataset
```
### [Docker 컨테이너] hdfs 초기화하기
### [Docker 컨테이너] HDFS 초기화하기
hostname이 변경되었으므로 hdfs namenode를 초기화해야 합니다.
```
```sh
cd
sudo rm -rf data
hdfs namenode -format
......@@ -298,13 +250,13 @@ sudo service ssh stop
```
### [Docker 컨테이너] ksb-csle/conf/ksb.conf 수정하기
```
```sh
vi ~/ksb-csle/conf/ksb.conf
```
```
```json
hadoop {
home = "/hadoop/"
[수정] master = "csleserver"
master = "csleserver" [수정]
port = "9000"
hdfs {
activated = "true"
......@@ -321,7 +273,7 @@ hadoop {
### [Docker 컨테이너] UI 웹툴킷 설정 수정하기
바뀐 hostname을 UI 웹툴킷에 적용하기 위해 아래와 같이 웹툴킷 UI에서 관련 정보를 수정합니다.
```
```sh
sudo service postgresql start
/home/csle/ui_of_csle/apache-tomcat-7.0.81/bin/catalina.sh start &
......@@ -337,13 +289,13 @@ sudo service postgresql stop
위에서 지금까지 수정한 docker 컨테이너의 수정내용을 이미지로 저장합니다.
HOST PC의 터미널에서 실행하여야 합니다.
```
docker commit csle1 ksbframework/ksb_toolbox:1.0.1
```sh
docker commit csle1 ksbframework/ksb_toolbox:19.03.3.1-miniconda
```
### [HOST PC] startDockerCsle.sh 수정하기
바뀐 이미지를 이용하여 KSB 웹툴킷 docker 컨테이너를 실행하기 위해 아래와 같이 수정합니다.
```
```sh
#!/bin/bash
sudo service postgresql stop
......@@ -360,20 +312,20 @@ docker run --rm -itd \
--user=csle \
--name=csle1 \
--hostname=$HOSTNAME \
[수정] ksbframework/ksb_toolbox:1.0.1 bash
[수정] ksbframework/ksb_toolbox:19.03.3.1-miniconda bash
docker exec -it csle1 bash
```
### [HOST PC] ksb 웹툴킷 실행하기
```
cd ~/ksb-csle/docker/1.0-host$
### [HOST PC] ksb 툴박스 실행하기
```sh
cd ~/ksb-csle/docker/19.03-host$
./startDockerCsle.sh
```
### [Docker 컨테이너] KSB 툴박스 초기화하기
```
```sh
cd
./startService.sh
cd ~/ksb-csle/bin
......@@ -383,13 +335,14 @@ cd ~/ksb-csle/bin
## [주의사항] 탑재되어 있는 예제를 실행하는 경우 수정해야 하는 사항
탑재되어 있는 예제에는 csle1 주소를 기준으로 작성되어 있습니다.
따라서, kafka reader / writer 예제에서 다음의 파라미터들의 변경이 필요합니다.
```
```sh
bootStrapServer 주소 : csleserver:9092
zooKeeperConnect 주소: csleserver:2181
```
아래 예제들에서 kafka reader/writer를 사용하므로 파라미터의 수정이 필요합니다.
```
```sh
2.5.7.RealtimeIngestToPredictInSingleEngine
2.5.8.RealtimeIngestToServingInTwoEngines
2.5.9.RealtimeIngestToServingWithKbInTwoEngines
......@@ -400,8 +353,9 @@ zooKeeperConnect 주소: csleserver:2181
```
또한, hdfs://csle1:9000 주소에 file write 하는 예제들도 hdfs://csleserver:9000로 자신의 hostname에 맞도록 수정되어야 합니다.
```
아래 예제들의 파라미터의 수정이 필요합니다.
```sh
2.5.10.HourlyTensorflowTraining
2.5.14.TrafficPeriodicTrainAndK8sServingExample
2.6.2.TrafficTraining
......@@ -410,10 +364,12 @@ zooKeeperConnect 주소: csleserver:2181
2.5.12.TfStreamPredictionMnist 예제의 경우, 테스트 코드를 수정한 후 테스트 합니다.
아래의 스크립트를 수정합니다.
```
```sh
vi ~/ksb-csle/examples/models/mnist/client/kafka-json/consume-mnist-output.sh
```
```
```sh
#!/bin/bash
KAFKA_CONSUMER=$KSB_HOME/tools/kafka_2.11-0.10.0.1/bin/kafka-console-consumer.sh
SERVER=csleserver:9092
......@@ -423,11 +379,11 @@ $KAFKA_CONSUMER --zookeeper csleserver:2181 --bootstrap-server $SERVER --topic $
```
아래의 스크립트를 수정합니다.
```
```sh
vi ~/ksb-csle/examples/models/mnist/client/kafka-json/publish-mnist-input.sh
```
```
```sh
#!/bin/bash
INPUT_FILE=mnist_input.json
......@@ -440,7 +396,7 @@ cat $INPUT_FILE | $KAFKA_PRODUCER --broker-list $BROKERS --topic $TOPIC
2.5.13.ConvergedServingEndToEndExample 예제를 실행하기 전, 아래와 같이 수정 후 실행합니다.
```
```sh
vi ~/ksb-csle/ksblib/ksblib/dockerize/base.py
:%s/csle1/csleserver/g
:%s/2243/22/g
......
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# KSB toolbox(docker image)를 이용한 HOST 서버(VirtualBox VM)에 KSB 프레임워크 구축 방법
---
본 메뉴얼은 KSB toolbox(docker image)를 이용한 HOST 서버(VirtualBox VM)에 KSB 프레임워크 구축 방법을 설명합니다.
빅데이터 프레임워크와 기타 툴들을 각각 설치하는 대신, 도커에 탑재된 설정 파일을 사용함으로써 서버 구축을 좀 더 쉽게 가능합니다.
VM에 설치를 위해 toolbox cpu 버전을 기준으로 설명하며, gpu 버전은 도커 이미지와 파일명이 일부 다를 뿐 동일한 절차로 진행하면 쉽게 구축이 가능합니다.
## 환경 구축 방안
먼저 우분투 16.04 호스트 서버를 준비합니다.
호스트 서버에 kSB 툴박스 (docker버전)을 설치하여 도커안에 있는 설정파일들을 호스트 서버에 복사하는 방법으로 호스트 서버에 KSB 프레임워크 환경을 구축하는 방법에 대해서 설명합니다.
## 호스트 PC 환경
호스트 PC 환경을 아래와 같이 가정합니다.
```sh
ssh 포트 : ssh 서버를 구동하지 말 것
hostname : csle1
사용자 : csle
IP : 192.168.1.13
```
중요한 점은 ssh 서버를 구동하지 말아야 합니다.
일반적으로 호스트 서버에서 ssh 포트 22번으로 구동되어 있는 상태가 많습니다.
이러한 경우, 아래의 과정 중 KSB 도커 컨테이너에서 ssh 서버를 구동할 경우 22번 포트 충돌이 발생합니다.
따라서, 호스트 PC의 ssh 서버를 임시로 중지합니다.
```sh
sudo service ssh stop
```
## [Host PC] /etc/sudoers를 열어 csle 계정에 administrator 권한을 추가
```sh
sudo vi /etc/sudoers
```
```sh
# 맨 아래줄에 내용을 추가합니다.
#includedir /etc/sudoers.d
csle ALL=(ALL) NOPASSWD: ALL
```
## [Host PC] hostname을 csle1으로 변경
```sh
sudo vi /etc/hostname
csle1
```
PC 재부팅하기
## [Host PC] /etc/hosts 수정
```sh
127.0.0.1 localhost
# [중요] 주석처리
#127.0.1.1 testuser-VirtualBox
# 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
# [중요] 각 사용자의 Host PC IP 주소에 맞게 아래 내용 추가
192.168.1.13 csle1 master
```
## [Host PC] openjdk 8 설치하기
도커 컨테이너 내에 hadoop, hbase에서 사용하는 java path가 java-8-oracle로 설정되어 있습니다. (라이센스 문제로 1.0 버전 이후로 java-8-openjdk-amd64 링크를 걸어서 사용하고 있습니다.)
따라서, hadoop/etc/hadoop 폴더와 hbase/conf 폴더에서 java 관련 path를 openjdk로 수정하거나, 아래와 같이 심볼릭 링크만 추가해서 hadoop, hbase 설정 파일을 수정없이 사용가능합니다.
```sh
sudo apt-get update && \
sudo apt-get -y install openjdk-8-jre && \
sudo apt-get -y install openjdk-8-jdk && \
sudo rm -rf /usr/lib/jvm/java-8-oracle && \
cd /usr/lib/jvm/ && \
sudo ln -s java-8-openjdk-amd64/ java-8-oracle
```
## [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 openssh-server locales wget git vim rsync locales \
filezilla python3-pip && \
sudo apt-get install -y net-tools && \
pip3 install kafka-python pillow requests numpy
```
호스트 서버의 ssh 서버를 중지합니다.
```sh
sudo service ssh stop
```
## [Host PC] docker 설치
```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
```
```sh
sudo usermod -aG docker csle
# 사용자가 로그인 중이라면 다시 로그인 후 권한이 적용됩니다.
## 단, 현재 터미널에서만 적용됩니다.
sudo su csle
```
PC 재부팅
## [Host PC] 도커 컨테이너에서 파일 다운로드
HOST PC가 VM인 경우, tensorflow gpu를 사용하지 않기 때문입니다.
따라서, gpu 버전이 아닌 cpu 버전에 탑재된 파일들을 복사해서 사용해야 합니다.
cpu 버전 toolbox를 다운받아 꼭 실행해야 합니다.
## [Host PC] startDockerCsle.sh를 실행하여 도커 컨테이너를 실행
```sh
cd ~/ksb-csle/docker/19.03-host/
./startDockerCsle.sh
```
## [Docker 컨테이너] ssh 서버 구동
먼저 도커 컨테이너안에서 ssh 서버를 구동합니다.
```sh
sudo service ssh start
```
## [Host PC] Docker 컨테이너의 파일/폴더를 host PC의 csle home에 다운로드
filezilla를 이용하여 아래의 정보를 입력해서 도커 컨테이너 내에 접속합니다.
```sh
호스트 : localhost
포트 : 22
프로토콜 : SFTP
사용자 : csle 암호 csle
```
csle 홈디렉토리내에 아래의 파일과 폴더를 Host PC의 csle 홈디렉토리에 다운로드합니다.
```sh
.ssh
.ivy2
.conda
.bashrc
hadoop-2.7.3
hbase-1.2.4
kafka_2.11-0.10.0.1
mongodb-linux-x86_64-ubuntu1404-3.4.1
zookeeper-3.4.9
spark-2.3.0-bin-hadoop2.7
miniconda3
ui_of_csle
activator-dist-1.3.12
ksb-knowledge
start-mongo.sh
startService.sh
stop-mongo.sh
stopService.sh
```
## [Host PC] bashrc 경로 확인 및 수정 필요
host pc의 csle 사용자의 bashrc 파일에서 아래와 같이 python 경로를 확인하여야 함.
```sh
vi ~/.bashrc
```
```sh
export PYSPARK_PYTHON=/home/csle/miniconda3/envs/tensorflow/bin/python
export PYSPARK_DRIVER_PYTHON=/home/csle/miniconda3/envs/tensorflow/bin/python
```
```sh
source ~/.bashrc
```
## [Host PC] 링크 추가
```sh
cd ~
ln -s hadoop-2.7.3/ hadoop
ln -s hbase-1.2.4/ hbase
ln -s kafka_2.11-0.10.0.1/ kafka
ln -s mongodb-linux-x86_64-ubuntu1404-3.4.1/ mongodb
ln -s spark-2.3.0-bin-hadoop2.7/ spark
ln -s zookeeper-3.4.9/ zookeeper
```
## [Host PC] postgresql 설치
```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 apt-get clean && \
sudo rm -rf /var/lib/apt/lists/* && \
sudo service postgresql restart
```
```sh
sudo sed -ri "s/^#listen_addresses = 'localhost'/listen_addresses = '*'/g" /etc/postgresql/9.6/main/postgresql.conf
```
```sh
sudo vi /etc/postgresql/9.6/main/pg_hba.conf
```
```sh
# IPv4 local connections:
host all all 0.0.0.0/0 md5
host all all ::0/0 md5
host all all all md5
```
```sh
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
```
## [Host PC] postgresql db 설정
```sh
sudo -u postgres bash -c "psql -c \"CREATE USER csle password 'csle1234' superuser;\""
sudo -u postgres bash -c "psql -c \"ALTER USER csle WITH CREATEROLE REPLICATION CREATEDB SUPERUSER;\""
sudo -u postgres bash -c "psql -c \"CREATE DATABASE csledb WITH OWNER = csle ENCODING = 'UTF-8' CONNECTION LIMIT = -1;\""
wget https://csleoss.etri.re.kr/images/contents/manual_1903/csledb_v1903_20190710.backup --no-check-certificate
PGPASSWORD=csle1234 pg_restore -h localhost -U csle -C -d csledb /home/csle/csledb_v1903_20190710.backup
sudo -u postgres bash -c "psql -c \"CREATE DATABASE uidb WITH OWNER = csle ENCODING = 'UTF-8' CONNECTION LIMIT = -1;\""
wget https://csleoss.etri.re.kr/images/contents/manual_1903/uidb_v1903_20190710.backup --no-check-certificate
PGPASSWORD=csle1234 pg_restore -h localhost -U csle -C -d uidb /home/csle/uidb_v1903_20190710.backup
```
설치도중 "경고: 복원작업에서의 오류들이 무시되었음: 1" 에러는 무시하면 됩니다.
## [Host PC] SSH port 확인 및 root 로그인 가능하도록 SSHD config 수정
호스트 PC의 ssh 서버 포트를 default 값 22를 사용합니다. hadoop과 hbase에서 사용하는 ssh 포트값이 22번으로 설정되어 있습니다.
```sh
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] HDFS 초기화
먼저 아래의 명령으로 도커내에 있던 known_hosts에 저장된 정보를 삭제합니다.
```sh
ssh-keygen -f "/home/csle/.ssh/known_hosts" -R 0.0.0.0
```
HDFS 저장 path는 /home/csle/data 폴더입니다.
혹시 기존에 사용하는 폴더와 충돌되는지 확인한 후 아래의 명령을 수행합니다.
그리고, 하둡 파일 시스템 데몬을 실행하여 필요한 파일들을 업로드 합니다.
```sh
sudo rm -rf /home/csle/data && \
hdfs namenode -format && \
sudo service ssh start && \
start-dfs.sh && \
cd ksb-csle/bin/ && \
./initHdfs.sh
```
하둡 팡리 시스템에 필요한 파일들을 모두 복사했다면 아래와 같이 데몬들 중지합니다.
```sh
stop-dfs.sh && \
sudo service ssh stop
```
혹시 아래와 같은 에러가 발생하면,아래의 명령을 수행한다.
```sh
0.0.0.0: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
0.0.0.0: @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
0.0.0.0: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
0.0.0.0: IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
0.0.0.0: Someone could be eavesdropping on you right now (man-in-the-middle attack)!
0.0.0.0: It is also possible that a host key has just been changed.
0.0.0.0: The fingerprint for the ECDSA key sent by the remote host is
0.0.0.0: SHA256:QPK3gL8rM4yDDY6ELtqPnqdILzhlJJmUBCpUWY2aoiI.
0.0.0.0: Please contact your system administrator.
0.0.0.0: Add correct host key in /home/csle/.ssh/known_hosts to get rid of this message.
0.0.0.0: Offending ECDSA key in /home/csle/.ssh/known_hosts:2
0.0.0.0: remove with:
0.0.0.0: ssh-keygen -f "/home/csle/.ssh/known_hosts" -R 0.0.0.0
```
```sh
ssh-keygen -f "/home/csle/.ssh/known_hosts" -R 0.0.0.0
```
## [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-csle 폴더 권한 변경하기
KSB 툴박스 docker 컨테이너에서 Host PC의 ksb-csle 폴더를 엑세스 할 수 있도록 폴더 권한을 변경합니다.
```sh
sudo chmod 777 -R /home/csle/ksb-csle/
```
모든 설치가 완료되었습니다.
## [Host PC] 빅데이터 프레임워크 초기화
아래와 같이 빅데이터 프레임워크를 초기화 합니다.
```sh
cd ~
./startService.sh
```
## [Host PC] KSB 인공지능 프레임워크 구동
```sh
cd ~/ksb-csle/bin
./startKsbApiServing.sh
```
## [Host PC] 서버 종료
서버의 전원을 끌 경우, 구동중인 모든 빅데이터 프레임워크를 종료합니다. 특히, hadoop을 정상적으로 종료한 후 전원을 꺼야합니다.
```sh
cd~
./stopService.sh
```
## [Host PC] dockerize 예제 관련 base.py를 hostmode 파일로 변경
docker내에서 dockerize가 불가능하므로 ksbtoolbox docker버전에서는
base-dockermode.py를 사용하며, Host PC에 ksbtoolbox를 직접 설치하는 경우는 base-hostmode.py을 사용해야 합니다. 따라서 아래의 명령을 통해서 base.py 파일을 변경합니다.
```sh
cd ~/ksb-csle/ksblib/ksblib/dockerize/
cp base-hostmode.py base.py
```
---
html:
toc: true
offline: true
export_on_save:
html: true
---
# 새로운 SSH 키 생성 및 KSB toolbox(docker image)와 공유 및 저장하는 방법
## [Host PC] pub 키 생성 및 authorized 키 생성, 권한 수정
```
ssh-keygen -t rsa
cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh/authorized_keys
```
## [Host PC] KSB toolbox 실행 및 SSH 서비스 실행
```
csle@csle1:~/ksb-csle/docker/19.03-host$ ./startDockerCsle.sh
Error: No such network: csle_cluster
Error: No such network: csle_standalone
csle1
start csle1 slave container...
972d7615994fe86131c3ad4f97e783463dcc5d3148faea293eae0492040a0da2
csle@csle1:/$
```
## [Docker 컨테이너] SSH 서비스 실행
```
csle@csle1:/$ sudo service ssh start
* Starting OpenBSD Secure Shell server sshd [ OK ]
```
## [Host PC] SSH 키를 docker 컨테이너에 복사
```
scp ~/.ssh/id_rsa csle1:/home/csle/.ssh/id_rsa
scp ~/.ssh/id_rsa.pub csle1:/home/csle/.ssh/id_rsa.pub
scp ~/.ssh/authorized_keys csle1:/home/csle/.ssh/authorized_keys
```
## [Docker 컨테이너] Host PC에 ssh 명령으로 접속 확인
```
csle@csle1:/$ ssh -l csle csle1 -p 2243 sudo ls
Warning: Permanently added '[csle1]:2243,[129.254.173.227]:2243' (ECDSA) to the list of known hosts.
ksb-csle
공개
다운로드
문서
바탕화면
비디오
사진
음악
템플릿
```
## [Host PC] docker commit 이미지 저장
```
docker commit csle1 ksbframework/ksb_toolbox:19.03.3.1-miniconda3
```
## [Host PC] startDockerCsle.sh 파일에서 docker image tag 수정
manual1903/images/2.5.1_workflow.png

208 KB | W: | H:

manual1903/images/2.5.1_workflow.png

176 KB | W: | H:

manual1903/images/2.5.1_workflow.png
manual1903/images/2.5.1_workflow.png
manual1903/images/2.5.1_workflow.png
manual1903/images/2.5.1_workflow.png
  • 2-up
  • Swipe
  • Onion skin
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