본문으로 건너뛰기

트러블 슈팅

설치시 “ImportError: No module named simplejson” 오류 발생

 khan-provisioning>action --package JBossEWS --command setup --user root --component all
 SSH password:
PLAY [all] ****************************************************************************************************************
GATHERING FACTS *********************************************************************************************************
failed: [192.168.0.28] => \{"failed": true, "parsed": false}
invalid output was: Traceback (most recent call last):
File "/root/.ansible/tmp/ansible-1376139324.12-204669473616/setup", line 86, in ?
import simplejson as json
ImportError: No module named simplejson

대상 시스템에 필요한 python-simplejson 패키지가 설치되어야 한다.

sudo yum install python-simplejson

mod_cluster로 JBoss EAP가 연결되지 않습니다.

mod_cluster_manager 페이지에서 JBoss EAP 인스턴스 정보가 출력되지 않는다.

먼저 각 서버의 /etc/hosts 파일을 살펴보자. JBoss EAP가 설치된 머신과 JBoss EWS가 설치된 머신의 호스트의 호스트명, IP가 모두 /etc/hosts 파일에 있어야 한다.

만약 없다면, SystemHosts 패키지를 설치하여 모든 대상 머신의 /etc/hosts 파일을 Update 할 수 있다.

action --package SystemHosts --command setup --user root --component all

pem파일을 사용하여 호스트에 접근할 때 설정방법

pem 파일을 사용하여 호스트에 접근할 때, ssh-agentssh-add 명령으로 OPENMARU Installer을 실행하기 전에 pem 파일을 설정해 놓을 수 있다. 아래와 같은 명령을 이용하면 된다.

 ssh-agent bash

ssh-add ~/.ssh/id_rsa

또 다른 방법으로는 hosts-jbosshosts-apache 설정파일에 호스트에 접근할 때 사용하는 pem 파일을 설정해 놓을 수 있다. ansible_ssh_private_key_filekey.pem 파일의 경로를 지정하면 된다. pem 파일을 이용하여 접근하는 호스트는 모두 지정하여야 한다.

  • /opt/khan/provisioning/cli/hosts-jboss 파일의 예
 [jboss-eap]
# ========================================================
# 첫번째 서버에 is_eap_first_server=true 를 적어줍니다.
# ========================================================
# pem 파일을 이용하여 서버에 접근할 때의 Example
192.168.0.21 machine_id=1 is_eap_first_server=true ansible_ssh_private_key_file=/dir/of/keyfile.pem
192.168.0.22 machine_id=2 ansible_ssh_private_key_file=/dir/of/keyfile.pem
192.168.0.23 machine_id=3 ansible_ssh_private_key_file=/dir/of/keyfile.pem
… 생략 …
[jboss-ews]
# ========================================================
# EWS가 설치될 서버 IP 목록
# 첫번째 서버에 is_ews_first_server=true 를 적어줍니다.
# --------------------------------------------------------
# pem 파일을 이용하여 서버에 접근할 때의 Example
192.168.0.11 machine_id=1 is_ews_first_server=true ansible_ssh_private_key_file=/dir/of/keyfile.pem
192.168.0.12 machine_id=2 **ansible_ssh_private_key_file=/dir/of/keyfile.pem**
192.168.0.13 machine_id=3 **ansible_ssh_private_key_file=/dir/of/keyfile.pem**

SSH포트가 22번이 아닌 경우 설정 방법

  • /opt/khan/provisioning/cli/hosts-jboss 파일의 예

SSH 포트가 22번이 아닌 다른 포트를 사용하는 경우 호스트IP:SSH포트번호 형식으로 호스트를 지정하면 된다.

 [jboss-eap]
# ========================================================
# 첫번째 서버에 is_eap_first_server=true 를 적어줍니다.
# ========================================================
# SSH 포트가 22번이 아닌 경우 호스트 IP뒤에 ':포트번호’를 붙인다.
192.168.0.21:22000 seq=0
192.168.0.22:22000 seq=1

다른 방법으로 ansible_ssh_port 에 사용하는 SSH포트 번호를 지정하여 접속할 수 있다.

 [jboss-eap]
# ========================================================
# 첫번째 서버에 is_eap_first_server=true 를 적어줍니다.
# ========================================================
# SSH 포트가 22번이 아닌 경우 호스트 IP뒤에 ':포트번호’를 붙인다.
192.168.0.21 seq=0 ansible_ssh_port=2222
192.168.0.22 seq=1 ansible_ssh_port=2222

서버 접속시 중간의 SSH서버를 경유하여 접속하는 경우

중간에 리눅스 서버를 경유하여 최종 작업 서버에 접속하는 경우에도 OPENMARU Installer을 사용하여 설치가 가능하다. 예를 들어 192.168.0.22서버가 경유 서버이며 192.168.0.36서버와 192.168.0.23 서버가 설치 대상서버이면 다음과 같이 설정한다. 여기서 sshpass –p password에서 패스워드는 경유서버인 22번 서버의 패스워드를 입력한다. OPENMARU Installer 실행시 입력하는 패스워드는 대상 서버의 패스워드를 입력한다.

OPENMARU Installer을 실행하는 사용자 홈 디렉토리의 .ssh 디렉토리 아래에 config 파일을 만든다.

  • SSH config 파일을 생성한다.
vi ~/.ssh/config
  • config 파일의 내용을 입력한다.
 Host 192.168.0.36
User root
Port 22
ProxyCommand sshpass -p password ssh root@192.168.0.22 nc %h %p 2> /dev/null
Host 192.168.0.23
User root
Port 22
ProxyCommand sshpass -p password ssh root@192.168.0.22 nc %h %p 2> /dev/null
  • config 파일의 권한을 설정한다.
chmod 600 ~/.ssh/config

중간 경유서버를 사용하는 경우, OPENMARU Installer의 hosts-jboss, hosts-apache 파일은 변경할 필요가 없다.

root 접속이 되지 않을 경우

SSH로 root 접속이 되지 않을 경우, JBoss, Apache등 소프트웨어의 설치 뿐만 아니라 시스템의 설정, RPM 패키지 설치, 80번 포트 사용, 시작 서비스 등록 등 root 권한으로 실행하여야 하는 작업들 때문에 OPENMARU Installer을 사용할 수 없다.

이런 경우에는 설치하는 동안만 root 사용자가 SSH로 접속할 수 있도록 설정하여야 한다.

sshd_config 파일에 PermitRootLogin 설정이 no로 되어 있는지 확인하고 이를 yes로 변경한 후 sshd를 재시작한다.

  • sshd_config 파일을 편집한다.
vi /etc/ssh/sshd_config
  • PermitRootLogin을 ‘yes’로 설정한다.
… 중략…

PermitRootLogin yes
  • sshd 서비스를 재시작 한다.
service sshd restart

일반 사용자 권한밖에 사용할 수 없을 경우 --component packages 옵션으로 설치하면 root 권한이 필요한 작업을 제외한 설치 작업만 수행된다.

sudo 를 사용하는 경우

sudo 를 사용할 수 있는 일반 사용자를 이용하여 서버에 접근할 경우 먼저 —user 옵션에 사용자를 지정한다.

 khan-provisioning> action … --user admin

admin 사용자가 다음과 같이 패스워드없이 sudo를 사용할 수 있도록 설정한 경우엔 –asksudopass false로 지정한다.

/etc/sudoers

 ## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
admin ALL=(ALL) NOPASSWD: ALL

khan-provisioning> action … --user admin --asksudopass false

sudo 사용자가 패스워드를 입력해야만 하도록 아래와 같이 설정되어 있을 경우에는 –asksudopasstrue로 설정한다.

/etc/sudoers

 ## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
admin ALL=(ALL) ALL
khan-provisioning> action … --user admin --asksudopass true