하늘이 무너져도 솟아날 구멍은 있다고 했는데...
암튼, 삽질의 연속이었지만 얻은게 많은 하루였다.
참조 url
커널컴파일 : http://blog.naver.com/kill_9/100001510182
apm configuration : http://blog.naver.com/kill_9/100011126785
참조 url2
얼마전 회사서버중 하나의 커널버전이 너무 낮아 커널 컴파일을 했었다.
물론, scsi와 ethernet 만 잡고 나머지는 죄다 없애고...
회사에서 서비스하는 모듈에 이상이 생겼다.
플래시를 동적으로 링크해서 어쩌구저쩌구 하는 부분인데 이게 실행이 안되는 것이었다.
관련 데몬은 예전 어떤 업체에서 돈 주고 샀었는데 그 회사의 사장이란 사람의 마인드가 영 글러먹어 관련 매뉴얼 및 실행소스, 바이너리를 줄 수 없다고 한 것이다.
비용을 지불하고 서비스를 받으라는 것인데, 명색이 오픈소스를 사랑하고 서버의 세팅에 관련된 부분에 비겁하게 돈주고 처리하는게 싫어서 내가 설치한다고 했다.
그 한마디가 지금 이렇게 회사에서 삽질기를 쓰고 있는 가장 큰 이유이기도 하고...
문제는 새로 업데이트한 커널에 관련된 모듈이 설치가 되지 않았다는 것이다.
물론, 소스나 실행바이너리가 있으면 어떻게 해보겠는데 그런 기술지원이 전혀 없고(그 사장새끼 생각할 수록 열받네..) 해서 이전 커널로 재부팅을 했다.
다행히 해당 모듈들이 로딩이 되었고 서비스가 정상으로 되돌아 오나 싶었는데 문제는 전혀 다른 곳에서 터져버렸다.
다행히 아파치 모듈관련 부분인데 불행하게도 커널업그레이드 할때 apm 까지 업그레이드를 해버려 이전 정보는 전혀 남아 있지 않는 상태.. 더욱 불행한건 디스크를 절약하기 위해 이전 설정파일들을 삭제 해버린것... OTL
그나마 다행인건 이전 아파치 설정파일을 백업해 두었었고(역시 백업의 중요성이란..) 더더욱 다행인건 해당서버와 거의 동일한 환경의 서버가 한대 더 있었다는 것이다.
phpinfo로 두 서버의 아파치 모듈을 비교해보니 역시나 하나가 빠져있었다.
mod_fpsock.so
http://apach.org 에 가서 해당 모듈을 검색했는데 없었다... 헉..
아무리 뒤져봐도 이런 희안한 모듈이 보이지 않았다.
하는 수 없이 이전 아파치 디렉토리의 libexec/ 디렉토리에 가보니 mod_fpsock.so 파일이 있는 것이었다.
거의 지푸라기라도 잡는 심정으로 php+apache 세팅을 했다.
# apache_1.3.33 ] ./configure --prefix=/www --activate-module=src/modules/php4/libphp4.a --enable-module=so --enable-shared=max --add-module=src/modules/standard/mod_so.c
아파치 1.3 버전 이후부터 DSO(Dynamic Shared Object) 방식을 지원하게 되었는데 이는 아파치의 기능들을 모듈화 시켜서 서버관리자 측면에서 보다 관리의 편리성을 주기 위해 만들어졌는데 아파치 1.1 버전을 슬랙웨어라고 보면 현재의 아파치는 요즘 나오는 모듈화 기반의 리눅스 커널이라고 생각하면 맞는 표현이라고 생각한다.
즉, 특정 모듈을 설치하기 위해 기존의 apache를 지우고 재설치하는게 아니라 해당 모듈만 컴파일하고 아파치 설정파일에서 해당 모듈만 추가해주고 데몬을 재실행 시키면 작동하는 방식이다.
DSO 방식으로 구동되기위해선 mod_so.so 모듈이 반드시 설치되어야 한다.
mod_so.so 파일은 실행시 동적으로 라이브러리를 적재하고 필요치 않을때 메모리에서 해제하는 등의 역활을 하는 모듈이다.
아파치 기본 설정에는 이 항목이 disable 상태인데 DSO 방식으로 컴파일하기 위해선 configure 옵션에서 --enable-module=so 항목을 추가해야 한다.
컴파일하고 설치한 다음 백업된 기존 파일들을 적당히 수정한다.
httpd.conf 파일을 수정한다.
LoadModule env_module libexec/mod_env.so
LoadModule fpsock_module libexec/mod_fpsock.so
......
AddModule mod_env.c
AddModule mod_fpsock.c
.......
위 부분을 모듈로써 사용한다는 말인데 반드시 LoadModule 와 AddModule 는 쌍을 이루어야 한다.
그리고 예전 libexec/ 디렉토리의 mod_fpsock.so 파일을 같은 위치에 복사하고 아파치 데몬을 재기동 시키니 비로소 정상적인 결과가 나올 수 있었다.
# /www/bin/apachectl start
/www/bin/apachectl start: httpd started
메시지가 나왔을때의 감동이란... 유에서 무를 창조한 느낌이었음..(너무 오버센스인가?)

댓글을 달아 주세요