Category: Linux

Apache HTTP SERVER Project 개요

Apache Logo

 Apache HTTP SERVER Project 는 아파치 소프트웨어 재단(Apache Software Foundation)이 운영하는 수많은 프로젝트중에 톱(Top) 프로젝트 입니다. 유닉스(Unix)와 윈도우즈 NT 계열의 운영체제를 위한 오픈소스(Open Source) HTTP 서버를 개발하는 프로젝트 입니다. 이 프로젝트의 목적은 HTTP 표준을 준수하면서도 안정적, 효율적, 확장가능한 HTTP 서비스를 제공하는데에 있습니다.

현재 가능 널리쓰이고 인기 있는 이 프로젝트는 1996년에 시작되었으며 올해(2014)년 2월에 18년째를 맞이했습니다.

1. 역사

1995년 2월즘에 웹에서 운영되어지는 HTTD 데몬으로 일리노이 대학의 슈퍼컴퓨팅 애플리케이션 국립센터의 Rob McCool씨가 만든 것을 대부분 사용했었습니다. 그런데 1994년 중반즘에 Bob McCool이 NCSA를 떠난 이후에 개발이 정체되었습니다. 이러한 조그마한 웹마스터 그룹은 이메일을 통해서 정보를 교환하고 기능을 개선하거나 버그를 패치하는데 협력을 시작합니다. Brian Behlendorf 과 Cliff Skolnick 는 캘리포티아 베이 지역에 있는 컴퓨터에 코어개발을 위해 그들의 정보를 메일링 리스트에 공유합니다. 1995년 2월 말에 8명의 공헌자(Contributor)로 구성된 재단의 원조 아파치 그룹이 갖춰집니다.

  • Brian Behlendorf
  • Roy T. Fielding
  • Rob Hartill
  • David Robinson
  • Cliff Skolnick
  • Randy Terbush
  • Robert S. Thau
  • Andrew Wilson

1995년 4월, 아파치의 첫번째 공개 릴리즈(0.6.2 Version)된다. 이즘에 NCSA에서도 웹서버 개발을 진행하고 있었는데, NCSA의 서버개발팀의 Brandon Long 과 Beth Frank는 명예 멤버처럼 메일리스트에 합류하면서 두 프로젝트에 아이디어와 버그등을 수정하게 됩니다.

첫번째 공개 릴리즈는 빅 히트였지만 전체적인 개선과 재디자인이 필요한 시점에서 1995년 5월 ~ 6월달동안 Rob Hartill 과 나머지 그룹멤들은 0.7.x 에 새로운 기능을 구현(pre-fork기능)과 작지만 성장하고 있는 아파치 사용자 커뮤니티를 지원하는데 힘을 쏟습니다. Robert Thau는 새로운 서버 아키텍쳐를 디자인했는데, 코드명 Shambhala, 모듈화된 구조와 보다 많은 확장성을 위한 API 구조, pool 기반의 메모리 할당 그리고 Adaptive pre-forking 프로세스 모델이였습니다. 아파치 그룹은 0.7.x 에 이 기능들을 넣고 서버 베이스를 바꿉니다. 그리고 8월에 0.8.8을 릴리즈 됩니다.

많은 베타 테스트 이후에 잘 알려져 있지 않은 플랫폼에 포팅하고 새로운 문서를 작성하고 많은 새로운 기능을 추가해 1995년 12월 1일에 아파치 1.0 을 릴리즈 합니다. 그리고 1999년 6월에 아파치 HTTP 서버를 법적, 재정적으로 지원하기 위해 아파치 그룹 멤버들은 Apache Software Foundation 을 설립하게 됩니다.

2. 참고사이트

RabbitMQ 설정

RabbitMQ LogoRabbitMQ 는 기본적으로 효율적으로 RabbitMQ 서버을 운영하기에 충분할만큼 내장된 설정으로 가지고 있습니다. 만약에 이 설정을 변경하고자 한다면 설정을 해야 합니다.

RabbitMQ 설정은 기본적으로 다음과 같이 3가지 방법을 제공 합니다.

  • 환경변수들(environment variables) : 포트(port), 파일 위치(file location), 파일 이름(file name)들을 정의. 이것은 쉘 환경변수로부터 가지고 올수 있으며 rabbitmq-env.conf 파일에 설정할 수 있다.
  • 설정파일 : 허가권(permission), 제한과 클러스터, 플러그인 세팅과 같은 서버 컨포넌트들을 정의.
  • 런타임 파라미터와 정책들 : 클러스터 전체 세팅을 런타임에서 변경할 수 있다.

설정파일의 위치는 배포판의 경우에 /etc/rabbitmq 를 루트하며, 컴파일 설치시에 지정해준 디렉토리를 기준으로 합니다.

rabbitmq-env.conf

이 설정 파일은 RabbitMQ 서버의 전체적인 설정들, 예를들어 서버 Port, 호스트이름, 노드이름등 입니다.

이는 쉘의 환경변수로 설정이 가능한데, 이 설정파일의 변수들에 ‘RABBITMQ_’ 를 붙이면 사용가능 합니다.

rabbitmq.conf

이 파일은 기본적으로 rabbitmq-env.conf 에서 지정 가능합니다. 주의해야 할 것은 파일명을 적을때에 conf 확장자를 생략하고 적으셔야 합니다. 왜냐하면 RabbitMQ 가 확장자 conf 를 추가하기 때문입니다.

이 설정 파일에서는 RabbitMQ 운영에 관련된 내용들을 주로 다룹니다. 사용할 메모리, 인증방법, SSL 인증서 설정등 입니다.

이러한 설정들은 다음의 명령어로 확인이 가능 합니다.

 

리눅스 아파치 설치

Apache LogoApache 는 전세계 웹 서버로 가장 많이 쓰이는 HTTP 서버 입니다.

Apache 는 최신 2.4 으로 넘어오면서 많은 변화를 겪었습니다.

이 문서는 리눅스 아파치 설치 하는 방법을 설명한 것입니다.

1. 개요

CentOS 7 배포판은 RHEL 7 을 재컴파일해서 만들어진 배포판 입니다. 이전 버전과 달리 서비스 데몬 관리로 Systemd 를 채용했고 기본 파일 시스템으로 XFS 를 채용하는등 많은 변화를 겪었습니다.

CentOS 7 에 서버 프로그램을 설치하게 될 경우에 이 Systemd 와 결합을 시키는 것도 중요한 일로 떠올랐습니다. Systemd 는 단순하게 서비스 데몬을 관리하는 것뿐만 아니라 시스템의 전반적인 인프라자체이므로 매우 중요한 요소가 되었습니다.

이 문서에 Apache 2.4.10 은 바로 Systemd 와 통합하는 방법을 포함 합니다. 이 문서의 내용은 Fedora 22 배포판을 많이 채용한 것입니다.

2. Apache 2.4.10

2.4.10 버전에서는 이전과 달리 기본 MPM으로 Event 입니다. 별도로 MPM을 지정해주지 않으면 Event 로 지정되었습니다. 하지만, 이 기본 Event 가 라이브러리 의존성을 가지고 있기 때문에 라이브러리가 갖추어지지 않았다면 Prefork 와 Worker 가 공유라이브러리로 컴파일되고 설치 이후에 무엇을 쓸것인지를 지정해줘야 합니다.

2.4.10 버전의 경우에 Event 를 활성화하기 위해서는 Apr, Apr-utils 의 버전이 1.5 이상이여 합니다. 하지만 CentOS 7 배포판에서는 현재 1.4 버전임으로 컴파일 설치할때에 1.5 이상을 같이 컴파일 해줘야 합니다. 

3. Download and Unpack

Apache 2.4.10 을 Event 로 동작하도록 컴파일 하기위해서 다운로드 합니다.

  • Httpd-2.4.10
  • Apr-1.5.1
  • Apr-utils-1.5.4

다운로드한 후에 압축을 해제하고 apr, apr-utils 는 srclib 디렉토리에 압축을 해제하고 버전을 제거한 패키지 이름으로 변경해 줍니다.

4. Patch Download and Patch

이 패치는 Fedora 22 에 httpd-.2.4.10 패키지에 있는 것을 가지고 온 것 입니다. 여기에는 보안 패치와 더불어 Systemd 와 통합되는 모듈이 들어있습니다.

패치는 다음과 같이 다운로드 받습니다.

download: httpd-2.4.10_patch.tar.bz2

httpd-2.4.10 디렉토리에서 다운로드 받은 파일을 압축해제하고 패치를 적용합니다.

5.Configure and Compile and install

프로그램에 설정을 할때는 어떤 기능을 쓸것인지를 결정해야 합니다. 어떤 역활로 서버를 사용할 것인지를 고민한 후에 프로그램을 설정하는 것이 좋습니다.

위 configure 는 다음과 같은 기능을 제공하지 않습니다.

  • dav 안됨

이제 컴파일과 설치를 해줍니다.

6. mod_systemd 설치.

httpd-2.4.10 에 Systemd 와 통합을 위한 패치를 했지만 컴파일할때에 모듈설치 옵션을 ‘all’이나 ‘most’ 로하지 않는 이상 컴파일 설치가 되지 않습니다. 이는 apxs 를 이용해서 모듈 설치를 해줍니다.

위에 잘 보면 link 시에 systemd_daemon 링킹이 되지 않습니다. 이것을 다음과 같이 수동으로 다시 만들어 줍니다.

그리고 다음과 같이 설치해 줍니다.

7. systemd 파일 등록.

이제 httpd 의 systemd 파일을 등록해 줍니다. 파일은 다음과 같습니다.

‘httpd.service’ 파일로 저장하고 다음과 같이 systemd 디렉터리로 옮겨 줍니다.

httpd.service 를 systemd 에 등록하고 시작해주면 됩니다.

실행상태는 다음과 같이 확인 가능 합니다.

추가 관련내용

Apache 웹 서버, Configtest 체크 만들기

Apache 웹 서버 시스템을 다루다보면 자주 접하게 되는 문제가 Apache 웹 서버의 재시작 문제입니다. 이것이 왜 문제가 되는가 하면, 재시작을 위해서는 Apache 웹 서버의 설정 파일들이 문제가 없는지에 대한 테스트가 선행되어야 하기 때문입니다.

다행스럽게도 Apache 는 설정 파일에 대한 적합성 테스트를 제공 합니다.

만일 설정파일에 문제가 있다면 다음과 같이 됩니다.

Apache 웹 서버는 어떻게 설정 파일에 문법 체크를 하는 걸까?

1. server/main.c

httpd 실행파일은 server/main.c 에서부터 만들어집니다. 이 파일에는 main() 함수가 존재하고 Switch 문으로 httpd 의 옵션들을 받도록 되어 있습니다.

configtest 옵션을 주면 내부적으로 configtestonly 값이 1루 세팅 됩니다.

Apache 에서 configtest 를 실행하면 바로 위 구문이 실행됩니다. ap_run_test_config 가 실행되네요. ap_run* 은 일종의 매크로 같은 것인것으로 보인다.

server/config.c 에는 Apache의 설정 파일들을 읽고, 검사를 하고, 추가된 모듈이 있다면 모듈에 맞게 문법을 검사 합니다.

내용이 복잡한데, 어째되었던간에 결과는 다음과 같은 문자열을 화면에 뿌리도록 되어 있습니다.

  • ap_log_error(APLOG_MARK, APLOG_STARTUP, 0, NULL, “Syntax OK”);
  • return apr_pstrcat(p, “Syntax error in -C/-c directive: “, errmsg, NULL);
  • return apr_psprintf(p, “Syntax error on line %d of %s: %s”,

위와같이 문제가 없으면 ‘Syntax OK’, 문제가 있으면 ‘Syntax error’ 라는 문장을 가진 문자열을 리턴 합니다.

2. 쉘 종료 변수와 stdout, stderr

쉘은 프로그램이 정상 종료나 비정상 종료에 대해 다음과 같은 환경변수를 가집니다.

  • 0 : 정상종료
  • 1 : 비정상 종료

그런데, Apache 웹 서버도 Configtest 를 진행해서 ‘Syntax OK’ , ‘Syntax error’ 는 stderr 로 메시지를 리턴합니다.

이렇게 파일에 저장이 되지 않습니다.  다음과 같이하면 파일에 저장이 됩니다.

Apache 웹 서버는 설정 검사 결과가 통과되던 안되던 메시지는 stderr 로 메시지를 출력 합니다. 단, 쉘 리턴 변수만 달리 됩니다.

3. python 으로 체크 테스트 만들기

python 의 apache configtest 모듈이 있다면 좋았겠지만, 그런게 없더군요. 결국에는 python 에서 외부명령어를 사용하는 방법밖에 없습니다.

python 에서 외부명령어 사용을 위한 방법에는 다양하지만, subprocess 를 이용해 보겠습니다.

위 코드에서 핵심은 Popen 객체에 stderr=sys.stdout 를 주고 외부 프로세스가 끝나기를 기다려 리턴값을 받는 ‘p_status = p.wait()’ 에 있습니다.

 

CentOS 6 Xen 설치

centos logoCentOS 6을 사용하고 있다면 별다른 노력없이 Xen 가상화 서버를 구축할 수 있습니다. 현재(2014년 9월 19일) CentOS 의 최신 배포판은 6.5 입니다.

이 문서는 CentOS 6 Xen 설치에 관한 것 입니다.

 

 

1. Xen 패키지 저장소 활성화

Xen 가상화를 위해서 CentOS 6.5 에서는 Xen 가상화 패키지 설치를 쉽게할 수 있도록 저장소를 제공합니다. 이 저장소를 이용하기 위해서 다음과 같이 쉘 명령어를 입력해 줍니다.

2. xen 설치.

저장소를 활성화 했기 때문에 yum 으로 xen 을 설치할 수 있습니다.

3. grub 에 xen 하이퍼바이저 이식

xen 패키지를 설치하면 이를 위한 커널도 새롭게 설치되는데, 여기에 xen 하이퍼바이저를 부팅시에 되도록 고쳐줘야 합니다. 이것도 스크립트로 제공해 줍니다.

4. 재부팅 해줍니다.

5. 확인

재부팅이 끝나면 제대로 됐는지 다음과 같이 확인 합니다.

저의 CPU 는 하드웨어 가상화를 지원하기 때문에 HVM (전 가상화)까지 지원 합니다.

6. libvirt 설치.

Xen 을 사용하기 위해서는 xm, xl 명령어를 사용하는데 이것보다 Python 으로 작성된 프로그램을 이용하면 더 쉽게 관리를 할 수 있습니다. 이를 위해서 다음의 패키지를 설치 합니다.

다시 재부팅을 해주면 끝납니다.

CentOS 7 RabbitMQ 설치

RabbitMQ Logo RabbitMQ 는 AMQP(Advanced Message Queuing Protocol) 를 지원하는 메시징 큐 브로커 입니다. 큐(Queue) 자료구조의 동작방법 그대로 서버로서 역활을 하도록 만든 서버 입니다.

CentOS 7 RabbitMQ 설치 방법을 설명 합니다.

1. EPEL 저장소 추가.

RabbitMQ  는 Erlang 이라는 언어로 작성되었습니다. 따라서 이 패키지가 설치되어 있어야 하는데,  CentOS 7 에서는 패키지로 제공하지 않습니다. 대신에  EPEL 저장소를 추가해서 사용 합니다.

2. RabbitMQ 설치.

현재(2014년 9월 16일)  RabbitMQ 서버의 최신 버전은 ‘3.3.5-1’ 입니다. 이를 설치 합니다.

3. Web Console 활성화.

RabbitMQ 는 Web Console 을 지원 합니다. 이를 위해서 RabbitMQ 의 Console Management 플러그인을 활성화 해주고 서버를 재시작 해줍니다.

4. 서비스 등록

CentOS 7 부터 서비스 관리는 systemd 에서 하도록 변경되었지만 RabbitMQ  는 아직 여기에 대응하지 않습니다. 예전과 같이 chkconfig 도구를 이용해서 서비스를 런레벨(run level) 에 등록해 줍니다.

5. CentOS 7 에서 시작 문제.

RabbitMQ 의 최신 패키지는 CentOS 7 의 Systemd 를 지원하지 않아 구동을 한다고 하더라도 다음과 같은 오류를 만나게 됩니다.

이는 SELINUX 를 disabled 처리해주면 구동이 가능합니다.

6. Web Console 에 로그인 계정 추가.

메뉴얼에 의하면 Web Console 의 기본 계정인 guest/guest 는 로컬호스트에서 접속할때만 가능합니다. 외부에서 접속할때는 불가능 합니다. 그래서 새로운 계정을 다음과 같이 추가해줍니다.

7. firewalld 로 Web Console 접속 포트 개발

RabbitMQ 의 Web Console 은 15672 포트를 사용 합니다. 이를 firewalld 를 이용해서 개방해 줍니다.

8. http://서버IP:15672 접속.

이제 웹 브라우저를 열고 http://서버ip:15672 를 하면 로그인 화면이 나옵니다. 여기서 아까 생성한 관리자 아이디/패스워드를 입력해서 로그인이 되면 정상입니다.

RabbitMQ 서버 관리자 화면
RabbitMQ 서버 관리자 화면

Man 페이지 텍스트, PDF로 저장

Man 페이지 텍스트 파일로 저장.

 Man 페이지 PDF 파일로 저장.

Man 페이지 HTML 파일로 저장. 

먼저 패키지를 설치해야 합니다.

그리고 다음과 같이 해줍니다.

 

Man Page 컬러로 보기

리눅스의 Man Page 는 컬러가 아닙니다. 흑백으로만 나옵니다. 중요한 내용에 컬러를 입히면 눈에 잘 들어올텐데, 이걸 가능하게 하는 방법입니다.

‘source ~/.bashrc’ 를 해주면 바로 적용 됩니다.

그런데, xterm 을 사용하고 있다면 다음과 같이 .Xdefaults 에 다음과 같이 해줍니다.

그리고 다음과 같이 적용을 해줍니다.

출처: http://www.cyberciti.biz/faq/linux-unix-colored-man-pages-with-less-command/

Bash 패스워드 생성기.

쉘 스크립트에서 간단하게 패스워드를 생성할 수 있습니다.

사용법은 다음과 같습니다.

 

Python 3 설치

python-logoPython 3 설치. 현재 Python 2.x 버전이 2019년까지 수면을 연장했지만 이미 많은 모듈들이 2.x 버전에서 개발이 중단되거나 Python 3.x 를 지원하기 시작했다. 앞으로는 Python  2.x 를 개발하더라도 Python 3.x 와 호환을 고려해서 작성해야 한다.

1. Downloads and Unpack

다운로드는 Python 홈페이지에서 받는다.

2. Configure and Compile and Install

3. 후속작업

설치한 후에 python3 을 실행하면 다음과 같이 실행이되지 않는다.

공유라이브러리가 없기 때문에 나타나는 현상으로 다음과 같이 공유라이브러리를 인식시켜준다.