검색해보면 대부분 yum을 사용하라고 나오거나 yum부터 옮기라는 블로그 글이 있다. 정말 yum이 있다면 너무나 간단하고 빠르게 진행이 가능하지만 여건 상 yum을 옮긴다거나 yum과 wget을 사용할 수 없었기 때문에 계속 찾아봤고, 방법을 찾아냈다. 보통 오프라인으로 tar파일을 올려서 설치하는것을 컴파일설치 또는 소스설치라고 하는 모양이다. 작업은 성공하긴 했는데 인터넷이 되지 않는 환경에서 정신없이 하느라 깔끔한 정리는 못했지만 언젠가 또 구성할 일이 생길 것 같아 메모용으로 작성해둔다. 기억에 의존해 적는거라 누락된 것이 있을 수 있어서... 조만간 가상 서버 하나를 새로 파서 복습할까? 싶은데 시간이 된다면 해봐야징.
그리고 리눅스 관련 상식을 몇 개 배웠는데, 마운트해서 들어온 파일에 대한 수정과 작성 권한이 없을 경우 mv는 사용이 불가능하고 cp로 옮겨서 압축을 풀면 된다. 참고로 디렉토리는 cp가 되지 않기 때문에 mv를 사용해서 옮겨야 한다.
각설하고, 소스설치를 시작해보면 대략적인 흐름은 이렇다.
- 자바 설치
- apr 설치
- apr-util 설치
- pcre 설치
- httpd 설치 - apache 심볼릭 링크 걸어주기
- tomcat 압축해제 - tomcat 심볼릭 링크 걸어주기
- tomcat-connectors 설치
- mysql-connector 삽입
- mysql 설치 (mysql-5.7.28-1.el7.x86_64.rpm-bundle.tar 풀고 rpm으로 설치)
디펜던시 오류 날 경우 --nodeps 또는 --nodeps --force 사용해서 다운로드
대부분의 파일은 파일명을 검색해서 나오는 미러나 사이트에서 다운을 받았다.
CentOS7이 설치된 오프라인 폐쇄망 환경(인터넷, wget, yum 사용 불가.)에서
java --version와 javac --version를 사용해서 버전을 확인해준다. 나는 컴파일러가 없어서 따로 설치해줬다.
그리고 이어서 아파치를 설치한다.
나는 위의 네 가지를 사용해서 설치했다.
./configure --prefix=경로
make && make install
위와 같은 명령어를 사용하면 된다.
httpd는 조금 다르다.
./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-so --enable-rewrite --enable-auth-digest --with-apr=/usr/local/apr --with-apr-util=/usr/local/aprutil/ --with-pcre=/usr/local/pcre
make && make install
./apachectl start를 이용해 아파치를 실행한 후 페이지가 뜨는지 확인해보자.
잘 뜬다면 톰캣 설치로 넘어가면 된다.
톰캣 설치는 압축을 풀고 conf폴더 안의 server.xml을 조금 수정해주면 된다.
메모를... 69 주석처리 115 주석해제 이따위로... 적어놔서... 나중에 수정할 것 . . .
그리고 아파치와 톰캣을 연결할 커넥터를 설치한다.
아파치 내부 conf 폴더 아래에 workers.properties를 만들어준다.
worker.list=ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
그리고 mod_jk.conf도 만들어준다. 나는 심볼릭 링크를 걸어서 폴더명을 간단하게 적었다.
<IfModule mod_jk.c>
JkWorkersFile "/usr/local/apache/conf/workers.properties"
JkLogFile "/usr/local/tomcat/logs/mod_jk.log"
JkLogLevel info
JkAutoAlias "/usr/local/tomcat/webapps"
JkMount /* ajp13
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
JkMount /examples/*.jsp ajp13
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
</IfModule>
위 작업이 끝난 후에 톰캣 내부 logs 폴더로 가서 mod_jk.log 파일 하나를 생성하고 저장한다.
그리고 apache 이하 conf 폴더 안에 있는 httpd.conf를 수정한다.
1) LoadModule이 있는 쪽에 LoadModule jk_module modules/mod_jk.so 추가
2) 최하단에 include conf/mod_jk.conf 추가
3) ServerName localhost:80 또는 ServerName 아이피:80 으로 변경
그리고 아파치와 톰캣을 재기동 하면 되는데 그 전에 mysql 커넥터를 넣어두고 재기동 해주자.
tomcat이 설치된 폴더 내 lib 폴더 안에 삽입하면 된다.
mysql 소스설치를 찾다보면 cmake랑 boost를 설치하라는 글도 보이는데 cmake를 설치하지 않아도 rpm을 사용하면 설치가 된다. 나는 cmake를 설치하려다 계속 openssl 관련 에러가 나서 포기하고 그냥 rpm 설치를 했다. 에러 내용은 openssl을 찾을 수 없다는 것(재설치를 하거나 경로를 직접 지정해서 설치하는 방법이 있다고 한다)이었고, whereis openssl 하면 위치가 나오긴 하는데 폐쇄망 서버로 더 이상 다른 파일을 전송하기 곤란한 상황이라 그냥 cmake와 boost를 사용하지 않고 rpm을 사용하는 방법으로 작업했다.
rpm 사용법은 이하와 같다.
(앞에 붙이는 옵션)
rpm -ivh : 패키지 설치
rpm -qa : 패키지 설치 확인
(뒤에 붙이는 옵션)
--nodeps : 의존성 무시 (디펜던시 관련 문제가 생길 경우 사용하면 된다. 뒤에 --force를 붙이면 다른 문제들을 무시하고 강제로 진행할 수 있는 것 같다.)
tar를 사용해서 위의 rpm bundle 압축을 풀어준다. 그 후 안에 들어있는 것들을 test를 제외하고 전부 rpm -ivh를 사용해서 설치해주었다. 중간에 디펜던시 관련 문제가 생긴다면 --nodeps를 사용하면 된다.
그리고 설치하다가 mariadb와 충돌이 일어날 경우, rpm -qa | grep maria (또는 Maria)로 검색해서 위치를 확인한 후 rpm -e를 사용해 삭제를 해주면 된다. 나는 그냥 삭제를 했는데 제대로 되지 않아서 --nodeps 를 추가해 지웠던 것 같다.
설치가 끝나면 systemctl start mysqld 등으로 mysql을 실행시킨 후 mysql -u root -p를 통해 로그인한다.
초기 비밀번호는 랜덤하게 주어지기 때문에 설정파일을 까봐야 한다. /etc/my.cnf를 켜고 temporary password어쩌구 적힌 곳을 보면 비밀번호가 적혀있다. 로그인 후 ALTER문을 사용해 비밀번호를 바꿔주고 접근이 필요한 데이터베이스와 아이디를 새로 만들어 권한을 부여해주고 flush를 잊지말자.
tomcat ROOT 폴더 이하에 테스트용 index.jsp를 만들어 삽입하고 curl을 통해 내부아이피로 접근해서 내용을 확인해보았다.
<%@ page import="java.sql.*" contentType="text/html;charset=utf-8"%>
<%
String DB_URL = "jdbc:mysql://ip주소/데이터베이스이름";
String DB_USER = "아이디";
String DB_PASSWORD= "비밀번호";
ResultSet rs = null;
Connection conn;
Statement stmt;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
stmt = conn.createStatement();
// conn.close();
out.println("MySQL Connection Success!");
/*
rs = stmt.executeQuery("테스트 쿼리");
while(rs.next()) {
out.println("<tr>");
out.println("<td>" + rs.getString("test1") + "</td>");
out.println("<td>" + rs.getString("test2") + "</td>");
out.println("</tr>");
}
*/
}
catch(Exception e){
out.println(e);
}
%>
그럼 이제 프로젝트를 넣어보자.
프로젝트는 war파일로 말아서 올려두었다. 그런데 ROOT에 올려서 톰캣을 재기동해도 자동으로 풀리지 않아서 예전에 했던대로 upzip을 사용하려 했는데 문제가 발생했다. 이,,, 오프라인 폐쇄망 서버에는 upzip도 없는것임 ...
검색하다가 알게 됐는데, war 파일을 ROOT폴더 이하에 두는게 아니라 war 파일 이름을 ROOT로 변경한 후 webapps 폴더 아래에 두어야 자동으로 war가 풀리며 배포된다는 사실을 알았다...!
war 파일명을 다른것으로 둔 채 배포하고 싶다면 톰캣 이하 conf 폴더 안의 server.xml을 편집하면 된다.
Host 태그 내부에 Context태그를 추가해 주면 됨. tomcat서버에서 하나의 가상경로를 추가하는 방법이라고 한다.
<Context path="[경로]" docBase="[war파일의 이름]" reloadable="false" > </Context>
이렇게 하면 끝.
'개발공부 > 개발하다_발견함' 카테고리의 다른 글
스프링 3.x 부터는 자바 17이상만 사용 가능하다! (0) | 2024.03.12 |
---|---|
'javac'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. (0) | 2023.03.02 |
터미널로 자바 컴파일해서 실행해보기 (0) | 2022.09.19 |
패키지 이름을 바꾸고 싶었다 (feat.전자정부프레임워크 낱낱히 헤집어보기) (1) | 2022.09.16 |
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details. (0) | 2022.09.14 |
댓글