Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
---
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
```