Tagged: CentOS 7

리눅스 Tomcat 7 설치.

tomcat 이 문서는 리눅스 Tomcat 7 설치 에 관한 문서 입니다.

1. Tomcat 7 스펙

Tomcat 7 의 스펙은 다음과 같습니다.

  • Servlet: 3.0
  • JSP Spec: 2.2
  • EL Spec: 2.2
  • WebSocket: 1.1
  • Support Java Versions: 6 and later

Java 1.6 버전 이상이 필요 합니다. CentOS 7 이라면 다음과 같이 설치할 수 있습니다.

2. Download

다운로드는 Apache Tomcat 페이지에서 다운로드 한다.

3. 설치

설치는 압축을 해제하는 것으로 끝이 난다.

4. 테스트

Tomcat 7 에서는 환경을 테스트해 볼 수 있는 스크립트가 두가지 있습니다.

  • version.sh – 현재 Tomcat 7 에 대한 버전 정보가 나옵니다.
  • configtest.sh – Tomcat 7 의 설정파일에 문제가 없는지를 테스트 해줍니다.

configtest.sh 는 Tomcat 을 실행시키지 않는 상태에서 실행하는 것이 좋습니다.

5. 시작

 

CentOS 7 싱글모드 부팅

centos logoCentOS 7 에서 많은 변화가 있지만 그 중에 하나가 싱글 모드(Single Mode) 부팅 입니다.

CentOS 6 에서 싱글모드 부팅을 위해서 부팅 커널 이미지 옵션으로 1 을 입력하면 되었습니다. 하지만 CentOS 7 에서는 그렇게하면 안됩니다.

이 문서는 CentOS 7 싱글모드 부팅 을 어떻게 하는지에 대한 글 입니다.

1. 싱글모드 부팅 (Single Mode Booting)

CentOS 7 에서는 부팅 매니저가 Grub2 로 변경 되었습니다. Grub2 부팅 매니저가 나오면 ‘e’ 를 클릭해서 부팅 커널 이미지를 선택 합니다.

CentOS 7 Grub2
CentOS 7 Grub2

그러면 선택한 커널 이미지에 대한 Grub2 의 각각지 설정값들을 볼수 있으며 커널 이미지와 이에 대한 옵션들을 볼 수 있습니다.

CentOS 7 Grub2 에서 부팅 커널 편집
CentOS 7 Grub2 에서 부팅 커널 편집

화면를 자세히 보시면 파일시스템 마운트 옵션인 ‘ro’를 보실 수 있습니다. 이부분을 다음과 같이 바꿔 줍니다.

CentOS 7 싱글모드 옵션
CentOS 7 싱글모드 옵션

‘ro’ 되어 있던 부분을 ‘rw init=/sysroot/bin/sh’ 로 변경해 줍니다. 그리고 아래부분에 나온대로 Ctrl-x 를 눌러줍니다. 그러면 부팅이 됩니다.

CentOS 7 싱글모드
CentOS 7 싱글모드

가만히 생각해보면 CentOS 7 에서의 싱글모드 부팅은 CentOS 7 의 복구부팅(Rescue Booting) 과 유사합니다.

CentOS 7 싱글모드로 부팅을 하면 /sysroot 디렉토리로 파일시스템을 rw 모드로 마운팅을 해줍니다.

2. Root 패스워드 리셋

보통 싱글모드 부팅을 하는 많은 목적중에 Root 패스워드 리셋이 있습니다. Root 패스워드를 잊어먹어서 Root 패스워드를 바꾸고 싶을때에 싱글모드로 부팅을 하면 인증없이 Root 쉘을 받을 수 있고 그래서 바로 바꿀 수 있습니다.

그런데 CentOS 7 에서 싱글모드 부팅은 복구모드처럼 부팅을 하기 때문에 먼저 파일시스템을 chroot 를 이용해서 변경해 줍니다.

CentOS 7 싱글모드에서 패스워드 변경
CentOS 7 싱글모드에서 패스워드 변경

‘chroot /sysroot’ 로 변경을 하고 패스워드를 변경해 줍니다. ‘touch /.autorelabel’ 는 SELinux 를 신규로 업데이트 해주는 겁니다.

Bash History 를 Syslog 에 남기기

centos logoBash 쉘은 명령어 히스토리 기능을 제공 합니다. history 명령어를 입력하면 지금까지 사용했던 Bash 명령어들이 모두 보여 줍니다.

이러한 기능은 사용자 홈 디렉토리에 ‘.bash_history’ 파일에 기록되어 집니다. 그러나 여러 사람이 사용하는 서버에서 각 사용자 홈 디렉토리에 히스토리를 남기기 보다는 리눅스의 syslog 에 남기게 함으로써 사용자가 못된 일을 하는지 않하는지를 감시하도록 하면 좋을 것입니다.

이 문서는 Bash History 를 Syslog 에 남기기 에 대한 것입니다.

1. logger 를 이용한 방법

logger 는 쉘 명령어를 syslog 에 적도록하는 모듈 입니다. 이를 이용하면 수동으로 syslog 에 기록을 남기게 할 수 있습니다. 이를 이용해서 다음과 같이 /etc/profile.d/cmd.sh 파일을 작성 합니다.

이제 이를 Source 해 줍니다.

2. rsyslog 설정

다음과 같이 설정을 해줍니다.

이렇게하면 ‘/var/log/bash_history’ 파일에 Bash 쉘 히스토리가 남기며 ‘192.168.0.2’ 서버에 로그를 전송합니다.

CentOS 7 에서 네트워크 인터페이스 이름 바꾸기

centos logoCentOS 7 은 많은 변화가 있었지만 그중 하나가 네트워크 인터페이스 이름 입니다.

지금까지 네트워크 인터페이스 이름은 eth0, eth1 식으로 고정되어 있었습니다. 하지만 CentOS 7 부터는 바이오스 장치 이름을 조합해서 생성됩니다. 다시 말해서 각 서버마다 네트워크 인터페이스 카드가 모두 동일하다고 할지라도 CentOS 7 에서의 네트워크 인터페이스 이름은 모두 다를 수가 있다는 겁니다.

이 문서는 CentOS 7 에서 네트워크 인터페이스 이름 바꾸기 에 대한 것입니다.

1. 상태확인

CentOS 7 에서의 네트워크 인터페이스 이름은 다음과 같습니다.

enp0s3 으로 나옵니다. 네트워크 인터페이스 설정 파일도 이름과 동일하게 생성 됩니다.

2. eth0 로 바꾸기

바꾸는 방법은 grub 에서 바이오스장치이름을 네트워크 인터페이스 이름으로 사용하지 않겠다고 선언하는 것입니다. 커널이 업그레이드되면 grub 에 파라메터값을 다시 해줘야 하는 불편함을 없애기위해서 grub 의 기본설정을 변경해 줍니다.

핵심은 ‘GRUB_CMDLINE_LINUX’ 에 ‘net.ifnames=0 biosdevname=0’ 를 추가하는 것입니다. 그리고 다음과 같이 grub2 를 다시 만들어 줍니다.

이제 네트워크 인터페이스 파일을 다음과 같이 바꿔 줍니다.

이제 재부팅을 하면 네트워크 인터페이스 이름이 eth0 로 올라온것을 볼 수 있습니다.

Nvidia Driver 설치하기

nvidia-linux

Nvidia 는 AMD 와 함께 그래픽 카드 시장을 양분하고 있는 회사 입니다. 어느쪽이 더 좋은지는 각 회사에 새로운 제품이 출시될때마다 달라질만큼 우열을 가리기 힘듭니다.

Nvidia 와 AMD 는 리눅스를 위한 드라이버도 만들어서 배포하는데 CentOS 7 에서 Nvidia Driver 를 설치하는 방법에 대한 것입니다. 사실 AMD HD2600 을 썼었는데 AMD 에서 더 이상 드라이버를 업데이트를 해주지 않아 그래픽 가속을 쓸수 없었는데, 몇일전에 Nvidia Geforce GTS 450 이 손에 들어와서 설치하는 과정을 정리한 글이기도 합니다.

1. Requirement

Nvidia Driver 를 설치하기 위해서는 컴파일을 위한 의존성 패키지가 설치되어 있어야 합니다. 의존성 패키지는 다음과 같이 설치하시면 됩니다.

또, Nvidia 를 비롯한 그래픽 카드 드라이버는 커널에 의존적이기 때문에 커널이 바뀌면 재컴파일 설치를 해줘야 합니다. 따라서 이왕설치하는거면 최신 커널에 설치를 하는게 좋을 것입니다. 다음과 같이 커널을 업그레이드 해주고 시스템을 리붓해줍니다.

2. Nouveau driver 제거

CentOS 7 에도 Nvidia Driver 가 설치되어 있습니다. 오픈소스 드라이버인데, 여기에는 Nouveau 가 활성화되는 모듈이 포함됩니다. Nvidia Driver 는 이 Nouveau 모듈과 충돌이 나서 설치하는데 지장이 생깁니다.

141115-0001

이는 다음과 같이 확인이 가능 합니다.

부팅할때에 nouveau 를 메모리에 올리못하게 하면 이 문제는 해결 됩니다. 다음과 같이 blacklist 에 적어줍니다.

위와같이 파일을 작성하고 저장한 후에 시스템을 리붓해 줍니다.

3. 설치

Nvidia Driver 를 Nvidia 홈페이지에서 다운받습니다. 그리고 CentOS 7 을 그래픽 모드가 아니 터미널 모드로 전환해주고 다운받은 파일을 실행해 줍니다.

 

4. 마치며

nouveau 비활성화는데에는 grub 을 이용할 수도 있습니다. 부팅할때에 grub 에 옵션으로 주면 비활성화를 할 수 있는데, CentOS 7 에선 grub2 를 사용하고 grub2 에서는 공통부분을 /etc/default/grub 에 “rdblacklist=nouveau” 를 추가해줍니다.

“GRUB_CMDLINE_LINUX” 에 추가해줍니다.

그리고 grub2 를 갱신해줍니다.

이렇게하면 blacklist 파일을 작성하지 않고도 nouveau 모듈을 부팅때마다 비활성화 할 수 있습니다.

MariaDB 10 소스 설치

MariadbMariaDB 는 MySQL 의 오픈소스 버전 입니다. MySQL 를 최초로 개발한 사람이 점점 폐쇄성이 짙어가는 MySQL 을 대체하기 위해 MySQL 을 복제하고 기능을 개선한 MySQL 의 또 다른 버전 입니다.

현재 MariaDB 는 10.0.14 버전 입니다.  MariaDB 10 소스 설치를 해보겠습니다. 설치 환경은 다음과 같습니다.

  • 배포판: CentOS 7
  • 아키텍쳐: 64bit

준비

MariaDB 10.0.14 버전은 MariaDB 홈페이지에서 다운받을 수 있습니다. 그런데, 이 소스 버전을 가지고 설치를 할 수도 있지만, Fedora 배포판에서 패치한 버전을 가지고 설치를 해보겠습니다.

Fedora 배포판의 경우에 10.0.14 버전에 보안 패치나 경로에 대한 패치 그리고 CentOS 7 의 Systemd 를 지원하도록 하는 스크립트를 제공 합니다. 이것은 SRPM 을 다운받아 소스를 패치하는 방법을 썼습니다.

Configure && Compile && Install

MariaDB 는 cmake 를 이용하기 때문에 일반 Configure 와는 다르게 이것을 이용 합니다.

위 설정은 다음과 같은 주요한 기능을 가집니다.

  • Aria 스토리지 엔진 지원
  • Partition 스토리지 엔진 지원
  • XtraDB 스토리지 엔진 지원
  • TokuDB 플러그인 지원

설치 후 작업

Fedora 배포판의 설정중에 디렉토리 설정 부분을 많이 인용을 했기 때문에 기존의 컴파일 설치한 디렉토리와는 사뭇 다릅니다. 대부분의 소스 컴파일을 설치했을 때에는 대부분 설치할 디렉토리인 PREFIX 만 지정하기  때문에 벤치디렉토리, 서포트디렉토리등이 모드 PREFIX 이하에 놓입니다. 하지만 위 설정을 보시면 Fedora 배포판 호환인 RedHat 디렉토리 구조를 계승하고 있다는 것을 인지하시기 바랍니다.

설치가 끝난 후에는 수동으로 옮겨주어야할 파일들이 존재 합니다. 그래서 설치 후 작업을 다음과 같이 진행 합니다.

CentOS 7 데서부터 도입된 systemd 등록을 위한 파일들을 설치 합니다.

그리고 다음과 같이 스크립트 파일들을 복사해 줍니다.

이제 mariadb 를 운영하기 위한 계정을 생성해 주고 디렉토리 퍼미션을 조정해 줍니다.

이렇게 한 후에 다음과 같이 MariaDB 에 기본 데이터베이스들을 생성해 줍니다.

이제 다 되었습니다. systemd 를 이용해서 mariadb 를 시작하면 됩니다.

MariaDB 오픈 소스 데이터베이스

MariaDB 는 한 개발자의 노력을 시작된 오픈 소스 프로젝트 입니다. 과거 오픈 소스 데이터베이스의 대명사인 MySQL 을 개발한 개발자 중에 한인 Monty Widenius. 1962년 핀란드 태생으로 1995년 MySQL 데이터베이스를 개발하기 시작해서 그 이듬해에 첫 릴리즈를 하게 됩니다. 그리고 1998년, 3.21 버전부터 www.mysql.com 을 만들어 운영하면서 명실상부한 오픈 소스 데이터베이스로 발을 딛기 시작 합니다.

Monty Widenius
MySQL 을 개발한 Monty Widenius

MySQL은 오픈소스 정책을 가지고 있지만 개발과 판매등을 총괄하는 회사가 있습니다. MySQL AB 라는 회사인데, 개발지원에서부터 판매, 홍보까지 MySQL에 거의 모든것을 관장하던 회사입니다. MySQL이 오픈소스이긴 하지만 라이센스정책이 이중으로 되어있어(GPL, CopyRight) 이러한 라이센스 관련해서 제품의 구성등 전반적인 부분도 이 회사에서 모두 관리합니다.

MySQL이 오픈소스 진영에서 이름을 날리고 있던 2008년에 썬 아킥텍쳐 및 썬 OS로 유명한 ‘Sun microsystems’ 에 85억 달러에 인수 됩니다. 이때에 MySQL을 전부 총괄하던 MySQL AB 회사도 함께 넘어감으로써 모든 지적재산권도 썬으로 넘어가게 됩니다. 그러던 것이 1년도 않된 시점인 2009년 4월 오라클이 썬마이크로시스템즈를 인수함으로써 MySQL AB 의 모든 지적재선권은 다시 오라클로 넘어갑니다.

Oracle. 오픈소스 진영에서는 거의 악날함을 자주 보여줬던 RDBMS 최강의 회사 입니다. 상용시장에서 독보적인 오라클 데이터베이스 를 가지고 있었고 인수전에는 MySQL과 알게 모르게 경쟁하던 데이터베이스 제품을 가진 회사였기 때문에 인수당시부터 오픈소스진영에서는 MySQL에 대한 운명(?)에 대해서 우려하는 목소리가 많았습니다. ‘오라클 스럽게 죽일거다’라는 소리가 자주 들렸지요.

그런데, MySQL AB를 설립했던 Michael “Monty” Widenius(마이클 ‘몬티’ 비드니우스) 라는 사람이 오라클을 뛰쳐 나옵니다. 오픈소스 정의감으로 뛰쳐나왔으면 드라마틱하겠지만 오라클에서 대우가 별로 맘에 않들었다고 하네요. 그러한 그가 나와서 뭘했을 까요? 배운게 도둑질인데, 오라클 회사를 나와서 ‘Monty Program’ 이라는 것을 하게됩니다. 그리고 이 ‘Moty Program’ 에서 GPL 라이센스로 되어있는 MySQL 코드를 Branch 해서 RDBMS를 만들게 되었는데 그것이 바로 ‘MariaDB’ 입니다.

Monty Widenius 는  오라클이 MySQL 을 인수하게되자 오픈 소스 진영에 MySQL 을 구해달라는 호소문을 올리기도 합니다.

[MySQL 을 구해주세요!!]

실제로 오라클이 MySQL 을 인수하고 난 후에, 오라클은 라이센스 정책을 변경했으며 MySQL 의 테스트 소스코드를 비공개로 변경했습니다.

이러한 오라클의 폐쇄적인 정책으로 불구하고 MariaDB 는 수많은 개발자들의 기부로 인해서 성장했고 대부분의 리눅스 배포판에서 MySQL 을 대체하는데 이르렀습니다. 현재 MariaDB 는 10 버전을 출시로 더욱 강력해지고 안전한 데이터베이스를 제공하고 있습니다.

Mariadb
Mariadb 의 로고

 

Apache mod_ruid2 설치

Apache LogoApache 는 TCP/IP 접속과 접속이 이루어진 후에 컨텐츠를 처리하는 프로세스의 권한이 다릅니다. TCP/IP 접속관련은 Root 권한으로 동작하고 이후 동작은 아파치의 설정에 따른 권한으로 실행 됩니다.

 

아파치의 동작 권한은 다음과 같이 설정 합니다.

위 설정은 아파치의 컨텐츠를 처리하는 프로세스가 nobody:nobody 권한으로 동작하도록 지정한 것입니다.

그런데, 이렇게 하면 버추얼 호스트(VirtualHost) 설정을 할 경우에 보통 각 계정별로 RootDocument 를 설정하는데, 이럴경우 아파치 프로세스는 한가지의 권한으로 동작하고 모든 계정에 접근해야 함으로 각 계정에 액세스 권한을 줘야 합니다. 그래서 주로 다음과 같이 해줘야 합니다.

이러한 아파치 권한과 리눅스 시스템 계정별 권한때문에 공개 CMS 프로그램들(xe, gnuboard, wordpress) 등을 설치할때에 홈디렉토리의 퍼미션을 777 로 하게됩니다. 이럴경우 보안상 큰 문제가 됩니다.

아파치의 컨텐츠 프로세스마다 지정한 시스템 계정의 권한으로 동작하도록 하게 한다면 각 계정별로 퍼미션을 바꿀 필요가 없게 됩니다. 이러한 것을 가능하도록 해주는 모듈이 바로 mod_ruid2 입니다.

이 문서는 Apache mod_ruid2 설치 에 관련된 내용 입니다.

1. 설치 환경

설치 환경은 다음과 같습니다.

  • 배포판: CentOS 7
  • Apache Version: 2.4.10
  • Apache MPM: prefork

2. mod_ruid2 설치.

mod_ruid2 프로젝트 홈페이지에서 다운로드 받고 압축을 해제한 후에 apxs 를 이용해서 다음과 같이 설치 해줍니다.

모듈 파일이 설치되고 httpd.conf 파일에 이 모듈이 자동으로 활성화 됩니다.

3. mod_ruid2 설정

기본적으로 다음과 같이 사용을 하시면 됩니다.

4. 그러나, 아직은..

이 모듈은 프로세스의 소유권 변환을 해줌으로 보안성을 향상시키지만 다음과 같은 모듈과 호환성을 제공하지 않습니다. (함께 쓸수 없다는 이야기…)

  • mod_cache
  • mod_cache_disk
  • mod_cache_socache
  • MPM worker
  • MPM event

Apache 2.4.10 이후로 SSLSessionCache를 위해선 mod_cache_socache 의 의존성을 가지고 있기 때문에 mod_ruid2 를 사용한다면 SSL 제대로 동작하지 않을 가능성이 있습니다. (mod_cache_socache 는 과거의 mod_mem_cache 입니다.)

MPM event 일 경우에 이것이 동작하지 않는다는게 가장 큰 문제로 보입니다.

리눅스 IPv6 비활성화

IPv4 의 부족분을 대체하기 위해서 IPv6 가 개발되었지만 아직까지 사용빈도가 높지않아 리눅스 IPv6 비활성화 시켜서 자원을 아낄 수 있습니다. 기본적으로 CentOS 6, 7 에서는 IPv6 가 활성화 되어 있습니다.

위와같이 IPv6 가 사용 됩니다.

CentOS 6 

1. IPv6 커널 모듈 비활성화

다음과 같이 IPv6 커널 모듈이 로딩되지 않도록 해줍니다.

2. 커널 파라메터 추가

다음과 같이 IPv6 커널 파라메터를 추가해 줍니다.

이제 재부팅을 해주면 IPv6 가 비활성화 됩니다.

CentOS 7

1. Grub2 IPv6 비활성화 옵션 추가

이와같이 GRUB_CMDLINUX_LINUX=”ipv6.disable=1 …” 를 추가 합니다.

그리고 다음과 같이 Grub 을 재성해 줍니다.

 

위 절정을 다하고 시스템을 reboot 해주면 IPv6 가 비활성화 됩니다.