C Programming Language


 사전 지식

  1. .c 파일 만들기

  2. 프로젝트에 C 언어 소스 파일 추가하기

  3. Hello, World ! 출력 하기



목차

 1. Hello, World! 출력 하는 방법

 2. 변수

 3. 정수형 자료형

 4. 실수 자료형




 1. Hello, World! 출력 하는 방법

#include <stdio.h>

// 단순 출력

void main() {

printf("Hello, World! \n");

}


#include <stdio.h>

// 서식 지정자

void main() {

printf("%s\n", "Hello, World!");

}


#include <stdio.h>


void main() {

printf("Hello, %s\n", "World!");

}





 2. 변수


  - 변수를 "선언한다."

   : C언어의 문법은 무조건 위에서 아래로 해석(절차지향)되기 때문에 변수를 사용하려면

     사용하는 부분보다 위에 변수를 선언해줘야 한다.

     즉, 변수 선언이라는 말은 변수가 있다는 것을 알려준다는 뜻이다.

ex)

   int     num1;

자료형 변수이름;

 * 자료형, 변수명 규칙


  - "변수에 값을 할당한다."

   : 변수에 값을 저장하는 과정을 말한다.

     일반적으로 수학에서는 =가 같다는 뜻이지만, C 언어에서는 =를 값을 할당할 때 사용한다.

ex)

num1 = 10;

변수 이름 = 값;

printf("%d", num1);

 * %d는 10진수(decimal)를 출력할 때 사용하는 서식 지정자이다.


  - 변수의 선언 및 초기화(할당)

int num1 = 10, num2 = 20, num3 = 30;




 3. 정수형 자료형

  - signed

   : 부호 있는 정수를 표현 ( 보통 signed 생략 )


  - unsigned

   : 부호 없는 정수를 표현 ( 0 부터 시작 )


  - char                            %d(decimal), %c(character, 문자)

   : 1바이트, 8비트


  - short                           %d

   : 2바이트, 16비트


  - int                              %d

    : 4바이트, 32비트


  - long                           %ld

    : 4바이트, 32비트


  - long long                    %lld

   : 8바이트, 64비트


 * 언더플로우(underflow)와 오버플로우(overflow)

  : 각 자료형에 저장할 수 있는 최소 최대값을 벗어난 경우


 * sizeof

  : 자료형(타입)의 크기를 바이트(byte) 단위로 구하는 sizeof 연산자

 - sizeof(자료형)

 int size;

 size = sizeof(int);

 printf("%d", size);


 - sizeof(표현식)

 int num1 = 0;

 int size;

 size = sizeof(num1);

 printf("%d", size);



* 최대, 최솟값 표현

 - #include <limits.h>

  : 자료형의 최댓값과 최솟값이 정의된 헤더 파일

char num1 = CHAR_MIN;

shrot num2 = SHRT_MIN;

int num3 = INT_MAX;

long num4 = LONG_MAX;

long long num5 = LLONG_MAX;




 4. 실수 자료형

  - float                %f (floating point) 소수점 이하 자릿수 출력 기본값은 여섯 자리

   : 4바이트, 32비트


  - double             %f

   : 8바이트, 64비트


  - long                %f

   : 8바이트, 64비트

float num1 = 0.1f;

double num2 = 367.2123;

long double num3 = 9.12335l;


 * sizeof

float num1 = 0.0f;

double num2 = 0.0;

long double num3 = 0.0l;


printf("%d, %d, %d", sizeof(num1), sizeof(num2), sizeof(num3));


 * 최대, 최솟값 표현

 - #include <float.h>

  : 실수 자료형의 양수 최솟값, 최댓값이 정의된 헤더 파일

float num1 = FLT_MIN;

float num2 = FLT_MAX;

double num3 = DBL_MAX;

double num4 = DBL_MIN;

long double num5 = LDBL_MIN;

long double num6 = LDBL_MAX;


printf("%.5f %.2f", num1, num2);

printf("%e %e", num3, num4);

printf("%Le %Le", num5, num6);

* %.5f는 소숫점 5번째 이하 자릿수를 출력한다는 의미

* %e, %Le는 지수 표기법으로 출력

 ex) 2.225074e-308




정리


 1. 변수 선언

  - 자료형 변수이름 형식으로 선언 한다.


 2. 변수에 선언과 값 저장

  - int num1

  - num1 = 10;


 3. 변수 선언 및 초기화(값 저장)

  - int num1 = 10;


 4. 자료형 크기 구하기

sizeof(int); // 자료형 자체의 크기를 구할 때

int num1;

sizeof(num1); // ( )를 지정하는 방법

sizeof num1; // ( ) 없이 표현식으로 지정하는 방법


 5. 정수 자료형의 오버플로우와 언더플로우

   - signed 자료형의 오버플로우 발생 시 최솟값(음수)부터 다시 시작, 언더플로우가 발생하면 최댓값(양수)부터 점점 작아진다.

   - unsigned 오버플로우가 발생하면 0부터 다시 시작, 언더플로우가 발생하면 최댓값부터 점점 작아진다.


 6. limits.h에 정의된 정수 자료형의 최솟값과 최댓값

 7. stdint.h에 정의된 정수 자료형의 최솟값과 최댓값

 8. 지수 표기법

  - 2.1e+3: 2100

  - 2.1e-2: 0.021


 9. 지수 표기법과 부동소수점

  - 지수 표기법은 실수를 소스 코드에 표기하거나 화면에 출력하는 방법

  - 부동소수점은 실수를 메모리 또는 디스크에 저장하는 방식


 10. 실수 자료형의 오버플로우와 언더플로우

  - 실수 자료형은 오버플로우가 발생하면 inf(무한대)가 되며 언더플로우가 발생 시 0이 된다.


 11. float.h에 정의된 최솟값과 최댓값

 

 12. 숫자 서식 지정자


 - %d

 : 부호있는 정수

 - %ld

 : 부호있는 long 정수

 - %lld

 : 부호있는 long long 정수

 - %u

 : 부호 없는 정수

 - %lu

 : 부호 없는 long 정수

 - %llu

 : 부호 없는 long long 정수

 - %f

 : float, double형 실수

 - %Lf

 : long double형 실수

 - %e

 : float, double형 실수를 지수 표기법으로 출력

 - %Le

 : long double형 실수를 지수 표기법으로 출력


 


'Basic > C' 카테고리의 다른 글

05. C언어 기초 보기5  (0) 2016.08.30
04. C언어 기초 보기4  (0) 2016.08.29
03. C언어 기초 보기3  (0) 2016.08.29
02. C언어 기초 보기 2  (2) 2016.08.29
참고 사이트  (0) 2016.06.18

출처 - 한국성서대학교 - 매일의 성경


8월 22일 (월) / 이사야 2 ~ 4 장

질문:시온에 남아 있는 모든 사람은 무엇을 얻을 것이라고 말하고 있는가?

답변:

 이사야 4 장

  3. 시온에 남아 있는 자, 예루살렘에 머물어 있는 자 곧 예루살렘 안에 생존한 자 중 기록된 모든 사람은 거룩하다 칭함을 얻으리니


8월 23일 (화) / 이사야 5, 7 ~ 8 장

질문: 이사야가 구원의 징조로 제시한 것은 무엇인가?

답변:

 이사야 7 장

  14. 그러므로 주께서 친히 징조를 너희에게 주실 것이라 보라 처녀가 잉태하여 아들을 낳을 것이요 그의 이름을 임마누엘이라 하리라


8월 24일 (수) / 이사야 9 ~ 10:4, 14:24 - 32, 17 장, 열왕기하 16:10 ~ 20 장

질문: 유다 왕 아하스가 다메섹으로 간 이유는 무엇인가?

답변:

 열왕기하 16 장
  10. 아하스 왕이 앗수르의 왕 디글랏 빌레셀을 만나러 다메섹에 갔다가 거기 있는 제단을 보고 아하스 왕이 그 제단의 모든 구조와 제도의 양식을 그려 제사장 우리야에게 보냈더니

 해설: 아람과 북이스라엘이 연합하여 침공해 오자 앗수르에게 예물을 주고 도움을 요청한다. 앗수르가 아람과 북이스라엘 연합군을 무력화시키자 아하스는 앗수르 왕을 만나기 위해 다메섹을 방문한다. 

8월 25일 (목) / 미가 1 ~ 3 장

질문: 미가는 "선지자는 무엇을 위해 점을 친다"고 했는가?

답변:

 미가 3 장
  11. 그들의 우두머리들은 뇌물을 위하여 재판하며 그들의 제사장은 삯을 위하여 교훈하며 그들의 선지자는 돈을 위하여 점을 치면서도 여호와를 의뢰하여 이르기를 여호와께서 우리 중에 계시지 아니하냐 재앙이 우리에게 임하지 아니하리라 하는도다.

8월 26일 (금) / 미가 4 ~ 6 장

질문: 미가는 이스라엘을 다스릴 자가 어디에서 나온다고 했는가?

답변:

 미가 5 장
  2. 베들레헴 에브라다야 너는 유다 족속 중에 작을지라도 이스라엘을 다스릴 자가 네게서 내게로 나올 것이라 그의 근본은 상고에, 영원에 있느니라

8월 27일 (토) / 미가 7 장, 역대하 27 ~ 28 장

질문: 미가는 주께서 야곱에게 성실을 베푸시며 아브라함에게 무엇을 더하시리라고 말하는가?

답변:

 미가 7 장
  20. 주께서 옛적에 우리 조상들에게 맹세하신 대로 야곱에게 성실을 베푸시며 아브라함에게 인애를 더하시리이다.

8월 28일 (일) / 이사야 10:5 ~ 12 장, 28 ~ 29 장, 열왕기하 17:1 - 5, 18:1 - 12 장

질문: 이스라엘의 수도 사마리아가 함락된 이유는 무엇인가?

답변:

 열왕기하 18 장
  12. 이는 그들이 하나님 여호와의 말씀을 듣지 아니하고 그의 언약과 여호와의 종 모세가 명령한 모든 것을 따르지 아니하였음이더라


저번주차 > 2016 - 하계방학 묵상지 8주차

출처 - 한국성서대학교 - 매일의 성경


8월 15일 (월) / 아모스 7 ~ 9 장

질문: 궁전을 하늘에 세우시고 그 궁창의 기초를 땅에 두시며 바닷물을 불러 지면에 쏟으시는 이는 누구인가?

답변:

 아모스 9 장

  6. 그의 궁전을 하늘에 세우시며 그 궁창의 기초를 땅에 두시며 바닷물을 불러 지면에 쏟으시는 이니 그 이름은 여호와시니라


8월 16일 (화) / 열왕기하 15 ~ 16:9 장, 역대하 26 장, 호세아 1장

질문: 이스라엘 왕 베가 때 침공하여 백성을 잡아간 앗수르 왕은?

답변:

 열왕기하 15 장

  29. 이스라엘 왕 베가 때에 앗수르 왕 디글랏 빌레셀이 와서 이욘과 아벨벳 마아가와 야노아와 게데스와 하솔과 길르앗과 갈릴리와 납달리 온 땅을 점령하고 그 백성을 사로잡아 앗수르로 옮겼더라


8월 17일 (수) / 호세아 2 ~ 4 장

질문: 여호와는 이 땅(이스라엘)에 무엇이 없다고 하셨는가?

답변:

 호세아 4장

  1. 이스라엘 자손들아 여호와의 말씀을 들으라 여호와께서 이 땅 주민과 논쟁하시나니 이 땅에는 진실도 없고 인애도 없고 하나님을 아는 지식도 없고


8월 18일 (목) / 호세아 5 ~ 7 장

질문: 여호와께서 인내를 원하고 무엇을 원치 아니하며 번제보다 무엇을 원한다고 하셨는가?

답변:

 호세아 6 장

  6. 나는 인애를 원하고 제사를 원하지 아니하며 번제보다 하나님을 아는 것을 원하노라


8월 19일 (금) / 호세아 8 ~ 10 장

질문: 여호와는 이스라엘에서 묵은 땅을 기경하라고 하면서 무엇을 심고 무엇을 거두라고 말씀하시는가?

답변:

 호세아 10 장

  12. 너희가 자기를 위하여 공의를 심고 인애를 거두라 너희 묵은 땅을 기경하라 지금이 곧 여호와를 찾을 때니 마침내 여호와께서 오사 공의를 비처럼 너희에게 내리시리라


8월 20일 (토) / 호세아 11 ~ 13장

질문: 여호와는 이스라엘에게 하나님께로 돌아와서 무엇을 지키라고 말하는가?

답변:

 호세아 12 장
  6. 그런즉 너의 하나님께로 돌아와서 인애정의를 지키며 항상 너의 하나님을 바랄지니라

8월 21일 (일) / 호세아 14 장, 이사야 1, 6 장
질문: 이 땅의 그루터기는 무엇인가?

답변:

 이사야 6 장

  13. 그 중에 십분의 일이 아직 남아 있을지라도 이것도 황폐하게 될 것이나 밤나무와 상수리나무가 베임을 당하여도 그 그루터기는 남아 있는 것 같이 거룩한 씨가 이 땅의 그루터기니라 하시더라


 해설: 

  "거룩한 씨"

   - 옛 이스라엘이 하나님의 심판을 받아 파멸된 후 새로운 이스라엘이 솟아날 것이라는 하나님의 약속.


저번주차 > 2016 - 하계방학 묵상지 7주차

다음주차 > 2016 - 하계방학 묵상지 9주차

출처 - 한국성서대학교 - 매일의 성경


8월 8일 (월) / 열왕기하 8 ~ 10 장

질문: 바알을 섬기는 모든 사람들을 모으기 위해 예후가 사용한 계책은 무엇인가?

답변:

 열왕기하 10 장

  20. 예후가 바알을 위하는 대회를 거룩히 열라 하매 드디어 공포되었더라


8월 9일 (화) / 열왕기하 11 ~ 12 장, 역대하 21:1 ~ 22:9 장

질문: 요아스가 자신의 신복들에게 살해당한 장소는 어디인가?

답변:

 열왕기하 12 장

  20. 요아스의 신복들이 일어나 반역하여 실라로 내려가는 길 가의 밀로 궁에서 그를 죽였고


8월 10일 (수) / 열왕기하 13 ~ 14 장, 역대하 22:10 ~ 23 장

질문: 여호야다와 국민에게 죽임을 당한 바알의 제사장의 이름은 무엇인가?

답변:

 역대하 23 장

  17. 온 국민이 바알의 신당으로 가서 그 신당을 부수로 그의 제단들과 형상들을 깨뜨리고 그 제단 앞에서 바알의 제사장 맛단을 죽이니라


8월 11일 (목) / 요한복음 1 장, 역대하 24 ~ 25 장

질문: 빌립, 안드레, 베드로는 어느 동네 사람인가?

답변:

 요한복음 1 장

  44. 빌립은 안드레와 베드로와 한 동네 벳새다 사람이라


8월 12일 (금) / 요한복음 2 ~ 4 장

질문: 예수님께서 갈릴리에서 행하신 두 번째 표적은 무엇인가?

답변:

 요한복음 4 장

  53. 그의 아버지가 예수께서 네 아들이 살아 있다 말씀하신 그 때인 줄 알고 자기와 그 온 집안이 다 믿으니라

  54. 이것은 예수께서 유대에서 갈릴리로 오신 후에 행하신 두 번째 표적이니라


해설: 

 "네 아들이 살아 있다."

  - 첫 번째 이적을 나타내신 예수에 대한 믿음을 갖고 있는 왕의 신하가 자신의 아들이 병에 걸려 죽게 되었을 때에 먼 길에도 불구하고 예수를 찾아와 병든 아들을 고쳐 달라는 요청에 예수께서 이르시되 "네 아들이 살아 있다" 하여 그 사람이 예수께서 하신 말씀을 믿고 집으로 돌아왔고 말씀대로 그 사람의 아이는 예수를 만났을 시점부터 열이 내려 낫기 시작했다고 한다.


8월 13일 (토) / 아모스 1 ~ 3 장

질문: 이스라엘은 신 한 켤레를 받고 누구를 팔았나?

답변:

 아모스 2 장

  6. 여호와께서 이와 같이 말씀하시되 이스라엘의 서너 가지 죄로 말미암아 내가 그 벌을 돌이키지 아니하리니 이는 그들이 은을 받고 의인을 팔며 신 한 켤레를 받고 가난한 자를 팔며


8월 14일 (일) / 아모스 4 ~ 6 장

질문: 여호와의 날은 어둠의 날인가 빛의 날인가?

답변:

 아모스 5 장

  18. 화 있을진저 여호와의 날을 사모하는 자여 너희가 어찌하여 여호와의 날을 사모하느냐 그 날은 어둠이요 빛이 아니라


저번주차 > 2016 - 하계 방학 묵상지 6주차

다음주차 > 2016 - 하계 방학 묵상지 8주차

출처 - 한국성서대학교 - 매일의 성경


8월 1일 (월) / 역대하 13 ~ 15 장

질문: 어머니 마아가를 태후의 자리에서 폐한 왕은 누구인가?

답변:

 역대하 15 장

  16. 아사 왕의 어머니 마아가가 아세라의 가증한 목상을 만들었으므로 아사그의 태후의 자리를 폐하고 그의 우상을 찍고 빻아 기드론 시냇가에서 불살랐으니


8월 2일 (화) / 역대하 16 장 , 열왕기상 17 ~ 18 장

질문: 여호와를 지극히 경외하는 자로 아합 왕때 선지자 백명을 숨겨 떡과 물을 먹였던 사람은 누구인가?

답변:

 열왕기상 18 장

  4. 이세벨이 여호와의 선지자들을 멸할 때에 오바댜가 선지자 백 명을 가지고 오십 명씩 굴에 숨기고 떡과 물을 먹였더라


8월 3일 (수) / 열왕기상 19 ~ 21 장

질문: 여호와는 엘리야에게 다메섹에서 누구에게 기름을 부어 아람의 왕이 되게 하라고 했는가?

답변:

 열왕기상 19 장

  15. 여호와께서 그에게 이르시되 너는 네 길을 돌이켜 광야를 통하여 다메섹에 가서 이르거든 하사엘에게 기름을 부어 아람의 왕이 되게 하고


8월 4일 (목) / 역대하 17 ~ 18 장 , 열왕기상 22 장

질문: 여호사밧이 다시스의 선박을 제조하여 오빌로 금을 구하기 위해 보내려 하다가 그 배가 파선된 곳은 어디인가?

답변:

 열왕기상 22 장

  48. 여호사밧이 다시스의 선박을 제조하고 오빌로 금을 구하려 보내려 하였더니 그 배가 에시온게벨에서 파선하였으므로 가지 못하게 되매


8월 5일 (금) / 역대하 19 ~ 20 장 , 열왕기하 1장

질문: 예루살렘 주민과 여호사밧 왕에게 이 전쟁을 너희에게 속한 것이 아니요 하나님께 속한 것이다라고 말한 사람은 누구인가?

답변:

 역대하 20 장

  15. 야하시엘이 이르되 온 유다와 예루살렘 주민과 여호사밧 왕이여 들을지어다 여호와께서 이같이 너희에게 말씀하시기를 너희는 이 큰 무리로 말미암아 두려워하거나 놀라지 말라 이 전쟁은 너희에게 속한 것이 아니요 하나님께 속한 것이니라


8월 6일 (토) / 열왕기하 2 ~ 4 장

질문: 엘리사의 사환의 이름은 누구인가?

답변: 

 열왕기하 4 장

  11. 하루는 엘리사가 거기에 이르러 그 방에 들어가 누웠더니

  12. 자기 사환 게하시에게 이르되 이 수넴 여인을 불러오라 하니 곧 여인을 부르매 여인이 그 앞에 선지라


8월 7일 (일) / 열왕기하 5 ~ 7 장

질문: 나아만에게 은 한 달란트와 옷 두벌을 받아 나병에 걸린 엘리사의 사환은 누구인가?

답변:

 열왕기하 5 장

  23. 나아만이 이르되 바라건대 두 달란트를 받으라 하고 그를 강권하여 은 두 달란트를 두 전대에 넣어 매고 옷 두 벌을 아울러 두 사환에게 지우매 그들이 게하시 앞에서 지고 가니라

  24. 언덕에 이르러서는 게하시가 그 물건을 두 사환의 손에서 받아 집에 감추고 그들을 보내 가게 한 후 

  25. 들어가 그의 주인 앞에 서니 엘리사가 이르되 게하시야 네가 어디서 오느냐 하니 대답하되 당신의 종이 아무데도 가지 아니하였나이다 하니라


저번주차 > 2016 - 하계 방학 묵상지 5주차

다음주차 > 2016 - 하계 방학 묵상지 7주차

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

## 주제 : 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

출처 - 한국성서대학교 - 매일의 성경


7월 25일 (월) / 전도서 9 ~ 11 장

질문: 전도자는 청년의 때 마음에 원하는 길과 네 눈이 보는대로 좇아 행하라고 말한다. 그러나 그는 이 모든 일로 인해 무엇을 알라고 말하는가?

답변:

 전도서 11 장

  9. 청년이여 네 어린 때를 즐거워하며 네 청년의 날들을 마음에 기뻐하여 마음에 원하는 길들과 네 눈이 보는 대로 행하라 그러나 하나님이 이 모든 일로 말미암아 너를 심판하실 줄 알라


7월 26일 (화) / 역대하 1 ~ 2 장, 전도서 12 장

질문: 하나님은 모든 행위와 모든 은밀한 일선악 간에 어떻게 하시는 분인가?

답변: 

 전도서 12 장

  14. 하나님은 모든 행위와 모든 은밀한 일을 선악 간심판하시리라


7월 27일 (수) / 역대하 3 ~ 5 장

질문: 솔로몬이 지은 것 중 바다의 기능은 무엇인가?

답변:

 역대하 4 장

  6. 또 물두멍 열 개를 만들어 다섯 개는 오른쪽에 두고 다섯 개는 왼쪽에 두어 씻게 하되 번제에 속한 물건을 거기서 씻게 하였으며 그 바다제사장들이 씻기 위한 것이더라


7월 28일 (목) / 역대하 6 ~ 8 장

질문: 내 백성이 악한 길에서 떠나 겸비하여 기도하여 무엇을 구하면 하나님이 하늘에서 듣고 죄를 사하고 땅을 고친다고 했는가?

답변:

 역대하 7 장

  14. 내 이름으로 일컫는 내 백성이 그들의 악한 길에서 떠나 스스로 낮추고 기도하여 내 얼굴을 찾으면 내가 하늘에서 듣고 그들의 죄를 사하고 그들의 땅을 고칠지라


7월 29일 (금) / 역대하 9 장, 열왕기상 12 ~ 13 장

질문: 여로보암이 금송아지를 만들어 세웠던 두 곳은 어디인가?

답변: 

 열왕기상 12 장

  28. 이에 계획하고 두 금송아지를 만들고 무리에게 말하기를 너희가 다시는 예루살렘에 올라갈 것이 없도다 이스라엘아 이는 너희를 애굽 땅에서 인도하여 올린 너희의 신들이라 하고

  29. 하나는 벧엘에 두고 하나는 에 둔지라


7월 30일 (토) / 열왕기상 14 ~ 16 장

질문: 여리고를 건축하다 터를 쌓을 때 맏아들 아비람을 잃고, 문을 세울 때 막내 아들 스굽잃은 사람은 누구인가?

답변:

 열왕기상 16 장

  34. 그 시대에 벧엘 사람 히엘이 여리고를 건축하였는데 그가 그 터를 쌓을 때에 맏아들 아비람을 잃었고 그 성문을 세울 때에 막내 아들 스굽을 잃었으니 여호와께서 눈의 아들 여호수아를 통하여 하신 말씀과 같이 되었더라


7월 31일 (일) / 역대하 10 ~ 12 장

질문: 르호보암때 애굽 왕 시삭이 올라와 솔로몬이 만든 무엇을 빼앗아 갔는가?

답변:

 역대상 12 장

  9. 애굽 왕 시삭이 올라와서 예루살렘을 치고 여호와의 전 보물과 왕궁의 보물을 모두 빼앗고 솔로몬이 만든 금 방패도 빼앗은지라


저번주차 > 2016 - 하계 방학 묵상지 4주차

다음주차 > 2016 - 하계 방학 묵상지 6주차

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

## 주제 : 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

+ Recent posts