ClearLinux에 Tomcat 설치하기

2019년 3월 현재, Clear Linux에서는 Tomcat이 bundle로 제공되지 않기  때문에 수동으로 설치해야 한다. 이 포스트는 Clear Linux에 수동으로 Tomcat을 설치하기 위한 과정에 관한 것이다.

 

Java Runtime 설치

Tomcat을 실행하기 위해서는 Java runtime이 시스템에 설치 되어 있어야 한다. 만약 없다면 다음 명령어로 설치해 준다.

Java runtime을 설치한 후에는 버전명에 관계없이 접근할 수 있도록 보다 잘 알려진 경로인 /usr/lib/jvm/java로 링크를 생성해 주고 JAVA_HOME 환경 변수를 설정해 준다.

 

Tomcat 다운로드 및 설치

설치된 Java runtime에 맞게 Tomcat download page에서 적절한 binary distribution을 download받고 설치해준다. Tomcat website에 있는 Which version? 항목을 보면 아래와 같이 표가 나오는데,  “Supported Java Version”을 참고해서 적합한 “Apache Tomcat Version”을 선택하면 된다. 예를 들어, OpenGrok의 경우 Java 1.8이 requirement이므로, Tomcat version 9.0.x이상을 선택하면 된다.

sc_tomcat_versions

다음과 같이 Tomcat을 download 받고 /opt/tomcat에 풀어 준다.

 

사용자 설정

/opt/tomcat/conf/tomcat-users.xml 파일을 편집해서 다음과 같이 Tomcat user를 추가해 준다. 아래의 설정은 가장 단순하게 access control하기 위한 설정으로 ‘tomcat’이라는 id를 추가하기 위한 것이다.

 

결과확인

모든 설정이 끝났다면 Tomcat을 설치한 머신에서  http://localhost:8080/manager/html 주소에 접근해서 Tomcat 서버 설정을 관리 할 수 있다. ID와 password를 묻는 prompt가 뜨면 위의 tomcat-users.xml에서 설정한것 처럼 ID/비밀번호(tomcat/비밀번호(password)를 입력한다.

SC_tomcat_manage_html

 

Remote Access 허가

Tomcat 관리자 page를 접근할 때 localhost가 아닌 remote에서 접속을 시도하면 403 access denied 오류가 뜰 수 있다. Localhost외에서도 tomcat 관리자 page 접근을 허용하려면 아래 경로에 있는 context.xml file의 allow= 부분을 수정해서 모든 IP를 받아들이도록 변경해 주면된다. context.xml은 여러개 있으니 경로에 주의.

/opt/tomcat/webapps/manager/META-INF/context.xml

 

Firewall 바깥의 git을 clone하기

Firewall등이 막고 있어서 외부의 git repository를 HTTPS로는 clone할 수 있지만 SSH로는 막히는 경우가 있다. 특히나 GitHub의 two-factor authentication을 설정한 경우라면 매번 token값을 입력하는 것 때문에 commit을 push하는게 매우 귀찮아진다.

이 문제는 ssh config file에 Proxy command를 설정해서 해결할 수 있는데
${HOME}/.ssh/config에 다음과 같이 추가해 주고, (-S option에는 SOCKS port를 설정해야 한다)

credential caching을 설정해 준다.

Travis CI 설정과 docker image 사용

GitHub project에 CI를 붙이고 싶은데 Jenkins server가 회사 firewall 안에 들어 있어서 GitHub에서 직접 webhook을 붙일 수 없는 문제가 있다. Jenkins의 GitHub plugin으로 tunneling을 설정하는 방법 등 있기는 하지만 다른 CI 옵션들을 살펴 보던중 Open source project에 대해서는 무료라는 Travis CI가 있다는 것을 알게 되었다. Travis CI는 기본으로 Ubuntu를 지원하고 그 외의 경우는 docker를 사용해서 환경을 설정할 수도 있다. 이 포스팅은 Travis CI에서 ClearLinux docker를 사용한 설정에 대한 기록이다.

 

삽질1: Travis CI의 Ubuntu이용

빌드와 Google test를 이용한 unittest만 할 것이니까 OS를 크게 타지 않을테니 기본으로 제공되는 Ubuntu 환경에 필요한 도구들만 설치 하면 가장 빠르지 않을까?

일견 타당해 보이기는 하지만 문제는 의존성이다. Pre-compile된 Google test를 download 받는다 해도, 2019년 1월 현재 아직 Travis CI에서 제공하는 Ubuntu의 가장 최신 버전은 Xenial이다. CMake version이 안맞아서 최신버전으로 설치하고 Intel LibVA, Intel MediaSDK등의 의존 package들을 컴파일한 후 빌드를 하고 unittest를 하도록 하는데 14분이 넘게 걸렸다. 다음은 사용한 .travis.yml file이다.

 

삽질2: Clear Linux docker image 사용

시간만 오래 안 걸렸어도 기본 Ubuntu OS로 어떻게든 해보는 건데, 14분이면 시간이 너무 오래 걸린다. 이왕 시간이 오래 걸리는 거라면 Clear Linux docker docker image를 사용해보자.

Clear Linux docker image를 생성하기 위한 dockerfile을 다음과 같이 작성해준 다음

.travis.yml file을 다음과 같이 선언해 준다.

총 소요된 시간은 17분 41초 그 중에 docker 설정하는데 걸린 시간만 16분이 넘는다. 나머지 시간은 unittest… 즉 대부분의 시간이 docker를 빌드 하고 설정하는데 사용 되고 있었다.

 

삽질3: Docker image download

빌드하는데 시간이 오래 걸린다면 이미 만들어 둔 docker image를 저장소에 넣어두고 pull해서 사용하면 좀 빠르지 않을까? Docker 빌드 vs Docker 다운로드.

이미 빌드 한 docker image를 공개 저장소인 docker hub에 넣어두고 Travis CI에서 pull하도록 변경하면 시간은 8분정도로 줄어든다.

흠.. 8분이면 그나마 그럭저럭 쓸만 하군.

 

결론

Travis CI는 머리는 나쁘고 손발은 빠르다. Docker를 이용해서 테스트 하려면 매번 새롭게 빌드하기 보다 Docker Hub에 올려두고 pull 하는 방법을 고려해 볼만 하다.

[Tip] Fedora CUI booting 설정

Fedora (Version26, Workstation edition)은 /etc/inittab file로 runlevel을 변경하던 이전의 방식은 지원되지 않는다. /etc/systemd/system/default.target file을 보면 /lib/systemd/systm/graphical.target으로 link되어 있는데 이것을 multi-user.target으로 변경해 주면 CUI console로 진입할 수 있다.

설정 후 시스템을 리붓하면 CUI로 booting되고 startx 명령으로 GUI를 불러 올 수 있다. Display Manager를 띄우지 않기 때문에 GUI에서 logout하면 CUI로 되돌아온다.

 

MBE academy의 먹튀와 경찰서에서의 시간낭비

다니던 영어학원에서 추석을 앞두고 학원을 이전한다는 안내가 있었다. 하지만 이상하게도 이사가는 위치는 알려주지 않았는데 원어민 선생님들도 위치는 모른다고 했다. 이때 눈치를 챘어야 하는 건데… 막상 추석 연휴 후에는 11월 부터 시작하겠다는 문자가 왔다.

쓸데없는 디테일과 정중함은 사기의 기본. 이 때까지도 이전 장소에 대한 안내는 없었다.

11월이 되서 수업 예약을 하려고 연락을 했더니  연락이 되지 않아서 혹시나 하고 학윈에 가봤더니 기자재는 모두 빠지고 붙어있는 연락처는 전화를 받지 않는다. 아뿔싸!

이번엔 홈페이지에 나와있는 사업자 등록번호로 국세청에조회 해보니 10월 30일자로 폐업신고 되어있었다. 응?

이쯤 되면 인정하자. 당했다.

국민신문고에 민원을 넣으니 남부교육청으로 배당되고 며칠후 연락이 왔다. 담당자의 이야기는 이 학원에 대한 여러 민원이 있었고, 현재는 영등포 경찰서 경제팀에서 이 내용을 이미 수사하고 있으니, 연락해 보라며 연락처를 주고 올린 민원을 취하해 달라고 했다.

영등포 경찰서에 연락을 했더니 결제한 카드 영수증을 가지고 방문해 달라고 한다. 책상 서랍에서 찾아낸 영수증과 함께 돈을 지불할 때 작성했던 계약서를 가지고 상담실로 가서 내용을 설명했더니 근무 하시던 분이 한참 어디론가 전화를 한다.

형사: “이게전산에안뜨는데.. .. .. .. 그럼별건으로간다고요?”

‘별건으로 간다’는 건 아마도 사안이 중요하지 않다고 판단해서 각 사건을 별도로 판단하겠다는 의미 인 듯 싶었다. 중요한 건이라고 생각했으면 하나의 증거라도 더 모으려고 하지 않았을까. 통화가 끝난 후에는 기나긴 상황 설명과 별로 중요하지 않은 질문/답변이 이어졌다. 했던 얘기를 또 묻고 또 묻던 형사 아저씨가 계약서의 날짜를 보더니 눈을 반짝이며 묻는다.

형사: “선생님이거계약하신날짜가작년 5월이네요?”
: “..”
형사: “그리고시월까지는수업받으신거고.”
: “..”
형사: “그럼이건사기로못넣어요계약을할시점에의도가있었어야하는데이경우는수업을진행했잖아요.”
: “아뇨사기로고소하고싶진않고요남은수업료만돌려받으면돼요.”
형사: “그럼여기가아니라소액심판으로가셔야지..”
: “저더러영수증갖고여기로오라면서요..”
형사: “아니그래서지금이렇게알려드리는거잖아요.”

‘귀찮은거 한건 해결’ 분위기가 물씬 풍기는 형사 아저씨의 기새등등한 반전공격에 혹시나 싶어 소액심판 청구를 알아보니 약 9만원 정도의 비용과 서류 작성하러 법원에 다니는데 추가로 시간이 소요될 것 같아서 그만 두었다. 학원 경영자가 잡혀서 받을수 있다는게 확실하다면 모를까 그냥 잃어버린셈 치자고… 잠시나마 20만원 정도 되찾을 수 있을거라고 기대했던 순진함을 질책했다.

모든게 끝나고 나서 든 생각인데.. 학원이 저렇게 문자를 보내서 인테리어 업체 어쩌네 하며 나를 안심시키고 나서 뒤로는 폐업신고 한것도 사기의도로 볼 수 없는 건가?

아직 서버 비용은 남아 있는 모양인지 MBE academy홈페이지는 계속 열려 있다. 중국어 강사인 것 마냥 오해 하게 끔 팝업창에서 광고당하는 James 선생님과 늘 반갑게 맞아 주던 작가 Rachel 선생님, 잡학다식 해서 모르는게 없던 Allen 선생님, 타국생활에 대해 친절히 조언해 주시던 Stephanie 선생님, 영어 가르쳐서 버는 돈으로 한국어를 열심히 배우던 Peter 선생님, 90% 확률로 재계약 할꺼라고 했지만 어느 순간부터 안 보이던 Grant 선생님들께 마지막 인사도 못하게 되어서 무척 아쉽다. 덕분에 많이 배우게 되어서 고맙다는 말은 꼭 하고 싶었는데… 폐업할 때 남은 임금이나마 잘 받으셨기를 바란다.

또한 어려운 환경에서도 학원 경영하느라 고생하셨던 Jimmy S. Han 선생님 너 이 개새끼 두고보자!