728x90

오래된 CentOS 5.8 또는 CentOS 5.9 에 APM(Apache + PHP + MySQL) 설치 과정 스크립트이다.

이 스트립트가 잘 동작되는지 여부는 모른다.

몇년전에는 잘 동작되어 사용했던 스크립트이다.

 

# CentOS 5.8 인스톨 후 APM 설치과정
 
# 버전 확인
cat /etc/redhat-release
 
 
작업 서버
==== IP Setting ====
# 설정정보 확인
ifconfig
 
# DNS를 위한 네임서버를 지정 
cat /etc/resolv.conf   
cat /etc/hosts
 
# 네트워크 살았는지 죽었는지 테스트
ping 168.126.63.1
 
# 현재 MAC address 알아내기
cat /sys/class/net/*/address
 
== 설정 작업
cd /etc/sysconfig/network-scripts
# ll 하고 ifcfg-*** 파일을 확인한다.
# 네트워크 환경 설정에 맞게 변경한다.
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
HWADDR=08:00:27:AE:E9:5A
ONBOOT=yes
NETMASK=255.255.255.0
IPADDR=192.168.1.20
GATEWAY=192.168.1.100
TYPE=Ethernet
DNS1=168.126.63.1
DNS2=168.126.63.2
 
service network restart
 
=================================
# httpd 데몬 확인
ps -ef | grep httpd
# MySQL 데몬 확인
ps -ef | grep mysql
 
# 아파치(Apache) 시작
/etc/init.d/httpd start
/etc/init.d/httpd stop
# MySQL 시작
/etc/init.d/mysqld start
 
=================================
# RPM이 설치 되어 있는지 확인
rpm -qa httpd php mysql
rpm -qa | grep http
rpm -qa | grep mysql
rpm -qa | grep php
 
# 기존 패키지 삭제
yum remove -y httpd mysql php
 
# 설치된 것이 제대로 제거되었는지 확인
rpm -qa httpd php mysql
rpm -qa | grep http
rpm -qa | grep mysql
rpm -qa | grep php
 
# 제거되지 않고 남아 있는 것이 있다면 rpm -e --nodeps (의존성에 개의치 않고 삭제) 를 붙여준다.
rpm ---nodeps jakarta-commons-httpclient-3.0-7jpp.4.el5_10
rpm ---nodeps php-cli-5.1.6-45.el5_11
rpm ---nodeps php-common-5.1.6-45.el5_11
 
전부 지워졌는지 확인하고 나서 APM 소스 설치에 들어간다.
 
# 모든 웹서버 데몬 죽이기
killall httpd
 
# 기존 패키지 stop
/etc/init.d/mysqld stop
 
# MySQL 데몬 확인
ps -ef | grep mysql
# 구동중인 프로세스 죽이기
kill -9 프로세스번호
 
=========================================================
# cmake 설치전에 필요 라이브러리 설치(경로위치 상관없음)
yum -y install zlib curl
yum -y install gcc gcc-cpp gcc-c++
yum -y install openssl openssl-devel
yum -y install libtermcap-devel ncurses-devel libc-client-devel bzip2-devel
yum -y install bison libpng-devel curl-devel libpng freetype 
yum -y install xml*
yum -y install gd*
yum -y install libxml*
 
# yum -y install php-devel phpize php-pear 
# 이걸 yum 설치하면 apache, php 가 다시 기본 설치된다.
 
=============================================
# 설치할 디렉토리 만들기
cd /usr/local/
mkdir APM
 
# cmake 설치
# 1. cmake 압축 풀고 설치 (기존 설치된 것 있으면 지우고 자동 재설치)
cd /home/htdocs/
rm -rf cmake-2.8.9/
tar -xzf cmake-2.8.9.tar.gz
cd cmake-2.8.9
./bootstrap
make && make install
 
======== MySQL 소스 설치 ==================
# 2. mysql 설치
cd /home/htdocs/
rm -rf mysql-5.5.27/
tar -xvzf mysql-5.5.27.tar.gz
cd mysql-5.5.27
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all -DMYSQL_DATADIR=/usr/local/mysql/data -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DSYSCONFIGDIR=/etc -DMYSQL_TCP_PORT=3306
make && make install
 
=== PATH 추가 ===
cd
vi .bash_profile
# PATH 경로에 추가
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
저장후
source .bash_profile
 
cd /usr/local/mysql/
groupadd mysql
useradd -g mysql mysql
chown -R mysql:mysql /usr/local/mysql
# mysql 설치 디렉토리에 대한 mysql 권한 부여
 
# mysql 설정 파일 복사
cp support-files/my-medium.cnf /etc/my.cnf
 
# 기본 DB 생성
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
 
 
# 시스템이 재부팅되어도 mysql 이 자동 실행되도록 설정
# 기존 설치된 파일이 있으면 overwrite 하면 됨
cp support-files/mysql.server /etc/init.d/mysqld
 
vi /etc/init.d/mysqld
datadir=/usr/local/mysql/data
로 변경하고 저장
 
# 등록이 잘 되었는지 확인
chkconfig --add mysqld
chkconfig --list | grep mysqld
 
# MySQL 서버와 프로그램을 연결해 줄 소켓을 링크 파일로 생성한다.
ln -/var/lib/mysql/mysql.sock /usr/local/mysql/mysql.socket
 
==== MySQL 구동
/etc/init.d/mysqld start
 
MYSQL root 암호 설정
mysql -uroot -p
password: 그냥 엔터키 (패스워드가 설정되지 않았을 때, 설정되어 있으면 접속 불가)
use mysql;
--update user set password=password('암호') where user='root';
update user set password=password('link2me03') where user='root';
flush privileges;
select host, user, password from user;
quit
 
=========== Apache 소스 설치 ===============
3. 아파치 설치
cd /home/htdocs/
rm -rf apr-1.4.6/
tar -xvzf apr-1.4.6.tar.gz
cd apr-1.4.6
./configure
make && make install
 
cd /home/htdocs/
rm -rf apr-util-1.4.1/
tar -xvzf apr-util-1.4.1.tar.gz
cd apr-util-1.4.1
./configure --with-apr=/usr/local/apr
make && make install
 
cd /home/htdocs/
rm -rf pcre-8.30/
tar -xvzf pcre-8.30.tar.gz
cd pcre-8.30
./configure
make && make install
 
# pcre-8.30 에러가 발생하는 부분(CentOS 6.6에서는 에러 메시지 없음)
 
cd /home/htdocs/
rm -rf httpd-2.4.3/
tar -xvzf httpd-2.4.3.tar.gz
cd httpd-2.4.3
./configure --prefix=/usr/local/apache --enable-mods-shared=all --enable-so --enable-rewrite-all
make && make install
 
# 컴파일 실수가 발생하면, 해당 디렉토리에서 바로 make distclean 으로 삭제한다.
# 그리고 나서 다시 실행한다.
 
cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
 
# 리부팅시 아파치 프로세스를 자동으로 띄운다
cd /home/htdocs/
ln -/init.d/httpd /etc/rc0.d/K90httpd
ln -/init.d/httpd /etc/rc3.d/S89httpd
ln -/init.d/httpd /etc/rc5.d/S89httpd
 
vi /etc/init.d/httpd
둘째줄에서 i 를 눌러 Insert 모드로 변경한 다음에 아래 5줄을 복사하여 붙여넣기하여 삽입하고 저장
# chkconfig: 2345 90 90
# description: inir file for Apache server daemon
# processname: /usr/local/apache/bin/apachectl
# config: /usr/local/lib/httpd.conf
# pidfile: /usr/local/apache/logs/httpd.pid
 
cd /home/htdocs/httpd-2.4.3
chkconfig --add httpd
chkconfig --list httpd
chkconfig --level 2345 httpd on
 
vi /usr/local/lib/httpd.conf
User daemon 과 Group daemon 라인을 찾아서 daemon 대신에 nobody 로 변경
#ServerName www.example.com:80 아래줄에 추가
ServerName localhost
#처럼 해당 서버주소이름으로 변경. 도메인이 있으면 도메인으로 변경처리
 
# Options Indexes FollowSymLinks 에서 Indexes 제거해야 디렉토리 경로 보이는 것 방지됨
# 그리고 아래처럼 변경해줌
DocumentRoot "/usr/local/apache/htdocs"
<Directory "/usr/local/apache/htdocs">
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Allow from all
    Require all granted
</Directory>
 
아파치(Apache) 시작
/etc/init.d/httpd start
 
http://192.168.1.20/ --> Web browser 에서 It works! 나오면 성공적인 설치되었다는 표시
 
----It works 화면이 안될때 오류사항 해결 ------
/etc/sysconfig/iptables 에서 80포트 방화벽 해제
/etc/rc.d/init.d
 
 
======= PHP 소스 설치 =======
4. PHP 설치
cd /home/htdocs/
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
rm -rf libiconv-1.15/
tar -xvzf libiconv-1.15.tar.gz
cd libiconv-1.15
./configure --prefix=/usr/local/iconv
make && make install
 
cd /home/htdocs/
wget https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
tar -xvzf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local/
make && make install
 
 
# PHP 소스 설치시 에러가 발생하면 make clean 을 해줘야 한다.
 
cd /home/htdocs/
wget https://museum.php.net/php5/php-5.4.19.tar.gz
cd /home/htdocs/
rm -rf php-5.4.19/
tar -xvzf php-5.4.19.tar.gz
cd php-5.4.19
./configure --prefix=/usr/local/php \
 --with-config-file-path=/usr/local/apache/conf \
 --with-apxs2=/usr/local/apache/bin/apxs \
 --with-mysql=/usr/local/mysql \
 --with-iconv=/usr/local/iconv \
 --with-curl=/usr/lib \
 --enable-zip \
 --with-openssl \
 --with-mcrypt \
 --enable-mbstring \
 --with-gd \
 --with-mysqli=/usr/local/mysql/bin/mysql_config \
 --with-zlib \
 --with-freetype-dir=/usr/local/lib \
 --with-jpeg-dir=/usr/local/php  --with-mcrypt=/usr/local/
make
make install
 
 
## 위 명령 실행시 아래와 같은 오류가 난다면 해결책 한 후 위에 명령 다시 실행.
# configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/
# 해결책 : # yum -y install curl* 또는 yum -y install curl & yum -y install curl-devel
 
# php.ini 샘플파일을 환경설정 디렉토리에 복사
cp php.ini-development /usr/local/lib/php.ini
 
# 아파치와 연동을위해 추가로 httpd.conf 3군데 수정
vi /usr/local/lib/httpd.conf
<IfModule dir_module>
DirectoryIndex index.html index.php   =>index.php추가
</IfModule>
 
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
 
    <IfModule logio_module>
      # You need to enable mod_logio.c to use %I and %O
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
 
    # 그림 이미지, css, js는 기록하지 않게 처리
    SetEnvIfNoCase Request_URI "\.(jpg|png|gif|css|ico|js|swf)$" notloglist
 
    #CustomLog "logs/access_log" common
    #CustomLog "logs/access_log" combined
    #CustomLog "|/아파치 설치 경로/bin/rotatelogs /로그를 저장할 경로/파일명 %Y%m%d%H 86400 +540" combined
    # 날짜별로 로그기록 남기기
    CustomLog "|/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log_%Y%m%d 86400 +540" combined env=!notloglist
</IfModule>
 
# 아래 두줄을 <IfModule mime_module>에 추가
    AddType application/x-httpd-php .php .html
    AddType application/x-httpd-php-source .phps
<IfModule mime_module>
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    #PHP Enable
    AddType application/x-httpd-php .php .html
    AddType application/x-httpd-php-source .phps
</IfModule>
 
# lib, inc 등을 사용할 경우에는 반드시 AddType application/x-httpd-php .php .html .inc .lib .xml 처럼 설정해줘야 한다.
# 이 부분을 빠뜨리면 웹페이지 상에서 텍스트로 인식하여 파일의 내용이 그대로 노출된다.
# 파일 확장자가 htm 으로 끝나면 이 부분도 추가를 해줘야 한다.
# 코드가 뭔지 모르게 하고 싶다면 .do 를 사용하는 것도 방법 중의 하나이다.
 
 
###### php.ini 수정사항  ###########
vi /usr/local/lib/php.ini
시간설정 (앞에 ;지울것) 을 지우고 아래 내용 추가
date.timezone = "Asia/Seoul"
;<? 와 <?php 둘다 인식하게 함
short_open_tag = On
; PHP 가 받아들이는 POST data 최대 크기
;default 8M 로 되어 있음, upload_max_filesize 보다 크게 설정해야 함
post_max_size = 60M 
memory_limit = 128M
upload_max_filesize = 50M
 
; error_reporting 세팅
;개발환경
;error_reporting  =  E_ALL
; 실제 환경, 경고메시지 출력 안됨
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
; 해킹의 먹이감이 되므로 평소에는 Off 로 해둔다. 에러가 있을 경우 디버깅 가능하도록 에러 메세지를 출력해준다.
display_errors = Off
; 평소에는 해제(Off)한다. 개발환경에서는 디버깅 가능하도록 On하면 에러 메세지를 출력해준다. 
display_startup_errors = Off
log_errors = On
; 에러 로그 파일 설정이 없으면 Apache 로그 파일에 기록된다.
; 퍼미션 설정해서 /home/user/log/php.log 과 같이 설정
;error_log = filename
 
; register_globals = On 으로 하면, PHP 스크립트의 변수 값을 임의로 변경할 수 있는 취약성이 있다.
; off 로 설정한 후, $_GET, $POST 를 사용해서 사용자가 전달한 값을 얻어야 한다.
register_globals = Off
 
;UTF-8 로 문자 인코딩 설정하기
;해당 부분을 찾아서 아래와 같이 수정
default_charset = "UTF-8"
[mbstring]
mbstring.language = Korean
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off
 
#########################################################
다른 방식으로 upload progress 추가
cd /usr/local/bin
./pecl install uploadprogress
 
vi /usr/local/lib/php.ini 파일에서 추가할 사항
extension=uploadprogress.so
 
# 이해 잘 안되는 부분
# 파일 생성 여부 확인
find / -name libphp5.so 
# modules/libphp5.so 설정 여부 확인해본다.
httpd.conf 파일내에 LoadModule php5_module        
 
chcon -t texrel_shlib_t 
# /usr/local/apache/modules/libphp5.so --> 모듈 올라오는 에러 잡는것
# 위 명령 에러날경우 SELINUX를 비활성화에서 활성화로 변경
cat /etc/selinux/config
# vi /etc/selinux/config
SELINUX=enforcing를 SELINUX=disabled로 변경 
 
5. 퍼미션 설정 및 점검
# 일반계정 유출 등에 의해 파일이 변조될 수 있으므로 확인하여 조치한다.
# Apache and PHP 환경설정 파일 퍼미션 변경
# httpd.conf 파일의 경로 찾기 
find / -name httpd.conf 
chmod 640 /usr/local/lib/httpd.conf
chown root:root /usr/local/lib/httpd.conf
chmod 640 /usr/local/lib/php.ini
chown root:root /usr/local/lib/php.ini
# Document Root 디렉토리 설정 확인 및 변경
# Document Root 디렉토리는 755, 파일은 644로 되어 있는지 확인하고 변경
cd /usr/local/apache/htdocs
# 가능하면 home/httpd/ 하위 디렉토리에 Document Root 가 설정되도록 변경(httpd.conf 파일내에서)
chown 작성자(nobody) /usr/local/apache/htdocs
chgrp 작성자그룹 /usr/local/apache/htdocs
chmod 755 /usr/local/apache/htdocs
 
 
DocumentRoot "/home/httpd"
<Directory "/home/httpd">
# 허용하지 않은 디렉토리를 액세스할 수 있으므로 가능하면 FollowSymLinks 를 삭제하는 것이 좋다.
#    Options IncludesNoExec FollowSymLinks
    Options IncludesNoExec
    AllowOverride None
    Order deny,allow
    Allow from all
    Require all granted
</Directory>
 
 
## httpd restart 
/etc/init.d/httpd stop
/etc/init.d/httpd start
/etc/init.d/mysqld start
 
## 정상적으로 설치되었는지 여부 확인
http://192.168.1.20/info.php
 
# phpinfo 가 정상적으로 보이면 APM 설치는 정상적으로 잘 되었다고 보면 된다.
 
========== DB 설정 =========================
1. MySQL 접속 및 사용자 권한 부여
mysql -u root -p
 
-- DB 생성
create database phpdb default character set utf8;
use mysql;
create user codefox@localhost identified by 'Wofullnder!#';
grant all privileges on phpdb.* to codefox@localhost;  -- 사용자 권한 부여
flush privileges;    -- // 변경된 내용을 메모리에 반영(권한 적용)
 
revoke all on phpdb.* from codefox@localhost;  -- 권한 회수
show grants for codefox@localhost;  -- 권한 확인
 
grant all privileges on phpdb.* to codefox@localhost;  -- 사용자 권한 부여
flush privileges;    -- // 변경된 내용을 메모리에 반영(권한 적용)
 
grant all privileges on phpdb.* to codefox@localhost identified by 'Wofullnder!#';
 
-- backup 받은 DB SQL 복구
show databases;
use phpdb;   -- DB를 선택하지 않으면 에러가 발생함
source codefox.sql 
 
 
# 게시물 내용 검색 (찾고자 하는 내용이 들어있는 파일 찾아내기)
cd /usr/local/apache/htdocs
find ./ -name "*.php" | xargs grep -"계정을 다시 확인"
find ./ -name "*.*" | xargs grep -"검색어를 입력"
 
# 서버 네트웍 IP 수정
   /etc/sysconfig/network-script/ifcfg-eth0 -> 서버 IP
   /etc/resolve.conf  -> 도메인 IP
 
# 소스 IP수정
   /usr/local/lib/httpd.conf
   /usr/local/apache/config.php
 
 
##############################################################################
# 환경 설정 
vi /usr/local/lib/httpd.conf
vi /usr/local/lib/php.ini
 
## httpd restart 
/etc/init.d/httpd stop
/etc/init.d/httpd start
/etc/init.d/mysqld start
 
netstat -an | grep "LISTEN "
 
 
<VirtualHost *:8080>
       DocumentRoot "/var/www/html"
       <Directory "/var/www/html"> 
          AllowOverride All 
       </Directory>
       ErrorLog /var/log/httpd/seogu-error-log
       CustomLog /var/log/httpd/seogu-acces-log common
</VirtualHost>
 
###########################################################################################
# 모듈 추가 설치
vi /etc/yum.repos.d/CentOS-Base.repo
https://kkckc.tistory.com/185 에서 파일을 받아서 내용을 전부 교체한다.
yum -y install mc
 
# 설치된 PHP 모듈 확인하기
# 먼저 whereis php 로 경로가 아래와 같은가 틀리는가 확인하고 수정해야 한다.
/usr/local/bin/php -m
 
 
# 오래된 CentOS 5.9 에서는 동작 안될 수도 있음
cd /home/htdocs/
wget https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
 
cd /home/htdocs/
tar -xvzf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local/
make && make install
 
cd /home/htdocs/php-5.4.6/ext/mcrypt
# phpize 파일을 실행한다.
/usr/local/bin/phpize
 
./configure --with-php-config=/usr/local/bin/php-config --with-mcrypt=/usr/local/
make
 
# cd modules
# ll 하면 mcrypt.so 파일이 생성된 것을 확인할 수 있다.
cd /usr/local/lib/php/extensions/ 
# ll 하여 extensions 디렉토리가 있는지 조사한다. 없으면 mkdir extensions 로 디렉토리를 생성한다.
mkdir -/usr/local/lib/php/extensions/
 
cd /home/htdocs/php-5.4.6/ext/mcrypt
cp -arp modules/mcrypt.so /usr/local/lib/php/extensions/
cd /usr/local/lib/php/extensions/
 
# php.ini 수정 사항
# phpinfo 파일에서 설치된 경로를 확인해야 한다.
# /usr/local/lib/php.ini 
# 검색 기능으로 /extension= 로 검색하여 추가한다.
cd /usr/local/lib/
vi /usr/local/lib/php.ini
extension=/usr/local/lib/php/extensions/mcrypt.so
 
# 아파치 재시작
# ps -ef | grep httpd
/usr/local/apache/bin/apachectl restart
 
# mbstring 모듈 추가
cd /home/htdocs/php-5.4.6/ext/mbstring
/usr/local/bin/phpize
./configure --with-php-config=/usr/local/bin/php-config --enable-mbstring
make
 
# ll ./modules/mbstring.so 파일이 생성되었는지 확인한다.
cd /home/htdocs/php-5.4.6/ext/mbstring
cp -arp modules/mbstring.so /usr/local/lib/php/extensions/
cd /usr/local/lib/php/extensions/
 
# php.ini 수정 사항
# 검색 기능으로 /extension= 로 검색하여 추가한다.
vi /usr/local/lib/php.ini
extension=/usr/local/lib/php/extensions/mbstring.so
 
# 아파치 재시작
/usr/local/apache/bin/apachectl restart
 
# 설치된 PHP 모듈 확인하기
/usr/local/bin/php -m
 
 

 

 

'리눅스' 카테고리의 다른 글

CentOS 7 날짜 반복 증가 스크립트  (0) 2024.03.31
CentOS 7 PHP 7.4 MariaDB 10.5 설치  (0) 2022.05.14
VMWare Network 설정  (0) 2022.04.23
CentOS 7 Jenkins 설치  (0) 2022.03.25
Apache log Full  (0) 2022.02.22
블로그 이미지

Link2Me

,