* 게시글은 SUA(SecurityPlus Union Academy)에서 리눅스 특강으로 배웠던 내용들 입니다.


1. 명령어의 이해

2. 디렉토리 구조

3. 절대경로, 상대경로

4. 파일 관련 명령어

5. 다양한 복사 방법 & 하드링크, 심볼릭링크

6. 파일 권한 데스트


7 - 1 리눅스 퍼미션

 중간 정리

7 - 2 리눅스 퍼미션

8. 권한 연습


9. 환경변수 테스트


10 - 1. suidtest

10 - 2. suidtest


11. vi 편집

12. HDD 추가하기


13. 사용자 관리

13 - 1. 사용자 관리체크

13 - 2. 사용자 생성


14. 패키지 관리

14 - 1. 패키지 관리 - Apache Tomcat 환경설정

14 - 2. 패키지 관리 - Apache Tomcat (WAS) 설치


15. APM 설치

16. APM2 설치

'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 16. APM2 설치  (0) 2016.07.30
[CentOS] 15. APM 설치  (0) 2016.07.23
[CentOS] 14-2 패키지 관리 - tomcatWAS설치  (3) 2016.07.10
[CentOS] 14-1 패키지 관리 - tomcat 환경설정  (0) 2016.07.10
[CentOS] 14. 패키지 관리  (0) 2016.07.10

##########################################

## 주제 : CentOS 5.8에서 APM2 설치 하기              ##

##                                                                  ##

## Written by K.S.W (2016073001)                         ##

##########################################


APM2란 ?

새로운 APM2가 있는 것이 아니고 지난번에 버전이 낮은 APM1 

다음 버전이라 생각하면 된다.

 * apache version 2 로 설치 


########## APM 전체 설치 순서 ##########

1. 설치된 APM 삭제하기 

2. cmake 설치하기

3. mysql 설치하기

4. apache 설치하기

5. GD library 설치하기 

6. php 설치하기

7. phpmyadmin 설치하기

8. mysqli 동적 모듈 설치하기 

9. 제로보드 XE 설치하기

########## APM 전체 설치 순서 ##########



############################

## 1. 설치된 APM 삭제하기         ##

############################


* 삭제 전 

 - /etc/init.d/mysqld stop

 - /etc/init.d/httpd stop

 - yum remove mysql-server

 - yum remove httpd

확인

 - rpm -qa | grep mysql

 - rpm -qa | grep httpd

 - rpm -qa | grep php

삭제 실행

 - yum -y remove mysql-server mysql

 - yum -y remove httpd httpd-devel

 - yum -y remove php-cli php-common


-- APM 삭제 순서 --

1-1. mysql 삭제

1-2. apache 삭제

1-3. php 삭제

-- APM 삭제 순서 --


1-1. mysql 삭제

- rpm 과 소스로 설치된 mysql 을 검색한다.

# netstat -nltp

# rpm -qa | grep mysql

# which mysqld

# /etc/init.d/mysqld stop



- /usr/bin 에 링크되어 있는 실행파일들을 삭제한다.

# rm -f /usr/bin/mysql/comp_err

# rm -f /usr/bin/mysql/isamchk

# rm -f /usr/bin/mysql/isamlog

 :

 :


1-2. apache 삭제

- rpm 과 소스로 설치된 apache 를 검색한다.

# rpm -qa | grep http

# which httpd

# /etc/init.d/httpd stop

# rm -f /etc/init.d/httpd

# rm -f /etc/httpd.conf

# rm -rf /usr/local/apache


- /usr/bin 에 링크되어 있는 실행파일들을 삭제한다.

# rm -f /usr/bin/ab

# rm -f /usr/bin/apachectl

# rm -f /usr/bin/apxs

# rm -f /usr/bin/checkgid

# rm -f /usr/bin/dbmmanage

# rm -f /usr/bin/htdigest

# rm -f /usr/bin/htpasswd

# rm -f /usr/bin/httpd

# rm -f /usr/bin/logresolve

# rm -f /usr/bin/rotatelogs


1-3. php 삭제

- rpm 과 소스로 설치된 php 를 검색한다.

# rpm -qa | grep php

# rm -rf /usr/local/php

# rm -f /etc/php.conf


- /usr/bin 에 링크되어 있는 실행파일들을 삭제한다.

# rm -f /usr/bin/pear

# rm -f /usr/bin/peardev

# rm -f /usr/bin/pecl

# rm -f /usr/bin/php

# rm -f /usr/bin/php-config

# rm -f /usr/bin/phpize



#######################

## 2. cmake 설치하기        ##

#######################


- mysql 5.5.x 이상부터  mysql 컴파일 방법이 configure 방식 -> cmake 방식으로 변경되어 cmake 패키지를 설치해야 한다.


공식 다운로드 사이트 : http://www.cmake.org/

설치 파일명 :  cmake-3.0.1.tar.gz 

MD5: e2e05d84cb44a42f1371d9995631dcf5


설치 버전 : 3.0.1


-- cmake 설치 순서 --

2-1. cmake 패키지 삭제

2-2. cmake 소스 다운로드

2-3. cmake 압축해제

2-4. cmake 환경설정

2-5. cmake 컴파일

2-6. cmake 설치

2-7. cmake 설치 확인

2-8. cmake 세팅

-- cmake 설치 순서 --


2-1. cmake 패키지 삭제

- 패키지가 설치가 되어있다면 삭제를 한다.

# rpm -q cmake    

# rpm -e cmake 


2-2. cmake 소스 다운로드 (X)

# wget http://www.cmake.org/files/v3.0/cmake-3.0.1.tar.gz

 -- 링크되어 있는 것들 땡겨옴 


2-3. cmake 압축해제

# tar xzf cmake-3.0.1.tar.gz 

 - x 풀어라 z zip으로 되어있는 것을 풀어라 f


2-4. cmake 환경설정

- bootstrap 을 실행해도 된다.

# cd cmake-3.0.1

# ./configure             


2-5. cmake 컴파일

# make          


2-6. cmake 설치

# make install            


  # ./configure && make && make install


2-7. cmake 설치 확인

- 설치된 파일들을 확인한다.

# ls /usr/local/bin       

ccmake  cmake  cpack  ctest  

# ls /usr/local/doc

cmake-3.0

# ls /usr/local/share

... cmake-3.0 ...



2-8. cmake 세팅

- cmake 를 실행하기 위한 설정 단계이다.

- PATH 변수에 /usr/local/bin 디렉토리가 없다면 PATH 변수에 추가하고 로그인시에 다시 실행할 수 있도록 ~/.bashrc 에 넣어둔다.


# cmake

-bash: cmake: command not found


# PATH=$PATH:/usr/local/bin

# echo 'PATH=/usr/local/bin:$PATH' >> ~/.bashrc


# cmake

cmake version 2.8.12.1

Usage


  cmake [options] <path-to-source>

  cmake [options] <path-to-existing-build>

  :

  :

 <중략>


- cmake 의 버전이 나오면 제대로 설치가 된 것이다.

# cmake --version

cmake version 3.0.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).





#######################

## 3. mysql 설치하기         ##

#######################


공식 다운로드 사이트 : http://www.mysql.com/

설치 파일명 : mysql-5.5.28.tar.gz 

MD5: 


설치 버전 : 5.5.28

설치 디렉토리 : /usr/local/mysql

데이타 디렉토리 : /usr/local/mysql/data

기본언어셋 : utf-8

포트 : 3306

설정파일 : /etc/mysql.conf -> /etc/my.cnf



-- mysql 설치 순서 --

3-1. mysql 필요 패키지 설치

3-2. mysql 소스 다운로드

3-3. mysql 압축해제

3-4. mysql 환경설정

3-5. mysql 컴파일

3-6. mysql 설치

3-7. mysql 설치 확인

3-8. mysql 세팅

-- mysql 설치 순서 --


3-1. mysql 필요 패키지 설치

- ncurses-devel 패키지가 없다면 설치한다.

# rpm -q ncurses-devel

# rpm -qa | grep ncurses

 

# yum -y remove ncurses-5.5-24.20060715.i386

# yum -y install ncurses-devel


3-2. mysql 소스 다운로드 (X)

http://mysql.com 에 접속한다.

Downloads(GA) -> 클릭

MySQL Community Edition (GPL) ->  Download from MySQL Developer Zone 클릭

MySQL Community Server (GPL) -> Download 클릭

MySQL Community Server 5.5.28 -> Select Platform 에서 Source Code 를 선택하고 클릭

맨 아래에서  Generic Linux (Architecture Independent), Compressed TAR Archive Download 클릭

No thanks, just start my download 클릭해서 소스를 다운로드 한다.


- md5sum 명령어를 이용해서 다운로드 받은 파일의 md5 해쉬값을 확인한다.

- 홈페이지에서 나온 해쉬값과 여기서의 출력값이 다르면 파일이 변조된 것이므로

  서버에 설치하지 않는다.

# md5sum mysql-5.5.28.tar.gz   


3-3. mysql 압축해제

# tar xzf mysql-5.5.28.tar.gz 

# cd mysql-5.5.28


3-4. mysql 환경설정

- 환경설정이 configure -> cmake 로 변경되어서 cmake 를 이용한다.

# cmake \

-DCMAKE_INSTALL=/usr/local/mysql \

-DWITH_EXTRA_CHARSETS=all \

-DMYSQL_DATADIR=/usr/local/mysql/data \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \

-DSYSCONFDIR=/etc \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DMYSQL_TCP_PORT=3306


 ** \ 끝에 공백 없도록 하기 


3-5. mysql 컴파일

# make 


3-6. mysql 설치

# make install


3-7. mysql 설치 확인

# ls /usr/local/mysql

# ls /usr/local/mysql/bin


3-8. mysql 세팅

- 소스파일에는 support-files 디렉토리에 설정파일 및 스크립트 파일을 제공하므로 이를 이용해서 시스템에 복사한다.


# cd support-files


 * /etc/init.d ( 쉘 스크립트 파일 )

- mysql 설정파일을 /etc/my.cnf 에 복사한다. 

- 설정내용은 수정해서 넣고 자신의 메모리에 맞는 설정파일을 넣어둔다. 

- 메모리 내용은 파일에 명시되어 있다.

# cp my-huge.cnf /etc/my.cnf


- 설정파일을 심볼릭 링크한다. (옵션)

# ln -s /etc/my.cnf /etc/mysql.conf


- 실행스크립트를 복사한다.

 - cp mysql.server /etc/init.d/mysqld

 - chmod 700 /etc/init.d/mysqld

# install -m 700 mysql.server /etc/init.d/mysqld


- 부팅시 mysql 데몬을 자동으로 실행할 수 있도록 등록하고 확인한다.

# chkconfig --add mysqld

# chkconfig --list mysqld

mysqld          0:off 1:off 2:on 3:on 4:on 5:on 6:off


- mysql 서버를 실행하는 사용자를 생성한다. 

- cmake 옵션의 경로를 맞추어 줘야 한다.

-DMYSQL_DATADIR=/usr/local/mysql/data \

- -r : 시스템 유저

- -M : 디렉토리 생성 x

- -u : UID

- -d : 홈 디렉토리

- -s : 쉘 (로그인 시 실행 할 수 있는 프로그램 )

# useradd -r -M -u 27 -d /usr/local/mysql/data -s /bin/false mysql

 * -d => 컴파일 전에 환경설정 전에 디렉토리 맞추기 


- MySQL DBMS의 실행파일들을 실행하기 위해 심볼릭링크를 생성

# ln -sf /usr/local/mysql/bin/* /usr/bin


- DataBase 초기화 작업을 한다.

- --datadir 의 경로는 cmake 옵션의 경로에 설정한 값으로 해야 한다.

- -DMYSQL_DATADIR=/usr/local/mysql/data

# /usr/local/mysql/scripts/mysql_install_db \

--user=mysql \

--basedir=/usr/local/mysql \

--datadir=/usr/local/mysql/data


- 생성된 데이터 디렉토리의 모든 파일들을 mysql 사용자의 권한으로 모두 변경한다.

- 경로는 cmake 옵션의 경로에 설정한 값으로 해야 한다.

-DMYSQL_DATADIR=/usr/local/mysql/data

# chown 700 /usr/local/mysql/data

# chown -R mysql.mysql /usr/local/mysql/data


- mysql 데몬을 실행한다.

# /etc/init.d/mysqld start

 = # service mysqld start

Starting MySQL...                                          [  OK  ]


- mysql 포트(3306)를 확인한다.

# netstat -nltp | grep 3306

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      480/mysqld  

        

- mysql 접속을 한다. 

# rm -f ~/.my.cnf 

# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 2

Server version: 5.5.28 Source distribution


Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> select version();

+-----------+

| version() |

+-----------+

| 5.5.28    |

+-----------+

1 row in set (0.01 sec)


mysql> quit


- mysql 관리자(root) 비번설정 

- 사용법 :  mysqladmin -u root password 'new-password'


# mysqladmin -u root password 'ksw1234'

# mysql -u root -p1234

# vi ~/.my.cnf


-- my.cnf --

[client]

host = localhost

user = root

password = ksw1234

-- my.cnf --


- 자동 로그인 확인

# mysql   


- user table 에서 defalut 사용자를 확인한다.

mysql> select host,user,password from mysql.user;

+-------------------+------+-------------------------------------------+

| host                 | user | password                                        |

+-------------------+------+-------------------------------------------+

| localhost            | root | *C369E7BF1EBB1D0B149AF952B9E31EC36536BEFC |

| ksw.boaniyagi.com | root |                                                   |

| 127.0.0.1            | root |                                                     |

| ::1                    | root |                                                     |

| localhost           |      |                                                       |

| ksw.boaniyagi.com |      |                                                    |

+-------------------+------+-------------------------------------------+

6 rows in set (0.00 sec)


- user table 에서 비번이 없는 사용자들을 삭제한다.

mysql> delete from mysql.user where password = '';  

Query OK, 5 rows affected (0.05 sec)


- user table 에서 사용자를 확인한다.

mysql> select host,user,password from mysql.user;  

+-----------+------+-------------------------------------------+

| host        | user | password                                         |

+-----------+------+-------------------------------------------+

| localhost   | root | *C369E7BF1EBB1D0B149AF952B9E31EC36536BEFC |

+-----------+------+-------------------------------------------+

1 row in set (0.00 sec)


- db table 에서 내용을 확인한다.

mysql> select host,user,db from mysql.db;  

+------+------+---------+

| host  | user  | db        |

+------+------+---------+

| %     |         | test      |

| %     |         | test\_%|

+------+------+---------+

2 rows in set (0.00 sec)


- db table 내용을 모두 삭제한다.

mysql> delete from mysql.db ;   

Query OK, 2 rows affected (0.00 sec)


- db table 에서 내용을 확인한다.

mysql> select host,user,db from mysql.db;  

Empty set (0.00 sec)


- 변경된 권한을 적용한다.

mysql> flush privileges;   


-- 여기까지가 mysql 서버 설치 끝 --


================ -- 일반 유저를 생성할때 TIP -- ================ 

- mysql 에서 사용자를 생성하기 위한 두 가지 방법

- 첫번째 : insert 를 이용하는 방법

- 두번째 : grant 문을 이용해서 생성하는 방법

- 사용자를 생성할때는 3가지가 쌍으로 가야된다. 

- 1. user table 에 사용자에 대한 권한 정보를 넣는다.

- 2. db   table 에 DB에 대한 권한 정보를 넣는다.

- 3. 사용자가 사용할 수 있는 DB를 생성한다.


mysql> insert into mysql.user (host,user,password,ssl_type,ssl_cipher,x509_issuer,x509_subject) 

    -> values ('localhost','ictsec', password('12345'),'','','',''); 

mysql> insert into mysql.db values ('localhost','ictsec','ictsec',

    -> 'y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y','y');

mysql> create database ictsec;

mysql> flush privileges;

mysql> select * from mysql.user \G

================ -- 일반 유저를 생성할때 TIP -- ================ 


########################

## 4. apache 설치하기 ##

########################


공식 다운로드 사이트 : http://httpd.apache.org/

설치 파일명 : httpd-2.4.10.tar.gz 

MD5: 9b5f9342f73a6b1ad4e8c4b0f3f5a159 


설치 버전 : 2.4.10

설치 디렉토리 : /usr/local/apache

웹루트 디렉토리 : /usr/local/apache/htdocs

기본언어셋 : utf-8

웹서버 포트 : 80

설정파일 : /etc/httpd.conf -> /usr/local/apache/conf/httpd.conf


- 아파치 컴파일 방식은 static 방식과 DSO 방식으로 나뉘어지고 prefork, worker 방식으로 컴파일할 수 있다.

- 여기서는 prefork 방식으로 컴파일한다.

- prefork와 worker 는 apache를 설치한 후 httpd -l로 확인할 수 있다.



-- apache 설치 순서 --

4-0. apache 필요 패키지 다운로드

4-1. apache 필요 패키지 설치

4-2. apache 소스 다운로드

4-3. apr 설치

4-4. apr-util 설치

4-5. apache 압축해제

4-6. apache 환경설정

4-7. apache 컴파일

4-8. apache 설치

4-9. apache 설치 확인

4-a. apache 세팅

-- apache 설치 순서 --


4-0. apache 필요 패키지 다운로드

- 아래 파일은 공식 사이트에서 링크를 확인한다.

# wget http://apache.mirror.cdnetworks.com//httpd/httpd-2.4.10.tar.gz

# wget http://archive.apache.org/dist/apr/apr-1.5.1.tar.gz  

# wget http://archive.apache.org/dist/apr/apr-util-1.5.3.tar.gz 

# wget http://www.openssl.org/source/openssl-1.0.1i.tar.gz 


4-1. apache 필요 패키지 설치


- pcre 설치 

- pcre 는  펄 호환 정규 표현식 라이브러리며 APM 소스 설치 시 반드시 필요하다.

- pcre-devel 패키지는 소스로 설치할 때 불필요하므로  패키지가 시스템에 설치되었다면 삭제한다.

# wget --no-check-certificat http://sourceforge.net/projects/pcre/files/latest/download?source=files

# yum  remove pcre-devel  


# tar xvjf pcre-8.35.tar.bz2

# cd pcre-8.35

# ./configure

# make

# make install

# ls /usr/local/bin

... pcre-config  pcregrep  pcretest


- zlib는 데이터 전송 압축 라이브러리며 없으면 openssl 쪽에서 에러가 발생하므로 설치한다.

- 공식 사이트에서 최신 소스를 가져와도 되지만 여기서는 yum 으로 한다.

# yum -y install zlib zlib-devel  


- openssl 설치

- 시스템에 설치되어 있지만 최신버전을 가져다 설치한다.

# tar xzf openssl-1.0.1i.tar.gz 

# cd openssl-1.0.1i

# ./config \

 --prefix=/usr/local/openssl \

 --openssldir=/usr/local/openssl \

 threads  zlib  shared 

# make 

# make test

# make install

# vi /etc/ld.so.conf


-- /etc/ld.so.conf --

/usr/local/openssl/lib

-- /etc/ld.so.conf --

 * /etc/ld.so.conf 에 넣기

  - 공유 라이브러리 인식 시키는 방법


- ldconfig 를 실행해 공유라이브러리를 인식시킨다.

# ldconfig


- 아래 내용이 출력되면 된다.

# strings  /etc/ld.so.cache | grep openssl

/usr/local/openssl/lib/libssl.so.1.0.0

/usr/local/openssl/lib/libssl.so

libgnutls-openssl.so.13

/usr/lib/libgnutls-openssl.so.13

/usr/local/openssl/lib/libcrypto.so.1.0.0

/usr/local/openssl/lib/libcrypto.so



4-2. apache 소스 다운로드

http://apache.org -> HTTP Server (http://httpd.apache.org/)

Apache httpd 2.4.10 Released  -> Download 클릭 -> Source: httpd-2.4.10.tar.gz 클릭


4-3. apr 설치

- arp(Apache Portable Runtime) 

- apr 공식사이트 : http://apr.apache.org/

- http://apache.mirror.cdnetworks.com//apr/apr-1.5.1.tar.gz


# tar xzf apr-1.5.1.tar.gz 

# cd apr-1.5.1

# ./configure 

# make 

# make install

# vi /etc/ld.so.conf

-- /etc/ld.so.conf --

/usr/local/openssl/lib

/usr/local/apr/lib

-- /etc/ld.so.conf --

# ldconfig


- 설치가 완료되면 apr 이 설치된 디렉토리를 확인한다. 

# ls /usr/local/apr/             


4-4. apr-util 설치

# tar xzf apr-util-1.5.3.tar.gz  

# cd apr-util-1.5.3

# ./configure --with-apr=/usr/local/apr 

# make 

# make install


# ldconfig


4-5. apache 압축해제

# tar xzf httpd-2.4.10.tar.gz

# cd httpd-2.4.10



4-6. apache 환경설정

# ./configure \

 --prefix=/usr/local/apache \

 --enable-mods-shared=all \

 --enable-module=so \

 --with-mpm=prefork \

 --with-apr=/usr/local/apr \

 --with-apr-util=/usr/local/apr \

 --enable-module=ssl \

 --with-ssl=/usr/local/openssl \

 --enable-ssl 


4-7. apache 컴파일

# make 


4-8. apache 설치

# make install


4-9. apache 설치 확인

# tree /usr/local/apache | more


- (mod_so) 모듈을 확인한다.

# /usr/local/apache/bin/httpd -l                


4-a. apache 세팅

- 아파치의 실행파일들을 PATH 설정된 /usr/bin 에 복사한다.

# ln -s /usr/local/apache/bin/* /usr/bin


- /etc/httpd 로 빠르게 접근하기 위해서 / yum 으로 설치할때 맞춰주기 위해서 심볼릭 링크를 건다.

# ln -s /usr/local/apache /etc/httpd


- 부팅시 활성화 시키기 위해서 심볼릭 링크를 건다.

# ln -s /usr/local/apache/bin/apachectl /etc/init.d/httpd


- 설정파일을 /etc/httpd.conf 로 심볼릭 링크를 건다. (접근하기 쉽게)

# ln -s /usr/local/apache/conf/httpd.conf /etc/


# vi /etc/init.d/httpd

-- /etc/init.d/httpd --

#!/bin/sh

# chkconfig: 2345 65 35

# description: apache web server

  :

  :

(중략)

-- /etc/init.d/httpd --


- 서비스가 정확히 등록이 되었는지 확인한다.

# chkconfig --add httpd

# chkconfig --list httpd

httpd           0:off 1:off 2:on 3:on 4:on 5:on 6:of


- 아파치 웹서버를 실행한다. (3가지 모두 동일하다)

# apachectl start   

        or 

# /etc/init.d/httpd start 

        or 

# service httpd start


- 80 번 포트를 확인한다.

# netstat -nltp  | grep 80                                


- 여기서는 임시로 세팅하는 것이므로 방화벽을 잠시 중지시킨다.

- 실무에서는 방화벽을 올리는 것이 맞는 것이다.

# iptables -F


- Host OS 의 브라우저에서 Linux 의 Guest OS 로 접속시 (httpd://192.168.56.101)

- It works! 가 출력되면 웹서버가 잘 설치된 것이다.


# ifconfig eth1

eth1      Link encap:Ethernet  HWaddr 08:00:27:37:94:FD  

          inet addr:192.168.56.102  Bcast:192.168.56.255  Mask:255.255.255.0


http://192.168.56.102/


- 샘플 페이지 생성하기

- Host OS에서 httpd://192.168.56.101/ 접속해서 Hello~ webserver 가 출력되면 성공이다.

# echo "<center> Hello~ webserver </center>" > /usr/local/apache/htdocs/index.html



############################

## 5. GD library 설치하기 ##

############################

- GD Library 란  

- Graphics 라이브러리로 선, 도형, 텍스트, 다중 색깔, 

- 이미지의 cut paste, 채우기 등의 이미지 처리기능과 이 결과를 

- 그래픽 파일로 (gif,jpeg,png) 저장하는 기능을 제공한다.


- GD 라이브러리는 소스로 설치하는 방법과 yum으로 설치하는 방법있다.

- 여기서는 yum으로 설치하는 방법을 이용한다.

# yum -y install gd gd-devel libjpeg libjpeg-devel \

giflib giflib-devel libpng libpng-devel freetype freetype-devel



#####################

## 6. php 설치하기 ##

#####################


공식 다운로드 사이트 : http://php.net/

설치 파일명 : php-5.5.15.tar.gz 

MD5: 


설치 버전 : 5.5.15

설치 디렉토리 : /usr/local/php

설정파일 : /etc/php.conf -> /usr/local/php/lib/php.ini


-- php 설치 순서 --

6-0. php 필요 패키지 설치

6-1. php 소스 다운로드

6-2. php 압축해제

6-3. php 환경설정

6-4. php 컴파일

6-5. php 테스트

6-6. php 설치

6-7. php 설치 확인

6-8. php 세팅

-- php 설치 순서 --


6-0. php 필요 패키지 설치


---------------------

- libxml2-devel 설치

---------------------

- libxml2-devel 관련 패키지를 설치해야 한다.

- 설치가 안되면 configure 에서 아래와 같은 오류가 나서 configure 가 중지된다.

- onfigure: error: xml2-config not found. Please check your libxml2 installation.

# yum -y install libxml2-devel


---------------------

- curl-devel 설치

---------------------

- configure 할때 --with-curl 옵션을 주었으므로 curl-devel 관련 패키지를 설치해야 한다.

- 설치가 안되면 configure 에서 아래와 같은 오류가 나서 configure 가 중지된다.

- configure: error: Please reinstall the libcurl distribution -

-     easy.h should be in <curl-dir>/include/curl/

# yum -y install curl-devel



---------------------

- bison 설치

---------------------

다운로드 : http://www.gnu.org/software/bison 

2014.9.28 최신버전 : bison-3.0.tar.xz   


- 설치가 안되면 php-5.5.17 설치시 bison 쪽에서 에러가 발생되므로 bison을 소스로 설치했다.


-- bison 을 rpm 으로 설치하면 2.3 버전으로 설치되고  php 소스에서도 인식하지 못했다.

-- 그래서 2.3 rpm 버전을 삭제하고 bison 을 소스로 설치했다.

-- bison의 최신 버전인 bison-3.0 을 설치시 configure 쪽에서 bison 버전을 인식하지 못했다.

-- 그래서 다시 2.7 의 마지막 버전인 2.7.1 을 마이그레이션해서 설치했더니 인식을 했다.


-- 3.0 설치시 php 소스에서 인식하지 못한 메세지

-- checking for bison version... invalid

-- configure: WARNING: bison versions supported for regeneration 

-- of the Zend/PHP parsers: 2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7 (found: 2.3).


-- 2.7.x 설치시 php 소스에서 인식한 메세지

-- checking for bison... bison -y

-- checking for bison version... 2.7 (ok)


# yum remove bison-devel

# yum remove bison

# yum remove byacc-devel  <-- 이 패키지는 없다.

# rpm -ql byacc

/usr/bin/byacc

/usr/bin/yacc

/usr/share/man/man1/byacc.1.gz

/usr/share/man/man1/yacc.1.gz

# ls -l /usr/bin/byacc 

lrwxrwxrwx 1 root root 4 Sep 23 19:19 /usr/bin/byacc -> yacc


# yum remove byacc


# wget ftp://alpha.gnu.org/gnu/bison/bison-2.7.91.tar.gz


# tar xzf bison-2.7.91.tar.gz

# cd bison-2.7.91

# ./configure 

# make

# make install

# make install check


---------------------

- rec2 설치

---------------------

다운로드 : http://sourceforge.net/projects/re2c/files/re2c/0.13.7.5/


-- yum 으로는 설치가 안되서 소스로 설치했다.

-- 설치가 안되면 php-5.5.17 설치시 re2c 쪽에서 에러가 발생되므로 re2c를 소스로 설치했다.


-- re2c 가 설치가 안되었을 때 php 소스에서 인식하지 못한 메세지

-- checking for re2c... no

-- configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.


-- re2c 가 설치 후 php 소스에서 인식한 메세지

checking for re2c... re2c

checking for re2c version... 0.13.7.5 (ok)


# tar xzf re2c-0.13.7.5.tar.gz 

# cd re2c-0.13.7.5

# vi README

# ./configure 

# make

# rm -f scanner.cc 

# make install


--------------------------------------------------------------------



6-1. php 소스 다운로드

상단메뉴 의 downloads -> 클릭

Current Stable -> 클릭

kr1.php.net / ask.sarang.net 링크를 클릭하면 다운로드 된다.


- 파일이 변조여부를 체크한다. (파일의 무결성)

# md5sum php-5.5.15.tar.gz 

63b56e64e7c25b1c6dcdf778333dfa24  php-5.5.15.tar.gz


6-2. php 압축해제

# tar xzf php-5.5.15.tar.gz 

# cd php-5.5.15


6-3. php 환경설정

-- php 를 설치하기 전에 반드시 gd 라이브러리를 설치한다.

-- --enable-maintainer-zts 옵션은 Apache2.4 에 Event MPM 모델을 위해서 필요한 것이다. 

-- 만약 Apache2.4 가 Prefork 로 동작한다면 PHP를 재컴파일 해야한다.

# ./configure \

 --prefix=/usr/local/php \

 --with-mysql=/usr/local/mysql \

 --with-apxs2=/usr/local/apache/bin/apxs \

 --with-jpeg-dir \

 --with-png-dir \

 --with-curl \

 --with-zlib-dir \

 --with-gd \

 --with-freetype-dir \

 --with-iconv \

 --with-zlib \

 --with-openssl \

 --with-pcre-regex \

 --with-pear \

 --enable-sockets \

 --disable-debug \

 --enable-ftp \

 --enable-sysvsem=yes \

 --enable-sysvshm=yes \

 --enable-bcmath \

 --enable-exif \

 --enable-zip \

 --enable-gd-native-ttf \

 --enable-mbstring  

  


6-4. php 컴파일

# make 


6-5. php 테스트

# make test     


6-6. php 설치

- --prefix 에 설정된 디렉토리에 설치한다.

# make install


6-7. php 설치 확인

- --prefix 에 설정된 디렉토리를 확인한다.

- 아파치 디렉토리에 php 관련 모듈(libphp5.so) 을 확인한다.

# ls /usr/local/php

# ls /usr/local/apache/modules/libphp5.so



6-8. php 세팅

- 실행파일을 PATH 경로에 설정된 디렉토리로 심볼릭 링크를 건다.

# ln -s /usr/local/php/bin/* /usr/bin


- php 설정파일 복사

- 설정파일은 2개가 존재한다. php.ini-development, php.ini-production   

- 두 개의 내용은 약간 차이점이 있고 아래 명령어로 확인이 가능하다.

- # vimdiff php.ini-development php.ini-production   

- 여기서는 php.ini-development 로 복사한다.

- 만약 예전 버전인 php 5.2.x 대로 설치한다면 설정파일이  php.ini-dist 

- 로 되어있고 버전이 최선 버전일 경우에는 아래를 사용하면 된다.

# cp php.ini-development /usr/local/php/lib/php.ini

# ln -s /usr/local/php/lib/php.ini /etc/php.conf  


- timezone 을 설정한다.

- phpinfo() 함수에서 확인하면 에러가 발생하므로 지역을 세팅해야 된다.

# vi /etc/php.conf

     or

# vi /usr/local/php/lib/php.ini

-- /usr/local/php/lib/php.ini --

date.timezone = Asia/Seoul

-- /usr/local/php/lib/php.ini --


- 웹서버 설정파일에서 php 모듈이 올라왔는지 확인한다.

# vi /etc/httpd.conf

      or

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

-- /usr/local/apache/conf/httpd.conf --

  :

  :

LoadModule php5_module        modules/libphp5.so  <-- 확인 (163번 라인)

  :

  :

(중략) 


- index 페이지를 추가한다.

<IfModule dir_module>

  DirectoryIndex index.html index.php   <-- 추가 (263번 라인)

</IfModule>

  :

  :

(중략)


- php로 인식할 확장자를 추가한다.

- 이 밑에 아래 내용을 추가 (391번 라인)

- phps 는 php 를 소스로 인식하는 설정인데 보안상 안쓰므로 주석만 처리한다

AddType application/x-gzip .gz .tgz               

AddType application/x-httpd-php .php .html   

# AddType application/x-httpd-php-source .phps    

-- /usr/local/apache/conf/httpd.conf --


- apachectl configtest 를 이용해서 웹서버 설정파일의 구문 오류를 검사한다.

- 아래와 같은 메세지가 출력되면 두가지 중 하나를 선택한다.

- usr/local/apache/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied


1. setup 을 해서 보안 설정을 중지시킨다.

- Firewall configuration  => 

- Security Level: Disabled

- SELinux: Disabled


2.  libphp5.so 의 권한을 변경한다.

* 해결책 

shell> restorecon -R -v /usr/local/apache/modules

* 안될경우

shell> cd /usr/local/apache/modules

shell> restorecon -v libphp5.so

shell> chcon -t texrel_shlib_t libphp5.so


 


# /etc/init.d/httpd configtest    

# /etc/init.d/httpd stop          <-- restart 하면 php 파일이 다운로드 될 수 있으므로 


- 웹서버를 재시작 한다.

# /etc/init.d/httpd start         <-- stop 하고 start 한다.


- php Test Page 를 생성한다.

- 보안상 index.html에 추가하지 않고 abcd.html에 추가한다.

# cd /usr/local/apache/htdocs  

# vi abcd.html  

<?php

phpinfo();

?>


- Guest OS 의 IP 주소를 확인한다.

# ifconfig eth1 


- Host OS에서 브라우저로 확인한다. 

http://192.168.56.101/abcd.html


- phpinfo 페이지를  확인 후 Test Page를 삭제한다. 

# rm -f abcd.html   


- php 모듈을 확인한다.

# php -m


############################

## 7. phpmyadmin 설치하기 ##

############################


- 웹에서 php의 DB를 제어하기 위해서 phpmyadmin 을 설치한다.


공식 다운로드 사이트 : http://www.phpmyadmin.net 

설치 파일명 :  phpMyAdmin-4.2.9-all-languages.zip

MD5: 



-- phpmyadmin 설치 순서 --

7-1. phpmyadmin 소스 다운로드

7-2. phpmyadmin 압축해제

7-3. phpmyadmin 설정파일 복사 및 오류 메세지 해결

7-4. phpmyadmin 로그인

-- phpmyadmin 설치 순서 --


7-1. phpmyadmin 소스 다운로드

상단메뉴 의 download -> 클릭하면 다운로드 된다.


7-2. phpmyadmin 압축해제

- 파일을 웹루트 디렉토리에 압축을 해제하고 디렉토리명을 변경한다.

- 향후 디렉토리명을  외부에서 유추할 수 없도록 어렵게 변경한다.

# cd  /usr/local/apache/htdocs/

# unzip phpMyAdmin-4.2.9-all-languages.zip

# mv phpMyAdmin-4.2.9-all-languages phpmyadmin


- Host OS에서 브라우저로 확인한다. 

- 이때 undefined function 이라고 하면 php 에서 관련 모듈을 넣고 컴파일한다. 


7-3. phpmyadmin 설정파일 복사 및 오류 메세지 해결

- 오류 메세지 해결 1 

-  샘플 파일을 복사하면 로그인시 아래 오류 문구가 없어진다.

- "이제 설정 파일은 암호화 문자열(blowfish_scret) 을 필요로 합니다" 


# cd phpmyadmin

# cp config.sample.inc.php config.inc.php


- 오류 메세지 해결 2

- 설정 파일에 $cfg['PmaNoRelation_DisableWarning'] = TRUE;  를 추가하면 오류 문구가 없어진다.

- "phpMyAdmin 설정 스토리지가 완전히 설정되지 않아, 일부 확장 기능들이 비활성화 된 상태입니다. "


# vi config.inc.php

-- config.inc.php --

  :

  :

/* Authentication type */

$cfg['PmaNoRelation_DisableWarning'] = TRUE; 

$cfg['Servers'][$i]['auth_type'] = 'cookie';

  :

  :

-- config.inc.php --



7-4. phpmyadmin 로그인

http://<SERVER IP>/phpmyadmin/



- 관련 문서는 아래 URL을 참고한다.

http://phpmyadmin.net/home_page/docs.php



##################################

## 8. mysqli 동적 모듈 설치하기 ##

##################################


-- 순서 --

1. php 소스의 mysqli 디렉토리로 이동한다.

2. phpize를 실행한다. 

3. 환경설정을 한다.

4. 컴파일을 한다. 

5. 모듈을 설치한다.

6. 설정파일을 등록한다.

7. 아파치를 재시작한다.

-- 순서 --


1. php 소스의 mysqli 디렉토리로 이동한다.

# cd 

# cd php-5.5.15/ext/mysqli


2. phpize를 실행한다. 

# ls -l /usr/local/php/bin/phpize 

-rwxr-xr-x 1 root root 4534  8월 19 16:40 /usr/local/php/bin/phpize


# /usr/local/php/bin/phpize 


3. 환경설정을 한다.

# ./configure \

--with-php-config=/usr/local/php/bin/php-config \

--with-mysqli=/usr/local/mysql/bin/mysql_config


4. 컴파일을 한다. 

# make test

# make


5. 모듈을 설치한다.

- modules 디렉토리를 만들고 모듈 파일을 복사해 준다. 


# mkdir /usr/local/php/modules 

# cp modules/mysqli.* /usr/local/php/modules


6. 설정파일을 등록한다.

- php.ini 에 아래처럼 수정하고 추가한다.

- extension_dir 의 위치는 719번이다.


# vi /usr/local/php/lib/php.ini

-- /usr/local/php/lib/php.ini --

  :

  :

;extension_dir = "./" 

extension_dir=/usr/local/php/modules

extension=mysqli.so 

  :

  :

-- /usr/local/php/lib/php.ini --


7. 아파치를 재시작한다.

# /etc/init.d/httpd restart



#############################

## 9. 제로보드 XE 설치하기 ##

#############################


- 각자 설치하기



'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] CentOS 목차  (0) 2017.07.22
[CentOS] 15. APM 설치  (0) 2016.07.23
[CentOS] 14-2 패키지 관리 - tomcatWAS설치  (3) 2016.07.10
[CentOS] 14-1 패키지 관리 - tomcat 환경설정  (0) 2016.07.10
[CentOS] 14. 패키지 관리  (0) 2016.07.10

#############################################

## 주제 : APM                                                        ##

##                                                                       ##

## Written by K.S.W                                                ##

## boaniyagi@naver.com                                         ##

#############################################

Apache : 1.3.41 -> 2.2, 2.4 

Mysql : 4.0.27 -> 4.1 -> 5.6 

Php : 4.x -> 5.x


경험상 다양한 버전을 가지고 여러가지 컴파일 방법을 연습해둬야 한다. 

이유는 ? 

1. 운영중인 사이트가 오래된 버전을 사용하다가 (A:1.3.41, M:4.0.27, P:4.x) -> 상위버전으로 올리고 싶다고해서 무턱대고 올리면 잘 돌아가던 애플리케이션이 php 버전문제로 안될 수 있기 때문이다.


또한 최신버전의 php 버전을 사용하다가보면 현재 사용중인 애플리케이션이 동작하지 않을 수 있으므로 마이그레이션을 해야한다. 


LAMP 


o APM 을 사용하는 방식 : static, DSO 방식 두가지를 사용한다. 


o APM 을 설치하는 방법 

 1. yum 을 이용해서 설치하는 방법 

  - DSO 방식으로 설치한다.

  - 생략  


 2. 소스를 이용해서 설치하는 방법 



o APM 설치순서 


필요한 패키지나 모듈 설치 이후

-> MySQL install 

-> Apache install 

-> Php install 

-> mod_security 

-> phpmyadmin 


다양한 모듈들을 설치 


################

##    mysql 설치  ##

################


==== 체크사항 ====

mysql 소스로 설치할 수 있는가 ?

mysql 4.x and 5.x 를 소스로 설치할 수 있는가 ? 

mysql 을 yum 으로 설치할 수 있는가 ? 

mysql 운영중에 홈페이지가 에러가 발생이되면(DB가 깨진 것이다.) 복구할 수 있는가 ?

mysql DB를 다른쪽 mysql 서버로 옮길 수 있는가 ?

mysql DB를 백업(덤프) 받을 수 있는가 ?

mysql 의 접속이 많을때 부하분산을 할 수 있는가 ?

mysql replication 으로 운영할 수 있는가 ?

 :

 :     <-- 나머지 부분은 정리해서 알려줄 것!!!


1. 필요한 패키지나 모듈 설치

- 설치가 안된 경우에 설치한다.

필요한 패키지 : ncurses-devel, 

필요한 패키지 그룹 : Development Tools


- 아래처럼 command not found 가 출력되면 개발툴이 설치가 

  안된 것이므로 이때는 개발툴(Development Tools)을 설치해야 한다.

# gcc

-bash: gcc: command not found


# LANG=C

# yum grouplist

  :

  :

Installed Groups:

  :

Available Groups:

  :

  Development Tools

  :


# yum -y groupinstall "Development Tools"

(-y는 설치하는 행동을 물어볼 것인가? 라는 명령어)

(groupinstall 이란 설치할 패키지를 그룹으로 설치 한다는 의미)


- 만약 yum을 실행했는데 아래처럼 lock이 출력되면서 설치가 안된다면

  yum이 이미 실행된 것이므로 ps 로 확인해서 실행된 yum을 죽이고 

  다시 실행하면 된다.

#  yum groupinstall "MySQL Database"


Loaded plugins: fastestmirror, security

Existing lock /var/run/yum.pid: another copy is running as pid 2531.

Another app is currently holding the yum lock; waiting for it to exit...

  The other application is: yum

    Memory :  55 M RSS ( 97 MB VSZ)

    Started: Wed Sep 30 09:11:31 2015 - 02:42 ago

    State  : Running, pid: 2531

Another app is currently holding the yum lock; waiting for it to exit...

  The other application is: yum

    Memory :  55 M RSS ( 97 MB VSZ)

    Started: Wed Sep 30 09:11:31 2015 - 02:44 ago

    State  : Uninteruptable, pid: 2531

Another app is currently holding the yum lock; waiting for it to exit...

  The other application is: yum

    Memory :  58 M RSS ( 99 MB VSZ)

    Started: Wed Sep 30 09:11:31 2015 - 02:50 ago

    State  : Sleeping, pid: 2531



Exiting on user cancel.


# ps aux | grep yum


(aux 전체 프로세스를 보여주세요)


( |는 aux 프로세스를 출력을  grep yum 에게 입력 한다.)

 - yum만을 포함해서 출력


root      2436  0.0  2.0  26772 10308 ?        SN   08:54   0:00 /usr/bin/python -tt /usr/sbin/yum-updatesd

root      2531 12.6 11.4 101788 59100 pts/0    S+   09:11   0:22 /usr/bin/python /usr/bin/yum -y 


groupinstall Development Tools

root      2591  0.0  0.1   5240   724 pts/1    D+   09:14   0:00 grep yum

# kill -9 2436 2531


- 현재 설치된 전체 패키지에서 ncurses 패키지를 검색한다.

- ncurses 개발 라이브러리를 설치한다.


# rpm -qa | grep ncurses

ncurses-5.5-24.20060715


# yum -y install ncurses-devel

 ( 우리는 development tool을 깔아서 상관 없을 듯 tool을 안깔았을 때 하는거)


-- ncurses-devel 패키지가 없을 때 메세지 --

- 만약 ncurses-devel 패키지가 없다면 아래와 같이 에러가 발생되면서

  configure 가 종료된다. 당연한 얘기지만 configure가 정상적으로 

  끝나지 않는다면 그 다음 단계인 make 는 실행되지 않는다.

  :

  :

checking for tgetent in -lncurses... no

checking for tgetent in -lcurses... no

checking for tgetent in -ltermcap... no

checking for tgetent in -ltinfo... no

checking for termcap functions library... configure: error: No curses/termcap library found

-- ncurses-devel 패키지가 없을 때 메세지 --


======= mysql 소스설치의 옵션들 ======= 

!!! 참고로 이외의 여러가지 다양한 옵션이 존재하는걸 볼 수 있다. !!!

!!! gcc <-- pgcc 로 컴파일하면 gcc 

!!! --with-raid        Enable RAID Support

!!! --without-server   Only build the client.

!!! mysql5 에서는 mysqli 라는 확장된 mysql이 존재하므로 이를 설치해야 한다. 


옵션을 사용하는 형식 : --옵션명=값 ... (이건 형식이 중요)


--prefix : mysql(DBMS) 이 설치될 디렉토리 

--localstatedir : mysql DB가 저장될 디렉토리 

--with-mysqld-user : mysql 데몬 사용자 

--with-charset : 언어설정 euc_kr 로 지정 

--enable-thread-safe-client  :  apache compile시 기본적으로 thread mode로 설치가 되기 때문에 위의 옵션을 주


지 않을 경우 연동이 되지 않고, 

                                php configure 시에 mysql-client 에러가 발생한다.

=================================================================


2. mysql 설치 전 세팅 (소스로 설치할 거야 )

- mysql 패키지를 확인해서 설치가 되어있으면 삭제한다.

- 만약 설치가 안되었다면 이 부분은 넘어가도 된다.

# rpm -qa |grep mysql   

# yum grouplist 

# yum groupremove "MySQL Database"

# userdel -r mysql


- CentOS 5 에서는 반드시 추가해야 한다. 

- 주석이 끝나는 18라인 부분에  추가한다.


# vi /usr/include/pthread.h 

-- /usr/include/pthread.h --

  :

  :

/* Linuxthreads */

  :

  :

-- /usr/include/pthread.h --


3. 환경설정

- mysql 소스파일을 서버에 업로드해서 진행한다.


# tar xzf mysql-4.0.27.tar.gz (압축해제)

# cd mysql-4.0.27


(환경설정)

# ./configure \

 --prefix=/usr/local/mysql \

 --localstatedir=/usr/local/mysql/data \

 --with-mysqld-user=mysql \

 --enable-thread-safe-client \

 --with-charset=euc_kr


(한줄)

./configure \ --prefix=/usr/local/mysql \ --localstatedir=/usr/local/mysql/data \ --with-mysqld-user=mysql \ --enable-thread-safe-client \ --with-charset=euc_kr


4. 컴파일 

# make 


5. 설치 

- make install을 이용해서 시스템에 설치한다.

# make install


- 설치 후 mysql 디렉토리가 /usr/local 디렉토리에 있는지 확인한다.

# ls -F /usr/local

... lib/  libexec/  mysql/  sbin/  share/  src/

                   ~~~~~~~


6. 세팅 

- 아무 디렉토리에서도 실행파일들이 실행이 될 수 있도록 

  mysql 실행파일들을 PATH에 걸려있는 디렉토리로 심볼릭링크를 건다.

# ln -sf /usr/local/mysql/bin/* /usr/bin          

# ln -sf /usr/local/mysql/libexec/mysqld /usr/sbin     


- 설정파일을 복사한다.

- 자신의 시스템 메모리에 맞추어 설정파일을 복사한다.

# cd support-files

# cp my-large.cnf /etc/my.cnf 


- 데몬스크립트를 /etc/init.d 디렉토리에 복사한다.

- cp mysql.server /etc/init.d/mysqld

- chmod 700 /etc/init.d/mysqld

 (위 두줄 을 한번에 하는 방법)

# install -m 700 mysql.server /etc/init.d/mysqld  


- 부팅시 mysql 을 활성화한다.

- 3:off 되어 있다면 아래 명령어를 이용해서 on 으로 설정해야 한다.

- # chkconfig mysqld on

# runlevel 

N 3

# chkconfig --add mysqld  

# chkconfig --list mysqld

mysqld         0:off 1:off 2:on 3:on 4:on 5:on 6:off



- DB 초기화 작업을 한다.

- 기본적으로 DB파일들은 존재하지 않는다. 

- 그러므로 DB를 생성시켜줘야 한다.

- database 의 파일들이 위치하는 디렉토리이다. 

- --localstatedir 옵션의 지정된 디렉토리가 생성된다.

# mysql_install_db  


- mysql DBMS 사용자를 생성한다.

- 참고 : RedHat 계열의 사용자/그룹 정보 확인한다.

- # vi /usr/share/doc/setup-2.5.58/uidgid  

- -s : 쉘

- -d : 홈디렉토리 --localstatedir 옵션에 적은 디렉토리를 적어야 한다.

- -M : 디렉토리 생성 X 이미 mysql_install_db 에서 디렉토리가 생성된다.

- -r : 시스템 사용자 (UID : 100 이하) 

- -u : UID


# useradd -s /bin/false -d /usr/local/mysql/data -M -r -u 27 mysql   


- 슈퍼유저가 초기 DataBase 디렉토리를 생성했다면 root.root 로 권한이

- 되어있을 것이다. 그러므로 mysql DataBase 디렉토리를 모두 일반유저인

- mysql 사용자의 권한으로 변경해야 한다.


# chown -R mysql.mysql /usr/local/mysql/data                         


7. mysql 데몬 시작

# /etc/init.d/mysqld start   


- mysql 포트(3306)를 확인한다.

-  DBMS    port  DBA

- ---------------------------

- MySQL  : 3306  : root

- Oracle : 1521  : sys, system

- MS-SQL : 1433  : sa

- SyBase : ...

- DB2    : ...

- postgresql : ...

- mariaDB : ...

- ... 


# netstat -nltp   

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      12704/mysqld        

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      3425/httpd          

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1748/sshd           

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3521/sendmail  


- mysql에 접속을 확인한다.

- mysql에 접속이 정상적으로 이루어지면 mysql 설치에 성공한 것이다.


# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.0.27-log


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> quit


- mysql root 사용자의 비밀번호를 ksw1234로 설정한다.

- 형식 : mysqladmin -u root password 비밀번호

# mysqladmin -u root password ksw1234    


- mysql root 로 로그인한다.

- 접속시 -h localhost 면 생략이 가능하다.

- 비밀번호 ksw1234를 입력한다.

- 형식 : mysql -h localhost -u 사용자 -p[비밀번호] [DB명]

-              ~~~~~~~~~~~~

-               자기자신(Local Loopback Address)

- 서버와 클라이언트가 같이 있고 클라이언트가 서버로 접속하면 

- -h localhost는 생략이 가능하다.

- # mysql -h localhost -u root -p


# mysql -u root -p

Enter password:        <-- ksw1234 를 입력한다.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 5 to server version: 4.0.27-log


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> quit


- MySQL startup 파일 생성 (root 로 자동으로 로그인하기 위한 설정)

- mysql client 프로그램을 실행할 때 참조하는 파일이다.

- mysql -h localhost -u root -pksw1234

- startup 파일 형식 :

- [client]

- host = 접속할 호스트명 or IP 주소

- user = 접속할 사용자명

- password = 접속할 사용자의 비밀번호


# vi ~/.my.cnf       

-- /root/.my.cnf --

[client]

host = localhost

user = root

password = ksw1234

-- /root/.my.cnf --


- 자동로그인 기능에 의해 접속 (~/.my.cnf 에 설정되어 있다)

- 접속이 되면 DB설치 성공!!!  

- # mysql -h localhost -u root -pksw1234 mysql


# mysql mysql    

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.0.27-log


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> select user();

+----------------+

| user()         |

+----------------+

| root@localhost |

+----------------+

1 row in set (0.00 sec)


mysql> select database();

+------------+

| database() |

+------------+

| mysql      |

+------------+

1 row in set (0.00 sec)


mysql> show tables;

+-----------------+

| Tables_in_mysql |

+-----------------+

| columns_priv    |

| db              |

| func            |

| host            |

| tables_priv     |

| user            |

+-----------------+

6 rows in set (0.00 sec)


- user table 의 구조를 본다.

mysql> describe user;

  :

  :


- user 테이블에서 모든 필드를 출력한다.

mysql> select * from user;   


- user 테이블에서 host,user,password 필드만 출력한다.

mysql> select host,user,password from user;          

+-----------------------+------+------------------+

| host                  | user | password         |

+-----------------------+------+------------------+

| localhost             | root | 57c0dba50319edd5 |    <-- ksw1234 암호화

| localhost.localdomain | root | 57c0dba50319edd5 |    

| localhost             |      |                  |    <-- 삭제

| localhost.localdomain |      |                  |    <-- 삭제

+-----------------------+------+------------------+

4 rows in set (0.00 sec)


- 비밀번호가 없는 레코드(행)를 모두 삭제한다.

mysql> delete from user where password = '';

Query OK, 3 rows affected (0.00 sec)


mysql> select host,user,password from user;

+-----------+------+------------------+

| host      | user | password         |

+-----------+------+------------------+

| localhost | root | 57c0dba50319edd5 |

+-----------+------+------------------+

1 row in set (0.00 sec)


- db 테이블의 구조를 출력한다.

mysql> describe db;


- db 테이블에서 host,user,db 필드만 출력한다.

- db 테이블에 들어있는 test 는 임시 작업 DB이므로 삭제한다.

mysql> select host,user,db from db;          

+------+------+---------+

| host | user | db      |

+------+------+---------+

| %    |      | test    |   <-- 삭제

| %    |      | test\_% |   <-- 삭제

+------+------+---------+

2 rows in set (0.00 sec)


- db 테이블의 임시 자료를 모두 삭제한다.

mysql> delete from db;                       

Query OK, 2 rows affected (0.00 sec)


mysql> select host,user,db from db;

Empty set (0.00 sec)


- user,db 테이블의 세팅되어 있는 권한으로 적용한다.

mysql> flush privileges;    

Query OK, 0 rows affected (0.00 sec)

mysql> quit



# netstat -ant  <-- mysql 포트 확인

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address               Foreign Address             State      

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN        <-- mysql 포트대기

  :

  :

  :


- 외부에서 접속할 필요가 없을땐 보안상 외부 접속을 차단하면 된다.

- skip-networking 앞에 # 을 제거하면 외부에서 들어오는 포트가 없어진다.

# vi /etc/my.cnf

...

skip-networking    

...


- mysql 설정 파일을 수정했으므로 서버를 재시작한다.

# /etc/init.d/mysqld restart


- mysql 포트 3306 이 없는 것을 확인할 수 있다.

# netstat -nltp  


# ls -l /tmp/mysql.sock  <-- 이때는 unix domain socket 으로 통신을 한다.


# mysql   <-- /tmp/mysql.sock 파일을 통해서 접속하는 것이다.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1 to server version: 4.0.27-log


Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


mysql> quit



***mysql yum으로 설치 시

yum -y install mysql 하면 32비트 64 비트 같이 깔리니까 

32비트 지워야 함

# yum remove mysql.i386



*** yum 으로 mysql 설치

# yum -y install mysql

# yum search mysql

# yum -y install mysql-server

# /etc/init.d/mysqld start

# rm -f ~/.my.conf

# mysql 



*** 아파치 설치

# yum -y install httpd httpd-devel > /dev/null

# which httpd

# which apxs

# rpm -qf /usr/sbin/httpd

# rpm -qf /usr/sbin/apxs

# rpm -e httpd-devel.i386

# rpm -qf /usr/sbin/apxs



*** PHP 설치

# yum search php

# yum -y install php.x86_64

 

 - /var/www/html

 ( php루트)


#################

## apache 설치 ##

#################


공식 사이트 : http://httpd.apache.org

아파치 문서 : http://httpd.apache.org/docs/


1. apache 설치 전 확인

- httpd 패키지가 설치되어 있다면 삭제한다. 

# rpm -qa | grep httpd

httpd-2.2.3-82.el5.centos   

# apachectl stop

# rpm -e httpd


의존성 때문에 삭제가 안되면 아래 yum 을 이용해서 삭제한다.


- httpd 가 설치가 되어 있으면 "web server" 그룹을 삭제한다.

# yum grouplist                     

# yum -y groupremove "web server"   


2. 환경설정

# tar xzf apache_1.3.41.tar.gz 

# cd apache_1.3.41


- 1.3.41 의 모듈을 확인 

- 거의 대분의 소스들은 압축을 해제하면 configure라는 설치 스크립트를

- 제공한다. 

- 사용자는 이 스크립트를 이용해서 관련 환경들을 설정해야 한다.

- ./configure --help 를 이용해서 환경설정의 여러가지 옵션들을 

- 확인할 수 있다.

# ./configure --help   

  :

  :

--enable-module=NAME   enable  a particular Module named 'NAME'

--disable-module=NAME  disable a particular Module named 'NAME'

                        [access=yes      actions=yes     alias=yes      ]     <-- yes : 모듈 활성화 

                        [asis=yes        auth_anon=no    auth_dbm=no    ]     <-- no  : 모듈 비활성화 

                        [auth_db=no      auth_digest=no  auth=yes       ]

                        [autoindex=yes   cern_meta=no    cgi=yes        ]

                        [digest=no       dir=yes         env=yes        ]

                        [example=no      expires=no      headers=no     ]

                        [imap=yes        include=yes     info=no        ]

                        [log_agent=no    log_config=yes  log_forensic=no]

                        [log_referer=no  mime_magic=no   mime=yes       ]

                        [mmap_static=no  negotiation=yes proxy=no       ]

                        [rewrite=no      setenvif=yes    so=no          ]      <-- so : DSO 방식일때 반드시 


모듈을 활성화시키고 컴파일해야 한다. 

                        [speling=no      status=yes      unique_id=no   ]

                        [userdir=yes     usertrack=no    vhost_alias=no ]      <-- vhost_alias : DSO 방식일


때 반드시 모듈을 활성화시키고 컴파일해야 한다. 

  :

  :



- DSO 방식으로 compile

- configure 옵션은 config.status 파일에 저장된다.

- prefix : 아파치 웹서버가 설치될 경로

# ./configure  \

--prefix=/usr/local/apache \

//

--enable-shared=max \

--enable-rule=SHARED_CORE \

--enable-module=so \

// 3가지 중요<dso> 방식으로 컴파일 하겠다 !


--enable-module=vhost_alias


3. 컴파일

- make 명령어를 이용해서 컴파일 한다.

# make


4. 설치

- make install을 이용해서 설치한다.

- 설치가 완료되면 아래처럼 box가 나온다.

# make install

  :

  :

+--------------------------------------------------------+    

| You now have successfully built and installed the      |

| Apache 1.3 HTTP server. To verify that Apache actually |

| works correctly you now should first check the         |

| (initially created or preserved) configuration files   |

|                                                        |

|   /usr/local/apache/conf/httpd.conf

|                                                        |

| and then you should be able to immediately fire up     |

| Apache the first time by running:                      |

|                                                        |

|   /usr/local/apache/bin/apachectl start

|                                                        |

| Thanks for using Apache.       The Apache Group        |

|                                http://www.apache.org/  |

+--------------------------------------------------------+


- 설치된 디렉토리를 확인해보자.

# tree /usr/local/apache/

/usr/local/apache/

|-- bin

|   |-- ab

|   |-- apachectl

|   |-- apxs

|   |-- checkgid

|   |-- dbmmanage

|   |-- htdigest

|   |-- htpasswd

|   |-- httpd

|   |-- logresolve

|   `-- rotatelogs

|-- cgi-bin

|   |-- printenv

|   `-- test-cgi

|-- conf

|   |-- access.conf

|   |-- access.conf.default

|   |-- httpd.conf

|   |-- httpd.conf.bak

|   |-- httpd.conf.default

|   |-- magic

|   |-- magic.default

|   |-- mime.types

|   |-- mime.types.default

|   |-- srm.conf

|   `-- srm.conf.default

|-- htdocs

|   |-- index.html

|   `-- manual

|       |-- LICENSE

|       |-- bind.html.en

|       |-- bind.html.fr

|       |-- bind.html.html

|       |-- bind.html.ja.jis

|       |-- configuring.html.en

|       |-- configuring.html.fr

|       |-- configuring.html.html

|       |-- configuring.html.ja.jis

|       |-- content-negotiation.html.en

|       |-- content-negotiation.html.html

|       |-- content-negotiation.html.ja.jis

|       |-- custom-error.html.en

|       |-- custom-error.html.fr

|       |-- custom-error.html.html

|       |-- custom-error.html.ja.jis

|       |-- cygwin.html

|       |-- dns-caveats.html.en

|       |-- dns-caveats.html.fr

|       |-- dns-caveats.html.html

|       |-- dns-caveats.html.ja.jis

|       |-- dso.html

|       |-- ebcdic.html

|       |-- env.html.en

|       |-- env.html.html

|       |-- env.html.ja.jis

|       |-- footer.html

|       |-- handler.html.en

|       |-- handler.html.html

|       |-- handler.html.ja.jis

|       |-- header.html

|       |-- howto

|       |   |-- auth.html

|       |   |-- cgi.html.en

|       |   |-- cgi.html.html

|       |   |-- cgi.html.ja.jis

|       |   |-- footer.html

|       |   |-- header.html

|       |   |-- htaccess.html

|       |   |-- ssi.html.en

|       |   |-- ssi.html.html

|       |   `-- ssi.html.ja.jis

|       |-- images

|       |   |-- apache_header.gif

|       |   |-- custom_errordocs.gif

|       |   |-- home.gif

|       |   |-- index.gif

|       |   |-- mod_rewrite_fig1.fig

|       |   |-- mod_rewrite_fig1.gif

|       |   |-- mod_rewrite_fig2.fig

|       |   |-- mod_rewrite_fig2.gif

|       |   |-- pixel.gif

|       |   `-- sub.gif

|       |-- index.html.en

|       |-- index.html.fr

|       |-- index.html.html

|       |-- index.html.ja.jis

|       |-- install-tpf.html

|       |-- install-ztpf.html

|       |-- install.html.en

|       |-- install.html.es

|       |-- install.html.fr

|       |-- install.html.html

|       |-- install.html.ja.jis

|       |-- invoking.html.en

|       |-- invoking.html.fr

|       |-- invoking.html.html

|       |-- invoking.html.ja.jis

|       |-- keepalive.html.en

|       |-- keepalive.html.html

|       |-- keepalive.html.ja.jis

|       |-- location.html.en

|       |-- location.html.html

|       |-- location.html.ja.jis

|       |-- logs.html

|       |-- man-template.html

|       |-- misc

|       |   |-- API.html

|       |   |-- FAQ.html

|       |   |-- HTTP_Features.tsv

|       |   |-- client_block_api.html

|       |   |-- compat_notes.html

|       |   |-- custom_errordocs.html

|       |   |-- descriptors.html

|       |   |-- fin_wait_2.html

|       |   |-- footer.html

|       |   |-- header.html

|       |   |-- howto.html

|       |   |-- index.html

|       |   |-- known_client_problems.html

|       |   |-- nopgp.html

|       |   |-- perf-bsd44.html

|       |   |-- perf-dec.html

|       |   |-- perf-hp.html

|       |   |-- perf-tuning.html

|       |   |-- perf.html

|       |   |-- rewriteguide.html

|       |   |-- security_tips.html

|       |   |-- tutorials.html

|       |   |-- vif-info.html

|       |   `-- windoz_keepalive.html

|       |-- mod

|       |   |-- core.html.en

|       |   |-- core.html.fr

|       |   |-- core.html.html

|       |   |-- core.html.ja.jis

|       |   |-- directive-dict.html.en

|       |   |-- directive-dict.html.fr

|       |   |-- directive-dict.html.html

|       |   |-- directive-dict.html.ja.jis

|       |   |-- directives.html.de

|       |   |-- directives.html.en

|       |   |-- directives.html.fr

|       |   |-- directives.html.html

|       |   |-- directives.html.ja.jis

|       |   |-- footer.html

|       |   |-- header.html

|       |   |-- index-bytype.html.en

|       |   |-- index-bytype.html.fr

|       |   |-- index-bytype.html.html

|       |   |-- index-bytype.html.ja.jis

|       |   |-- index.html.en

|       |   |-- index.html.fr

|       |   |-- index.html.html

|       |   |-- index.html.ja.jis

|       |   |-- mod_access.html.en

|       |   |-- mod_access.html.html

|       |   |-- mod_access.html.ja.jis

|       |   |-- mod_actions.html.en

|       |   |-- mod_actions.html.html

|       |   |-- mod_actions.html.ja.jis

|       |   |-- mod_alias.html.en

|       |   |-- mod_alias.html.html

|       |   |-- mod_alias.html.ja.jis

|       |   |-- mod_asis.html.en

|       |   |-- mod_asis.html.html

|       |   |-- mod_asis.html.ja.jis

|       |   |-- mod_auth.html.en

|       |   |-- mod_auth.html.html

|       |   |-- mod_auth.html.ja.jis

|       |   |-- mod_auth_anon.html

|       |   |-- mod_auth_db.html

|       |   |-- mod_auth_dbm.html

|       |   |-- mod_auth_digest.html

|       |   |-- mod_autoindex.html.en

|       |   |-- mod_autoindex.html.html

|       |   |-- mod_autoindex.html.ja.jis

|       |   |-- mod_browser.html

|       |   |-- mod_cern_meta.html

|       |   |-- mod_cgi.html.en

|       |   |-- mod_cgi.html.html

|       |   |-- mod_cgi.html.ja.jis

|       |   |-- mod_cookies.html

|       |   |-- mod_digest.html

|       |   |-- mod_dir.html.en

|       |   |-- mod_dir.html.html

|       |   |-- mod_dir.html.ja.jis

|       |   |-- mod_dld.html

|       |   |-- mod_env.html.en

|       |   |-- mod_env.html.html

|       |   |-- mod_env.html.ja.jis

|       |   |-- mod_example.html

|       |   |-- mod_expires.html

|       |   |-- mod_headers.html

|       |   |-- mod_imap.html

|       |   |-- mod_include.html

|       |   |-- mod_info.html.en

|       |   |-- mod_info.html.html

|       |   |-- mod_info.html.ja.jis

|       |   |-- mod_isapi.html

|       |   |-- mod_log_agent.html

|       |   |-- mod_log_common.html

|       |   |-- mod_log_config.html.en

|       |   |-- mod_log_config.html.html

|       |   |-- mod_log_config.html.ja.jis

|       |   |-- mod_log_forensic.html.en

|       |   |-- mod_log_forensic.html.html

|       |   |-- mod_log_referer.html

|       |   |-- mod_mime.html.en

|       |   |-- mod_mime.html.html

|       |   |-- mod_mime.html.ja.jis

|       |   |-- mod_mime_magic.html

|       |   |-- mod_mmap_static.html

|       |   |-- mod_negotiation.html.en

|       |   |-- mod_negotiation.html.html

|       |   |-- mod_negotiation.html.ja.jis

|       |   |-- mod_proxy.html

|       |   |-- mod_rewrite.html.en

|       |   |-- mod_rewrite.html.html

|       |   |-- mod_rewrite.html.ja.jis

|       |   |-- mod_setenvif.html.en

|       |   |-- mod_setenvif.html.html

|       |   |-- mod_setenvif.html.ja.jis

|       |   |-- mod_so.html.en

|       |   |-- mod_so.html.html

|       |   |-- mod_so.html.ja.jis

|       |   |-- mod_speling.html.en

|       |   |-- mod_speling.html.html

|       |   |-- mod_speling.html.ja.jis

|       |   |-- mod_status.html

|       |   |-- mod_unique_id.html.en

|       |   |-- mod_unique_id.html.html

|       |   |-- mod_unique_id.html.ja.jis

|       |   |-- mod_userdir.html.en

|       |   |-- mod_userdir.html.html

|       |   |-- mod_userdir.html.ja.jis

|       |   |-- mod_usertrack.html

|       |   |-- mod_vhost_alias.html

|       |   |-- module-dict.html.en

|       |   |-- module-dict.html.html

|       |   `-- module-dict.html.ja.jis

|       |-- mpeix.html

|       |-- multilogs.html

|       |-- netware.html

|       |-- new_features_1_0.html

|       |-- new_features_1_1.html

|       |-- new_features_1_2.html

|       |-- new_features_1_3.html.en

|       |-- new_features_1_3.html.html

|       |-- new_features_1_3.html.ja.jis

|       |-- process-model.html.en

|       |-- process-model.html.html

|       |-- process-model.html.ja.jis

|       |-- programs

|       |   |-- ab.html

|       |   |-- apachectl.html.en

|       |   |-- apachectl.html.html

|       |   |-- apachectl.html.ja.jis

|       |   |-- apxs.html

|       |   |-- dbmmanage.html

|       |   |-- footer.html

|       |   |-- header.html

|       |   |-- htdigest.html

|       |   |-- htpasswd.html.en

|       |   |-- htpasswd.html.html

|       |   |-- htpasswd.html.ja.jis

|       |   |-- httpd.html.en

|       |   |-- httpd.html.html

|       |   |-- httpd.html.ja.jis

|       |   |-- index.html.en

|       |   |-- index.html.html

|       |   |-- index.html.ja.jis

|       |   |-- logresolve.html

|       |   |-- other.html

|       |   |-- rotatelogs.html

|       |   |-- suexec.html.en

|       |   |-- suexec.html.html

|       |   `-- suexec.html.ja.jis

|       |-- readme-tpf.html

|       |-- sections.html.en

|       |-- sections.html.html

|       |-- sections.html.ja.jis

|       |-- server-wide.html.en

|       |-- server-wide.html.fr

|       |-- server-wide.html.html

|       |-- server-wide.html.ja.jis

|       |-- sitemap.html

|       |-- sourcereorg.html

|       |-- stopping.html.en

|       |-- stopping.html.fr

|       |-- stopping.html.html

|       |-- suexec.html.en

|       |-- suexec.html.html

|       |-- suexec.html.ja.jis

|       |-- suexec_1_2.html

|       |-- unixware.html

|       |-- upgrading_to_1_3.html

|       |-- urlmapping.html

|       |-- vhosts

|       |   |-- details.html

|       |   |-- details_1_2.html

|       |   |-- examples.html

|       |   |-- fd-limits.html.en

|       |   |-- fd-limits.html.html

|       |   |-- fd-limits.html.ja.jis

|       |   |-- footer.html

|       |   |-- header.html

|       |   |-- host.html

|       |   |-- index.html.en

|       |   |-- index.html.html

|       |   |-- index.html.ja.jis

|       |   |-- ip-based.html

|       |   |-- mass.html

|       |   |-- name-based.html.en

|       |   |-- name-based.html.html

|       |   |-- name-based.html.ja.jis

|       |   |-- vhosts-in-depth.html

|       |   `-- virtual-host.html

|       |-- win_compiling.html.en

|       |-- win_compiling.html.html

|       |-- win_compiling.html.ja.jis

|       |-- win_service.html.en

|       |-- win_service.html.html

|       |-- win_service.html.ja.jis

|       |-- windows.html.en

|       |-- windows.html.html

|       `-- windows.html.ja.jis

|-- icons

|   |-- README

|   |-- README.html

|   |-- a.gif

|   |-- a.png

|   |-- alert.black.gif

|   |-- alert.black.png

|   |-- alert.red.gif

|   |-- alert.red.png

|   |-- apache_pb.gif

|   |-- apache_pb.png

|   |-- back.gif

|   |-- back.png

|   |-- ball.gray.gif

|   |-- ball.gray.png

|   |-- ball.red.gif

|   |-- ball.red.png

|   |-- binary.gif

|   |-- binary.png

|   |-- binhex.gif

|   |-- binhex.png

|   |-- blank.gif

|   |-- blank.png

|   |-- bomb.gif

|   |-- bomb.png

|   |-- box1.gif

|   |-- box1.png

|   |-- box2.gif

|   |-- box2.png

|   |-- broken.gif

|   |-- broken.png

|   |-- burst.gif

|   |-- burst.png

|   |-- c.gif

|   |-- c.png

|   |-- comp.blue.gif

|   |-- comp.blue.png

|   |-- comp.gray.gif

|   |-- comp.gray.png

|   |-- compressed.gif

|   |-- compressed.png

|   |-- continued.gif

|   |-- continued.png

|   |-- dir.gif

|   |-- dir.png

|   |-- diskimg.gif

|   |-- diskimg.png

|   |-- down.gif

|   |-- down.png

|   |-- dvi.gif

|   |-- dvi.png

|   |-- f.gif

|   |-- f.png

|   |-- folder.gif

|   |-- folder.open.gif

|   |-- folder.open.png

|   |-- folder.png

|   |-- folder.sec.gif

|   |-- folder.sec.png

|   |-- forward.gif

|   |-- forward.png

|   |-- generic.gif

|   |-- generic.png

|   |-- generic.red.gif

|   |-- generic.red.png

|   |-- generic.sec.gif

|   |-- generic.sec.png

|   |-- hand.right.gif

|   |-- hand.right.png

|   |-- hand.up.gif

|   |-- hand.up.png

|   |-- icon.sheet.gif

|   |-- icon.sheet.png

|   |-- image1.gif

|   |-- image1.png

|   |-- image2.gif

|   |-- image2.png

|   |-- image3.gif

|   |-- image3.png

|   |-- index.gif

|   |-- index.png

|   |-- layout.gif

|   |-- layout.png

|   |-- left.gif

|   |-- left.png

|   |-- link.gif

|   |-- link.png

|   |-- movie.gif

|   |-- movie.png

|   |-- p.gif

|   |-- p.png

|   |-- patch.gif

|   |-- patch.png

|   |-- pdf.gif

|   |-- pdf.png

|   |-- pie0.gif

|   |-- pie0.png

|   |-- pie1.gif

|   |-- pie1.png

|   |-- pie2.gif

|   |-- pie2.png

|   |-- pie3.gif

|   |-- pie3.png

|   |-- pie4.gif

|   |-- pie4.png

|   |-- pie5.gif

|   |-- pie5.png

|   |-- pie6.gif

|   |-- pie6.png

|   |-- pie7.gif

|   |-- pie7.png

|   |-- pie8.gif

|   |-- pie8.png

|   |-- portal.gif

|   |-- portal.png

|   |-- ps.gif

|   |-- ps.png

|   |-- quill.gif

|   |-- quill.png

|   |-- right.gif

|   |-- right.png

|   |-- screw1.gif

|   |-- screw1.png

|   |-- screw2.gif

|   |-- screw2.png

|   |-- script.gif

|   |-- script.png

|   |-- small

|   |   |-- back.gif

|   |   |-- back.png

|   |   |-- binary.gif

|   |   |-- binary.png

|   |   |-- binhex.gif

|   |   |-- binhex.png

|   |   |-- blank.gif

|   |   |-- blank.png

|   |   |-- broken.gif

|   |   |-- broken.png

|   |   |-- burst.gif

|   |   |-- burst.png

|   |   |-- comp1.gif

|   |   |-- comp1.png

|   |   |-- comp2.gif

|   |   |-- comp2.png

|   |   |-- compressed.gif

|   |   |-- compressed.png

|   |   |-- continued.gif

|   |   |-- continued.png

|   |   |-- dir.gif

|   |   |-- dir.png

|   |   |-- dir2.gif

|   |   |-- dir2.png

|   |   |-- doc.gif

|   |   |-- doc.png

|   |   |-- forward.gif

|   |   |-- forward.png

|   |   |-- generic.gif

|   |   |-- generic.png

|   |   |-- generic2.gif

|   |   |-- generic2.png

|   |   |-- generic3.gif

|   |   |-- generic3.png

|   |   |-- image.gif

|   |   |-- image.png

|   |   |-- image2.gif

|   |   |-- image2.png

|   |   |-- index.gif

|   |   |-- index.png

|   |   |-- key.gif

|   |   |-- key.png

|   |   |-- movie.gif

|   |   |-- movie.png

|   |   |-- patch.gif

|   |   |-- patch.png

|   |   |-- ps.gif

|   |   |-- ps.png

|   |   |-- rainbow.gif

|   |   |-- rainbow.png

|   |   |-- sound.gif

|   |   |-- sound.png

|   |   |-- sound2.gif

|   |   |-- sound2.png

|   |   |-- tar.gif

|   |   |-- tar.png

|   |   |-- text.gif

|   |   |-- text.png

|   |   |-- transfer.gif

|   |   |-- transfer.png

|   |   |-- unknown.gif

|   |   |-- unknown.png

|   |   |-- uu.gif

|   |   `-- uu.png

|   |-- sound1.gif

|   |-- sound1.png

|   |-- sound2.gif

|   |-- sound2.png

|   |-- sphere1.gif

|   |-- sphere1.png

|   |-- sphere2.gif

|   |-- sphere2.png

|   |-- tar.gif

|   |-- tar.png

|   |-- tex.gif

|   |-- tex.png

|   |-- text.gif

|   |-- text.png

|   |-- transfer.gif

|   |-- transfer.png

|   |-- unknown.gif

|   |-- unknown.png

|   |-- up.gif

|   |-- up.png

|   |-- uu.gif

|   |-- uu.png

|   |-- uuencoded.gif

|   |-- uuencoded.png

|   |-- world1.gif

|   |-- world1.png

|   |-- world2.gif

|   `-- world2.png

|-- include

|   |-- ap.h

|   |-- ap_alloc.h

|   |-- ap_compat.h

|   |-- ap_config.h

|   |-- ap_config_auto.h

|   |-- ap_ctype.h

|   |-- ap_ebcdic.h

|   |-- ap_md5.h

|   |-- ap_mmn.h

|   |-- ap_sha1.h

|   |-- buff.h

|   |-- compat.h

|   |-- conf.h

|   |-- explain.h

|   |-- fnmatch.h

|   |-- hsregex.h

|   |-- http_conf_globals.h

|   |-- http_config.h

|   |-- http_core.h

|   |-- http_log.h

|   |-- http_main.h

|   |-- http_protocol.h

|   |-- http_request.h

|   |-- http_vhost.h

|   |-- httpd.h

|   |-- multithread.h

|   |-- os-inline.c

|   |-- os.h

|   |-- rfc1413.h

|   |-- scoreboard.h

|   |-- util_date.h

|   |-- util_md5.h

|   |-- util_script.h

|   |-- util_uri.h

|   `-- xml

|       |-- asciitab.h

|       |-- hashtable.h

|       |-- iasciitab.h

|       |-- latin1tab.h

|       |-- nametab.h

|       |-- utf8tab.h

|       |-- xmldef.h

|       |-- xmlparse.h

|       |-- xmlrole.h

|       |-- xmltok.h

|       `-- xmltok_impl.h

|-- libexec

|   |-- httpd.exp

|   |-- libhttpd.ep

|   |-- libhttpd.so

|   |-- libphp4.so

|   |-- mod_access.so

|   |-- mod_actions.so

|   |-- mod_alias.so

|   |-- mod_asis.so

|   |-- mod_auth.so

|   |-- mod_autoindex.so

|   |-- mod_cgi.so

|   |-- mod_dir.so

|   |-- mod_env.so

|   |-- mod_imap.so

|   |-- mod_include.so

|   |-- mod_log_config.so

|   |-- mod_mime.so

|   |-- mod_negotiation.so

|   |-- mod_setenvif.so

|   |-- mod_status.so

|   |-- mod_userdir.so

|   `-- mod_vhost_alias.so

|-- logs

|   |-- access_log

|   |-- error_log

|   `-- httpd.pid

|-- man

|   |-- man1

|   |   |-- dbmmanage.1

|   |   |-- htdigest.1

|   |   `-- htpasswd.1

|   `-- man8

|       |-- ab.8

|       |-- apachectl.8

|       |-- apxs.8

|       |-- httpd.8

|       |-- logresolve.8

|       `-- rotatelogs.8

`-- proxy


21 directories, 612 files


5. 세팅

- 아파치의 실행파일들을 $PATH 디렉토리에 심볼릭 링크를 건다.

- 심볼릭 링크를 거는 이유 : 아무 디렉토리에서 실행파일을 실행시켜 주기 위함이다.

# ln -s /usr/local/apache/bin/* /usr/bin


- 부팅시 실행 스크립트를 등록한다.

# ln -s /usr/local/apache/bin/apachectl /etc/init.d/httpd  


- chkconfig 를 지원하지 않을 때의 메세지

# chkconfig --add httpd

service httpd does not support chkconfig


- mysqld 의 start 와 stop의 번호를 확인한다.

# ls /etc/rc3.d/*mysql*

/etc/rc3.d/S90mysqld


# head -20 /etc/init.d/mysqld

// head 위에서 20줄 보여주세요

-- /etc/init.d/mysqld --

  :

  :

# Comments to support chkconfig on RedHat Linux

# chkconfig: 2345 90 20

# description: A very fast and reliable SQL database engine.

  :

  :

-- /etc/init.d/mysqld --


- 부팅시 웹서버가 시작될 수 있도록 스크립트를 등록한다.

- 시작은 mysql 보다 늦게 중지는 mysql 보다 빠르게 등록한다.

# vi /etc/init.d/httpd 

-- /etc/init.d/httpd --

#!/bin/sh

// 두 가지 중요

# chkconfig: 2345 91 19              <--  추가

              런레벨 스타트 스탑

# description: Apache web server     <--  추가

// 중요중요 쉘 스크립트

  :

  :

-- /etc/init.d/httpd --


# chkconfig --add httpd

# chkconfig --list httpd

httpd           0:off 1:off 2:on 3:on 4:on 5:on 6:off


- 각 런레벨 디렉토리의 링크를 확인한다.

# ls -l /etc/rc.d/rc[0-6].d/*httpd

lrwxrwxrwx 1 root root 15 Sep 23 07:18 /etc/rc.d/rc0.d/K19httpd -> ../init.d/httpd

lrwxrwxrwx 1 root root 15 Sep 23 07:18 /etc/rc.d/rc1.d/K19httpd -> ../init.d/httpd

lrwxrwxrwx 1 root root 15 Sep 23 07:18 /etc/rc.d/rc2.d/S91httpd -> ../init.d/httpd

lrwxrwxrwx 1 root root 15 Sep 23 07:18 /etc/rc.d/rc3.d/S91httpd -> ../init.d/httpd

lrwxrwxrwx 1 root root 15 Sep 23 07:18 /etc/rc.d/rc4.d/S91httpd -> ../init.d/httpd

lrwxrwxrwx 1 root root 15 Sep 23 07:18 /etc/rc.d/rc5.d/S91httpd -> ../init.d/httpd

lrwxrwxrwx 1 root root 15 Sep 23 07:18 /etc/rc.d/rc6.d/K19httpd -> ../init.d/httpd



#########################

##    GD 라이브러리  설치     ##

#########################

- GD Library 란  

- Graphics 라이브러리로 선, 도형, 텍스트, 다중 색깔, 

- 이미지의 cut paste, 채우기 등의 이미지 처리기능과 이 결과를 

- 그래픽 파일로 (gif,jpeg,png) 저장하는 기능을 제공한다.


- GD 라이브러리는 소스로 설치하는 방법과 yum으로 설치하는 방법있다.

- 여기서는 yum으로 설치하는 방법을 이용한다.

# yum -y install gd gd-devel libjpeg libjpeg-devel \

giflib giflib-devel libpng libpng-devel freetype freetype-devel


##############

## php 설치 ##

##############


+-----+    +-----+     +-----+     +-----+

|  C    |     |  S    |      |  P   |       |       |

|  L    |--> |  E    | --> |  H   | --> |  M  |

|  I     |<-- |  R   | <-- |  P   | <--  |  Y   |

|  E    |     |  V   |       | 파   |       |  S   |

|  N   |     |  E    |       | 서   |       |  Q  |

|  T    |     |  R   |       |       |       |  L   |

+-----+   +-----+      +-----+     +-----+


1. php 설치 전 확인

-  php 가 설치되어 있으면 삭제한다.

# rpm -qa | grep php   

# rpm -e php-cli php-common


2. 환경설정

- configure 옵션은 config.status 파일에 저장되고 phpinfo() 함수에서도 확인이 가능하다.

# tar xzf php-4.4.8.tar.gz

# cd php-4.4.8


- ./configure --help 로 옵션을 확인해보자.

# ./configure --help 

  :

  :


- 옵션 설명

- --prefix : 설치 디렉토리

//

- --with-apxs : 아파치가 설치된 경로의 apxs 실행파일

- --with-mysql : mysql 라이브러리 사용

// 두개 중요 !! php가 mysql을 인식하는 것, php가 apache를 인식하는 것

- --with-gd : GD 라이브러리 사용

- --with-jpeg-dir : GD 라이브러리 사용

- --with-png-dir  : GD 라이브러리 사용

- --with-freetype-dir  : GD 라이브러리 사용

- --with-zlib : 압축 전송

# ./configure \

--prefix=/usr/local/php \

--with-apxs=/usr/local/apache/bin/apxs \

--with-mysql \

--with-gd \ 

//  밑 부분은 gd 라이브러리 이기때문에 gd 안쓰면 밑에껀 안써도됨 

--with-jpeg-dir \

--with-png-dir \

--with-freetype-dir \

--with-zlib 


3. 컴파일

- make 명령어를 이용해서 컴파일 한다.

# make


4. 보안점검(여기서는 생략한다.)

-- # make test    


5. 설치

- make install을 이용해서 설치한다.

# make install


6.  세팅 

- php 소스에는 기본적으로 샘플 설정파일이 제공되므로 

- 이 샘플 설정파일을 시스템에 복사한다.

- 참고 : apm의 설정파일

- apache : httpd.conf

- php    : php.ini

- mysql  : my.cnf 

# cp php.ini-dist /usr/local/php/lib/php.ini      


- php 실행파일들을 링크를 건다.

# ln -s /usr/local/php/bin/* /usr/bin


- 아파치의 모듈 디렉토리에서 php 모듈을 확인한다.

- 참고 : 

- lib<라이브러리명>.a  <-- 정적라이브러리      (~~~.lib)

- lib<라이브러리명>.so <-- 동적,공유라이브러리 (~~~.dll)

- c 라이브러리 : /usr/lib/libc.a /usr/lib/libc.so

-  ar t /usr/lib/libc.a | grep ^printf

# ls /usr/local/apache/libexec/libphp4.so 

 (libexec --> version2 부터는 modules로 나올 걸?)


- 아파치에서 PHP 를 인식할 수 있도록 설정한다.

- 407번 라인에 index.php 를 추가한다.

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

-- /usr/local/apache/conf/httpd.conf --

  :

  :

<IfModule mod_dir.c>  

    DirectoryIndex index.html index.php 

</IfModule>

  :

  :


- 800번 라인 부근에 AddType application/x-tar .tgz  아래에

  AddType 두 줄을 추가한다.

AddType application/x-tar .tgz  

AddType application/x-httpd-php .php .html 

# AddType application/x-httpd-php-source .phps        


-- /usr/local/apache/conf/httpd.conf --


- SELinux 가 설정되어 있으면 아래 에러가 발생되므로 이때는

- SELinux 를 중지하고 Syntax OK 가 나오면 SELinux 설정은 Skip 한다.

# apachectl configtest    

Syntax error on line 223 of /usr/local/apache/conf/httpd.conf:

Cannot load /usr/local/apache/libexec/libphp4.so into server: /usr/local/apache/libexec/libphp4.so: cannot 


restore segment prot after reloc: Permission denied


# setup   

Firewall configuration ->   

Security Level (disabled) , SELinux (disabled) 로 설정 후 종료한다.


- 아파치 웹서버의 설정파일을 점검한다.

# apachectl configtest

Syntax OK


- 아파치 웹서버를 재시작한다.

# apachectl restart

/usr/bin/apachectl restart: httpd restarted


- 웹서버 포트 80번이 떠있는지 확인한다.

- 만약 없다면 웹서버가 실행이 안된 것이므로 왜 안떠졌는지 로그파일의

- 기록을 통해서 확인해봐야 한다.

# netstat -nltp | grep 80

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1432/httpd    


- 방화벽에서 웹서버(80) 포트를 접속하도록 설정해야 하지만 

- 아직 방화벽에 대한 부분을 배우지 않은 관계로 지금은 방화벽룰을

- 모두 해제시켜준다.

- 아래는 방화벽룰을 설정할 때의 내용이다.

- -I (대문자 아이)

- # iptables -I INPUT -p tcp --dport 80 -j ACCEPT

# iptables -F


- 웹 루트 디렉토리(DocumentRoot)에 임시로 제공되는 파일들을 

- 삭제하고 샘플 파일을 생성해야 한다.

- 웹 루트 디렉토리란 ?

- 웹페이지 문서가 제공되는 디렉토리를 얘기하며 실무에서는 

- DocumentRoot 디렉토리라고 얘기하기도 한다.


- Default 파일 모두 삭제

# cd /usr/local/apache/htdocs

# rm -rf *                           


- php 문서파일을 생성한다 

# echo '<? phpinfo(); ?>' > index.html   


- 자신의 IP 주소를 확인한다.

# ifconfig 


- 브라우저에서 확인된 IP주소로 접속해서 웹페이지를 확인한다.

- 1. APM 연동 성공

-   파란 화면이 나오면 APM 연동이 성공적으로 된 것이다.

- 2. APM 연동 실패

-   다운로드가 되거나 php 소스가 보이면 연동이 안된 것이다.

http://<Linux IP주소>


- cgi 문서파일 생성한다.

# cd /usr/local/apache/cgi-bin

# vi cgitest.c

-- cgitest.c --

#include <stdio.h>

int main()

{

  printf("Content-type: text/html\n\n");

  printf("<center> Hello CGI </center>");

  return 0;

}

-- cgitest.c --


# gcc -Wall -o cgitest.cgi cgitest.c


- 브라우저에서 확인된 IP주소로 접속해서 CGI 페이지를 확인한다.

http://<Linux IP>/cgi-bin/cgitest.cgi


- php 명령어를 이용해서 모듈을 확인한다.

# php -m

[PHP Modules]

ctype

gd

mysql

overload

pcre

posix

session

standard

tokenizer

xml

zlib


[Zend Modules]


- APM 의 설정파일은 모두 틀리다.

- 왜 ? 만든 곳이 틀려서 그런가 ?

- 관리상 /etc 디렉토리에 APM 설정파일들을 심볼릭 링크로 생성한다.

- /usr/local/apache/conf/httpd.conf 

- /usr/local/php/lib/php.ini 

- /etc/my.cnf 


# ln -s /usr/local/apache/conf/httpd.conf /etc/httpd.conf

# ln -s /usr/local/php/lib/php.ini /etc/php.conf

# ln -s /etc/my.cnf  /etc/mysql.conf


# ls -l /etc/{httpd,php,mysql}.conf

lrwxrwxrwx 1 root root 33 Aug 12 17:29 /etc/httpd.conf -> /usr/local/apache/conf/httpd.conf

lrwxrwxrwx 1 root root 11 Aug 12 17:29 /etc/mysql.conf -> /etc/my.cnf

lrwxrwxrwx 1 root root 26 Aug 12 17:29 /etc/php.conf -> /usr/local/php/lib/php.ini

-------------------------- APM 세팅 끝 -------------------------- 


==================================================================

APM-LAB> 설치된 APM을 삭제해보자.


- 데몬을 중지

- 설치된 프로그램을 삭제한다.

- 윈도우처럼 레지스트리가 없어서 그냥 설치된 디렉토리를 날리면 끝

- 컴파일한 소스디렉토리를 삭제한다.


-- 순서 --

1. 데몬(서비스) 중지

2. 중지된 데몬(서비스) 확인

3. 설치 프로그램 삭제

-- 순서 --


1. 데몬(서비스) 중지

- 외부에 서비스를 하기 위해서 포트를 열어놓은 서비스를 중지한다.

- 아파치 웹서버는 80 포트를 사용하고 DB는 3306 포트를 사용하므로 

- 이 두 개의 데몬을 중지한다.

# /etc/init.d/httpd stop  or apachectl stop

# /etc/init.d/mysqld stop


2. 중지된 데몬(서비스) 확인

- netstat 명령어를 이용해서 LISTEN 된 포트를 확인해서 

- 80과 3306 포트가 없어야 된다. 

- 또한 mysql은 skip-networking 으로 설정이 되어있다면 포트가 

- 열려있지 않으므로 이때는 /tmp/mysql.sock 파일을 확인한다.

# netstat -nltp 

   :

# ls /tmp/mysql.sock

ls: /tmp/mysql.sock: No such file or directory


3. 설치 프로그램 삭제

- 설치된 프로그램을 삭제한다.


# rm -rf /usr/local/apache

# rm -rf /usr/local/php

# rm -rf /usr/local/mysql


# rm -fv /etc/{apache,php,mysql}.conf

# rm -fv /etc/my.cnf

# rm -fv /etc/init.d/mysqld

# rm -fv /etc/init.d/httpd

# rm -fv ~/.my.cnf 


# rm -fv /usr/bin/mysql*

# rm -fv /usr/sbin/mysqld

# rm -fv /usr/bin/php*

# rm -fv /usr/bin/apache*

# rm -fv /usr/bin/httpd*


# userdel -r mysql


- 컴파일한 소스디렉토리를 삭제한다.

# cd ~/apm1

# find  -maxdepth 1 -type d -exec rm -rf {} \;

==================================================================


==================================================================

APM-LAB> MySQL(DBMS) 에서 사용자를 생성하고 DB/TABLE 을 생성해보자.


DATABASE 를 DB라고 줄여서 얘기하고 또한 DBMS DB라고 줄여서 얘기한다.


-- 순서 --

1. DB 생성

2. 사용자 등록

3. TABLE 생성

-- 순서 --


1. DB 생성

- 일반 유저가 사용할 수 있는 DB를 생성한다.

형식 : CREATE DATABASE DB명;


mysql> create database shop;

Query OK, 1 row affected (0.00 sec)


mysql> show databases;

+----------+

| Database |

+----------+

| mysql    |

| shop     |

| test     |

+----------+

3 rows in set (0.00 sec)


2. 사용자 등록

- 일반 사용자를 등록한다.

- 사용자 등록은 insert 문을 이용해서 등록한다.

- DB : mysql -> 

- user table : 사용자의 정보가 있는 테이블 (비밀번호가 있다)

- db   table : 사용자가 DB를 사용할 수 있는 권한이 있는 테이블

- user, db 테이블에 값을 넣어주고 flush privileges 를 해주면 끝

- user : /etc/{passwd,shadow} 동일


- 사용자 : shopuser

- 비밀번호 : shpuser1234!


mysql> use mysql

Database changed

mysql> desc user;


- 일반유저 shopuser를 생성한다.

mysql> insert into user (host,user,password) values(          

    -> 'localhost','shopuser', password('shopuser1234!'));

Query OK, 1 row affected (0.00 sec)


- 사용자의 비번을 확인한다.

mysql> select host,user,password from user

    -> where user = 'shopuser' 

    ->       and 

    -> password = password('shopuser1234!');

+-----------+----------+------------------+

| host      | user     | password         |

+-----------+----------+------------------+

| localhost | shopuser | 1a7912ea36e1cb56 |

+-----------+----------+------------------+

1 row in set (0.00 sec)


mysql> desc db;


- 사용자가 db내에서 모든 권한을 행사할 수 있도록 설정한다.

mysql> insert into db values(

    -> 'localhost','shop','shopuser',

    -> 'y','y','y','y','y','y','y','y','y','y','y','y');

Query OK, 1 row affected (0.00 sec)


mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)


- 사용자가 정상적으로 등록되었는지 확인한다.

mysql> select host,user,password from user;

+-----------+----------+------------------+

| host      | user     | password         |

+-----------+----------+------------------+

| localhost | root     | 57c0dba50319edd5 |

| localhost | shopuser | 1a7912ea36e1cb56 |

+-----------+----------+------------------+

2 rows in set (0.00 sec)


mysql> select host,user,db from db;

+-----------+----------+------+

| host      | user     | db   |

+-----------+----------+------+

| localhost | shopuser | shop |

+-----------+----------+------+

1 row in set (0.00 sec)



3. TABLE 생성

- 일반 유저로 접속해서 TB을 생성한다.

- 형식 : mysql -h localhost -u 사용자 -p[비밀번호] [DB명]

- 형식 : CREATE TABLE 테이블명 ( 필드명 필드타입 [,...] );

mysql> quit


- 생성된 일반유저에서 shop DB로 접속해본다.

# mysql -h localhost -u shopuser -p shop

Enter password:     <-- 비번 입력 : shopuser1234


mysql> select user();

+--------------------+

| user()             |

+--------------------+

| shopuser@localhost |

+--------------------+

1 row in set (0.00 sec)


mysql> select database();

+------------+

| database() |

+------------+

| shop       |

+------------+

1 row in set (0.00 sec)


- member 테이블을 생성한다.

mysql> create table member (          

    -> no int not null default 0 auto_increment,

    -> userid varchar(20) not null,

    -> userpw char(16) not null,

    -> primary key(no)) TYPE=MyISAM;

Query OK, 0 rows affected (0.00 sec)


mysql> desc member;

+--------+-------------+------+-----+---------+----------------+

| Field  | Type        | Null | Key | Default | Extra          |

+--------+-------------+------+-----+---------+----------------+

| no     | int(11)     |      | PRI | NULL    | auto_increment |

| userid | varchar(20) |      |     |         |                |

| userpw | varchar(16) |      |     |         |                |

+--------+-------------+------+-----+---------+----------------+

3 rows in set (0.00 sec)


- member 테이블에 값을 넣는다.

- 형식 : INSERT INTO 만든테이블명 VALUES(필드값, ... )

mysql> insert into member values('', 'testuser', password('1234'));

Query OK, 1 row affected (0.00 sec)


mysql> insert into member values('', 'testuser2', password('1234'));

Query OK, 1 row affected (0.00 sec)


- member 테이블의 값을 확인한다.

- 형식 : SELECT 컬럼명  <-- 모든 컬럼명(*) userid,userpw

         FROM 테이블명

mysql> select *

    -> from member;

+----+-----------+------------------+

| no | userid    | userpw           |

+----+-----------+------------------+

|  1 | testuser  | 446a12100c856ce9 |

|  2 | testuser2 | 446a12100c856ce9 |

+----+-----------+------------------+

2 rows in set (0.00 sec)



mysql> select * from member;

+------+-----------+------------------+

| no   | userid    | userpw           |

+------+-----------+------------------+

|    1 | testuser  | 446a12100c856ce9 |

|    2 | testuser2 | 3fb6947541ec4738 |

+------+-----------+------------------+

2 rows in set (0.00 sec)




==================================================================


==================================================================

APM-LAB> PHP 를 이용해서 DB에 저장된 자료를 화면 출력해보자.


# mysql -h localhost -u root -pksw1234 mysql 

mysql> select host,user,password from user;

  :

  :


-- 순서 --

1. DBMS 접속한다.

2. DB 선택한다.

3. 쿼리 실행한다.

4. Data 를 출력한다.

-- 순서 --


<?php

// 1. DBMS에 접속한다.

// 사용법 : mysql_connect("호스트명", "사용자명", "비밀번호")

$connect = @mysql_connect("localhost","shopuser","shopuser1234!") or die("DB에 접속할 수 없습니다");


// 2. DB를 선택한다.

// 사용법 : mysql_select_db("디비명", $connect)

$select_db = mysql_select_db("shop", $connect);


// 3. 쿼리를 실행한다.

// 사용법 : mysql_query("실행할 쿼리문")

$result = mysql_query("SELECT * FROM member");



// 4. Data를 출력한다.

$number = mysql_num_rows($result); // 전체 자료의 개수를 구한다.


for(; $number > 0; $number--)

{   

  $row = mysql_fetch_array($result);

  echo "no = $row[no], userid = $row[userid], userpw = $row[userpw] <br>";        

}   


?>  


-- 출력결과 --

no=1, userid=testuser, userpw=446a12100c856ce9 

no=2, userid=testuser2, userpw=3fb6947541ec4738 

-- 출력결과 --


==================================================================


==================================================================

APM-LAB> php를 이용한 로그인 구현하기


아래 웹 프로그램을 이해하기 위해서는 php 언어와 세션에 대한 

이해가 먼저 선행되어야 한다.

우리는 아직 이 내용을 안배웠기 때문에 전체적인 흐름만 이해하면 된다.


-- 조건 --

1. 전송방식  : post 방식

2. 전송URL   : login.php -> loginok.php 

3. 기능 설명 : 사용자가 로그인을 안했다면 로그인폼을 보여주고 

               로그인을 했다면 사용자의 userid를 출력한다.

4. 로그인 흐름도

login.php -> loginok.php 

   |

   +-------> logout.php


5. 웹 프로그램 파일들의 역할

login.php   : 사용자가 입력폼에서 userid 와 userpw 값을 입력한다.

              login 버튼을 누르면 loginok.php로 사용자가 입력한

              값을 보내준다.

loginok.php : 사용자가 보내준 값을 받아서 DB의 member TB에서  

              사용자 아이디와 비밀번호  정보를 조회한다. 

              이때 사용자가 있다면  로그인을 허용하고 

              틀리다면 거부를 화면에 출력한다.

logout.php  : 사용자가 로그인했다면 로그아웃을 해준다.

-- 조건 --


o 웹 프로그램 소스

-- login.php --

<?

/*-------------------.

 |  Written by K.S.W |

 `-------------------*/

session_start();

if(!isset($_SESSION['userid']))  // 로그인이 안되었으면

{

?>


<form method=post action=loginok.php>

<table align=center border=1 cellpadding=5 cellspacing=0 width=250>

  <tr>

    <td align=ceter> id </td>

    <td> <input type=text name=userid> </td>

  </tr>

  <tr>

    <td align=ceter> pw </td>

    <td> <input type=password name=userpw> </td>

  </tr>

  <tr>

    <td align=center colspan=2> 

<input type=submit value=로그인> 

    </td>

  </tr>

</table>

</form>

<?

} else {  // 로그인이 되었다면

?>

<table align=center border=1 

       cellpadding=5 cellspacing=0 width=250>

  <tr>

    <td align=ceter> 

<?=$_SESSION['userid']?> 님 환영합니다!!!  

    </td>

  </tr>

  <tr>

    <td align=center colspan=2> 

       <a href=logout.php>로그아웃</a>

    </td>

  </tr>

</table>

<?

}

?>

-- login.php --


-- loginok.php --

<?

/*-------------------.

 |  Written by K.S.W |

 `-------------------*/

session_start();


$connect = mysql_connect("localhost","shopuser","shopuser1234!") or die("DB에 접속할 수 없습니다");

$select_db = mysql_select_db("shop", $connect);



// 넘어온 사용자와 비번을 DB에서 검색한다.

$query = "SELECT * FROM member WHERE userid = '" . $_POST['userid']  .  "' and  userpw = password('" . 


$_POST['userpw'] . "')";

$result = mysql_query($query);


// 전체 사용자를 구한다.

$number = mysql_num_rows($result); 


 if($number) // 사용자가 존재하면

 {

   $row = mysql_fetch_array($result);

   $_SESSION['userid'] = $row['userid'];


   echo "<script language=JavaScript>

          location.href = 'login.php';

         </script>

        ";

 } else {  // 사용자가 존재하지 않다면

     echo "<script language=JavaScript>

  alert('id 와 pw 를 다시 확인해주세요!');

            history.go(-1);

  </script>

          ";

     exit;

   }


?>

-- loginok.php --


-- logout.php --

<?

/*-------------------.

 |  Written by K.S.W |

 `-------------------*/

session_start();

session_destroy();  // 세션 파일을 삭제한다.

?>

<meta http-equiv=refresh content='0; url=login.php'>

-- logout.php --


==================================================================


###################

## php 실무 TIP  ##

###################


1. 어떤 소스를 가져와서 실행할려고 했더니 아래와 같은 에러메세지가 발생되었다.

- Call to undefined function: socket_create() 이라는 메세지는 현재 socket_create() 함수가 실행되는 라이브러


가 php 파서가 

  인식을 못하기 때문이다. 

  해결방안 : php 를 socket_create() 함수가 인식되게 다시 컴파일해야 한다.


Fatal error: Call to undefined function: socket_create() 


o php 파일에 포함되어 있는 라이브러리

- php를 컴파일할때 옵션으로 enable 시켜준다.


o php 파일에 포함되지 않은 라이브러리 

- 외부의 파일을 가져와서 먼저 설치한 후에 php 를 컴파일할때 enable 시켜준다.


# cd /usr/local/apache/htdocs

# vi index.html

-- index.html -- 

  1 <?php

  2 error_reporting(E_ALL);

  3

  4 /* Allow the script to hang around waiting for connections. */

  5 set_time_limit(0);

  6

  7 /* Turn on implicit output flushing so we see what we're getting as it comes in. */

  8 ob_implicit_flush();

  9

 10 $address = '0.0.0.0';

 11 $port = 10000;

 12

 13 if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) == false) {

 14    echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";

 15 }

 16

 17 if (socket_bind($sock, $address, $port) == false) {

 18    echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";

 19 }

 20

 21 if (socket_listen($sock, 5) == false) {

 22    echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";

 23 }

 24

 25 if (($msgsock = socket_accept($sock)) === false) {

 26        echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error($sock)) . "\n";

 27        break;

 28 }

 29 /* Send instructions. */

 30 $msg = "\nWelcome to the PHP Test Server. \n" .  "To quit, type 'quit'. To shut down the server type 


'shutdown'.\n";

 31

 32 socket_write($msgsock, $msg, strlen($msg));

 33 socket_close($msgsock);

 34

 35 socket_close($sock);

 36 ?>


-- index.html -- 


브라우저에서 접근시 : http://192.168.56.101   <-- 정상적으로 실행이 안된다.

Fatal error: Call to undefined function: socket_create()  에러가 발생한다.


-- 해결방안 --

!!! 기존 소스 디렉토리로 이동해서 socket 함수를 쓸 수 있도록 옵션을 추가해서 다시 재설치 한다. !!!


# cd <php source directory>

# ./configure  \

--prefix=/usr/local/php \

--with-apxs=/usr/local/apache/bin/apxs \

--with-mysql \

--enable-sockets                               <-- 추가한다. 

# make

# make install 

# apachectl restart


브라우저에서 접근시 : http://192.168.56.101    <-- 정상적으로 실행이 된다.


# netstat -nat

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Pro

  :

  :

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      32179/h/httpd

tcp        0      0 0.0.0.0:10000               0.0.0.0:*                   LISTEN      32386/httpd          


<-- 10000 포트가 열렸다.

  :

  :



!!! php 에서 기능들을 확인하는 옵션 


# ./configure --help | grep with

  :

  :

  --with-mysql[=DIR]      Include MySQL support. DIR is the MySQL base directory.

  :

  :

# ./configure --help | grep enable

  :

  :

  --enable-sockets        Enable sockets support

  :

  :



#########################

## 배포판에서 APM 설치 ##

#########################

!!! yum 을 이용해서 Web Server 를 설치하면 자동으로 php 가 설치된다. !!!


yum 으로 설치할때 

- 실행파일 위치 : /usr/bin, /usr/sbin

- 설정파일 위치 : /etc/httpd/conf, /etc/httpd/conf.d

- 문서파일 위치 : /var/www/html

- 로그파일 위치 : /var/log/httpd

- 실행파일 스크립트 : /etc/init.d/httpd, /usr/sbin/apachectl


소스로 설치할때 ( --prefix=/usr/local/apache, --with-layout=Apache 일때 config.layout 을 참고 )

- 실행파일 위치 : $PREFIX/bin

- 설정파일 위치 : $PREFIX/conf

- 문서파일 위치 : $PREFIX/htdocs

- 로그파일 위치 : $PREFIX/logs

- 실행파일 스크립트 : $PREFIX/bin/apachectl 


소스로 설치하는데 레드햇의 분산 파일로 설치하고 싶다면 (--with-layout=RedHat 옵션을 사용한다. 단 이 옵션 이


외의 다른 옵션들은 모두 써줘야 한다.)



# yum groupinstall "Web Server"


# vi /etc/httpd/conf.d/php.conf             <-- html 확장자를 추가

-- /etc/httpd/conf.d/php.conf --

  :

  :

AddHandler php5-script .php

AddType text/html .php .html                 <-- php 가 설치될때 설정에서 .html 이 인식이 안된다. 관리자가 


따로 수정해줘야 한다.


DirectoryIndex index.php index.html          <-- php 가 설치될때 설정에서 .html 이 인식이 안된다. 관리자가 


따로 수정해줘야 한다.

  :

  :

-- /etc/httpd/conf.d/php.conf --


# /etc/init.d/httpd restart

# cd /var/www/html

# echo '<?php phpinfo(); ?>' > index.html


브라우저로 옵션을 확인한다.  http://192.168.56.101


'./configure' '--build=i386-redhat-linux-gnu' '--host=i386-redhat-linux-gnu' '--target=i386-redhat-linux-


gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--


sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib' '--


libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--


infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib' '--with-config-file-path=/etc' 


'--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' 


'--with-bz2' '--with-curl' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--


enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' 


'--with-openssl' '--with-png' '--with-pspell' '--with-expat-dir=/usr' '--with-pcre-regex=/usr' '--with-zlib' 


'--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-


sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-track-vars' '--enable-trans-sid' '--enable-yp' '--


enable-wddx' '--with-kerberos' '--enable-ucd-snmp-hack' '--with-unixODBC=shared,/usr' '--enable-memory-


limit' '--enable-shmop' '--enable-calendar' '--enable-dbx' '--enable-dio' '--with-mime-


magic=/usr/share/file/magic.mime' '--without-sqlite' '--with-libxml-dir=/usr' '--with-xml' '--with-system-


tzdata' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--without-odbc' '--disable-dom' '--


disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter'




'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] CentOS 목차  (0) 2017.07.22
[CentOS] 16. APM2 설치  (0) 2016.07.30
[CentOS] 14-2 패키지 관리 - tomcatWAS설치  (3) 2016.07.10
[CentOS] 14-1 패키지 관리 - tomcat 환경설정  (0) 2016.07.10
[CentOS] 14. 패키지 관리  (0) 2016.07.10

CentOS 5.8 -> 6.x , 7.x 


어댑터1 : NAT

어댑터2 : 호스트전용 어댑터


서버\리눅스\서버\tomcat


- 리눅스에 업로드

apache-tomcat-7.0.59.tar.gz

jdk-8u31-linux-i586.tar.gz


웹서버 : 정적 컨텐츠 제공

WAS(Web Application Server) : 동적 컨텐츠 제공  JSP


웹서버 + WAS + DBMS

       + PHP + DBMS


http://java.sun.com


# wget 192.168.20.87/apache-tomcat-7.0.59.tar.gz 

# wget 192.168.20.87/jdk-8u31-linux-i586.tar.gz


- jsp 파일은 client가 접근시 모두 java 소스로 변경해서 

- class 파일로 컴파일한다.

/home/tomcat/tomcat/work/Catalina/localhost/_/org/apache/jsp


$ ll

합계 57

-rw-rw-r-- 1 tomcat tomcat  4302 10월 14 12:10 hello_jsp.class

-rw-rw-r-- 1 tomcat tomcat  3578 10월 14 12:10 hello_jsp.java

-rw-rw-r-- 1 tomcat tomcat 16626  1월 29  2015 index_jsp.class

-rw-rw-r-- 1 tomcat tomcat 28905  1월 29  2015 index_jsp.java


==================================================================

LAB> CentOS 6.3 에 tomcat 설치하기


CentOS 6.3 + tomcat + Oracle

# /etc/init.d/oracle-xe stop

# su - tomcat

$ startup.sh

$ exit

# /etc/init.d/oracle-xe start

==================================================================


==================================================================

LAB> CentOS 5.8 에 tomcat 설치하기


CentOS 5.8 + tomcat + mysql

# su - tomcat

$ startup.sh

$ exit

# /etc/init.d/mysqld start


o Apache & Tomcat 연동이란 ?

- 일반적으로 Web Server(Apache)와 Servlet Container(Tomcat)간의 

  연동은 아래와 같다.


          +---------+         +---------+ 

index.jsp |         |         |         |

  ------> | Apache -----------> Tomcat  |

          |           mod_jk            |

          |           (AJP13)           |

          |             8009            |

          |        <-----------  html로 |

          |         |         |  변환   |

          +---------+         +---------+ 


mod_jk : 아파치와 톰캣을 연동하기 위한 모듈 (다리)

AJP13  : 아파치와 톰캣을 서로 통신하기 위한 프로토콜 (version 1.3)

8009   : 아파치와 톰캣을 서로 통신 포트


o Web Server(Apache)와 Servlet Container(Tomcat) 통신 포트 확인


- 아파치를 통해서 Tomcat에 접속 (방화벽 설정 전)

http://192.168.56.101  O


- 아파치를 통해서 Tomcat에 접속 (방화벽 설정 후)

- 서로의 통신 포트인 8009를 차단했으므로 접근이 안된다.

# iptables -A INPUT -p tcp --dport 8009 -j DROP

http://192.168.56.101  X


- 아파치를 통하지 않고 Tomcat에 바로 접속 과정

http://192.168.56.101:8080 O


o 아파치와 톰캣의 처리 플로우


1. 서버에서 설정

- 아파치를 설치하고, 톰캣을 설치하고, 서로 연동한다.

  아파치 웹서버의 httpd.conf에 톰캣 연동을 위한 설정을 추가하고 

   톰캣에서 처리할 요청을 지정함.

2. 사용자가 웹페이지 요청

- 사용자는 아파치 웹서버(보통 80포트)에 접속해 웹페이지를 요청한다.

3. 아파치 웹서버가 톰캣에게 전달

-  아파치 웹서버는 사용자의 요청이 톰캣에서 처리하도록 지정된 

   요청인지 확인하고 

   톰캣에서 처리해야 하는 경우에는 아래처럼

   톰캣의 AJP포트(보통 8009포트)에 접속해서 요청을 전달

4. 아파치의 요청을 처리하고 결과를 돌려줌

- 톰캣은 아파치 웹서버로부터 요청을 받아 처리한 후, 처리 결과를 

  아파치 웹서버에게 다시 돌려준다.

5. 아파치가 사용자에게 페이지를 전송

- 아파치 웹서버는 톰캣으로부터 받은 웹페이지의 처리 결과를 

  사용자에게 전송한다.



o 아파치와 톰캣 연동시 css와 image가 깨지는 원인

- 서로간의 연동은 잘 되었지만 DocumentROOT(웹루트 디렉토리)가 서로 

  다르게 설정되어서 발생하는 문제이다.

- 일반적으로 mod_jk를 설정하면 확장자를 선택하여 어떤 확장자에 

  대해서 jk모듈을 이용하여 tomcat으로 보낼지를 결정하게 된다.

- 이때 둘 사이의 ROOT 디렉토리가 다르기 때문에 문제가 발생한 것이다.


- .jsp 파일인 index.jsp는 tomcat으로 넘기지만 index.jsp에 포함되는 

  css파일과 이미지들은 Apache에서 처리하게 되는 것이다. 

  이때 Apache가 ccs파일과 이미지들을 자신의 DocumentROOT 디렉토리인

  /usr/local/apache/htdocs 에서 찾는데 당연히 파일이 없기 때문에 

  안되는 것이다.


o 해결방법

이를 해결하기 위해 Apache와 Tomcat의  DocumentRoot 디렉토리를 

동일하게 설정하면 된다.



-- 작업 순서 --

1. 아파치 웹서버 설정파일 수정

2. 아파치 웹서버 재시작

3. tomcat 디렉토리 권한 변경

-- 작업 순서 --


1. 웹서버 설정파일 수정

- apache + jsp 연동한 후에 httpd.conf 파일을 아래와 같이 수정한다.

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

-- /usr/local/apache/conf/httpd.conf --

  :

  :

# DocumentRoot 지시자의 값을 tomcat 의 기본 디렉토리로 변경한다.

# DocumentRoot "/usr/local/apache/htdocs"

DocumentRoot "/home/tomcat/tomcat/webapps/ROOT"

  :

  :

<Directory "/usr/local/apache/htdocs">

  :

  :

</Directory>


# 아래 <Directory> ~ </Directory>를 추가한다.

<Directory "/home/tomcat/tomcat/webapps/ROOT">

 Options Indexes FollowSymLinks

 AllowOverride None

 Order allow,deny

 Allow from all

</Directory>

  :

  :

# 아래 index.jsp를 추가한다.

<IfModule mod_dir.c>

 DirectoryIndex index.html index.jsp

</IfModule>

-- /usr/local/apache/conf/httpd.conf --


2. 아파치 웹서버 재시작

- 설정파일의 문법을 확인한 후 Syntax OK가 출력되면 아파치를 재시작한다.

# apachectl configtest

Syntax OK

# apachectl restart


3. tomcat 디렉토리 권한 변경

- nobody가 접근할 수 있도록 권한을 변경한다.

# chgrp nobody /home/tomcat

# chmod g+x /home/tomcat


4. 접속 확인

- 홈페이지 접속시 JSP 고양이가 뜨면 연동이 성공된 것이다.


http://IP주소/

http://IP주소/hello.jsp




o workers.properties 분석 

worker.list는 사용할 woker(톰캣) 인스턴스들의 리스트다. 

이름은 임의로 지정해주면 되며 

worker.woker이름.속성=값 의 형태로 정의해 주면 된다.


아래 설정을 보면 

포트는 8009를 사용하며 

프로토콜은 ajp13 프로토콜을 사용하며, 

host는 localhost 를 사용한다라는 의미이다.


--  workers.properties --

worker.list=worker1

worker.worker1.port=8009

worker.worker1.host=localhost

worker.worker1.type=ajp13


# 또 다른 예

#worker.list=ajp13

#worker.ajp13.port=8009

#worker.ajp13.host=localhost

#worker.ajp13.type=ajp13

--  workers.properties --


o Apache JServ Protocol (AJP)

- AJP는 웹서버 뒤에 있는 어플리케이션 서버로부터 웹서버로 들어오는 

  요청을 위임할 수 있는 바이너리 프로토콜이다.


원문 : http://en.wikipedia.org/wiki/Apache_JServ_Protocol

 

어플리케이션 서버로 핑을 할 수 있는 웹서버의 모니터링 기능을 지원한다.

웹 개발자들은 대체로 AJP를 여러 웹서버로 부터 여러개 어플리케이션 

서버로의 로드 밸런스 구현에 이용한다. 

세션들의 각각의 어플리케이션 서버 인스턴스의 이름을 갖는 라우팅 

메카니즘을 사용하는 현재 어플리케이션 서버로 리다이렉트된다. 

이 경우 어플리케이션 서버를 위한 리버스 프록시로 웹서버는 동작한다.


AJP는 mod_jk를 사용하는 Apache HTTP Server 1.x 와 Proxy AJP를 

사용하는 Apache 2.x 와 mod_proxy와 proxy 밸런써 모듈에서 같이 

실행된다. 

아직 릴리즈 되지 않은 lighttpd 1.5 버전과 ngix, grizzly 2.1 

그리고 iis에도 사용할 수 있다. 

또 AJP는 Jetty 서블릿 컨테이너로 동작하는 Apache Tomcat servlet 

컨테이너에도 사용할 수 있다.


==================================================================

'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 16. APM2 설치  (0) 2016.07.30
[CentOS] 15. APM 설치  (0) 2016.07.23
[CentOS] 14-1 패키지 관리 - tomcat 환경설정  (0) 2016.07.10
[CentOS] 14. 패키지 관리  (0) 2016.07.10
[CentOS] 13-2. 사용자 생성  (0) 2016.07.10

[root@ksw ~]# vi /etc/profile

-- /etc/profile --

  :

  :

## Java ##                                                  

JAVA_HOME=/usr/local/java                                  

PATH=$PATH:$JAVA_HOME/bin                                 

CLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar  

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME CLASSPATH

## Java ##                                                  

  :

  :

-- /etc/profile --



[tomcat@ksw ~]$ vi .bashrc

-- .bashrc --

  :

  :

## Tomcat ##       


CATALINA_HOME=/home/tomcat/tomcat

TOMCAT_HOME=$CATALINA_HOME

PATH=$PATH:$TOMCAT_HOME/bin

CLASSPATH=$CLASSPATH:$CATALINA_HOME/lib/jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar

export PATH JAVA_HOME CLASSPATH CATALINA_HOME TOMCAT_HOME 

## Tomcat ##   

-- .bashrc --



'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 15. APM 설치  (0) 2016.07.23
[CentOS] 14-2 패키지 관리 - tomcatWAS설치  (3) 2016.07.10
[CentOS] 14. 패키지 관리  (0) 2016.07.10
[CentOS] 13-2. 사용자 생성  (0) 2016.07.10
[CentOS] 13-1. 사용자관리체크  (0) 2016.07.10

#############################################

## 주제 : 소프트웨어 설치                  ##

#############################################


http://centos.org

http://ftp.daum.net

http://ftp.neowiz.com

ftp://ftp.kaist.ac.kr

http://vault.centos.org

http://rpmfind.net


rpm (redhat package manager) 약자로 미국의 RedHat 사가 개발한 패키징 방식이다.


tar.gz, tar.bz2, tar.xz 은 압축을 해제해야 소스인지, 컴파일한 파일인지 알 수 있다. 

그러니 rpm 으로 끝나는 확장자는 파일명만 보고도 소스인지, 컴파일한 파일인지 알 수 있다.

~.tar.gz  : tar + gzip  (소스형태, 컴파일형태)

~.tar.bz2 : tar + bzip2 (소스형태, 컴파일형태)

~.tar.xz  : tar + xz    (소스형태, 컴파일형태)

~.i386.rpm : rpm  (컴파일된 형태)

~.src.rpm : (소스 형태)

~.i386.rpm, ~.i586.rpm, ~.i686.rpm : (컴파일형태)

~.deb : 데비안계열의 패키징 방식


~.rpm : rpm 명령어로 설치

yum   : rpm 파일을 설치 


~.deb : dpkg 명령어로 설치

apt-get :   deb 파일을 설치


예전에는 리눅스에 프로그램을 설치하기 위해서는 아래와 같은 과정을 거쳤다.

소스 -> 환경설정 -> 컴파일 -> 설치 

~~~~    ~~~~~~~~

 |

 +--> 컴파일    -> 패키지명.버전명.i386.rpm  -> 설치 

 +--> 소스 파일 -> 컴파일 -> 설치 



rpm 의 가장 큰 단점.

- 패키지의 의존성이 존재하면 설치하기가 어렵다.


의존성 : 패키지끼리 서로 연관 되어있는 형태이다.

- 리눅스용 웹브라우저(firefox 를 설치했다.)

- 강제로 설치했다고 해도 firefox 가 실행이 안된다.

- 이것을 실행하기 위해서는 의존성이 걸린 Xwindow system 의 관련된 패키지들을

- 모두 설치해야 firefox 를 설치하고 사용할 수 있다.


yum : 이미 컴파일이 되어있는 패키지를 인터넷으로 다운받아서 설치하는 방식


~~~~.i386.rpm  <-- 컴파일된 rpm 파일

~~~~.src.rpm   <-- 소스 rpm 파일

~~~~.tar.gz    <-- 압축된 파일 (tar + gzip) 

~~~~.tar.bz2   <-- 압축된 파일 (tar + bzip2)

~~~~.tar.xz   <-- 압축된 파일 (tar + xz)


########################

## tar + gzip + bzip2 ##

########################


o gzip

- 파일을 압축하는 명령어다.

- gzip은 GNU 프로젝트를 통해 배포되는 유틸리티

- gzip으로 압축한 파일은 파일명이 : 파일명.gz 확장자를 갖는다.

- 또한 여러 파일들을 지정하면 각각의 파일명.gz 파일로 저장한다.


사용법 : gzip 옵션 파일들...

옵션 : 

-d --decompress  decompress

-1 --fast        compress faster

-9 --best        compress better


사용예 : gzip filename

- filename 을 압축해서 filename.gz 파일이 생성된다. 

- 이때 원본파일인 filename 없어지고 압축된 파일만 남는다.

- 여러 파일을 gzip으로 압축해도 각각 filename.gz 이 생성이 된다. 

- 여러개의 파일을 하나의 파일로 묶이지 않는다. 

- 여러개의 파일을 하나로 묶는 것은 tar의 역할이다. 


압축해제 : gunzip filename  or gzip -d filename



o bzip2

- 압축하면 나오는 파일명 : 파일명.bz2

- 대체로 gzip보다 10~20% 뛰어난 압축률이 더 좋다.


사용법 : bzip2 OPTION 파일들...

옵션 : 

-d --decompress     force decompression

-1 .. -9            set block size to 100k .. 900k

--fast              alias for -1

--best              alias for -9


사용예 : bzip2 filename

- filename 을 압축해서 filename.bz2 파일이 생성된다. 

- 이때는 filename 이 지워진다.

- 여러 파일을 bzip2로 압축해도 각각 filename.bz2 가 생성이 된다. 

- 여러개의 파일을 하나의 파일로 묶이지 않는다. 

- 여러개의 파일을 하나로 묶는 것은 tar의 역할이다. 


ex) bzip2 filename


압축해제 : bzip2 -d filename  or bunzip2 -d filename


o xz : 요즘 나온 압축 프로그램

사용법은 비슷하다.

리눅스 커널 소스가 이 압축프로그램으로 압축되어 있다. 

linux-3.17.2.tar.xz


xz 

unxz 


o tar 

- 압축하는 프로그램이 아니다.

- tar는 단순히 하나의 아카이브 파일로 묶어 주는 역할만 할 뿐, 

  파일의 크기를 줄여주는 압축 기능은 없으므로 

  tar 명령어 안에서 gzip이나 bzip2 명령어와 함께 사용한다.

- 이때 원본파일은 그대로 남는다.

- 파일을 원래 상태로 복원하기 위해 파일의 퍼미션이나 소유권 등의 정보를 유지하면서 여러개의 파일들을 하나의 파일로 묶는 기능을 가진다.


Usage: tar [OPTION...] [FILE]...


ex) tar options 파일.tar 파일들 ...


tar cjf tarfile.tar.bz2 files

tar czf tarfile.tar.gz  files 

tar cvf tarfile.tar     files 

~~  ~~~ ~~~~~~~~~~~~~~~ ~~~~~

 |   |       |            |

 |   |       |            +-- 묶일 파일 리스트들

 |   |       + 묶을 파일명

 |   +-- 옵션

 +-- 명령어

 

gzip -9 tarfile.tar  <-- tarfile.tar.gz


option

c : 새로운 아카이브의 생성

x : 아카이브로부터 파일 추출

t : 파일안에 묶인 내용을 출력

v : 파일을 묶거나 풀 때 정보를 출력

f : 읽거나 기록할 tar 파일을 정의

z : gzip으로 압축한다

j : bzip2 로 압축한다

C <DIR> : 압축을 해당 <DIR> 로 해제한다


==================================================================

LAB> 압축 연습하기 


-- 조건 --

작업 디렉토리 : 홈디렉토리(/root)

-- 조건 --


o 파일 압축

- 사용자와 그룹에 관련된 중요 파일 3개를 현재 디렉토리에 복사한다.

- /etc/passwd, /etc/group, /etc/shadow 파일을 현재 디렉토리에 

- 복사한다. 그런데 왜 명령어가 틀린가 ???? 다양한 방법이 있다는걸

- 보여주기 위해서 쓴 것이다.

# cd

# rsync /etc/passwd .

# install -m 644 /etc/group .

# cat /etc/shadow > shadow


- 복사한 파일을 확인한다.

# ls -l /etc/passwd passwd

# ls -l /etc/shadow shadow

# ls -l /etc/group group

# diff /etc/passwd passwd

# cmp  /etc/shadow shadow

# diff /etc/group group


- 각 파일을 압축한다.

- 만약 xz 명령어가 없다면 yum -y install xz 으로 패키지를 설치해야 한다.

# gzip group 

# bzip2 passwd 

# xz shadow  


- 압축된 파일을 확인한다.

- 중요한 것은 원본 파일이 삭제되고 각 파일명에 압축프로그램의

- 고유 확장자가 붙어있다는 것이다.

- 고유 확장자 : gzip -> .gz, bzip2 -> .bz2, xz -> .xz

# ls -l

total 24

-rw-r--r-- 1 root root 440 Mar 20 21:44 group.gz

-rw-r--r-- 1 root root 832 Mar 20 21:43 passwd.bz2

-r-------- 1 root root 368 Mar 20 21:46 shadow.xz


o 첫 번째 압축해제

- 각 압축 프로그램의 명령어의 -d 옵션을 이용해서 압축을 해제한다.

# gzip -d group.gz 

# bzip2 -d passwd.bz2 

# xz -d shadow.xz 


o 두 번째 압축해제

- 각 압축 프로그램의 -d 옵션이 아닌 다른 이름으로 된 해제 명령어를 

- 이용해서 압축을 해제한다.

# gzip group 

# bzip2 passwd 

# xz shadow 

# gunzip group.gz 

# bunzip2 passwd.bz2 

# unxz shadow.xz


- 압축 프로그램과 압축해제 프로그램의 하드링크와 심볼릭링크를

- 확인하는 부분이다.

# ls -li `which gunzip`

# ls -li `which gzip`

# ls -li `which zcat`

# ls -li `which bzip2`

# ls -li `which bunzip2`

   :

   :

==================================================================


==================================================================

LAB>  tar + gzip 으로 압축하기 (단일 파일인 경우)


- tar 와 gzip 을 각각 실행하는 경우

- 순서 : tar 로 묶고 gzip 으로 압축한다.

# tar cvf test.tar passwd shadow group

# gzip test.tar             <-- test.tar.gz


- tar 와 gzip 을 한번에 실행하는 경우

- 순서 : tar 명령어에 z 옵션을 넣어주면 test2.tar.gz 이 생성된다.

- tar 명령어에 z 옵션이 들어가면 tar 프로그램 내부에서 외부의 

- gzip 실행파일을 호출한다.

# tar cvzf test2.tar.gz passwd shadow group  


- tar 와 bzip2 를 각각 실행하는 경우

- 순서 : tar 로 묶고 bzip2 로 압축한다.

# tar cvf test3.tar passwd shadow group

# bzip2 test3.tar           <-- test3.tar.bz2


- tar 와 bzip2 를 한번에 실행하는 경우

- 순서 : tar 명령어에 j 옵션을 넣어주면 test2.tar.bz2 가 생성된다.

- tar 명령어에 j 옵션이 들어가면 tar 프로그램 내부에서 외부의 

- bzip2 실행파일을 호출한다.

# tar cvjf test4.tar.bz2 passwd shadow group  <-- test4.tar.bz2


==================================================================


==================================================================

LAB>  tar + gzip 으로 압축하기 (디렉토리인 경우)


*** 인터넷상에서 프로그램을 압축해서 배포하는 경우에는

*** 두 번째 예제처럼 디렉토리에 넣고 그 디렉토리를 묶는게 일반적이다.


o 디렉토리에 넣지 않고 묶을 경우

- 압축을 해제할 경우에는 현재 디렉토리 파일이 몽땅 풀린다.

# cd /etc

# tar czf etc.tar.gz *

# mv etc.tar.gz /tmp

# cd /tmp

# ls

etc.tar.gz

# tar xzf etc.tar.gz 

# ls

  :

  :

# rm -rf *


o 디렉토리에 넣고 묶을 경우

- 압축을 해제할 경우에는 디렉토리 자체가 나온다.

# cd /

# ls -F

bin/   boot/  etc/   ...

# tar czf etc.tar.gz etc

# mv etc.tar.gz /tmp

# cd -

/tmp

# ls

etc.tar.gz

# tar xzf etc.tar.gz 

# ls

etc  etc.tar.gz

==================================================================


==================================================================

LAB> tar 에서 -z(gzip) 옵션과 -j(bzip2) 옵션 확인하기.


tar 의 z 옵션 : 외부의 gzip 명령어인 /bin/gzip 을 호출한다.

tar 의 j 옵션 : 외부의 bgzip2 명령어인 /usr/bin/bzip2 를 호출한다.


o tar의 x 옵션 테스트 

- gzip 명령어를 이동시키고 tar 의 x 옵션을 호출하면 tar 명령어 

- 내부에서 /bin/gzip을 호출하는 것을 알 수 있다.


# mv /bin/gzip .

# ls -l /bin/gzip

ls: /bin/gzip: No such file or directory


# tar czf etc.tar.gz /etc

tar: gzip: Cannot exec: No such file or directory

tar: Error is not recoverable: exiting now

tar: Removing leading `/' from member names


- 다시 원래대로 복구한다.

# mv gzip /bin

# tar czf etc.tar.gz /etc

# ls -l etc.tar.gz 

-rw-r--r-- 1 root root 4958956 Nov  4 17:11 etc.tar.gz



o tar의 j 옵션 테스트 

- bzip2 명령어를 이동시키고 tar 의 j 옵션을 호출하면 tar 명령어 

- 내부에서 /usr/bin/bzip2 를 호출하는 것을 알 수 있다.


# mv /usr/bin/bzip2 .

# ls /usr/bin/bzip2

ls: /usr/bin/bzip2: No such file or directory

# tar cjf etc.tar.bz2 /etc

tar: Removing leading `/' from member names

tar: bzip2: Cannot exec: No such file or directory

tar: Error is not recoverable: exiting now


- 다시 원래대로 복구한다.

# mv bzip2 /usr/bin

# tar cjf etc.tar.bz2 /etc

# ls -l etc.tar.bz2

-rw-r--r-- 1 root root 3183126 Nov  4 17:18 etc.tar.bz2

===================================================================


===================================================================

LAB> 위에서 exec 를  이해하기 위한 프로그램을 짜보기.


- program 을 실행하면 외부의 ls 가 실행된다.

- 이때는 프로그램에서 exec 계열의 함수를 이용해서 외부 명령어를 

- 실행한다. 

- man execl 을 이용해서 exec 계열의 함수들을 확인할 수 있다.


# vi program.c

-- program.c --

#include <unistd.h>


int main()

{

  execl("/bin/ls", "ls", NULL);

  return 0;

}

-- program.c --


# gcc -Wall -o program program.c 


# ./program

  :

  :


# cp -v program.c program2.c

# vi program2.c

-- program2.c --

#include <unistd.h>  // execl

#include <stdio.h>   // printf


int main()

{

  execl("/bin/ls", "/bin/ls", NULL);

  fprintf(stderr, "program: /bin/ls: Cannot exec: No such file or directory\n");

  return 0;

}

-- program2.c --


# gcc -Wall -o program2 program2.c 

# ./program2

  : 

  :

# mv /bin/ls .

# ./program2

program: /bin/ls: Cannot exec: No such file or directory

# mv ls /bin


# cp -v program.c program3.c

# vi program3.c

-- program3.c --

#include <unistd.h>  // execl

#include <stdio.h>   // printf


int main(int argc, char *argv[])  // 명령행 인자를 쓸 때 반드시 넣어주어야 한다.

{

  // # gunzip   fstab

  //   ~~~~~~   ~~~~~

  //   argv[0]  argv[1]


  execl("/bin/gzip", "/bin/gzip", argv[1], NULL); // execl함수는 환경변수 세팅이 안된다.

  fprintf(stderr, "program: /bin/gzip: Cannot exec: No such file or directory\n");

  return 0;

}

-- program3.c --


- 정상 테스트

# gcc -Wall program3 program3.c

# cp /etc/fstab

# ./program3 fstab

# ls fs*

# gunzip fstab.gz


- 에러발생 테스트

# mv /bin/gzip .

# ./program3 fstab

program: /bin/gzip: Cannot exec: No such file or directory


- 원상복귀

# mv gzip /bin

=================================================================


==================================================================

LAB> 인터넷에서 받은 tar.gz 파일을 시스템에 설치하기.


목표 : 웹서버의 소스파일을 서버에서 설치한다.


http://httpd.apache.org


웹서버 파일명 : apache_1.3.41.tar.gz  


-- 설치 순서 --

1. 압축 해제

2. 환경설정

3. 컴파일

4. 설치

5. 웹서버 실행

6. 웹서버 확인

7. 메인 페이지 생성

8. 브라우저로 접속

-- 설치 순서 --


0. 체크사항

- 개발툴 없다면 설치한다.

# yum -y groupinstall "Development Tools"


- 아파치 웹서버가 있다면 삭제한다.

// 설치 확인

# rpm -q httpd

// 삭제

# rpm -e httpd


// 의존성 있는 http 삭제

# /etc/init.d/httpd stop

# yum -y groupremove httpd


1. 압축 해제

- 압축파일로 된 아파치 웹서버를 압축해제 한다.

# tar xzf apache_1.3.41.tar.gz  


2. 환경설정

- ./configure 명령어를 이용해서 환경을 설정한다.

- UNIX(LINUX) 에서는 현재 디렉토리의 실행파일들은 실행할 수 없도록

- 기본값은 막혀있다. 이를 풀수도 있지만 보안상의 이유로 안푸는 것이 좋다.

- 항상 현재 디렉토리의 실행파일은 ./실행파일명 으로 실행을 해야한다.

- configure 에서 옵션은 다 생략하고 가장 간단한 형태로 실행한다.

# cd apache_1.3.41

# ./configure


3. 컴파일

- make 는 프로젝트 단위로 컴파일을 한다.

#  make


4. 설치

- make 뒤에 install 이라는 인자를 준다.

- 그러면 컴파일된 파일들을 시스템에 자동으로 설치해준다.

# make install


5. 웹서버 실행

- apachectl 명령어는 웹서버를 실행시켜주는 명령어이다.

# /usr/local/apache/bin/apachectl start


6. 웹서버 확인

- netstat 명령어는 현재 서버에 LISTEN 되어 있는 포트를 출력해준다.

- 그중에서 0.0.0.0:80  이 부분이 나오면 된다.

# netstat -nlt

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address               Foreign Address             State      

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN


7. 메인 페이지 생성

- 웹페이지가 제공되는 디렉토리 : /usr/local/apache/htdocs 

# cd /usr/local/apache/htdocs

// 필요 없는 파일 삭제

# rm -f *

# echo Welcome to Ko Seung-Wook Server. > index.html


8. 브라우저로 접속

- 자신의 IP주소를 확인하고 그 IP주소로 웹브라우저로 접속해본다.

// vmware

# ifconfig eth0

// virtual box

# ifconfig eth1

eth1      Link encap:Ethernet  HWaddr 00:0C:29:7C:CF:29  

          inet addr:192.168.56.101  Bcast:192.168.56.255  Mask:255.255.255.0

  :

  :

# iptables -F

http://192.168.56.101

Welcome to Ko Seung-Wook Server. 


==================================================================


==================================================================

LAB> 인터넷에서 받은 tar.gz 파일을 시스템에 설치하기.


http://netcat.sourceforge.net

netcat-0.7.1.tar.gz


-- 순서 --

1. 압축 해제

2. 환경설정

3. 컴파일

4. 설치

5. 실행

6. 확인

-- 순서 --


1. 압축해제

- 업로드한 압축 파일을 해제한다.

# tar xvzf netcat-0.7.1.tar.gz 

netcat-0.7.1/

netcat-0.7.1/m4/

netcat-0.7.1/m4/lib-link.m4

netcat-0.7.1/m4/inttypes_h.m4

netcat-0.7.1/m4/lcmessage.m4

netcat-0.7.1/m4/inttypes.m4

  :

  :


2. 환경설정

- 압축이 해제된 netcat 디렉토리에 들어가서 환경설정을 한다.

# cd netcat-0.7.1

# ./configure


3. 컴파일

- 컴파일을 한다.

# make


4. 설치

- 시스템에 설치한다.

# make install


# yum groupinstall "development tools"


5. 실행

- nc를 실행한다.

- 실행하기 전에 이미 설치된 nc 패키지를 삭제한다.

pts/0# rpm -q nc

pts/0# rpm -e nc


- 방화벽정책으로 인해서 접속이 안되면 모두 해제한다.

pts/0# iptables -F


- 8888 포트를 대기한다. (server 개념)

pts/0# nc -l -v -p 8888

Connection from 127.0.0.1:57059

Hello

Hi~~


- 리슨된 포트로 접속한다. (client 개념)

pts/1# nc localhost 8888

Hello

Hi~~

==================================================================


==================================================================

LAB> Linux 에서 Java 를 설치하기. 


JAVA_and_JSP 설치 문서를 참고할 것!!!


==================================================================


#########

## rpm ##

#########


o rpm 이란 ? 

rpm (redhat package manager) 약자로 미국의 RedHat 사가 개발한 패키징 방식이다.


장점 : 소스로 설치하는 어려운 부분을 간단히 해결할 수 있다.

단점 : 의존성 에러로 인해 설치가 어렵다.


rpm 파일을 설치하는 형식 : 

mc-4.6.1a-35.el5.i386.rpm


패키지명-버전-배포판-아키텍처-rpm


버전 : 주번호, 부번호, 패치레벨


fc19 : 페도라 V 19

el5  : Enterprise Linux V 5


noarch  : 모든 아키텍처에 설치가 가능한 패키지들(font ...)

s390, s390x  <-- IBM S390 메인프레임에서 실행

src     <--- 컴파일이 안된 소스형태로 배포

arm     <--- 임베디드 분야

sparc   <--- 자기 아키텍처만 설치/실행

ppc     <--- 애플 MAC

ppc64   <--- 애플 MAC 64bit

x86_64  <--- 64bit intel

i386 -> i486 -> i586 -> i686  <--   32bit intel 

   <-----------------------  X

 O ------------------------>


o 아키텍처 종류를 확인해보자.

http://rpmfind.net


o rpm 옵션 


Usage: rpm [OPTION...]


-i 설치

-U 업그레이드 / 설치 

-v 설치할때 파일명을 출력

-h # 으로 설치진행을 출력

-e 삭제

--force 강제설치

--nodeps  의존성을 무시하고 설치 

- --nodeps 를 이용해서 설치하면 프로그램이 정상동작을 하지 않을 수 있다.



-Uvh  설치할 때 사용하는 옵션 


-e    삭제할 때 사용하는 옵션


ex)

rpm -Uvh 파일명

rpm -Uvh --nodeps 파일명

rpm -e 패키지명

rpm -e 패키지명-버전 


=====================================================================

rpm-LAB1> CentOS5.8 DVD의 rpm 을 확인해보자.


-- 순서 --

1. DVD 넣는다.

2. mount 명령어로 DVD를 /mnt 디렉토리에 연결한다.

3. rpm 파일이 있는 디렉토리에서 rpm 파일을 확인하고 설치해보자.

-- 순서 --


1. DVD 넣는다.

- VB 에서 DVD를 삽입한다.

저장소 -> CentOS 5.8 1번 DVD를 선택한다.


2. mount 명령어로 DVD를 /mnt 디렉토리에 연결한다.

- -t iso9660 : cdrom filesystem

- -o ro (read only)

# mount -t iso9660 -o ro /dev/cdrom /mnt

# df

  :

  :

/dev/hdc               3831642   3831642         0 100% /mnt


3. rpm 파일이 있는 디렉토리에서 rpm 파일을 확인하고 설치해보자.

# cd /mnt/CentOS

# ls 

  :

x3270-text-3.3.4p7-3.el5.4.i386.rpm

x3270-x11-3.3.4p7-3.el5.4.i386.rpm

  :

yum-utils-1.1.16-21.el5.centos.noarch.rpm

  :

zisofs-tools-1.0.6-3.2.2.i386.rpm

  :


# ls mc*

mc-4.6.1a-35.el5.i386.rpm

# rpm -Uvh mc-4.6.1a-35.el5.i386.rpm 

# mc       <-- 실행이 된다.


- mc 패키지를 삭제한다.

# rpm -e mc

# mc       <-- 실행이 안된다.


- 의존성 에러가 발생한다.

# rpm -Uvh firefox-3.6.26-1.el5.centos.i386.rpm 


- 의존성을 무시(--nodeps)하고 설치한다.

- --nodeps 옵션은 아무데나 사용해도 상관없다.

# rpm -Uvh --nodeps firefox-3.6.26-1.el5.centos.i386.rpm 

# rpm -Uvh firefox-3.6.26-1.el5.centos.i386.rpm  --nodeps 

# rpm --nodeps -Uvh firefox-3.6.26-1.el5.centos.i386.rpm  

# firefox  <-- 설치는 했지만 실행은 안된다. (의존성 때문에)


=====================================================================



===================================================================

rpm-LAB2> --force 옵션을 이용해서 패키지를 다시 설치해보자.


! 강제로 재설치하는 경우

! 1. 실제로 파일이 사용중에 실수로 삭제가 되었을 때

! 2. 외부의 불법침입자에 의해서 파일이 변조가 되었을 때


- --force 옵션을 이용해서 다시 설치한다.

- --force 옵션은 앞이나 뒤나 위치는 상관없다.


# rm -fv /bin/ls

# ls

-bash: /bin/ls: No such file or directory


# mount -t iso9660 -o ro /dev/cdrom /mnt

# rpm -Uvh /mnt/CentOS/coreutils-5.97-34.el5.i386.rpm           <-- 설치 X

# rpm -Uvh --force /mnt/CentOS/coreutils-5.97-34.el5.i386.rpm   <-- 설치 O

# ls

  :

  :

===================================================================


===================================================================

LAB> 버전이 높은 패키지를 받아서 설치해보자.


- 시스템에 설치된 httpd 패키지를 확인한다.

# rpm -q httpd

httpd-2.2.3-63.el5.centos


- 인터넷에서 더 높은 버전을 다운로드 받는다.

# wget http://vault.centos.org/5.8/updates/i386/RPMS/httpd-2.2.3-65.el5.centos.i386.rpm


- 시스템에 httpd 패키지를 업데이트한다.

# rpm -Uvh httpd-2.2.3-65.el5.centos.i386.rpm 

Preparing...                ########################################### [100%]

   1:httpd                  ########################################### [100%]


- 업데이트를 확인한다.

# rpm -q httpd

httpd-2.2.3-65.el5.centos


- yum 을 이용해서 더 최신 버전으로 업데이트한다.

# yum -y update httpd

# rpm -q httpd

httpd-2.2.3-91.el5.centos


===================================================================


===================================================================

LAB> rpm 으로 설치하면 설치된 내용이 저장되는 디렉토리에 대한 실습

!!! /var/lib/rpm 디렉토리를 참고 !!!

-q rpm DB에서 정보에서 찾는다.

- 실행파일 (/bin,/usr/bin,/sbin,/usr/sbin,/usr/X11R6/bin)

- 설정파일 (/etc)

- 문서파일 (/usr/share/doc)

- 도움말파일 (/usr/share/man)



# cat /etc/redhat-release 

CentOS release 5.8 (Final)

# rpm -q kernel

kernel-2.6.18-308.el5


# yum update kernel 

kernel-2.6.18-402.el5

kernel-2.6.18-308.el5



1. 어떤 패키지가 이 시스템에 설치되었는지 ?

- 모든 패키지를 화면에 출력한다.

# rpm -qa  


- 모든 패키지의 개수를 화면에 출력한다.

# rpm -qa | wc -l


- 모든 패키지명을 rpmlist.txt 파일로 저장한다.

# rpm -qa  > rpmlist.txt


- tee 명령어는 화면도 출력하고 rpmlist.txt 파일로 저장도 한다.

# rpm -qa  | tee rpmlist.txt

  :


2. 어떤 패키지가 어떤 파일들을 설치했는지 ?

- 패키지에 속한 전체 파일들을 출력한다.

- Shift + Page UP, Page DOWN

# rpm -ql coreutils

  :


- 패키지에 속한 문서파일(document) 들을 출력한다.

# rpm -qd coreutils

  :


- 패키지에 속한 설정파일(configuration) 들을 출력한다.

# rpm -qc coreutils

  :


3. 어떤 파일이 어떤 패키지에서 나왔는지 ?

# rpm -qf /bin/ls

  :

===================================================================


===================================================================

LAB> rpm 패키지를 검증하기 실습 


패키지를 검증할때는 -qV 옵션을 사용한다.


# rpm -qVa 


S file Size differs

M Mode differs (includes permissions and file type)

5 MD5 sum differs

D Device major/minor number mismatch

L readLink(2) path mismatch

U User ownership differs

G Group ownership differs

T mTime differs


# rpm -qf /bin/ls

coreutils-5.97-34.el5_8.1

# rpm -qV coreutils

   <-- 아무 메세지가 나오지 않으면 패키지가 무결성하다는 뜻이다.


- 파일의 권한을 변경하고 검증해보자.

# ls -l /bin/ls

-rwxr-xr-x 1 root root 95116 Mar 21  2012 /bin/ls

 ~~~~~~~~~

# ls -l /bin/ls

-rwx--x--x 1 root root 95116 Mar 21  2012 /bin/ls

# rpm -qV coreutils

.M......    /bin/ls


- 파일의 크기/내용 수정을 변경하고 검증해보자.

# cp /bin/ls .

# echo "=========" >> /bin/ls

# rpm -qV coreutils

SM5....T    /bin/ls


# ls -l ls

-rwx--x--x 1 root root 93560 Sep  6 01:26 ls

# ls -l /bin/ls

-rwx--x--x 1 root root 93564 Sep  6 01:26 /bin/ls



===================================================================



rpm - 패키지 파일을 설치 (인터넷 필요 x , 파일이 존재  O)

yum - 인터넷을 통해서 패키지를 설치 (파일이 존재 X , 인터넷 연결 O)



~~.i386.rpm <-- 바이너리 386 ~ 686 모두 설치가능 

~~.i586.rpm <-- 386 x 486 x 586 ~ 686 ... 786 ... 



LAB> http://ftp.daum.net/ 에서 ntsysv 패키지를 가져와서 시스템에 설치하기


http://ftp.daum.net/centos/5.8/os/i386/CentOS/ntsysv-1.3.30.2-2.el5.i386.rpm



# cat /etc/redhat-release   

CentOS release 5.8 (Final)

# wget

-bash: wget: command not found

# yum install wget

...

Is this ok [y/N]: y   <-- y를 입력(설치) n(취소)

# chmod -c 700  `which wget`   <-- 보안상 wget은  root 사용자만 사용!!!

# wget http://ftp.daum.net/centos/5.8/os/i386/CentOS/ntsysv-1.3.30.2-2.el5.i386.rpm

# rpm -Uvh ntysv<tab 키>  <-- ntsysv 설치 

# LANG=C

# ntsysv  

network, sshd, syslog <-- 이거빼고 모두 제거 



x86_64





# rpm -qf /usr/sbin/useradd

# rpm -ql coreutils <-- 

# rpm -ql coreutils > coureutils.txt

# cat -n coureutils.txt



!!! 전체 설치된 패키지를 알아야 하고, 패키지에서 각각의 설치된 정보를 뽑아낼 수 있어야 한다. !!!


LAB> coreutils 패키지에서 나온 여러가지 정보를 확인해보기


o 패키지 설치시 설치되는 파일들

 도움말, 문서파일, 실행파일, 설정파일 


# rpm -q coreutils  <-- 패키지명을 완벽하게 알때 사용 

# rpm -qa | grep core  <-- 패키지명을 모를때 ( core 만 알때 )

# rpm -qi coreutils <-- coreutils 패키지의 정보를 출력 

# rpm -qc coreutils <-- coreutils 패키지의 설정파일들을 출력

# rpm -qd coreutils <-- coreutils 패키지의 문서(도움말)파일들을 출력

# rpm -ql coreutils | grep bin  <-- coreutils 실행파일을 출력

# rpm -ql coreutils <-- 전체 설치된 파일들을 출력 


LAB> 리눅스 패키지를 소스로 받아 컴파일해보자.

*** 리눅스 소스는 모두 공개되어 있으므로 C 언어로 개발할 수 있는 능력만 있으면 얼마든지 수정할 수 있다. ***


1. 개발툴 패키지 확인

2. 인터넷에 연결되어 있는지 확인

  - 네임서버설정

  - IP주소 세팅

  - Gateway 주소 세팅 


[root@www ~]# yum grouplist        <-- 개발툴이 설치되었는지 확인한다.

Installed Groups:

   Administration Tools

   Development Libraries

   Development Tools

   :

   :

Available Groups:

   Authoring and Publishing

   Base

   :

   :


[root@www ~]# yum -y groupinstall "Development Tools"   <-- 개발툴이 없다면 설치하고 있다면 생략한다.

[root@www ~]# cat /etc/resolv.conf    <-- 네임서버 확인

-- /etc/resolv.conf --

nameserver 168.126.63.1

nameserver 168.126.63.2

-- /etc/resolv.conf --


===================================================================

LAB> rpm DB 에서 검색하기


/var/lib/rpm/


- 시스템에 설치된 전체 패키지 목록을 확인한다.

# rpm -qa


- coreutils 패키지를 확인한다.

# rpm -q coreutils

coreutils-5.97-34.el5_8.1


# rpm -q mcmong

package mcmong is not installed


# rpm -q coreutil

package coreutil is not installed


- 패키명을 정확히 모를 경우에는 grep 명령어를 이용한다.

# rpm -qa | grep coreutil

policycoreutils-1.33.12-14.8.el5

coreutils-5.97-34.el5_8.1


# rpm -qf /bin/ls

# rpm -ql coreutils

# rpm -qc coreutils

# rpm -qd coreutils

# rpm -ql coreutils | grep bin


- verify의 약자로 패키지를 검증할때 사용되는 옵션이다.

# rpm -qV coreutils

# echo test >> /bin/ls

# rpm -qV coreutils

S.5....T    /bin/ls


# ls -l /bin/ls

-rwxr-xr-x 1 root root 93565 Nov  4 16:10 /bin/ls


# chmod 711  /bin/ls

# ls -l /bin/ls

-rwx--x--x 1 root root 93565 Nov  4 16:10 /bin/ls

# rpm -qV coreutils

SM5....T    /bin/ls


# chown nobody /bin/ls

# ls -l /bin/ls

-rwx--x--x 1 nobody root 93565 Nov  4 16:10 /bin/ls

# rpm -qV coreutils

SM5..U.T    /bin/ls


# chgrp users /bin/ls

# ls -l /bin/ls

-rwx--x--x 1 nobody users 93565 Nov  4 16:10 /bin/ls

# rpm -qV coreutils

SM5..UGT    /bin/ls


# md5sum /bin/ls

4736357f77b3fa17a0005418f169574f  /bin/ls


# echo test2 >> /bin/ls

# md5sum /bin/ls

8a49ead65efb6dc3d50ae48025913b76  /bin/ls


# md5sum /bin/ls

8a49ead65efb6dc3d50ae48025913b76  /bin/ls


# md5sum /bin/ls

8a49ead65efb6dc3d50ae48025913b76  /bin/ls


# echo test3 >> /bin/ls

# md5sum /bin/ls

a291df3929e4f07d86975311fa5e9295  /bin/ls


# yum -y reinstall coreutils >/dev/null 2>&1

# md5sum /bin/ls

a55a0733413620f0b3aa401541a00d83  /bin/ls


- 재설치를 했으므로 어떤 메세지도 출력이 안된다.

# rpm -qV coreutils


===================================================================


===================================================================

LAB> yum 사용하기


# yum 

  :

  :

# yum list

# yum install mc

# yum remove mc


# yum grouplist

Installed Groups: 설치된 그룹들

  :

  :  

Available Groups: 미설치된 그룹들

  :

  :

# yum groupinstall "MySQL Database"



# /etc/init.d/mysqld start

# mysql

mysql> show databases;

mysql> exit

# /etc/init.d/mysqld stop


# yum -y groupremove "MySQL Database"


# yum search httpd


# rpm -qa | grep ^coreutils

# rpm -q coreutils

# yum -y update coreutils

# yum -y reinstall coreutils


# rm -f /bin/ls

# ls

-bash: ls: command not found

# yum -y reinstall coreutils

# ls

  ...


===================================================================


===================================================================

LAB> 소스 파일을 가져와서 컴파일해보자.


*** 참고 :

*** 소스 rpm 을 설치시 어느 디렉토리에 설치가 되는지 알 수 있다.

*** rpm 을 설치할 수 있는 능력

*** 소스파일을 수정할 수 있는 능력

*** 컴파일할 수 있는 능력

*** src.rpm 파일은 rpmbuild 명령어로 컴파일할 수 있다.


# rpm -qf /bin/ls

coreutils-5.97-34.el5

# wget http://vault.centos.org/5.8/os/SRPMS/coreutils-5.97-34.el5.src.rpm 

# ls -l coreutils-5.97-34.el5.src.rpm 

-rw-r--r-- 1 root root 5256520 Jul 22  2011 coreutils-5.97-34.el5.src.rpm


- 디렉토리가 없으면 생성한다.

# mkdir -p /usr/src/redhat/SOURCES          


- coreutils 소스 패키지를 설치한다.

# rpm -Uvh coreutils-5.97-34.el5.src.rpm    

# cd /usr/src/redhat/SOURCES          

# tar xjf coreutils-5.97.tar.bz2            

# cd  coreutils-5.97


- 환경설정을 한다.

# ./configure


- 컴파일 한다.

# make



- 컴파일된 파일들을 확인한다.

# cd src

# ls

:    <-- 소스와 컴파일된 실행파일들이 존재한다.


- ls 소스를 수정한다.

# vi ls.c      

-- ls.c --

:set nu        <-- vi 명령 : 번호 세팅

/main          <-- vi 명령 : 검색


  :

  :

puts("KSW ls");   <-- 1129번 라인에 출력 함수를 추가한다.

  :

  :

-- ls.c --


# make ls


- 수정된 내용이 출력된다.

# ./ls

KSW ls 

 :

 :

===================================================================




#########

## yum ##

#########


yum은 Yellowdog Updater Modified 의 약자로 rpm 기반의 시스템(redhat계열) 을 위한 

자동 업데이터이자 패키지를 설치/삭제도구이다. 

yum 은 자동적으로 의존성을 처리해주며 rpm 패키지들을 안전하게 설치, 삭제 및 

업데이트하기 위해 반드시 해야할 이들을 스스로 해결한다. 


또한 yum 은 이미 설치되어 있거나 혹은 저장소에 설치가능한 패키지에 관한 정보를 

효율적이고 쉽게 검색해 온다. 

yum 은 rpm 이나 다른 도구들처럼 일일이 수동으로 업데이트할 필요가 없으므로 수 많은 

시스템들을 더욱 관리하기 쉽게 해준다. 


yum 으로 update 할 경우 커널을 제외한 나머지 패키지들은 모두 삭제 및 업데이트를 할수 있다. 

커널의 경우는 업데이트를 하더라도 계속 쌓이게 된다. 

yum 을 사용하여 install 하거나 update 할 경우 저장소라는 곳에서 해당 rpm파일을 다운 받은 후 설치하게 된다. 

패키지 파일을 다운받아 임시로저장하는 위치는 /var/cache/yum 하위 디렉토리이다. 


o 사용법 : 

yum [options] COMMAND


o yum의 명령어들

install : 단일 패키지 설치

remove  : 단일 패키지 삭제

groupinstall : 그룹으로 설치

groupremove  : 그룹으로 삭제

update  : 업데이트

check-update : 업데이트가 있는지 체크한다.

list    : ...

grouplist : 

  :

  :


# LANG=C

- 인터넷을 통해서 단일 패키지를 검색한다.

# yum list


- 인터넷을 통해서 그룹으로 검색한다.

# yum grouplist


- 인터넷을 통해서 단일 패키지 mc를 설치한다.

# yum install mc


- 인터넷을 통해서 단일 패키지 mc를 삭제한다.

# yum remove mc


- 인터넷을 통해서 웹서버 그룹을 설치한다. 

# yum groupinstall "Web Server"


=========================================================================

LAB> 아파치 웹서버를 시스템에 설치하고 외부에 웹문서를 만들어보자.



-- 작업 순서 --

1. 방화벽 중지

2. 웹 문서 생성

3. 웹서버 시작

4. IP주소 확인

5. 서버로 접속

-- 작업 순서 --


1. 방화벽 중지

- 방화벽을 중지한다.

# iptables -F


2. 웹 문서 생성

- 웹 문서 디렉토리로 이동해서 외부에 제공할 웹문서를 생성한다.

- 이때 확장자는 html로 생성한다.

# cd /var/www/html

# vi index.html

-- index.html --

Hello K.S.W Server

-- index.html --


3. 웹서버 시작

- 웹서버를 재시작한다.

# /etc/init.d/httpd start

Starting httpd:                                            [  OK  ]


4. IP주소 확인

- 자신의 IP주소를 확인한다.

# ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 08:00:27:01:97:CC  

          inet addr:192.168.20.165  Bcast:192.168.20.255  Mask:255.255.255.0

            :

            :

5. 서버로 접속

- 서버로 접속한다.

웹브라우저에서 eth0의 IP주소로 접속해서 위에서 만든 문서가 나오면

정상적으로 웹서버가 설치된 것이다.

http://192.168.20.165/


=========================================================================


===============================================================================

LAB> yum 사용법

- yum 의 실행부분에서 출력되는 메세지를 다음 프로세스인 head 로

  넘겨준다. 이때 head 넘겨준 메세지를 30줄만 보여주게 설정한다.

# yum | head -30

===============================================================================

===============================================================================

LAB> yum 전체 패키지 리스트(단일패키지)


# yum list

===============================================================================

===============================================================================

LAB> yum 전체 패키지 그룹 리스트(그룹단위)


# yum grouplist

===============================================================================

===============================================================================

LAB> yum 을 이용한 패키지 설치 (단일패키지)



- mc 패키지가 설치가 되었는지 확인한다.

- 파일이 없다면 설치된 것이고 있다면 패키지명과 버전이 나올 것이다.

# rpm -qf /usr/bin/mc

mc-4.6.1a-35.el5

# rpm -q mc


- mc 패키지를 삭제한다.

# rpm -e mc


- mc 패키지를 yum으로 설치한다.

# yum -y install mc


- mc 명령어를 확인한다.

# which mc



- mc 패키지를 확인한다.

# rpm -q mc

===============================================================================


===============================================================================

LAB> yum 을 이용한 패키지 삭제 (단일패키지)


- mc 패키지를 yum을 이용해서 삭제한다.

# yum remove mc


- mc 패키지를 확인한다.

- mc 패키지가 삭제가 되었다면 해당 정보가 출력이 안된다.

# rpm -q mc

package mc is not installed

# which mc

===============================================================================


===============================================================================

LAB> yum 을 이용한 패키지그룹 설치 (그룹단위)

- DB 종류

! Oracle  : 1521 

! MS-SQL  : 1433

! MySQL   : 3306

! Sybase 

! DB2

! MariaDB

! PostgreSQL

! MongoDB


# which mysql

# which mysqld

# LANG=C yum grouplist

# yum -y groupinstall "MySQL Database"

# rpm -q mysql

# rpm -q mysql-server


- mysql 데몬(서비스)을 시작하는 명령어

# /etc/init.d/mysqld start


- 네트워크 상태를 보는 명령어 (mysql 이 사용하는 포트 : 3306)

# netstat -nltp   

# mysql

mysql> show databases;

mysql> quit


- mysql 데몬(서비스)을 종료하는 명령어

# /etc/init.d/mysqld stop

# yum -y groupremove "MySQL Database"

===============================================================================


===============================================================================

LAB> yum 을 이용한 업데이트 테스트

!!! 커널은 업데이트를 하면 이전 커널은 삭제하지 않는다.

!!! 커널이 아닌 일반 애플리케이션들은 업데이트를 하면 자동으로 이전 파일들은 

!!! 없어지고 새로 설치한 패키지의 파일이 대체가 된다. 


# rpm -q coreutils

coreutils-5.97-34.el5


# yum -y update kernel

# rpm -q kernel

kernel-2.6.18-308.el5

kernel-2.6.18-402.el5


- coreutils 패키지를 업데이트하되 정상출력과 비정상출력의 메세지를

  /dev/null(블랙홀:쓰레기소각장)으로 보내서 메세지를 감춘다.

  다시 얘기해서 정상/비정상 출력을 감추고 싶다면 아래 명령어를 사용한다.

  > /dev/null 2>&1  or  2> /dev/null 1>&2

  정상 출력을 감추고 싶으면 ?  ls > /dev/null

  비정상 출력을 감추고 싶으면 ?  ls 2> /dev/null

  동시에 감추고 싶으면 ?  ls > /dev/null 2>&1



# yum -y update coreutils > /dev/null 2>&1

# rpm -q coreutils

coreutils-5.97-34.el5_8.1


# uname -a

Linux localhost.localdomain 2.6.18-308.el5 #1 SMP ...

# reboot


- 새로운 커널로 부팅을 했다면 이전 커널은 확인해서 필요없다면 삭제하는 것이 좋다.

# uname -a

Linux localhost.localdomain 2.6.18-402.el5 #1 SMP ...

# rpm -e kernel-2.6.18-308.el5

# rpm -q kernel

kernel-2.6.18-402.el5


===============================================================================


===============================================================================

LAB> yum 을 이용한 단일 패키지 설치하기 

!!!

!!! - 패키지명을 정확하게 알지 못하면 아래 -q 옵션을 사용하면 안된다.

!!! # rpm -q core

!!! package core is not installed

!!! 

!!! - -qa 옵션을 사용해서 전체 패키지를 검사한 후 파이프로 grep 이 

!!! - 잡을 수 있도록 넘겨야 한다.

!!! # rpm -qa | grep core

!!! svrcore-4.0.4-3.el5

!!! policycoreutils-1.33.12-14.8.el5

!!! coreutils-5.97-34.el5_8.1


# ifconfig 

# route -n

# cat /etc/resolv.conf

VBox 이더넷연결 확인


# ping -c 2 kr.yahoo.com    <-- 인터넷 연결 확인

# yum -y install vim-enhanced  <-- vim-enhanced 패키지 설치

# rpm -qa | grep cvs  <-- 전체 설치된 패키지에서 cvs 만 검색

cvs-1.11.22-11.el5

# yum -y remove cvs   <-- 설치된 cvs 패키지 삭제 

# yum -y install cvs  <-- 삭제된 cvs 패키지 설치


===============================================================================


===============================================================================

LAB> yum 을 이용한 그룹 패키지 설치하기 


# yum -y grouplist

# yum -y groupinstall "패키지 그룹명"


ex) yum -y groupinstall "Development tools"


===============================================================================


===============================================================================

LAB> yum 을 이용한 그룹 패키지 삭제하기 

# yum -y groupremove "패키지 그룹명"


ex) yum -y groupremove "Development tools"

===============================================================================


===============================================================================

LAB> yum 을 이용한 패키지 검색하기 

# yum search httpd

===============================================================================


===============================================================================

LAB> yum 을 이용한 업데이트 확인하기


# yum check-update

===============================================================================


===============================================================================

LAB> yum 설정파일과 저장소 설정파일 확인하기

!!! 사용자가 내용을 수정할 수 있다. !!!


# ls -l /etc/yum.conf 

-rw-r--r-- 1 root root 379 Jul 26  2012 /etc/yum.conf

# ls -l /etc/yum.repos.d/

total 36

-rw-r--r-- 1 root root 1926 Jan 12  2013 CentOS-Base.repo

-rw-r--r-- 1 root root  636 Jan 12  2013 CentOS-Debuginfo.repo

-rw-r--r-- 1 root root  626 Jan 12  2013 CentOS-Media.repo

-rw-r--r-- 1 root root 6846 Jan 12  2013 CentOS-Vault.repo

===============================================================================

===============================================================================

LAB> yum 을 이용한 패키지 검색하기 

!!! 실무에 적용을 잘하기 위해서는 패키지명을 잘 알고 있으면 도움이 된다.


# which useradd

# rpm -qf /usr/sbin/useradd


# rpm -qf `which useradd`

# rpm -qi shadow-utils

# rpm -ql shadow-utils | grep bin

===============================================================================

===============================================================================

LAB> 소스 rpm 파일 설치하기

!!! rpmbuild 명령어를 이용해서 ~.src.rpm -> ~.i386.rpm !!!


!!! 아래 디렉토리가 없다면 생성한다.

# cd /usr/src/redhat


- BUILD  RPMS  SOURCES  SPECS  SRPMS 디렉토리가 없다면 생성

# mkdir BUILD  RPMS  SOURCES  SPECS  SRPMS

# cd RPMS

# mkdir athlon  geode  i386  i486  i586  i686  noarch

/usr/src/redhat

           |-- BUILD

           |-- RPMS

           |   |-- athlon

           |   |-- geode

           |   |-- i386

           |   |-- i486

           |   |-- i586

           |   |-- i686

           |   `-- noarch

           |-- SOURCES

           |-- SPECS

           `-- SRPMS



- rpm-build 패키지가 없다면 yum 을 이용해서 설치한다.

# rpm -qf `which rpmbuild`

rpm-build-4.4.2.3-36.el5_11



o src.rpm 파일을 i386.rpm 으로 컴파일/build 하기 위한 순서


-- 순서 --

1. rpm 소스 파일 다운로드

2. 소스 파일 설치

3. rpm 디렉토리로 이동

4. rpmbuild로 컴파일

-- 순서 --


1. rpm 소스 파일 다운로드

# cd

# wget http://vault.centos.org/5.8/os/SRPMS/mc-4.6.1a-35.el5.src.rpm


2. 소스 파일 설치

# rpm -Uvh mc-4.6.1a-35.el5.src.rpm


3. rpm 디렉토리로 이동

# cd /usr/src/redhat

# tree -L 3 *


4. rpmbuild로 컴파일

- rpmbuild 로 컴파일시 의존성 에러가 발생하면 의존성에 관련된 

  패키지들을 먼저 설치하고 rpmbuild를 다시 실행한다.

  # yum -y install glib2-devel e2fsprogs-devel slang-devel


# cd SPECS

# rpmbuild -ba mc.spec

# ls ../RPMS/i386/

mc-4.6.1a-35.i386.rpm  mc-debuginfo-4.6.1a-35.i386.rpm


===============================================================================


===============================================================================

LAB> 소스 rpm 파일 설치하기

coreutils source rpm 패키지를 가져와서 rpmbuild 명령어를 이용해서 

rpm 파일을 생성해본다.


# wget http://vault.centos.org/5.8/os/SRPMS/coreutils-5.97-34.el5.src.rpm

# rpm -Uvh coreutils-5.97-34.el5.src.rpm

# cd /usr/src/redhat/SPECS

# rpmbuild -ba coreutils.spec 


- coreutils-5.97-34.el5.src.rpm 파일을 가지고 나온 컴파일된 파일이다.

# ls ../RPMS/i386

coreutils-5.97-34.i386.rpm  

===============================================================================

===============================================================================

LAB> 자신의 소스를 생성해서 rpm 파일로 만들어보자.

*** SPEC 파일을 만드는 것이 중요하다. ***

*** 구글에서 찾으면 많이 나옴. ***

===============================================================================


===============================================================================

LAB> 명령어에 대한 패키지를 구해서 하나의 파일로 저장해보자.

!!! 나중에 프린터로 뽑아서 분석하면 도움이 된다.

!!! /bin /usr/bin /sbin /usr/sbin


- 자신의 홈디렉토리에 bin 디렉토리를 만들고 이동한다.

# mkdir ~/bin ; cd ~/bin


- 실행권한의 package_list.sh 파일을 생성한다.

# install /dev/null package_list.sh


- 자동화 파일(쉘스크립트)를 작성한다.

# vi package_list.sh

-- package_list.sh --

#!/bin/sh


dirlist="/bin/* /usr/bin/* /sbin/* /usr/sbin/*"

savefile=/root/package_list.txt


cp /dev/null $savefile


for file in $dirlist

do

  echo "-- $file --" >> $savefile

  package_name=$(rpm -qf $file)

  echo "package name : $package_name" >> $savefile 

  printf "\n" >> $savefile

  rpm -qi $package_name >> $savefile

  echo "" >> $savefile

done

-- package_list.sh --


# ./package_list.sh


- 저장된 정보를 이용해서 각 명령어가 속한 패키지명과 

  패키지에 대한 정보를 확인하고 종료한다.

# vi ../package_list.txt

  :

  :


===============================================================================





===================================================================

LAB> gzip 과 bzip2 관련 명령어 살펴보기


# ls -li `which gzip`

191851 -rwxr-xr-x 3 root root 63316 Jul 22  2011 /bin/gzip

# ls -li `which gunzip`

191851 -rwxr-xr-x 3 root root 63316 Jul 22  2011 /bin/gunzip

# ls -li `which zcat`

191851 -rwxr-xr-x 3 root root 63316 Jul 22  2011 /bin/zcat


# ls -li `which bzip2`

32947 -rwxr-xr-x 1 root root 36180 Sep 21  2010 /usr/bin/bzip2

# ls -li `which bunzip2`

32776 lrwxrwxrwx 1 root root 5 Oct 17 10:50 /usr/bin/bunzip2 -> bzip2

# ls -li `which bzcat`

32777 lrwxrwxrwx 1 root root 5 Oct 17 10:50 /usr/bin/bzcat -> bzip2



# find /usr/local/java/ -name "*jar"

# find /usr/lib -name "*.a"

===================================================================



아래 사용자를 생성하시오.


 userid  passwd

user1  / khuser1

user2  / khuser2

user3  / khuser3


# useradd user1

# passwd user1


# useradd user2

# passwd user2


# useradd user3

# passwd user3


# ls /home

# tail /etc/passwd

# tail /etc/shadow


'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 14-1 패키지 관리 - tomcat 환경설정  (0) 2016.07.10
[CentOS] 14. 패키지 관리  (0) 2016.07.10
[CentOS] 13-1. 사용자관리체크  (0) 2016.07.10
[CentOS] 13. 사용자관리  (0) 2016.07.10
[CentOS] 12. HDD 추가하기  (0) 2016.07.10

UID, uid (유저아이디) : OS가 각 사용자에게 부여한 번호

GID, gid (그룹아이디) : OS가 각 그룹에게 부여한 번호

슈퍼유저(관리자) : root

시스템유저 : 서비스나 기타 OS에 운영에 필요한 사용자

일반유저   : 로그인하는 사용자  UID >= 500 /etc/login.defs


사용자를 생성할 때 저장되는 파일 : 

/etc/{passwd,shadow,group}


사용자를 생성할 때 변화되는 내용 : 

1. /etc/{passwd,shadow,group} 한 줄 추가

2. /home/사용자명 디렉토리가 생성

3. /var/spool/mail/사용자명  메일 스풀파일이 생성


/etc/defaults/useradd, /etc/login.defs 정의 


/etc/shells 


bin:x:1:root,bin,daemon


사용자명은 OS 전혀 상관없다. 오로지 UID 사용자를 판단한다.

/etc/passwd 비밀번호 필드의 x 를 지우면 비밀번호가 있어도 자동로그인 확인


UID : 0 

username : abc

passwd : 1234 


# useradd -o -u 0 abc

# echo 1234 | passwd --stdin abc

# ssh abc@localhost

# vipw

ksw:x:0:0:root:/root:/bin/bash


ksw:$6$YMrkwzHL$L ...



'OS > [Linux] CentOS' 카테고리의 다른 글

[CentOS] 14. 패키지 관리  (0) 2016.07.10
[CentOS] 13-2. 사용자 생성  (0) 2016.07.10
[CentOS] 13. 사용자관리  (0) 2016.07.10
[CentOS] 12. HDD 추가하기  (0) 2016.07.10
[CentOS] 11. vi 편집  (0) 2016.07.10

+ Recent posts