kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

OS

CentOS 6 APM install (소스 설치)

까마기 2020. 3. 2. 14:37
반응형

최근에는 사용하지 않는 방식이며, 주로 docker image로 올리거나 yum, apt-get 명령어를 사용하여 패키지로 쉽게 설치가 가능하며, AWS 자체에서도 웹을 손쉽게 올려주는 서비스를 사용한다.

 

예전에 정리해 두었던 문서를 정리하는 차원에서 포스팅을 해보았다.

 

OS : CentOS 5.8 (64bit) 
 
* 보통 설치 순서는 Mysql > Apache -> PHP
 
* 기본적으로 centos 설치 한 후 기존에 설치되어 있는 패키지를 삭제 해준 후 실습 진행
 rpm명령어로 패키지를 삭제 또는 yum 명령어를 이용하여 삭제
 
 * 기본 패키지 설치

yum -y install gd-*  freetype-*  libpng*  libmng*  libtiff*  libungif*  libjpeg*  libc-client* libc-client-devel  imap* libmcrypt* mhash* mhash-devel  libtool-ltdl-devel* pcre* apr* openssl* dialog cc* gcc* cmake vsftpd net-snmp* ncurses* gmp* expat* libxml2* pspell* libxml* gdbm* ntp mhash* cyrus-imapd* sendmail* libXaw* fontconfig* libtermcap* krb5* libcurl* curl curl-devel

yum -y install wget sysstat
yum groupinstall "Development Tools"
yum groupinstall "Development Libraries"
yum install rdate
yum install rsync -y
yum install yum-fastestmirror -y
yum install gcc gcc-c++ make automake autoconf -y
yum -y remove http* php* mysql*


 
* 2.x : 일반 웹서버,  보안 웹서버
1.3.x : 보안 웹서버 (얼마전 개발 중지) --> 현재 공식사이트에 링크가 사라짐.

< Mysql 5.1.37 >

# cd /usr/local/src
# tar -xvfz mysql-5.1.37.tar.gz 
# useradd -M -s /bin/false mysql
# useradd -M -s /bin/nologin mysql

 --> mysql 계정은 mysqlDB 운영을 위해서만 필요한 시스템 계정이므로 이런식으로 계정을 생성하는것이 보안상 안전하다. 패스워드도 당연히 부여할 필요가 없다.  
출처 : twoseven.kr/linux2 

외부에서 접속하는 계정이 아닌 내부에서 접속하는 계정. 
-M : 홈디렉토리 없이 만드는 옵션  
-s : 쉘 미사용 옵션 


# cd mysql*
 
* mysql 컴파일 옵션 1

# ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --with-charset=utf8 --with-readline 
 
 ; 바이너리 파일들(실행 파일)이 설치
 #################################################
 
* mysql 컴파일 옵션 2

./configure --prefix=/usr/local/mysql --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static--skip-federated --with-charset=utf8 --with-extra-charsets=all --with-readline 


* mysql 컴파일 옵션 설명
 
# ./configure
> --prefix=/usr/local/mysql \                /* Binary 파일(실행 파일)들이 설치 */
> --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock \    
/* 서버 구동시에 mysql.sock 지정 */
> --with-client-ldflags=-all-static --with-mysqld-ldflags=-all-static--skip-federated \
> --with-charset=euckr \                            /* 기본 문자셋을 euckr로 지정 */
> --with-extra-charsets=all \                            /* 모든 케릭터셋을 설치 */


#make && make install

[참고]
# make && make install           //make 후에 Error가 나면, 뒤의 &&(make install)를 실행시키지 않는다.

# make ; make install                // 앞의 명령어가 끝나면 에러가 있건 없건, 바로 뒤에 명령어를 실행한다.

 


--> 컴파일 도중 에러가 나타나서 필요한 패키지를 설치해야 한다.
에러메세지 --->configure: error: No curses/termcap library found


.....** 결국 두번의 에러로 
# yum install -y gcc-c++
# yum install -y libtermcap-devel ncurses-devel
설치 후 
# make clean 
그 다음 다시 컴파일.

 


 
 --> 성공적으로 설치가 되었다.

* 이제 환경설정 파일을 복사

- mysql 에서는 사용할 환경 설정 파일을 /etc/ 에 복사한다. 
- mysql은 사용자의 시스템에 맞게 적절한 sample 파일을 제공한다.

 
# cd /usr/local/src/mysql*
# cp -arp support-files/my-huge.cnf /etc/my.cnf
--> 디렉토리에서 my-huge.cnf 를 /etc 로 복사
cp: overwrite `/etc/my.cnf'? y <-- 파일이 있으면 덮어써야 한다. 
복사한 후 백업도 같이 해준다.

#cp my.cnf my.cnf.bak

[참고] 기본적으로 시스템에 맞게 설정된 파일
my-huge.cnf : 메모리가 1G-2G 사이일 때 사용한다.
my-large.cnf : 메모리가 512M일 때 사용한다.(권장)
my-medium.cnf : 메모리가 64-256M 사이일 때 사용한다.
my-small.cnf : 메모리가 64M 보다 작을 때 사용한다.
 
 


 
 
 
* 이제 Database를 생성해 보자.
 
# cd /usr/local/mysql/bin 
# ./mysql_install_db 
=> 이 스크립트 파일은 myslq db 서버가 구동 되기 위해서 필요한 DB 를 생성하는 스크립트 파일이다.  하지만 여기서는 mysql 이라는 계정을 만들었으니 다음과 같이 하겠다.
 
 


 
컴파일 했을 때 위의 옵션 중에서 첫번째 것으로 하였다면 아래와 같은 위치에 생성
# ls ../data <== DB 서버가 구동되는 필요한 DB가 생성이 되었다. 
mysql mysql-bin.000001 mysql-bin.000002 mysql-bin.index test 
 
 


 
mysql 컴파일 옵션 2를 사용하여 configure 하였다면 

[/usr/local/mysql/var]#ls
mysql  mysql-bin.000001  mysql-bin.000002  mysql-bin.index  test
[/usr/local/mysql/var]#pwd
/usr/local/mysql/var
-->이 위치에 생성
 
 
* 기존의 mysql 계정이 있으면(mysql 패키지가 리눅스 설치할때 설치가 되었다면 
mysql 계정이 이미 생성되어 있을수도 있습니다. 그러나 소스코드를 컴파일하는경우에는 
mysql 계정의 설정정보(홈디렉토리등..)가 맞지 않을수도 있으므로 계정이 이미 있으면 
삭제하고 새로 생성하는것이 권장됩니다. 
# userdel -r mysql 또는 userdel mysql 
# useradd -M -s /sbin/nologin mysql 
=> mysql 계정은 mysql DB 운영을 위해서만 필요한 시스템 계정이므로 이런식으로 계정을 생성하는것이 보안상 안전합니다. 패스워드도 당연히 부여할 필요가 없습니다. 

* mysql 디렉토리 권한 설정

# chown -R root.mysql /usr/local/mysql                  --> mysql 디렉토리 권한 주기
 
# chown -R mysql.mysql /usr/local/mysql/data     -> 컴파일 옵션 1 을 사용했을때.
# chown -R mysql.mysql /usr/local/mysql/var        -> 컴파일 옵션 2 를 사용했을때. (default)


* 첫번째 옵션을 사용하였다면 다음과 같은 설정을 해준다.
# echo "/usr/local/mysql/lib" >> /etc/ld.so.conf 
=> 공유라이브러리 설정파일에 mysql 라이브러리 경로를 추가한다. 
 
# cat /etc/ld.so.conf 
include ld.so.conf.d/*.conf 
/usr/local/mysql/lib 


 
 

* mysql 데몬 실행

# ./mysqld_safe & 
=> mysql 데이터베이스 서버 구동 스크립트 파일
(* mysql 서버 종료는 이 스크립트로 하지않고 /usr/local/mysql/bin/mysqladmin -u root -p shutdown 이렇게 한다.) 
[1] 1190 
[/usr/local/mysql/bin]# nohup: ignoring input and redirecting stderr to stdout 
Starting mysqld daemon with databases from /usr/local/mysql/data 

/etc/init.d/mysqld start    // 자동 실행 설정(chkconfig에 등록)을 해 놓았다면.

--------> 프로세스 확인

# ps -ef | grep mysqld 

 
* mysqld 데몬 중지
 

 chkconfig 를 이용해 자동 실행 설정을 해 놓았다면.( 뒷부분에 나옴)
# /etc/init.d/mysqld stop 

# ./mysql 

mysql> show databases; 
=> db 서버가 구동되는데 필요한 db가 만들어져 있음을 알수 있다. 
+--------------------+ 
| Database | 
+--------------------+ 
| information_schema | 
| mysql | 
| test | 
+--------------------+ 
3 rows in set (0.04 sec) 

mysql> quit 
Bye 
출처 : twoseven.kr/linux2 
 



 
 
* 환경 변수 등록

PATH 지정--> 루트 사용자가 mysql 명령어를 해당 디렉토리에 들어가지 않고도 쉽게 사용할 수 있도록 설정하기

# vi /root/.bash_profile 

     10 PATH=$PATH:$HOME/bin
     11
     12 export PATH
     13 unset USERNAME


     10 PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
 

소스 적용 -> 확인

# source .bash_profile

* 자동 실행 설정 및 /etc/init.d/ 데몬 등록

chkconfig를 이용해 시스템이 재부팅되어도 MySQL이 자동으로 실행될 수 있도록 설정한다.
먼저 MySQL의 실행 스크립트 파일을 /etc/init.d에 복사하고 chkconfig 명령어를 이용하여 추가해 준다.


실행 스크립트 명이 mysql.server
 


이것을 /etc/init.d 에 mysqld 라는 서비스 명령어로 바꿔서 복사 후 chkconfig에 추가하여 부팅시 자동으로 실행할 수 있도록 해준다.

# cp mysql.server /etc/init.d/mysqld
#chkconfig --add mysqld

chkconfig --add 해주면 기본적으로 runlevel 2,3,4,5는 활성이다.
# chkconfig --list | grep mysqld
mysqld          0:해제  1:해제  2:활성  3:활성  4:활성  5:활성  6:해제
# /etc/init.d/mysqld start
Starting MySQL.                                            [  OK  ]

이상태로 해주면 
그냥 mysql 만 치면 데이터베이스로 들어가진다.

하지만 이것은 보안상 취약하기 때문에 사용자에 암호를 걸어두어서 
그냥 mysql을 쳐서 데이타베이스에 접속을 하지 못하게끔 설정을 한다.

# mysqladmin -u root password '패스워드'            ---> 리눅스의 root 계정이 아니다.
이렇게 암호를 설정( 실제로는 로컬의 암호와 mysql의 암호는 다르게 해줘야 보안상 좋다.)
하면 mysql 으로만 쳤을때 접속이 안되는 것을 알 수 있다. 만약 이 설정을 하지 않으면 그 누구라도 root로 접속할 수 있으므로 반드시 암호 설정을 해주어야 한다. 
[root@localhost mysql]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

이렇게 암호를 설정한 후 데이타베이스에 들어가려면

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.

이렇게 들어가야한다.
-u : user
-p : password


 
< Apache 2.4.3 설치 >

 
# wget http://apache.mirror.cdnetworks.com//httpd/httpd-2.4.3.tar.bz2
# wget http://mirror.apache-kr.org//apr/apr-util-1.4.1.tar.bz2
# wget http://mirror.apache-kr.org//apr/apr-1.4.6.tar.bz2
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.10.tar.gz
//httpd-2.4.x 버전 설치시 apr과 apr-util, pcre을 별도로 설치해주어야 한다. 

 


# tar xvfj apr-1.4.6.tar.bz2
# tar xvfj apr-util-1.4.1.tar.bz2
# tar xvfj httpd-2.4.3.tar.bz2

우선 apr과 apr-util을 설치하자.
 
복사
# mv apr-1.4.6 httpd-2.4.3/srclib/apr
# mv apr-util-1.4.1 httpd-2.4.3/srclib/apr-util




이제 Pcre를 설치해 보자.

# tar xvfz pcre-8.10.tar.gz
 
# cd pcre-8.10
# ./configure --enable-static=yes --enable-utf8=yes --enable-unicode-properties=yes
# make && make install


pcre 설치가 완료 되었으면
 
# cd httpd-2.4.3
# ./buildconf
# ./configure \
 –prefix=/usr/local/apache \
 –enable-modules=all \
 –with-included-apr \ 
 –enable-mpm=worker \
 –enable-suexec \
 –enable-rewrite
 # make && make install


# ./configure --prefix=/usr/local/apache \
--enable-mods-shared=all --enable-so --enable-ssl \
--enable-modules=ssl  –with-included-apr \ 
--with-mpm=prefork --enable-rewrite 
 
apr 과 apr-util 때문에 컴파일이 안되는 경우가 있다.
이럴 떄는 apr과 apr-util을 각각 httpd 소스 파일의 아래 디렉토리에 apr, apr-util 디렉토리를 생성하여 복사를 하자.

# mv apr-1.4.6 httpd-2.4.3/srclib/apr
# mv apr-util-1.4.1 httpd-2.4.3/srclib/apr-util

[참고] 2> apache.log : Error가 있을 경우 apache.log 파일에 저장한다.
앞에 2 가 없다면 표준출력이 된다.( 0 = 표준 입력, 1 = 표준 출력, 2 = 표준 에러)


apache 데몬을 올려보자.
# /usr/local/apache/bin/apachectl start
 



* ssl 적용 시 ssl 컴파일 하여 설치 후 

 ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --enable-so  --enable-module=ssl --with-ssl=/usr/local/openssl --with-mpm=prefork --enable-rewrite

 * -with-included-apr -> httpd 2.2.4 버전 이하로는 내장된 apr 을 사용함을 참조
 

<설명>
--prefix=/usr/local/apache2                                   /* 설치 디렉토리를 지정 */
--enable-mods-shared=all                                  /* 모든 모듈을 DSO 모드로 작성 */
--enable-so                                    /* DSO 모드를 활성화(php 모듈 사용 지정 옵션) */
--enable-rewrite                                                  /* URL 재작성 모듈을 활성화 */
--enable-ssl                                                /* ssl을 활성화(보안 인증 사이트 관련) */
--enable-modules=ssl                                                  /* ssl 모듈을 활성화 */
--with-mpm=prefork 
--enable-ssl=shared

[참고] 보안 웹 서버를 적용하기 위해 필요한 옵션
--enable-ssl --enable-modules=ssl --with-ssl=/usr/local/openssl --enable-ssl=shared --with-mpm=prefork

 # make && make install
 
###########################################
 ./configure --prefix=/usr/local/apache \ 
> --enable-mods-shared=most                  <== DSO 방식으로 설치하기 위한 옵션 
*. 아파치 configure 옵션은 여기에 자세히 나와 있다. 
=> http://httpd.apache.org/docs/2.0/ko/programs/configure.html 
###########################################
[참고] 아파치 설치 두 가지 방법
(01) DSO(Dynamic Shared Objects)의 동적 모듈 적재 방식
DSO방식은 아파치를 먼저 컴파일하고 다른 모듈들을 추가로 설치할 때는 아파치를 재 컴파일하지 않고 한번 설정되어 컴파일된 아파치를 계속 사용하는 것이다.
즉, "DSO 방식은 아파치를 단 한번만 컴파일"한다는 것이다. 이점은 관리, 설치면에서 커다란 장점이다.

(02) Static Object라고 하는 방식
Static 방식은 모듈을 추가하려면 아파치를 실핼될 때에 모든 모듈을 로드하므로 시스템의 자원을 많이 소모한다. 하지만 DSO 방식은 사용자의 요청이 있을 때에 모듈을 로드하므로 Static 방식보다는 느리지만, 시스템의 자원을 적게 소모한다. 최근에는 하드웨어의 발전으로 수행 속도가 크게 차이 나지 않는다. 그래서 대부분 여러가지 장점이 있는 DSO 방식으로 설치한다.

[참고] 더 자세한 사항은 아래 링크 참조
http://httpd.apache.org/docs/2.2/
##################################################


 
(01) 자동 실행 설정
apache 웹서버의 실행 스크립트인 apachectl을 /etc/init.d에 httpd라는 이름으로 복사한다.
apachectl은 apache2가 설치된 곳 하위의 bin 이라는 디렉토리에 있다.

 
 



 


 


 

--> 위와 같이 추가 후 다시 시도
 


[참고] 위 처럼 해서 안되면, 아래와 같이 한다.
# chkconfig --level 3 httpd on
# chkconfig --level 5 httpd on

((((((((((((컴파일시 rewrite 하면 configure 후에도 적용 가능.))))))))))))))RSO 기능

 



# cp httpd.conf httpd.conf.bak
# vi httpd.conf
 


User daemon     /* User nobody 변경!     
Group daemon     /* Group nobody 변경!   
 


(1) User와 Group 지시어에 설정되어있는 기본값인 daemon을 nobody로 변경한다.
root 권한으로 실행된 아파치의 하위 프로세스를 이곳에서 지정한 사용자로 실행한다는 의미한다.

(2) ServerName 항목의 주석을 해제하고, 
도메인이 있다면 도메인을 적어주고 없다면 서버의 IP를 적어준다.
만약 이 항목을 설정하지 않으면 127.0.0.1으로만 접속이 된다.
 


지금 테스트 하고 있는 시스템에서 DNS 서비스도 올려놓았기 때문에 테스트 도메인이 있다면 추가하여 테스트.

# /etc/init.d/httpd start


# vi /usr/local/apache/htdocs/index.html

* 참고
 Php(Personal Hypertext Preprocessor)

 PHP는 웹프로그래밍에서, 자바스크립트 또는 마이크로소프트의 VBScript와 비슷한 스크립트 언어이자 인터프리터로서, 주로 리눅스 웹서버에서 널리 사용할 수 있다. PHP (이 약어는 그 프로그램의 초기 버전이 "Personal Home Page Tools"라고 불렸던 사실로부터 유래되었다)는 마이크로소프트 NT 또는 2000 서버에서만 사용할 수 있는 ASP 기술에 대한 대안으로서 플랫폼의 종류에 관계없이 사용될 수 있다. PHP 스크립트도 ASP처럼 웹페이지 내에 HTML과 함께 포함시킬 수 있다. 웹서버는 그 페이지가 사용자에게 보내지기 전에, PHP 스크립트 내에 기술되어 있는 연산을 해석하고 수행하기 위해 PHP를 호출한다. PHP 스크립트를 포함하고 있는 HTML페이지는 기본적으로 파일이름 확장자가 ".php" ".php3," 또는 ".phtml"로 주어진다. ASP와 마찬가지로, PHP 역시 내용이 스크립트 해석결과에 따라 달라지기 때문에 "동적인 HTML 페이지"라고 생각할 수 있다. 
PHP는 오픈소스 라이선스 하에서 무료로 제공되고 있으며, 최신 버전은 PHP5이다. 
PHP(Personal Hypertext Preprocessor)는 프로그래밍 언어의 일종이다. 원래는 동적 웹 페이지를 만들기 위해 설계되었으며 이를 구현하기 위해 PHP로 작성된 코드를 HTML 소스 문서 안에 넣으면 PHP 처리 기능이 있는 웹 서버에서 해당 코드를 인식하여 작성자가 원하는 웹 페이지를 생성한다. 
또한 PHP는 명령 줄 인터페이스 방식의 자체 인터프리터를 제공하여 이를 통해 범용 프로그래밍 언어로도 사용할 수 있으며 그래픽 애플리케이션을 제작할 수도 있다. 
많은 서버 측 오픈 소스 소프트웨어는 PHP로 구현되었다. PHP를 바탕으로 하는 프로그램 중 대표적인 예로 phpBB와 위키백과를 구동시키는 미디어위키를 들 수 있다. 대한민국의 PHP로 만든 게시판 중 유명한 것에는 제로보드, 미니보드 등이 있다.
PHP는 마이크로소프트의 ASP.NET, 비주얼 베이직, 매크로미디어의 콜드퓨전, 썬 마이크로시스템즈의 자바나 오픈 소스 커뮤니티의 파이썬, Perl, 루비에 대한 대안으로 생각될 수 있다.
PHP는 텍스트, 특히 HTML의 처리에 강점을 가지고 있다. URL의 파싱이나 폼 처리, 정규 표현식 등이 그 한 예이다. 또한 다양한 데이터베이스를 지원하므로 데이터베이스와 사용자간의 다리 역할도 잘 수행한다.
PHP는 PHP 사용 허가서의 규정을 따라 릴리즈된 자유 소프트웨어이다. 그러나 PHP 사용 허가서는 PHP라는 단어의 사용에 제한을 두는 규정을 가지고 있기 때문에 GNU 일반 공중 사용 허가서와 호환되지 않는다.


(02) 필수 라이브러리 설명
▶ libpng : http://www.libpng.org
PNG(Portable Network Graphics) 이미지 형식 파일을 생성하고 편집하는데 필요한 기능을 담은 라이브러리가 포함되어 있다.

▶ freetype : http://www.freetype.org
폰트 엔진으로서 그래픽 라이브러리나 폰트 컨버젼 툴 등에서 사용된다.

▶ jpeg : http://www.ijg.org
JPEG 이미지 파일을 다루는 함수가 정의된 라이브러리와 libjpeg 함수를 쓸 수 있게 해주는 간단한 클라이언트 프로그램들이 들어있다.

▶ gd : http://www.libgd.org
동적 이미지 생성 ANSI C라이브러리로서 PNG,JPEG,GIF 등의 포멧으로된 이미지를 생성할수 있는 툴이다.

< php 5.2.9 설치 >

# yum install -y  libicu-dev*
# yum install -y libtermcap-devel
# yum -y install gd gd2 gd-devel gd2-devel wget pcre openssl* perl libaio
# yum -y install –enablerepo=c6-media install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel  ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel libtool  libtool-libs openldap openldap-devel nss_ldap openldap-clients openldap-servers libtool-ltdl libtool-ltdl-devel bison

# ./configure --prefix=/usr/local/php \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-config-file-path=/usr/local/apache/conf \
--with-openssl \
--with-imap --with-imap-ssl --with-kerberos \
--disable-debug --enable-safe-mode \
--enable-track-vars --enable-sockets \
--with-mod_charset --with-charset=utf8 --with-xml \
--with-language=korean --enable-sysvshm=yes --enable-calender \
--enable-sysvsem=yes --enable-sysvshm=yes --enable-ftp \
--enable-magic-quotes --enable-gd-native-ttf --enable-url-include \
--enable-trans-id --enable-inline-optimization --enable-bcmath \
--with-jpeg --with-png --with-zlib --with-jpeg-dir=/usr \
--with-png-dir=/usr/lib --with-freetype-dir=/usr \
--with-libxml-dir=/usr --enable-exif --with-gd \
--with-ttf --with-gettext --enable-sigchild --enable-mbstring \
--with-libxml-dir=/usr/local/libxml12

 




# vi /usr/local/apache/conf/httpd.conf
 


[참고] 보안 웹 서버를 적용 옵션
--with-openssl --with-imap --with-imap-ssl --with-kerberos

PHP에는 상당히 많은 옵션들이 있다. 이 옵션들은 대부분 PHP를 운영하면서 필요한 것들이다. 나중에 각각의 모듈을 추가할 수 있지만, 상당히 번거롭기 때문에 설치시에 한번에 설치한다.

--prefix=/usr/local/php                                                  /* php가 설치될 곳을 지정 */
--with-apxs2=/usr/local/apache/bin/apxs              /* apxs를 이용해 아파치에 모듈을 적재 */
--with-mysql=/usr/local/mysql                                              /* MySQL과 연동 */
--with-config-file-path=/usr/local/apache/conf
                                                 /* php의 환경설정 파일인 php.ini가 생성될 위치를 지정 */

(07) make && make install 실행
설정한 환경을 바탕으로 컴파일과 설치를 진행한다. 
위의 옵션대로 설정하였다면 /usr/local/php 에 설치가 될 것이다.
또한 환경설정 파일은 /usr/local/apache2/conf 에 설정해야 한다.

# make && make install

 



설치 완료


(08) 환경 설정

* PHP의 환경설정 파일을 생성해 준다.
PHP는 샘플파일을 제공하므로 이것을 복사해 사용하면 된다. 
샘플파일은 소스 압축을 해제한 디렉토리에 php.ini-dist 라는 파일로 제공된다.
이것을 앞서 ./configure 실행시 환경설정파일의 경로(--with-config-file-path=)로
지정해준 /usr/local/apache/conf에 php.ini라는 이름으로 복사한다.


 



[참고] php-5.3.0 버전에는 "php.ini-production" 파일로 변경이 되었다!

 이제 아파치와의 연동을 위해 httpd.conf 파일을 수정한다. 
DirectoryIndex에 index.php를 추가하고, 
mime_module 항목에 .php로된 파일을 php 문서로 인식할 수 있게 AddType 지시어를 이용해 설정한다.

 


 


 




# /etc/init.d/httpd restart
했는데 에러가 떴다.

httpd: Syntax error on line 146 of /usr/local/apache2/conf/httpd.conf: Cannot load modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: undefined symbol: unixd_config
아파치가 버전업하면서 해당 심볼의 명칭을 바꾼 것으로 
unixd_config 를 ap_unixd_config로 수정하면 된다.

파일 위치는 php-5.2.xxx/sapi/apache2hander/php_functions.c
 


-       AP_DECLARE_DATA extern unixd_config_rec unixd_config;
+       AP_DECLARE_DATA extern unixd_config_rec ap_unixd_config;
 #endif
--->
 



        for (n = 0; ap_loaded_modules[n]; ++n) {
@@ -414,7 +414,7 @@
        php_info_print_table_row(2, "Hostname:Port", tmp);

 #if !defined(WIN32) && !defined(WINNT) && !defined(NETWARE)
-       snprintf(tmp, sizeof(tmp), "%s(%d)/%d", unixd_config.user_name, unixd_config.user_id, unixd_config.group_id);
+       snprintf(tmp, sizeof(tmp), "%s(%d)/%d", ap_unixd_config.user_name, ap_unixd_config.user_id, ap_unixd_config.group_id);

------>
 


이렇게 수정을 한 후 다시 컴파일 후 make && make install

 


 


 





# wget http://downloads.php.net/dsp/php-5.5.0alpha1.tar.bz2
 
다운로드 받은 위치에서 
# tar xvfj php-5.5.0alpha1.tar.bz2
압축이 풀리고 나면 디렉토리가 생긴다. 이동해보자
# cd php-5.5.0alpha1
# ls
 


여러가지 파일들을 볼 수 있는데 INSTALL 을 vi 편집기로 열어서 훑어보면 설치과정에 대한 내용을 확인 할 수 있다.
 
그치만 그렇게 따라해보니 
make: *** [sapi/cli/php] Error 1 
make && make install에서 이런 에러가 나타났다.
그래서 열심히 구글링한 결과 다음과 같이 하면 무사히 설치됨을 확인 할 수 있다.
 
 
# ./configure --with-apxs2=/usr/local/apache/bin/apxs --with-mysql --with-iconv=/usr/local/lib
# make && make install
[root@localhost php-5.5.0alpha1]# cp php.ini-development /usr/local/lib/php.ini

--> php 설정파일을 /usr/local/lib/php.ini로 복사
# vi /usr/local/apache/conf/httpd.conf
httpd.conf 파일 수정.

/ServerName
으로 ServerName을 찾아서 127.0.0.1이라고 임의로 입력한다. 주석도 지운다.(#)

그리고 다음과 같이 새로 입력해준다.
LoadModule php5_module modules/libphp5.so

AddType application/x-httpd-php .php .phtml .php3 .html .htm
AddType application/x-httpd-php-source .phps

:wq

저장하고 빠져나온다.

[root@localhost bin]# ./apachectl start
//아파치 실행

프로세스 실행 확인.
 



php 설치시 오류 메세지 중 하나 해결 방법
에러내용 

ext/iconv/.libs/iconv.o:/usr/local/php/ext/iconv/iconv.c:1196: more undefined references to `libiconv' follow 
collect2: ld returned 1 exit status 
make: *** [sapi/cli/php] Error 1
•   
소스보기

--with-iconv=/usr/local/lib \ 

 

반응형

'OS' 카테고리의 다른 글

배치 파일 명령어 모음(작성중)  (0) 2020.03.25
[Linux] MAC time 확인  (0) 2020.03.12
바이너리 파일에서 문자열 추출하기 (strings 명령어)  (0) 2020.02.26
SecureCRT 환경설정  (0) 2020.02.22
Windows 10 VMware 실행 오류  (0) 2020.02.10