본문으로 바로가기

[Linux] 아파치 서버 컴파일 설치 (httpd-2.4.52)

category OS/Linux 2022. 1. 3. 13:10

1. 관련 패키지 설치

  • CentOS 7에서 설치 진행했습니다.
# yum update -y 

# yum install -y gcc gcc-c++ pcre-devel expat-devel

 

2. 관련 설치 파일 다운로드

Apache HTTP Server를 설치하기 위해서는 다음과 같은 파일의 설치가 필요합니다. 

 

설치 파일 다운로드

  • wget을 이용하여 관련 파일을 특정 경로에 다운로드합니다.
  • 경로 같은 경우엔 소스 파일은 /usr/local/src 에 보관하고 /usr/local/ 에 설치하는 것이 관례이기에 따랐습니다.
// 다운 받을 경로
# cd /usr/local/src 

# wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
# wget https://downloads.apache.org/httpd/httpd-2.4.52.tar.gz
# wget https://downloads.apache.org/apr/apr-1.7.0.tar.gz
# wget https://downloads.apache.org/apr/apr-util-1.6.1.tar.gz

 

압축 해제

  • 다운로드한 압축 파일을 압축 해제해 줍니다.
# tar zxvf pcre-8.45.tar.gz
# tar zxvf httpd-2.4.52.tar.gz
# tar zxvf apr-1.7.0.tar.gz
# tar zxvf apr-util-1.6.1.tar.gz

 

3. 컴파일 설치

  • 컴파일 설치는 보통 아래의 명령어를 기본적으로 알고 있어야 합니다. 
# ./configure
# make
# make install
# make uninstall (삭제 시 사용합니다. make를 했던 디렉토리로 접근해 입력 또는 stow 사용을 권장합니다.)

 

[컴파일 설치 과정 간단 설명]

1. 설치 파일 디렉터리로 접근합니다.


2. configure

configure 명령어를 이용해 현재 디렉터리(설치 파일 디렉터리)에서 

configure라는 이름을 갖는 스크립트 파일을 찾고 이를 실행하여 Makefile을 생성합니다.

이 과정에서 설치 시 필요한 필요한 도구가 다 있는지, 라이브러리는 다 있는지 같은 것들을 체크해줍니다.

옵션을 이용하여 설치 경로(--prefix)등을 지정할 수 있습니다.

configure 단계에서 에러를 내며 멈출 경우 설치를 위한 준비(필수 라이브러리 등)가 잘 되어있는지 다시 확인합니다.

configure 옵션을 잘 못해서 다시 시작하고 싶을 때 make distclean(초기 압축을 풀었던 상태로 되돌려 줌) 명령어를 입력하면 configure 설정을 모두 제거해줍니다.

 

3. make

make 명령어로 생성된 Makefile을 이용하여 프로그램 코드를 컴파일하고 실행 가능한 형태로 만듭니다.

Setup파일을 만든다고 보면 됩니다.

이 과정에서 모든 실행파일들은 여러분이 소프트웨어를 압축 해제한 임시 디렉터리에 생성됩니다.

에러가 날 경우 make clean 명령어를 입력 후 다시 make 명령어를 입력해 컴파일합니다.

컴파일: 소스파일을 사용자가 실행 가능한 파일로 만들어 주는 과정

make 유틸리티가 동작하기 위해서는 Makefile이라는 파일이 현재 작업공간에 존재해야 합니다.

 

4. make install

make install을 이용해 make를 통해 만들어진 설치 파일(Setup)을 설치를 합니다.

(위에서 임시 디렉터리에 생성된 실행파일들을 최종 디렉터리에 복사합니다. 이에 따라 사용자가 실행이 가능한 형태가 됩니다.)

 

3.1. PCRE 컴파일 설치

  • Perl 호환 정규 표현식
  • 정규식 패턴 일치를 구현하는 함수의 집합
# cd pcre-8.45/
./configure --prefix=/usr/local/src

# make && make install

 

3.2. Apache HTTP Server(httpd) 컴파일 설치 

  • Apache Portable Runtime은 Apache 웹 서버를 지원하는 라이브러리입니다.
  • apr, apr-util 파일을 httpd 디렉터리에 옮긴 후 컴파일 설치를 진행합니다.
# cd /usr/local/src 

# mv apr-1.7.0 ./httpd-2.4.52/srclib/apr
# mv apr-util-1.6.1 ./httpd-2.4.52/srclib/apr-util

# cd httpd-2.4.52/

# ./configure \
--prefix=/usr/local/apache \
--with-included-apr \
--with-pcre=/usr/local/bin/pcre-config

# make && make install

 

4. Service 등록

  • 편의를 위해 systemd에 Service 등록합니다.
  • 등록하게 되면 Systemctl 명령어로 쉽게 관리할 수 있습니다.
# vi /usr/lib/systemd/system/httpd.service

[Unit]
Description=Apache Service

[Service]
Type=forking
#EnvironmentFile=/usr/local/apache/bin/envvars
PIDFile=/usr/local/apache/logs/httpd.pid
ExecStart=/usr/local/apache/bin/apachectl start
ExecReload=/usr/local/apache/bin/apachectl graceful
ExecStop=/usr/local/apache/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload

 

5. 실행

# systemctl start httpd

# systemctl status httpd
● httpd.service - Apache Service
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since 목 2021-12-23 15:11:30 KST; 2s ago
  Process: 12969 ExecStart=/usr/local/apache/bin/apachectl start (code=exited, status=0/SUCCESS)
 Main PID: 12974 (httpd)
    Tasks: 82
   CGroup: /system.slice/httpd.service
           ├─12974 /usr/local/apache/bin/httpd -k start
           ├─12975 /usr/local/apache/bin/httpd -k start
           ├─12976 /usr/local/apache/bin/httpd -k start
           └─12977 /usr/local/apache/bin/httpd -k start

12월 23 15:11:30 localhost.localdomain systemd[1]: Starting Apache Service...
12월 23 15:11:30 localhost.localdomain apachectl[12969]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally t...ss this message
12월 23 15:11:30 localhost.localdomain systemd[1]: Can't open PID file /usr/local/apache/logs/httpd.pid (yet?) after start: No such file or directory
12월 23 15:11:30 localhost.localdomain systemd[1]: Started Apache Service.
Hint: Some lines were ellipsized, use -l to show in full.

# netstat -ntap | grep LISTEN | grep 80 | grep -v grep
tcp6       0      0 :::80                   :::*                    LISTEN      12974/httpd