--- 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 ```