Jeus 관리툴

Program/Linux 2011.12.13 10:29
Jeus 관리툴

4.0과 5.0의 Webmanager의 차이점.
4.0 => Jmanager와 Webmanager 가 제공됨
  두개의 기능이 중복되어 역할분리가 제대로 안되어 사용이 어려움.
5.0=> JMX Java Management Exception 의 약자로 WAS 관리하기위한 표준임.
JAXB xml을 자바객체를 통해 접근
배치API추가 J2EE 1.4 이후부터는 모든 WAS가 반드시 API를 구현해야 하게 바뀌었음.

Jeusadmin : Jeusadmin <nodename> -Uadministrator -P<pw>
jeusexit 제우스 종료
boot/down 기동/종료.
nodelist 제우스에서 사용중인 노드의 리스트
pidlist 제우스에서 사용중인 엔진 및 컨테이너의 pidlist
conlist 컨테이너의 리스트(올라온 컨테이너만 나옴)
startcon/ downcon 컨테이너 기동/종료
downbackup 다운할때 백업하는 명령어
reload 모듈을 언디플로이후 다시 디플로이 하는 명령어.
allenglist 모든 컨테이너의 모든엔진리스트 
starteng/ downeng 엔진의 기동/종료
deploy/ undeploy 어플리케이션과 EJB 디플로이/ 언디플로이하는 명령어
applist 어플리케이션 리스트
meminfo 매니져의 메모리정보
dump 덤프뜨는 명령어.
mbeanlist 쿼리보는 명령어.
help 도움말 
exit Jeusadmin 종료

Webadmin : Webadmin container_name -Uadministrator -P<pw>
englist 서블릿엔진의 리스트
engselect 엔진선택
reload 컨텍스트그룹의 리로드
restart 일반적으로 안나옴.
suspend/resume 임시적으로 servlet이나 context를 중지
terminate 서블릿 서비스를 중지하고 context를 제거
clr_stat 상태를 리셋함 
info 서블릿 엔진별 기본정보 (엔진선택하지 않으면 안됨)
st -m 메모리상태확인
-t 스레드상태확인
-r 리퀘스트 상태확인
-s 세션상태확인
-d 일반적으로 안나옴.
ti -li 스레드 리스너 아이디
-r 스레드 리퀘스트정보
-k 반복횟수
-I 반복하는 시간(초)
di -p 데이터베이스 풀 보는 명령어...
cfg 구성화면을 보는 명령어 (Vhost, Listener. Context Group, Log정보등)
set 콘솔환경을 보는 명령어.

저작자 표시 비영리 변경 금지
신고

'Program > Linux' 카테고리의 다른 글

Jeus 관리툴  (0) 2011.12.13
리눅스 ssl 설치  (0) 2008.05.19
Linux 에서 apache , resin 연동  (0) 2008.05.19
리눅스 페도라 에서 마우스 커서가 안보일때  (0) 2008.05.19
subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14

리눅스 ssl 설치

Program/Linux 2008.05.19 10:48

아파치 2.x의 경우는 1.3과는 달리 mod_ssl을 별도로 추가해서 설치할 필요가 없다.
apache2.x 버전 자체에 모듈이 포함되어 있기 때문에 apache 설치시에 --enable-ssl 옵션만 추가해서 사용하면 된다.

mysql, gd, imap등의 패키지는 이미 깔려 있는 상태이며, 모든 패키지는 /usr/local/src/ 디렉토리 안에 다운로드 받은 상태로 설치를 시작한다.


1. 소스를 다운 받은 디렉토리로 이동

[root@fduser.org root]# cd /usr/local/src


2. 압축 풀기

[root@fduser.org src]# tar xvzf httpd-2.2.4.tar.gz
[root@fduser.org src]# tar xvzfp php-5.2.3.tar.tar
[root@fduser.org src]# tar xvzf ZendOptimizer-2.6.2-linux-glibc21-i386.tar.gz


3. apache 설치

[root@fduser.org src]# cd httpd-2.2.4
[root@fduser.org httpd-2.2.4]# ./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared --enable-rewrite --enable-ssl
[root@fduser.org httpd-2.2.4]# make
[root@fduser.org httpd-2.2.4]# make install


4. PHP 설치 (DB,imap,gd,apache)

- 아래의 옵션을 모두 적용하여 php를 설치 할 경우는 몇몇 패키지가 설치되어 있지 않아 에러가 발생하게 된다. php-5.2.3버전의 경우는 libxml2, libxml2-devel 패키지의 버전문제로 설치가 되지 않기 때문에 패키지 버전을 업그레이드 한다.(http://rpmfind.net 에서 OS에 맞는 최신 패키지를 찾아서 설치한다)
그리고, freetype, libjpeg, libpng등의 라이브러리와 관련된 에러메지시가 발견되면 freetype-devel, libjpeg-devel, libpng-devel 패키지를 추가로 설치하고 php설치를 진행한다.

[root@fduser.org httpd-2.2.4]# cd /usr/local/src/php-5.2.3
[root@fduser.org php-5.2.3]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache2/bin/apxs --enable-sysvshm=yes --enable-sysvsem=yes --enable-debug=no --enable-track-vars=yes --enable-url-fopen-wrapper=yes --with-ttf --with-png-dir=/usr --with-zlib-dir --with-jpeg-dir=/usr --with-gdbm=/usr --enable-ftp --with-tiff-dir=/usr --enable-memory-limit --enable-mbstring --with-expat-dir=/usr --enable-sockets --enable-wddx --with-freetype-dir=/usr --enable-bcmath --enable-mbstr-enc-trans --enable-mbregex --enable-exif --with-gd --enable-gd-native-ttf --enable-gd-imgstrttf --enable-calendar --with-openssl=/usr
[root@fduser.org php-5.2.3]# make
[root@fduser.org php-5.2.3]# make install
[root@fduser.org php-5.2.3]# cp php.ini-dist /usr/local/php/lib/php.ini


5. ZendOptimizer 설치

[root@fduser.org php-5.2.3]# cd /usr/local/src/ZendOptimizer-2.6.2-linux-glibc21-i386
[root@fduser.org ZendOptimizer-2.6.2-linux-glibc21-i386]# sh install.sh

- install.sh 파일을 실행한 후 apache와 php관련된 정보를 입력한 후 설치를 완료한다.


6. httpd.conf 파일 수정후 apache 리스타트

- httpd.conf 파일에 php가 인식되도록 아래 구문을 추가한다.

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

- httpd.conf 수정후 apache 데몬은 재실행한다. ssl 서버로 시작하기 위해서 startssl 명령으로 시작.

[root@fduser.org ZendOptimizer-2.6.2-linux-glibc21-i386]# cd /usr/local/apache2/conf
[root@fduser.org conf]# /usr/local/apache/bin/apachectl stop
[root@fduser.org conf]# /usr/local/apache/bin/apachectl startssl


7. key 파일 생성 및 csr 코드 생성

- key 파일 생성

[root@fduser.org conf]# openssl genrsa 1024 > fduser.org.key
Generating RSA private key, 1024 bit long modulus
....................................++++++
................++++++
e is 65537 (0x10001)

- csr 코드 생성

[root@fduser.org conf]# openssl req -new -key fduser.org.key -out fduser.org.csr
Using configuration from /usr/share/ssl/openssl.cnf
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:KR
State or Province Name (full name) [Berkshire]:Gyunggido
Locality Name (eg, city) [Newbury]:Sungnam
Organization Name (eg, company) [My Company Ltd]:Hostway IDC
Organizational Unit Name (eg, section) []:Technical support Team
Common Name (eg, your name or your server's hostname) []:FD KOREA
Email Address []:fd@fduser.org

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

- 생성된 csr 코드 확인

[root@fduser.org conf]# cat fduser.org.csr
-----BEGIN CERTIFICATE REQUEST-----
MIIB4jCCAUsCAQAwgaExCzAJBgNVBAYTAktSMRIwEAYDVQQIEwlHeXVuZ2dpZG8x
EDAOBgNVBAcTB1N1bmduYW0xFDASBgNVBAoTC0hvc3R3YXkgSURDMR8wHQYDVQQL
ExZUZWNobmljYWwgc3VwcG9ydCBUZWFtMRUwEwYDVQQDEwxKb28gd29vIGt3b24x
HjAcBgkqhkiG9w0BCQEWD2pvb2tAam9vay5wZS5rcjCBnzANBgkqhkiG9w0BAQEF
AAOBjQAwgYkCgYEA0ZvDHAVHU5xbT/ZDsAebNPBjRaXAPtmaV/WEIi4YsYkwBC15
Ro/gsPqNNCe5CJUw+K3qGnhbQI9Nd0/UKfTn174NSFWUxQv9E1mE4k5xoD/2T1Jf
TcZ0a0WDjIG/Xd69D+nkCTDG1ZbQnZ8qq2DcbulbjwD6sB5HTusRVHeIu2sCAwEA
AaAAMA0GCSqGSIb3DQEBBAUAA4GBAEjfawGIByqF+fLLjpeX2XZAIkL0L/kfOJbs
vuFwVNJuWYiakJF+LJaCz5S40CoZMV/bD+w+223MVF5KqAKTc6NUBbYGfBvuGTHT
TwLtnTqVBP0Xla0opWZWZ8JbGQJAGd+fxMOfvqx0ES1oPn0J97NpknSOBPOO3Q9s
/ZA9CUYd
-----END CERTIFICATE REQUEST-----
[root@fduser.org conf]#

- csr 코드 생성이 완료되면 생성된 csr 코드를 입력해서 ssl 인증키 발급업체에 인증키 발급을 신청 한다.


8. 인증서 및 CA 인증서 설치

- 인증키 발급 업체에서 인증키를 발급받으면 www_fduser_org.crt(인증서), www_fduser_org.ca-bundle(CA 인증서)와 같이 두개의 인증서 파일을 발급받게 된다.
- 두 파일을 서버의 /usr/local/apache/conf 디렉토리에 업로드한다.


9. SSL 가상호스트 설정

- apache2는 httpd.conf 파일이외에 /usr/local/apache2/conf/extra/ 디렉토리에 있는 파일들을 include해서 참조하도록 설정되어 있다. 가상호스트 설정과, ssl 설정을 include 할수 있도록 httpd.conf 파일에서 아래부분의 주석을 해제 한다.


# Virtual hosts
Include conf/extra/httpd-vhosts.conf


# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

- httpd-vhosts.conf 파일에 가상호스트를 추가하고 httpd-ssl.conf 파일에 아래와 같은 형식으로 ssl 가상호스트를 추가한다.

##
## SSL Virtual Host Context
##

NameVirtualHost 211.239.151.254:443

<VirtualHost 211.239.151.254:443>
DocumentRoot "/home/fd/public_html"
ServerName www.fduser.org
ServerAdmin fd@fduser.org
ErrorLog /usr/local/apache2/logs/error_log
TransferLog /usr/local/apache2/logs/access_log

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache2/conf/www_fduser_org.crt
SSLCertificateKeyFile /usr/local/apache2/conf/fduser.org.key
SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/www_fduser_org.ca-bundle

<FilesMatch "\.(cgi|shtml|phtml|php)$">
  SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/usr/local/apache2/cgi-bin">
  SSLOptions +StdEnvVars
</Directory>

BrowserMatch ".*MSIE.*" \
        nokeepalive ssl-unclean-shutdown \
        downgrade-1.0 force-response-1.0

CustomLog /usr/local/apache2/logs/ssl_request_log \
         "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

</VirtualHost>


10. apache 데몬 리스타트

- 모든 설정이 완료된 후 apache 데몬을 리스타트 하고 https://도메인으로 사이트를 띄워서 인증키를 확인한다.
- 여기서 https://www.fduser.org은 실제로는 ssl 설정이 되어 있지 않기 때문에 안뜨는게 정상 ^^

[root@fduser.org conf]# /usr/local/apache/bin/apachectl stop
[root@fduser.org conf]# /usr/local/apache/bin/apachectl start

- apache2.x 에서는 apachectl startssl로 실행을 하지 않는다. httpd.conf 파일에서 httpd-ssl.conf 파일을 include하는 부분의 주석을 풀고 start 하게되면 자동으로 443포트까지 열리게 되며, ssl 서버가 가동되게 된다.

* csr 코드 확인 : openssl req -noout -text -in *.csr

신고

'Program > Linux' 카테고리의 다른 글

Jeus 관리툴  (0) 2011.12.13
리눅스 ssl 설치  (0) 2008.05.19
Linux 에서 apache , resin 연동  (0) 2008.05.19
리눅스 페도라 에서 마우스 커서가 안보일때  (0) 2008.05.19
subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14
SSL

Linux 에서 apache , resin 연동

Program/Linux 2008.05.19 10:47
※ Linux에서 Apache, Resin 연동 (redhat 7.0 - 7.3)
(NOCT.PE.KR에서 퍼옴)
 
servlet, jsp 실행을 위한 caucho의 resin servlet container 를 apache webserver와 연동하여 봅니다.
먼저 jdk와 apache, mysql이 설치되어 있다고 가정합니다.
리눅스 상에서의 jdk 설치는 [jdk 설치 및 설정], apache 와 mysql 의 설치는 [APM 설치 및 설정]를 참조하세요.
이전의 설정을 이용하는 경우가 있을지도-_- 모르니 꼭 참고해야 합니다.
이제 resin을 성공적으로 연동하고나면 하나의 웹서버에서 php와 jsp를 모두 실행할 수 있겠군요. ^_^;;
1. 설치
caucho.com 에서 resin servlet/jsp 엔진을 다운받습니다. 현재(2002년 7월) 최신버전이 2.1.2 입니다.
저는 2.1.1 버전을 다운받았습니다. 파일명은 resin-2.1.1.tar.gz 입니다.

* resin 설치

$ cd /home
   -> resin-2.1.1.tar.gz파일을 /home 디렉토리에 받아놓았습니다

$ tar xvfz resin-2.1.1.tar.gz
   -> resin-2.1.1.tar.gz 파일압축을 해제합니다.

$ cd resin-2.1.1
   -> 압축해제 후 resin-2.1.1 디렉토리가 생성됐습니다.

$ ./configure --with-apache=/usr/local/apache --with-java-home=/usr/java/jdk1.3
    -> 아파치의 설치 경로와 jdk의 설치경로를 정확히 지정해줍니다.

$ make
$ make install

[참고] configure 에 대한 자세한 옵션은 ./configure --help 로 볼 수 있습니다.

2. 설정
resin 설치가 끝났습니다. 쉽지요? ^_^;; 그럼 /usr/local/apache/conf/httpd.conf 파일을 확인해보죠.
httpd.conf 파일의 가장 하단에 다음이 추가되어 있으면 아파치 모듈로 잘 붙은것입니다.

# httpd.conf 파일 하단 추가된 곳

LoadModule caucho_module /usr/local/apache/libexec/mod_caucho.so
AddModule mod_caucho.c
<IfModule mod_caucho.c>
      CauchoConfigFile /home/resin-2.1.1/conf/resin.conf
</IfModule>


- 환경변수 설정
vi 에디터로 /etc/profile 파일을 열어 PATH와 CLASSPATH, JAVA_HOME 및 RESIN_HOME을 설정합니다.

# /etc/profile 파일

CLASSPATH="$CLASSPATH:/home/resin-2.1.1/lib"
#기존의 CLASSPATH 변수에 새로운 경로를 더합니다
PATH="$PATH:/home/resin-2.1.1/bin"
#기존의 PATH 변수에 새로운 경로를 더합니다
JAVA_HOME="/usr/java/jdk1.3"
# jdk 가 설치된 경로입니다
RESIN_HOME="/home/resin-2.1.1"
# resin 설치 경로입니다
........
export PATH USER LOGNAME MAIL HISTSIZE INPUTRC CLASSPATH JAVA_HOME RESIN_HOME
# 밑줄친 변수가 export 구문에 없다면 위와 같이 추가합니다

자.. 이제 저장하고 쉘로 빠져 나옵니다. 바뀐 환경변수를 적용시켜주기 위해 command line에서
. /etc/profile 또는 source /etc/profile 해줍니다.
바뀌었는지 안바뀌었는지는 echo 를 이용해서 알 수 있겠네요.(예 : echo $CLASSPATH)

- resin.conf 수정
환경설정 마지막 입니다. resin의 환경설정 파일인 resin.conf를 수정해줍니다.
/home/resin-2.1.1/conf 디렉토리 밑에 존재합니다.

# resin.conf 파일 66 line 부근 웹문서의 root 디렉토리를 정해주는 부분입니다.
#아파치의 DocumentRoot 와 동일하게 합니다.(빨간 글씨 부분을 수정)

<!--
  - The root file directory of the server. Apache users will change
  - this to /usr/local/apache/htdocs and IIS users will change it
  - to d:\inetpub\wwwroot
-->
<doc>/home/htdocs</doc>

<!-- the http port -->
<http port='8080'/>


3. Test
-1. 드디어 resin 실행
resin을 실행하는 파일은 /home/resin-2.1.1/bin/httpd.sh 라는 스크립트 파일입니다.
다음과 같은 몇가지의 옵션을 붙일 수 있는데요.

$ cd /home/resin-2.1.1/bin
$ httpd.sh : resin을 foreground 로 실행합니다. - ①
$ httpd.sh start : resin을 background 로 실행합니다. 주로 쓰겠지요. - ②
$ httpd.sh stop : resin을 멈춥니다. - ③
$ httpd.sh restart : resin을 재시작합니다. - ④

우리는 ② 번으로 일단 resin을 실행시킵니다. 그리고 아파치도 물론 띄워야 합니다.
테스트 할 jsp 문서 하나를 작성해봅니다. 아까 지정한 웹문서의 루트디렉토리에 만듭니다.(/home/htdocs)

<%
    // test.jsp
    out.println("Hello, JSP");
%>

-2. 브라우저에서 확인
브라우저에서 http://ip주소/test.jsp

오호... 성공입니다. ^___^;;

-3. servlet 테스트
resin을 실행시킨 후에 /home/htdocs/WEB-INF 라는 디렉토리가 생성되었을 것입니다.
그 밑에 classes 라는 디렉토리를 만듭니다. 이 디렉토리가 servlet 파일을 위치시키는 곳입니다.
(물론 resin.conf 파일에서 수정 가능합니다.)

$ cd /home/resin-2.1.1/doc/examples/basic/WEB-INF/classes
$ cp *.java /home/htdocs/WEB-INF/classes
Env.java 와 HelloServlet.java 를 /home/htdocs/WEB-INF/classes 디렉토리로 복사

servlet 파일은 http://ip/servlet/class명 과 같이 servlet 이라는 경로를 통해 접근 가능합니다.
서블릿 엔진이 어떤 것이냐에 따라 차이가 있지만 resin에서는 그렇다는 것입니다.
복사한 예제 파일을 브라우저를 통해서 확인해 보죠.

간단하게 성공하고 말았습니다. 하지만 작년에 처음 시도했을때는 밤을 새웠답니다.(버벅버벅) ^_^;;
자세한 설정은 resin.conf 와 httpd.conf 파일을 잘 살펴보며 할 수 있습니다.



신고

'Program > Linux' 카테고리의 다른 글

Jeus 관리툴  (0) 2011.12.13
리눅스 ssl 설치  (0) 2008.05.19
Linux 에서 apache , resin 연동  (0) 2008.05.19
리눅스 페도라 에서 마우스 커서가 안보일때  (0) 2008.05.19
subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14

리눅스 페도라 에서 마우스 커서가 안보일때

Program/Linux 2008.05.19 10:42
/etc/xorg.conf 에서 device 항목에

Option "HWCusor" "off"  <-- 요렇게 추가
신고

'Program > Linux' 카테고리의 다른 글

리눅스 ssl 설치  (0) 2008.05.19
Linux 에서 apache , resin 연동  (0) 2008.05.19
리눅스 페도라 에서 마우스 커서가 안보일때  (0) 2008.05.19
subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14
아파치 튜닝3  (0) 2007.06.14

subversion(svn) 리눅스 설치

Program/Linux 2007.12.20 11:20
Embedded 커널 개발시 드라이버 추가 및 수정은 가지처럼 엮어진 여러 파일들을 수정하면서 이루어진다.  수정되는 양이 많다 보니 각 단계별 패치파일을 생성하기에도 양이 많고 쉽게 알아보기 힘들다. 하지만 버전관리를 통해 어느파일의 어느부분이 수정되었는지 쉽게 알수 있고 오류가 발생하였을 때 역추적도 쉬워진다.  

보안설정을 통해 소스 관리에 보존을 강화하며 웹인터페이스인 Viewvc를 활용해서 웹을 통해 열람시 보기 쉽고 수정사항등을 쉽게 찾아볼수 있다.

1. Subversion 개요
 
     (1) SVN이란?
            • Subversion 은 소프트웨어 버전 관리 시스템이다.
            CVS이후에 나왔으며 바이너리 까지 버전관리 할수 있는 장점이 있다.
     (2) 버전 관리 시스템 장점
            개발 버전과 릴리즈 버전을 섞이지 않고 쉽게 관리
            소스를 잘 못 수정했더라도 기록이 남고 되돌리기가 쉽다.
            수정, 추가, 삭제 등의 기록이 모두 남고 변경 사항을 추적하기 쉽다.
            개발자들이 따로 백업을 하지 않아도 된다.
     (3) 버전 관리 시스템의 종류
            CVS(Concurrent Version System) : 가장 오래된 버전관리 시스템
            Subversion : CVS의 간점을 개선하고 CVS를 대체할 목적으로 개발
            Visual Sourcesafe : 윈도우 기반 소프트웨어 버전관리 툴 (상용)
            Clear Case : Rational사에서 만든 버전관리 시스템 (상용)
            BitKeeper : 리눅스 커널개발시 사용하는 버전관리 시스템 (상용)
     (4) 버전 관리 시스템의 용어 정리
            리포지토리(Repository/ 저장소) : 관리되는 소스와 변경사항등이 저장되는곳
            체크아웃(Check out) : 저장소에서 소스를 받아오는것
            커밋 (Commit) : 체크아웃 한 소스를 수정, 추가 한 후 저장소에 저장하여 갱신
            리비전 (Revision) : 수정사항이 증가할때 마다 숫자가 증가하며 프로젝트의 진행 상황을 알수 있다.
            임포트 (import) : 아무것도 들어있지 않은 저장소에 맨 처음 소스를 넣는 작업
            익스포트(Export) : 체크아웃과 달리 버전관리 파일들을 제외한 순수한 파일을 받아올수 있다.
    (5) Embedded 개발시 장점
            Embedded 커널 개발시 드라이버 추가 및 수정은 가지처럼 엮어진 여러 파일들을 수정하면서 이루 어진다.
           수정되는
양이 많다 보니 각 단계별 패치파일을 생성하기에도 양이 많고 쉽게 알아보기 힘들다.
           하지만 버전  관리를 통해 어느
파일의 어느부분이 수정되었는지 쉽게 알수 있고 오류가 발생하였을 때 역추적도
           쉬워진다.
            관리대상인 소스파일들이 SVN 서버 저장소에 저장되기 때문에 다른 개발환경에서도 작업중인 소스를 다운로드 
              
고 수정한 부분을 커밋할 수가 있다.
            여러명이 각 모듈 별로 드라이버 작업을 할 경우 작업내용은 저장소에 모두 반영되기 때문에 추후 머징작업시
              시간을
단축할 수 있다.
            윈도우에서 작업을 하든 리눅스에서 작업을 하든 큰 문제없이 사용할수 있으며 웹브라우저를 통해 소스파일을
              검색
할수 있기 때문에 쉽게 접근할수 있다.
            릴리즈 후 최종 소스에 대한 자료관리도 쉽게 할 수 있다.


2. Subversion 설치
 
Subversion은 최신 리눅스 패키지에 포함이 되어있기도 하나. 여기서는 redhat 9.0 기준으로 소스컴파일을 통해 구축하는 방법을 소개한다. 패키지로 설치되어 있을경우 설정파일의 위치가 다를뿐 사용하는 방법은 같다.
 
     (1) 소스파일 다운로드
            Subversion 소스파일은 http://subversion.tigris.org/ 에서 subversion-1.4.3.tar.bz2파일을 받는다.
            Subversion 의존성 라이브러리(subversion-deps-1.4.3.tar.bz2)도 다운 받는다.
            Apache 2.0 이상 버전을 받는다. http://httpd.apache.org/ 에서 httpd-2.2.4.tar.gz 파일을 받는다.
            저장소를 Berkeley DB를 사용하고 할때는 Berkeley DB도 설치해야 한다.
              http://www.oracle.com/technology/software/products/berkeley-db/db/index.html 에서
              4.5.20.tar.gz를 받는다
            openssl http://www.openssl.org/source/ 에서 openssl-0.9.8e.tar.gz  을 받는다.
     (2) 소스 컴파일
            openssl 컴파일
              [root@hybus SRC]# tar xvzf openssl-0.9.8d.tar.tar
              [root@hybus SRC]# cd openssl-0.9.8d
              [root@hybus openssl-0.9.8d]# ./config
              [root@hybus openssl-0.9.8d]# make
              [root@hybus openssl-0.9.8d]# make install
            Berkeley DB 컴파일
              [root@hybus SRC]# tar xvzf db-4.5.20.tar.tar
              [root@hybus SRC]# cd db-4.5.20
              [root@hybus db-4.5.20]# cd db-4.5.20
              [root@hybus db-4.5.20]# cd build_unix
              [root@hybus build_unix]# ../dist/configure
              [root@hybus build_unix]# make
              [root@hybus build_unix]# make install

           
 
설치하면 /usr/local/BerkelyDB4.5 디렉토리가 생긴다.
              vi /etc/ld.so.conf로 경로를 추가해준다.
사용자 삽입 이미지


              추가 해주었으면 ldconfig로 설정을 적용한다.
              [root@hybus build_unix]# ldconfig

            Apache2 컴파일
              [root@hybus SRC]# tar xvzf httpd-2.2.4.tar.gz
              [root@hybus SRC]# cd httpd-2.2.4
              설정이 길기 때문에 스크립트를 만들어서 설정한다.
              [root@hybus SRC]# vi apache_conf

사용자 삽입 이미지


              [root@hybus SRC]# chmod +x apache_conf
              [root@hybus SRC]# ./apache_conf
              [root@hybus SRC]# make
              [root@hybus SRC]# make install
            Subversion 컴파일
              [root@hybus SRC]# tar xvjf subversion-1.4.3.tar.bz2
              [root@hybus SRC]# tar xvjf subversion-deps-1.4.3.tar.bz2
              설정이 길기 때문에 스크립트를 만들어서 설정한다.
              [root@hybus SRC]# vi subver_conf

사용자 삽입 이미지
          [root@hybus SRC]# chmod +x subver_conf
              [root@hybus SRC]# ./subvert_conf
              [root@hybus SRC]# make
              [root@hybus SRC]# make install

 
3. Subversion 사용하기
     (1) 저장소 만들기
            저장소 생성
              버클리 DB를 이용하거나 파일시스템을 이용한 저장소 둘중에 하나를 택하여 생성할수 있다.
              저장되는 형태는 다르나 사용하는 방법은 같다.
              # mkdir /home/svn
              # cd /home/svn/ /home/svn
              # svnadmin create --fs-type fsfs sample (파일시스템을 이용한 저장소)
              # svnadmin create --fs-type  bdb sample (버클리 DB를 이용한 저장소)
            저장소 그룹 권한설정
              # chmod -R g+w sample
            Apache 설정
              #cd /home/svn /home/svn
              # chown -R nobody.nobody sample (apache의 접근권한은 각 패키지마다 다를수 있으므로 확인 후 지정)
            /usr/local/apach2/conf/httpd.conf 수정
              <Location /svn/sample>
              DAV svn SVNPath
              /home/svn/sample
              </Location>
            확인
              웹 접속 http://125.7.203.253/svn/sample 또는 #svn checkout   
              http://125.7.203.253/svn/sample sample
     (2) 에디터 설정
            subversion에서 사용할 기본적인 에디터 지정
            지정하지 않으면 커밋등을 할수 없게 된다.
            .bash_profile등에 추가
              SVN_EDITOR=/usr/bin/vim
              export SVN_EDITOR
     (3) 디렉토리 만들기
            # svn mkdir svn://125.7.203.253/sample/trunk
              vi가 실행되면 :q!로 빠져나간다.
            Log message unchanged or not specified
              a)bort, c)ontinue, e)dit, C를 누르고 엔터를 누르면 Committed revision 1. 메세지가 나온다.
            메시지가 나오지 않으면 계정관리및 디렉토리 권한 설정을 다시 확인한다
     (4) Import
            저장소에 소스를 넣는다
              파일이나 디렉토리명을 import 다음에 넣어준다 디렉토리일 경우 디렉토리 하위 내용부터 추가된다.
              # svn import sampledir http://125.7.203.203/svn/sample/trunk
            확인
              # svn list http://125.7.203.203/svn/sample/trunk
     (5) Checkout
            저장소에 소스를 download한다. co로 줄여서 사용할수 있다.
              # svn checkout http://125.7.203.203/svn/sample/trunk sample
              방금 위에서 trunk에 import한 내용을 sample이란 디렉토리로 download한다.
              이 sample이란 디렉토리에서 이제 소스를 수정하고 작업하고 commit하면서 관리를 한다.
            checkout한 디렉토리에는 .svn이란 디렉토리가 있다 저장소 정보가 있기 때문에 지우면 안된다.
     (6) Commit
            check out해서 받은 소스를 수정하고 갱신한다. .svn이 있는 즉 저장소 정보가 있는 곳에서 커밋을 해야
              적용된다.
               # svn ci
    (7) Diff
            리비전 된 내용들을 비교해서 볼 수 있다.

           

4. Subversion 보안설정

 
     (1) apache 사용자 인증
 
            아파치에 사용될 패스워드 파일을 만든다.

사용자 삽입 이미지

 
            최초에 패스워드 파일을 만들때는 c 옵션을 붙이고 추후에 사용자 추가때는 c 옵션을 빼고 추가하면 된다.

사용자 삽입 이미지

 
            http.conf 파일에서 서브버전 location설정에 다음을 추가한다.

사용자 삽입 이미지

 
위에서 생성된 passwd파일에서 생성된 사용자와 비밀번호로 로그인 한 사람만 열람 및 읽기쓰기가 가능한 옵션이다.
만일 읽기는 모두에게 가능하고 커밋만 사용자만 가능하게 설정한다면 다음과 같이 수정한다.


 

사용자 삽입 이미지

 

5. ViewVC 연동하기
 
(1) Viewvc란?
 
Viewvc는 CVS에서 사용하였던 웹 인터페이스이다. 웹에서 소스를 비교하고 열람하는데 상당히
  유용하다. 파이썬 기반으로 동작되며 http://www.viewvc.org에서 자료를 받을수 있다.
 
(2) Viewvc 설치
 
 파이선 설치
  레드햇9.0 기준으로 설명을 하면 mod_python이 기본적으로 설치가 되어 있지 않다.
  따라서 래드햇 홈페이지에서 몇가지 rpm을 설치해야 한다.
  mod_python-3.0.3-3.i386.rpm
  swig-1.3.25-1.i386.rpm
 의존성의 패키지를 설치가 끝났다면 viewvc를 설치한다. 1.0.3 버전을 다운 받고 ./viewvc-install 을 실행하면 경로를 물어보는 커맨드가 나온다. 각 경로에 맞게 설정해주면 설치가 된다.


 

사용자 삽입 이미지
 
(3) Viewvc 설정
 
 /usr/local/viewvc-1.0.3에 설치가 되었다. viewvc.conf을 수정한다. 다음과 같은 부분을 찾아서 수정한다.

  저장소의 경로를 정한다. cvs_roots는 주석처리한다.
  svn_roots = svn: /home3/svn/PROJECT
  default_root = svn
  rcs_path = /usr/bin 는 주석을 해제한다.
  mime_types_file = /usr/local/apache2/conf/mime.types 은 주석을 해제한다.
  use_enscript = 1
  enscript_path = /usr/bin/
  php_exe_path = /usr/bin/php
  allow_tar = 1
  use_re_search = 1
 
 /usr/local/apache2/conf에 설치가 되었다. Httpd.conf파일에서 cgi 부분을 수정한다.


 

사용자 삽입 이미지
 
 /usr/local/viewvc-1.0.3/bin/cgi 에 있는 query.cgi  viewvc.cgi 파일을 /usr/local/apache2
  /cgi-bin에 복사한다.
 아파치를 재시작 한다.
  /usr/local/apache2/bin/apachectl restart

  http://125.7.203.253/cgi-bin/viewvc.cgi/로 접속하면 vicwvc로 파워업된 svn을 볼수있다.
  125.7.203.253은 아파치 서버와 svn서버가 동작되고 있는 ip이다.
 

사용자 삽입 이미지


사용자 삽입 이미지


 

사용자 삽입 이미지

신고

'Program > Linux' 카테고리의 다른 글

Linux 에서 apache , resin 연동  (0) 2008.05.19
리눅스 페도라 에서 마우스 커서가 안보일때  (0) 2008.05.19
subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14
아파치 튜닝3  (0) 2007.06.14
아파치튜닝2  (0) 2007.06.14

리눅스 기본 팁

Program/Linux 2007.06.14 14:22

1 GUI

1.1 DESKTOP X Window선택

 #vi /etc/sysconfig/desktop DESKTOP = "GNOME" or "KDE" 

1.2 X Window에서 해상도 조절

    CTRL + ALT + "+"(Num Lock key)
    CTRL + ALT + "-"

1.3 X window 해상도를 설정하려면

 /etc/X11/XF86Config-4 (symbolic link되어 있음) Screen section의 MODE "800*600" "1024*768" "1152*864" 

1.4 ami실행 후 메뉴가 깨져 있을 때

#export 해서 LANG 와 XMODIFIERS 변수를 확인하라.

1.5 ami실행 후 한영키를 사용하고 싶은 경우

xev를 실행해서 한영키의 키코드를 알아낸다. 예를 들어 한영키가 122, 한자키가 121이면 /etc/X11/Xmodmap 파일에 다음을 추가시킨다.
! i386 and alpha keycode 22 = BackSpace keycode 107 = Delete keycode 121 = Hangul_Hanja keycode 122 = Hangul 
X를 재실행하거나 재실행시키고 싶지 않다면
#xmodmap /etc/X11/Xmodmap 을 실행

1.6 휠마우스에서 휠이 작동을 안할 때

휠기능을 작동시키려면  /etc/X11/XF86Config-4 를 수정한다.
Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "PS/2" Option "Device" "/dev/psaux" Option "ZAxisMapping" "4 5" Option "Emulate3Buttons" "yes" EndSection 
바로 이 부분
 Option   "Protocol" "PS/2"
 Option   "Protocol" "IMPS/2" 로 고치면 휠을 사용할 수 있다. 만약 다음 부분
 Option      "ZAxisMapping" "4 5" 이 없다면 추가시킨다.
그리고 X window를 재시작하는 것을 잊지 않도록 한다.

1.7 원격에서 리모트서버의 X application실행시

서버측: xhost +클라이언트ip (xhost + 는 모든 주소에 대해 원격접속 허용)
클라이언트측: export DISPLAY=서버ip:0.0

1.8 폰트서버 설정

클라이언트측에서 Xmanager를 이용해 리눅스 서버에 접근하려면 서버에 폰트서버가 실행되고 있어야 한다. 폰트서버는 xfs데몬을 말하는 것으로 그냥 띄우면 되고 단지 /etc/X11/XF86Config에서
FontPath "/usr/X11R6/lib/X11/fonts/TrueType" # FontPath "unix/:-1" 
FontPath "unix/:7100" 로 주석부분을 고쳐주면 된다. 그럼 7100포트가 열린다. 그리고 그서버와 포트를 지정하면 폰트서버가 타 x서버에서 사용가능하다.

1.9 KDE 3.x 버전에서 윈도우용 트루타입 폰트를 못 찾는 경우

from KLTP
최근에 나온 레드햇8을 쓰고 있는데요 윈도우용 폰트를 가져다 쓰고 있습니다. 그런데 KDE에서 새로 추가한 윈도우용 트루타입폰트를 찾지 못하는 문제가 있더군요. xfontsel에서도 인식하고 셋팅역시 제대로 되어서 GTK나 Motif로 만들어진 다른 어플리케이션에서는 모두 인식하나 KDE에서는 백묵 글꼴만 나오고 윈도 폰트는 아예글꼴 리스트에 나오지도 않더군요. 해결책이 딴데 있더군요.

KDE가 QT 라이브러리로 만들어진 것이라 "혹시 QT셋팅에 문제가 있는것은 아닐까" 라는 생각을 하고 Qt config를 살펴봤습니다. QT Config에 Anti aliase font지원을 꺼 봤더니 제대로 동작하더군요. 아마도 QT내지는 XFS 자체의 버그인 것 같습니다. 간단히 말씀드리자면 qtconfig3를 실행시켜 Font탭에서 Enable Anti-Aliased Font Support를 꺼 주시고 X를 재시작 하시면 윈도우용 굴림 폰트를 KDE에서 이용하실 수 있습니다. --Kid A

1.10 한텀(hanterm) 타이틀바에 디렉토리 경로 보이게 하기

자신의 .bash_profile에 다음을 추가하면 한텀의 타이틀바에 <사용자ID>@<호스트명>:<디렉토리명>의 형식으로 나타나게 된다.
function proml { case $TERM in xterm*) local TITLEBAR='\[\033]0;\u@\h:\w\007\]' ;; *) local TITLEBAR='' ;; esac PS1="${TITLEBAR}\n] \u@\h ]" } proml 

2 Pacakge 관리

2.1 RPM 관련 커맨드

    #rpm -qa : 현재 설치된 package출력
    #rpm -qil mtools | less : mtools에 관한 package정보
    #rpm -qif /etc/bashrc : /etc/bashrc파일이 속한 package

2.2 rpm package설치시 상호의존성이 얽혀있을 땐 한 command로 설치

 #rpm -Uvh [package1] [package2] [packag3] ....... 

    의존성을 무시하고자 할 땐 --nodeps option사용

2.3 필요없는 rpm지우기

    만약 MySQL을 설치 하였다고 하자.

MySQL-3.23.33-1.i386.rpm* MySQL-devel-3.23.33-1.i386.rpm*
MySQL-client-3.23.33-1.i386.rpm* MySQL-shared-3.23.33-1.i386.rpm*

그리고 이것을 지우려면 ?

rpm -e `rpm -qa | grep MySQL` 

또한 대소문자를 구분하지 못한다면?

rpm -e `rpm -qa | grep -i mysql` 
이라고 써도 된다.

이때 ` 기호는 숫자 1번 왼쪽에 있는 백쿼터이다.

패키지명과 버젼이 동일한 패키지가 여러개 존재할때 삭제하는 방법

rpm -e 패키지명 --allmatches 

2.4 레드헷 8.0에서 up2date 사용하기

from KLTP
레드헷 8.0 설치하고 up2date을 사용하려 하니 황당한 에러가 나와서 해결하고 나서 올립니다.
레드헷 8.0 에서는 설치후에 [일반관리자용] setup 에서 서비스 보시면, rhnsd 가 있는데 이거 활성화 시켜 주시고요..(그냥 참조용임) 바로 up2date --register 하시면 접속해서 등록해서 바로 사용할 수 있습니다.

/etc/rc.d/init.d/rhnsd restart 하시면 됩니다.

이후 up2date * 하시면 됩니다. 그런데, 이런 에러가 나오시는분....

There was an SSL error: [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')] 
이게 SSL 에러냐.. 절대 아닙니당.. 저도 처음에 그런줄알고 패키지 문제 인줄 알고 의존성 찾아보고, 삽질했습니당.결국에 알아낸것은 시간이 일치 하지 않는 다는 결론을... 이건 구글에서 검색했는데, 누군가 시간차를 적어 놓았더군요... 혹시 해서...
rdate -s time.kriss.re.kr 
해서 다시, up2date --register 해보니... 헐 아주 잘 되네염... --박성훈

    time.kriss.re.kr은 사용하지 마세요. 제가 예전에 서버들 간의 시간동기화를 하기위해서 time.kriss.re.kr 사용했다가 아주 크게 쓴맛을 보았습니다. 표준연의 타임서버가 갑자기 죽고나서 정확한 시간으로 셋팅되는 것이 아니고 OS상에서 존재하는 가장 처음의 시간, 기억은 1960년대의 시간으로 셋팅 되는 바람에 중요한 데이터들간의 시간동기화에 문제가 생겨서 데이터를 몽땅 버린 적이 있습니다. 제가 추천하는 time 서버는 ntp를 사용하는 것입니다. time.datum.com, kr.public.ntp.get-time.net unix 계열의 OS에서는 ntp 관련 S/W를 설치하시면 됩니다. 그러면 이만... --익명

      이번에 레드헷 9.0을 설치하고 업데이트 하려고 하니 위으 에러메세지가 나오더군요! 그래서 시간을 동기화 했는데도 마찬가지 입니다. 그래서 레드헷 사이트에 가니 관련 RPM패키지를 받아 재설치 하라고 하네요 레드헷 사이트에 가서 새로운 up2date 관련 RPM을 받아 새로 설치 하시기 바랍니다. --호종기

3 Network

3.1 Network 설정 파일들

 /etc/hosts : localhost 및 server name /etc/resolv.conf : name server /etc/sysconfig/network : HOSTNAME /etc/sysconfig/network-scripts/ifcfg-eth0 : IP, Netmask, Gateway등등 
설정이 끝났다면
 #/etc/rc.d/init.d/network restart 또는
 #service network retart

3.2 급하게 Network설정을 해야할 경우

#ifconfig eth0 <ip_addr> netmask <netmask> up #route add default gw <gw> #cat > /etc/resolv.conf nameserver <DNS_addr> CTRL-D #ping dongwoo.org 

3.3 하나의 랜카드에 여러개의 ip추가하기

from KLTP
◎아이피추가는
1) ifconfig eth0:0 아이피 netmask 아이피 broadcast 아이피 up
2) cd /etc/sysconfig/network-scripts
3) /etc/sysconfig/network-scripts/에 있는 ifcfg-eth0을 복사, 파일명을 ifcfg-eth0:0
4) vi로 열어 Device=eth0:0, ipaddr=원하는 아이피 주소
5) ./ifup eth0:0
6) /etc/rc.d/init.d/network restart

계속 추가시에는 eth0:1, eth0:2....등등으로 한다. 재부팅해보고 ifconfig를 해봐서 추가되었는지 확인한다.

◎아이피 삭제는
1) ifconfig eth0:0 아이피 netmask 아이피 broadcast 아이피 down
2) cd /etc/sysconfig/network-scripts
3) rm ifcfg-eth0:0
4) /etc/rc.d/init.d/network restart

재부팅해보고 ifconfig해봐서 삭제되었는지 확인한다. 참고로 레드햇 8.0에서 셋팅함

3.4 열린 포트를 사용하는 프로세서를 확인하려면

if #3306 port is opened
 #fuser -n tcp 3306 -> show PID #ps -ef | grep [PID] 

3.5 ping 무시하기

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

3.6 TCP/IP속도 증가시키기

TCP/IP의 속도를 실제로 증가 시키는 것은 아니구요. 디폴트 값을 낮게 해서, 좀 더 많은 연결이 동시에 제어될 수 있도록 하는 방법이랍니다. 리눅스 박스가 연결을 닫는데 드는 시간을 줄여주고, 불안정한 열결을 끊기전에 시간을 줄여 줍니다. 또한 필요없는 IP 확장을 꺼 놓음으로서 체감 속도를 훨씬 빠르게 해 줄 것입니다.
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout echo 1800 >/proc/sys/net/ipv4/tcp_keepalive_time echo 0 > tcp_window_scaling echo 0 > tcp_sack echo 0 > tcp_timestamps 

3.7 IP공유를 위한 Masquerade 설정

1. Linux Server
-eth0 : DHCP -eth1 : 192.168.0.1/24 [root@ ~]# vi /etc/rc.d/rc.local iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward [root@ ~]# /etc/rc.d/init.d/network restart [root@ ~]# /etc/rc.d/rc.local 

2. Windows Client

ip : 192.168.0.2/24 gw : 192.168.0.1 dns: isp dns ip_address 

* ipchains를 사용하는 경우

ipchains -A forward -s 192.168.10.0/24 -j MASQ echo "1" > /proc/sys/net/ipv4/ip_forward 

4 VI

vim페이지 참조.

5 System 관리

5.1 Swap공간을 알려주는 명령어 (process check)

    #top

5.2 현재 디렉토리가 차지하는 용량 보기

    # du -s -h

5.3 run-level을 변경하려면

    #telinit 5

5.4 CPU정보를 알고 싶다면

    #arch

5.5 MEM정보

    #free

5.6 특정 데몬이 띄워져 있는지 확인하려면

    #ps aux | grep httpd

5.7 현재 구동중인 데몬을 트리형식으로 보려면

    #pstree

5.8 시스템 부하상태 보기

    #uptime

5.9 shell을 vi 스타일로

    #set -o vi

5.10 최신 커널버전 알기

    #finger @finger.kernel.org
    #finger @kernel.org

5.11 prompt에 full path 표시를 하고싶다면

 #vi /etc/bashrc PS1 = [ ..... ] \U : User \h : Host \W : 사용자가 위치하는 경로의 최 하위디렉토리 여기서 \W -> \w 

5.12 log파일에서 내용만 지우기

    #>log_file

5.13 현재 연결되어 있는 TCP port보기

    #netstat -t (-nlt : 열려있는 포트확인)

5.14 LILO에서 싱글부팅

    #vmlinuz root=/dev/hda9 single : /dev/hda9에 리눅스로 single booting

5.15 grub에서 싱글부팅

- grub메뉴에서 e를 누릅니다. (edit) - edit 화면에서 화살표키로 "kernel /boot/vmlinuz-xxxx" 로 옴깁니다. - 다시 e키를 누르면 명령어 줄이 나옵니다. 끝에 한칸띄우고 single이라 고 적고 enter를 누릅니다. kernel /boot/vmlinuz-2.2.17-5mz /dev/hdax single [enter] - 하시고, b를 눌러서 booting을 합니다. 

5.16 하위 디렉토리까지 문자열 검색하려면

 grep -rl [문자열] * 

    r 옵션이 없다면

 find . * -exec grep -n [문자열] {}\; -print 

    더 짧고도 효과적인 방법

     grep "string"'find . -type ' 
    그런데 이는 조건에 맞는 파일의 개수가 많아지면 쉘의 명령행 버퍼의 범위를 벗어나므로 문제가될 소지가 있다. 명령행 버퍼의 오버플로우를 방지하기 위해선 다음과 같이 하면 된다.
     find . -type f | xargs grep "string" 
    그런데 이 방법은 파일 이름에 공백이 들어갈 경우 문제가 생길 수 있다. 그럼 다음과 같이 해보자.
     find . -type f -print0 | xargs -0 grep "string" 
    find는 심볼릭 링크된 디렉토리에 대해서는 기본적으로 검색을 실시하지 않으니 -follow옵션을 사용해야할 경우도 있다는 것을 알아둔다.

      명령행 버퍼오버플로우를 방지하는 방법은 다음과 같은 방법도 있다.

       find . -type f -exec grep -l"string" {}\; 
      grep에서 '-l'옵션은 string을 포함하는 파일명을 나타내준다. 이런 검색을 특정 파일들에 대해서 행하기 위해서는 -type와 -name옵션을 쓸 수 있다.
       find . \(-type f -name "*\.html"\) -exec grep -l "string" {}\; 
      이것은 html의 확장자를 가지는 모든 파일에 대해서 "string"을 포함하는지 알아보고 포함하고 있는 파일명을 출력해준다.

위의 방법들은 "어떻게 서브디렉토리에 있는 파일들에 대해서 grep을 실행해줄 수 있는가?"하는 문제에 관한 여러 가지 방법들은 매우 유용하긴 하지만 검색을 실시하는 디렉토리에 바이너리 파일이 있을 경우에는 터미널을 제어하지 못하는 문제가 생길 수 있다. 왜냐하면 바이너리 파일의 몇몇 제어 문자들(Control Characters)이 터미널을 그래픽 모드로 바꿔놓을 수 있기 때문이다. 물론 이렇게 되었을 경우 터미널을 다시 바로잡는 방법이 있긴 하지만 아무래도 가장 좋은 방법은 그러한 일이 없도록 처음부터 방지하는 것이 가장 좋을 것이다.
이제 화면에 찍혀나올 수 없는 문자들을 모두 없애보자. 어쨌든 읽을 수는 없지만 다음과 같은 명령을 내려보라.

sed -e 's/[^-~][^-~]*//g' 
이 명령은 화면에 출력될 수 없는 (제어) 문자들을 그냥 스페이스들로 바꿔 버린다. 이 명령은 파이프를 이용하여 쉽게 다른 명령어들과 결합해서 사용할 수 있다. 여기 간단한 쉘 스크립트가 있다. 이것을 grepfind라고 이름붙여서 사용할 수 있다.
#!/bin/sh #save this in a file called grepfind and do a "chmod 755 grepfind" # if test $@ = 0 -o "$1" = "-h" -o "$1" = "-help" ; then echo 'grepfind ─ recursively descends directories and egrep all files ' echo echo 'Usage: grepfind [-help][-h](start_directory] egrep_search_pattern' echo echo 'The surrent directory is used as start_directory if parameter' echo 'start_directory is omitted. The search is case insensitive.' echo 'Multiple occurrences of control characters are replaced by a single' echo 'space. This makes it possible to grep around in files that contain' echo 'binary data and strings without setting the terminal accidently' echo 'to graphics mode.' echo echo 'Example : grepfind/home "hello world" else if ["$2" = "" ];then find . -type f -exec egrep -i "$1" /dev/null {} \;|sed -e 's/[^-~][^-~]*//g' else if [-d "$1" ] ;then find $1 -type f -exec egrep -i "$2" /dev/null {} \;|sed -e 's/[^-~][^-~]*//g' else echo "ERROR: $1 is not a directory" fi fi fi #_END_OF_grepfind 

5.17 world writable file 찾기

 #find / -type f -perm -2 -exec ls -lg {} \; 

    world writable directory 찾기

 #find / -type d -perm -2 -exec ls -ldg {} \; 

5.18 ext2에서 ext3로 업그레이드 하기

 #mke2fs -j /dev/hda[X] (X: disk number) #tune2fs " ext3에서 ext2로 다운그레이드 하기 #debugfs #open -f -w /dev/hda[X] features features -has_journal -needs_recovery quit 

5.19 logon기록을 보려면

    #last

5.20 remote환경에 있는 윈도우 폴더 마운트하기

    /etc/fstab 에 물론 마운트 정보 입력

 //win_pc/win_folder /linux/mount/point smbfs user,noauto,username=Winuser_name 0 0 

5.21 터미널에서 디렉토리, 파일 색상 변경

/etc/DIR_COLORS

if you use xterm,
/etc/DIR_COLORS.xterm

5.22 서브 디렉토리까지 한번에 생성

    mkdir -p sub/sub1/sub2/ ....

5.23 alias 적용안하기

 #\rm file1 쉘을 빠져나가기까지 alias를 적용 안하려면 #unalias rm 

5.24 이동한 바로 직전의 디렉토리로

    #cd -

5.25 일정기간 동안 접근하지 않는 파일 삭제하기

$find /var/spool/mail -atime +5 -exec rm {} \; <--- /var/spool/mail 아래 있는 디렉토리에서 5일동안 접근하지 않는 파일(-atime +5)은 삭제하라는 명령어 
혹은 3일 이전의 파일을 지우고자 한다면
$find /tmp/log/ -mtime +7 -exec rm -rf {} \; 

5.26 setuid가 설정된 루트쉘 검색

 #find . -user root -perm 4755 -print 그렇게 되면 4755 퍼미션이 아니면 문제가 생길 것이다. 이런 경우에는 다음과 같이 명령을 내린다. #ls -alR / |grep rws #ls -alR / | grep r-s #ls -alR / |grep -- --s 이렇게 하면 루트 쉘을 찾아낼 수 있다. 

5.27 MySQL Connection Failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) 에러가 나는 경우

MySQL 데몬 프로세스가 돌아가지 않는 것이며 최신 버전은 ./safe_mysqld -u & 해서 실행해야한다.

    그럼에도 불구하고 sql 데몬이 실행이 안되고 /var/log/mysql.log에 다음과 같은 메시지가 표출될 경우가 있다.

     040720 15:57:28 /usr/libexec/mysqld: Table 'mysql.host' doesn't exist 040720 15:57:28 mysqld ended 
    이것은 DB를 설치하고 data base를 생성하지 않았기 때문이다. 다음의 커맨드로 DB를 생성시키도록 한다.
     $mysql_install_db 
    mysql이라는 DB를 생성하고 그 안에 user와 host 정보를 가지게 된다. 그럼에도 에러가 나타난다면 퍼미션 문제일 가능성이 크다. /var/lib/mysql안의 내용을 mysql 소유자로 권한을 변경시켜서 데몬을 구동시켜 본다.
     $chown -R mysql.mysql /var/lib/mysql 

5.28 특정 유저만 su 허락하기

. 휠 그룹에 등록

 vi /etc/group ------------  wheel:x:10:root,wantedid

2. su 권한 제한

chgrp wheel /bin/su chmoe 4770 /bin/su 

5.29 작업중 로그인 막기

시스템을 공사중일 때, root 이외의 다른 사용자를 로그인 못하게 해야 할 때가 있죠?
그럴 때는, /etc/nologin 이라는 파일을 만들어,
공사중 또는 Under Construction이라는 공지를 넣으면 됩니다.

5.30 크기가 가장 큰 파일, 디렉토리 찾기

가장 큰 디렉토리를 찾으려면,
du -S | sort -n 

가장 큰 파일을 찾으려면,

ls -lR | sort +4n 

5.31 현재 디렉토리의 크기만을 파악할때

[root@dev2 local]# du -c -h --max-depth=0 * 6.4M apache 35M bin 43M dns 1.7M doc 42k etc 1.0k games 42k geektalkd 1.1M gnuws 1.1M include 41k info 19M jakarta-tomcat-3.2.3 0 jre 15M jre118_v3 25M lib 62k libexec 1011k man 1.3M mm.mysql.jdbc-1.2c 937k sbin 3.8M share 1.8M shoutcast-1-8-3-linux-glibc6 5.2M ssl 159M total 

5.32 시스템 정보 감추기

/etc/inetd.conf 파일을 열어서,
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h 

5.33 메모리를 가장 많이 잡아먹는 프로세스 알아내기

ps -aux | sort +4n 
또는
ps -aux | sort +5n 

5.34 FTP로 들어온 사용자 확인하기

ftpwho
ftpcount

5.35 원하지 않는 사용자 죽이기

[root@dream /root]# skill -KILL sunny 
위의 명령을 내리면 sunny 라는 사용자를 완전히 추방시킬수 있습니다.
그런데 이렇게 완전히 추방시키는게 아니구, 특정 터미널에 접속해있는 사용자만 추방시켜야 할 때도 있겠죠?
그럴때는
[root@dream /root]# skill -KILL -v pts/14 
이런식으로 하면 된다 그럼 pts/14 에 연결되어 있는 사용자가 죽게 됩니다.

5.36 몇일 이상된 파일만 mv또는 cp

#find ./ -mtime +10 | awk ' { print "mv "$1" ./babo" } ' | sh 
find의 -mtime +10은 수정된지 10일 이상인 것만 찾는다. 이것을 이용해 나온 파일들을 ./babo 디렉토리 아래로 move

5.37 터미널에서 백스페이스를 누르면 ^H 와 같은 이상한 문자가 출력되는 현상

이 문제는 터미널에서 백스페이스를 어떠한 방식으로 인식하느냐의 문제에서 발생한다. 일반적으로 백스페이스는 ^?^H로 나타내어지는데 터미널에서 ^H만을 백스페이스로 간주한다면, 이와 같은 문제가 발생하게 됩니다. 보통 그 자리에서 CTRL + h를 백스페이스 대용으로 써도 되고 export TERM="vt100" 로 터미널을 설정해도 되고 stty erase ^H 로 키보드 입력값을 조정해도 된다.

5.38 텔넷이나 ftp 외부 사용시 root로 접속 가능하게 하는 방법

레드헷계열은 공통이다.

telnet
/etc/securetty
이파일은 root가 로그인가능한 터미널(tty)장치들을 나열해 둔 것이다.
tty1
tty2
tty3
tty4
tty5
tty6
tty7
tty8

이 장치명은 가상터미널을 의미하는 것으로 root로 이런 가상터미널을 통한 접속이 허용된다는 것을뜻한다. 그리고
ttyp0
ttyp1
ttyp2
ttyp3

등은 pseudo 터미널을 통해서 root의 접속이 가능함을 뜻하므로 원격지에서 root로 접속을 막으려면 다음설정과 같이 이 pseudo터미널을 모두 주석처리하면 된다. 그리고, 이 /etc/securetty파일에 다음과 같은 것을 볼 수도 있을 것입니다.
ttyS0
ttyS1
ttyS2
ttyS3

등은 시리얼라인 또는 모뎀을 통한 root의 접속을 허용한다는 것을 뜻한다.

FTP
나의 경우 ProFtp 를 사용하고 있는데 proftp 의 경우 루트접속을 가능케 하려면 /etc/proftpd/ftpusers 파일을 여어서 root 를 주석처리해주면 된다.

SSH
나는 텔넷은 사용하지 않고 ssh 을 열어두고있다. 텔넷보다는 보안상 좀더 안정적이라고할수있겠다. ssh 의 경우 7.1 버전까지는 기본적으로 root 접속이 가능하다. 하지만 7.3버전에서는 접속이 안되니 ssh 에서 루트 접속이 가능하게하려면 ssh 설정파일인 /etc/ssh/sshd_config 파일을 열어서 PermitRootLogin 부분을 yes 로 해주시면 된다.

PermitRootLogin yes

5.39 여러 파일 안에 있는 내용중 특정단어를 바꾸고 싶을 때

1. $ sed -e 's/aaaa/bbbb/g' < a.php > b.php
하면 b.php 로 바뀐 파일이 나온다네요

2. find 와 perl 의 조합으로 가능합니다.
find / -name 'aaa.php' -type f -exec perl -pi -e 's/aaa/bbb/g' {} \;

3. 하위 디렉토리까지 찾아서 파일 내의 특정한 내용을 바꾸는 명령입니다.
find . -name *.html | awk '{ print "cat "$1" | sed \"s/바꾸고싶은말/바뀔말/g\" >"$1 }' | sh

저는 이런식으로 하고 있습니다..
find . -name *.html -exec perl -pi -e 's/바뀌고/바뀔/g' {}\; 위에서 찾을때 '*.html' 식으로 해야할 수도 있다.

5.40 윈도우 디렉토리 마운트후 한글 디렉토리가 깨져보일 때

윈도우 디렉토리를 그냥 마운트하면 한글로 된 파일이나 디렉토리가 ??로 나타나게 된다. 이때 다음과 같이 마운트를 하면 한글 디렉토리가 제대로 보인다.
#mount -t vfat -o iocharset=cp949 /dev/hd* /mnt/win 

    Feodra Core2 이상에서는 한글 인코딩 방식이 UTF8 방식을 쓰므로 iochoarset=utf8 이라고 해줘야 한글 폴더가 제대로 보인다.

5.41 tail 명령어 활용

# tail 
man tail 로 자세한 사용법을 알 수 있다. 가장 많이 사용하는 옵션으로는 -f 가 있는데 기본적으로 끝에서 10 줄까지를 보여준다. tail 은 계속 크기가 변하는 파일을 모니터링 할때 유용한 명령어인데 보안적으로나 기타 여러가지에 있어서 아주 유용한 명령어이다. 실제 본인이 보안 프로젝트를 하면서 tail 은 상당히 강조를 했다.
tail -f /var/log/messages 
messages 파일은 누가 뭐라고 해도 가장 중요한 log 파일이다. 실제 항상 실행시켜놓고 있는 명령어이다. 또한 몇몇 중요한 log 파일들이 있는데 secure, xferlog 등등이 있는데 /etc/syslog.conf 파일에서 모든 log 를 한 파일로 남기게 해서 하나의 파일만 모니터링을 하고 있으면 좋을 것이다.
일단 sendmail 이 시작되지 않을 경우를 예를 들어 보자. 창을 두개을 열고 하나의 창에서 tail -f /var/log/maillog를 실행한다. 그리고 다른 창에서 sendmail 을 재시작 시켜보자. 그러면 tail -f 를 실행한 곳에서 maillog 에 기록되는 상황이 계속 출력이 될것이다. 이것을 이용하면 에러 대처에 많은 도움이 될수 있을 것이다.

tail 명령어에서 두번째로 많이 쓰는 옵션은 -n 일 것이다.
-n 옵션은 원하는 수 라인 만큼 값을 출력하는 것이다. -c 는 bytes 만큼.

tail 의 반대 명령어는 head 이다. head 명령어는 앞에서 부터 보여주는 명령어이다.

5.42 shell prompt 변경하기

일단 prompt 는 PS1 이라는 환경 변수를 이용한다. 즉 root 권한이 있다면 /etc/bashrc나 /etc/profile 에서 PS1 변수가 지정이 되어 있는것을 수정하여 전체 유저의 prompt 를 수정할수 있다. 만약 개인 유저가 prompt 를 수정하고 싶다면 계정 홈의 .bashrc 의 제일 마지막 라인에 PS1="" 을 설정해 주면 된다. PS1 에 사용되는 예약어에 대해서는 아래를 참고 하도록 하면 된다.
 \t 현재 시간을 HH:MM:SS 형식으로 표시 \d 날자를 "요일 월 일" 형식으로 표시 (예, "Tue May 26") \n 개행문자 \s 쉘의 이름, $0 의 베이스 이름 (마지막 슬래쉬 뒷 부분) \w 현재 작업 디렉토리 \W 현재 작업 디렉토리의 베이스 이름 \u 현재 사용자의 사용자명 \h 호스트 이름 \# 이 명령의 명령 번호 \! 이 명령의 히스토리 번호 \$ 유효 UID가 0 이면 if the effective UID is 0, a #, 그렇지 않으면 $ \nnn 팔진수 nnn에 해당하는 문자 \\ 백슬래쉬 \[ 비출력 문자의 시퀀스를 시작한다. 프롬프트에 터미널 제어 시퀀스를 넣을 때 사용한다. \] 비출력 문자의 시퀀스를 마친다. 

5.43 kernel 파라미터 조정하기

보통 커널의 파라미터를 조정할때 proc 에서 echo 를 이용하여 redirect로 직접 쓰는 경우가 많았다. 이렇게 조정을 할 경우에는 또 rc.local 같은 파일에 따로 기입을 해 줘야 하는 불편함이 있었다. RedHat 6.2 이후 배포판에는 sysctl 이라는 package가 추가되어 이것들을 관리를 할수 있게 되었다. 일단 조정할수 있는 모든 parameter 들은
$ sysctl -a 
명령으로 확인을 할수가 있다. 그리고 특정값을 수정하기 위해서는 /etc/sysctl.conf 에 해당 키(이건 sysctl -a 명령에서 리스트를 확인할수 있다)와 키값을 지정한 다음
$ sysctl -p 
명령으로 바로 적용을 시킬수 있다. 물론 sysctl.conf 에 기입이 되면 부팅시 마다 자동으로 적용이 된다.
만약 잠시만 바꾸어 보고 싶다면
$ sysctl -w net.ipv4.icmp_echo_ignore_all=0 
과 같이 직접 값을 넣어 줄수도 있다. 이럴 경우에는 부팅이 되어 있는 순간만 적용이 된다. -p 옵션은 sysctl.conf 가 아닌 다른 파일을 설정 파일로 지정을 할수 있게 한다. 옵션값이 없으면 default 로 /etc/sysctl.conf 를 읽어 들이며 따로 path 를 지정하면 해당 path 에있는 파일을 읽어 들인다.

5.44 사용자별 du -h 값 보기

du 4.0p 이상
du -h --max-depth=1 /home/ | less 

5.45 하룻동안 만들어진 파일 검색하기

find / -ctime -1 

5.46 apache 설정 파일 문법 오류 검색

httpd.conf를 설정한 후에 쉘에서
bash# httpd -t 
명령을 실행해 보도록 한다. 그러면 apache가 자체적으로 httpd.conf에서 에러가 있는지 없는지를 살펴 보게 된다.

5.47 레드햇 패키지 버전을 알고 싶을 때

#cat /etc/redhat-release

5.48 새로운 배포본 설치를 위한 Multi LILO

리눅스를 오래 사용하다 보면 나름대로 입맛에 맞게 튜닝이 되어 있을 것이다. 이때 새로운 배포본이나 호기심을 자극하는 작업때문에 리눅스를 새로이 설치할 경우가 많다. 이럴 경우 중요 세팅 파일이나 작업 데이타 파일등을 백업을 해놓고 새롭게 리눅스를 설치할 텐데 간혹 다시 이전 상태로 복귀해야할 상황에 부딪히곤 한다. 이때 원래 이전 셋팅으로 되돌리기 위해선 상당히 번거로운 작업을 해야하는데 이때 Multi LILO를 이용하면 편리하다.

먼저 최초 리눅스 설치시 하드디스크가 하나라면 5GB 정도 나누어 비워 둔다. 혹은 여분의 하드 디스크가 있으면 더 좋다.
이후 최신 배포본이나 호기심을 자극하는 새로운 배포본이 나왔을 경우 설치를 한다. 물론 비워둔 5GB나 여분의 하드디스크에 설치를 하는데 이때 중요한 것은 LILO를 설치할 때 해당 파티션의 부트섹터에 설치를 해야한다는 것이다.
예를 들어 하드 디스크가 하나일 경우 다음과 같이 파티션 테이블이 구성되어 있다고 하자.

/dev/hda /dev/hda1 : MS 시스템 /dev/hda2 : Linux 시스템 /dev/hda2 : /home ... /dev/hda3 : 확장 파티션 /dev/hda4 : 비워둔 5GB 영역 /dev/hda5 : swap 파티션 /dev/hda6 : MS 영역 
이중 /dev/hda4에 새 배포본을 설치하며 LILO 또한 /dev/hda4에 설치를 한다. 그리고 설치하는 새 배포본의 swap 영역을 기존이 리눅스에서 사용하는 영역인 /dev/hda5를 사용하면 된다. 만약 여분의 하드디시크인 /dev/hdb에 설치를 한다면, LILO 또한 /dev/hdb에 설치하면 된다 . 이때도 swap영역을 /dev/hda5 로 사용해도 된다.
설치가 끝나면, 현재 쓰고 있는 기존의 리눅스에서 LILO에 다음과 같은 항목을 추가한다.
other=/dev/hda4 # or other=/dev/hdb1 label=newLinux # <Ctrl + D>를 눌러 종료 
그리고 /sbin/lilo 명령으로 반영시키도록 한다.
부팅을 하면 새로운 이미지(메뉴)가 생기는 것을 볼 수 있다.
부가적으로 LILO상에서 이전 LILO로 전환하고 싶으면 새로 설치한 배포본으로 로긴한 후 다음과 같이 재갱신 후 다시 재부팅하여 새롭게 설치한 LILO로 와서 native 이미지를 지정하면 다시 원래의 LILO로 로딩할 수 있다.
other=/dev/hda label=native # <Ctrl + D>를 눌러 종료 

5.49 Rebooting 키 제한을 위한 설정

리눅스에서는 일반 유저 권한일지라도 콘솔에서 <Ctrl + Alt + Del> (이하 CAD)를 누르면 재부팅이 가능하다. 이를 무시하게 하려면 /etc/inittab을 다음과 같이 열어서,
[root@choco root]#vi +/CTRL-ALT_DELETE /etc/inittab # Trap CTRL-ALT-DELETE ca::ctrlaltdel:/sbin/shutdown -t3 -r now 
여기서 두 번째 열을 주석 처리한다.
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now 
이렇게 하면 어떤 유저도 CAD를 사용할 수 없게 된다.
그러나 이렇게 하면 root도 CAD를 사용할 수 없기 때문에 선택적으로 CAD를 허용하게 하면 좋을 것이다.
만약 root와 choco에게만 CAD를 사용할 수 있게 하려면 /etc/inittab의 CTRL-ALT-DELETE 항목을 다음과 같이 수정한다.
ca::ctrlaltdel:/sbin/shutdown -a -t3 -r now 
그리고 CAD 신호 입력시 권한 비교 데이타 파일을 생성한다.
[root@choco root]#cat > /etc/shutdown.allow root choco # ctrl + D를 눌러 중료 
그리고 수퍼프로세스에게 /etc/inittab을 갱신시킨다.
[root@choco root]#init q 
이후부터는 CAD 신호가 들어오면 init에 의해 shutdown은 실행되고 -a 옵션에 의해 먼저 /etc/shutdown.allow 파일이 있는지 확인을 하고 그 파일안에 있는 유저와 /var/run/utmp 파일을 바탕으로 가상 콘솔에 로그인한 유저를 비교한다. 그래서 일치하면 셧다운이 일어나고 그렇지 않으면 권한없음 메시지를 출력하게 된다.

5.50 하드디스크 I/O 튜닝

DMA 기능을 셋팅하는 것으로 하드 디스크의 액세스 속도를 확연하게 올릴 수 있다.
먼저 메인보드의 칩셋이나 방식에 따라 커널 컴파일에 옵션을 추가해야 I/O 속도개선을 위해 커널 수준의 지원을 받을 수 있다.
ATA/IDE/MFMRLL support -> IDE, ATA and ATAPI Block Devices 항목에서 다음의 네 옵션을 체크한다.
[*] Generic PCI IDE Chipset supoort [*] Generic PCI bus-master DMA support [*] Use PCI DMA by default when available /* 이하 각자의 메인보드 칩셋에 맞게 설정 */ [*] VIA82CXXX chipset support 

그리고 하드디스크의 정보출력/셋팅/성능측정등의 작업을 위한 유틸리티인 hdparm을 이용해서 I/O 셋팅을 한다. 플래그 옵션은 -c를 이용해서 I/O를 32비트로, -d 옵션을 써서 dma 기능을 활성화 시킨다.

[root@choco root]#hdparm --help -c * get/set IDE 32-bit IO setting -d * get/set using_dma flag .... [root@choco root]#hdparm -c 1 /dev/hda [root@choco root]#hdparm -d 1 /dev/hda 
간혹 특정 스펙의 하드디스크가 DMA 기능을 제대로 지원하지 못할 경우 시스템이 잦은 크래쉬가 발생할 수 있다. 이렇게 불안한 증상을 보일 때는 다음과 같이 비활성화 시킨다.
[root@choco root]#hdparm -c 0 /dev/hda [root@choco root]#hdparm -d 0 /dev/hda 
hdparm에서는 -t 옵션이 일반적인 하드디스크의 상태를 나타낸다. 이것보다 좀더 세부적인 벤치마킹을 가능케 하는 유틸이 liobento이다.
[root@choco root]#liobento -d /dev/hda 

부팅시 자동으로 I/O 32비트, on_dma가 활성화시키려면 다음과 같이 한다.

[root@choco root]#echo "hdparm -c 1 -d 1 1> /dev/null 2>&1" >> /etc/rc.d/rc.local 

최근에 출시되는 배포본에서는 기본적으로 DMA모드를 활성화시키지만 개인이 커널을 새롭게 업그레이드하거나 하드디스크의 성능을 제어하려면 알고 있어야 한다.

5.51 Core 파일 디버깅

Core파일은 어떤 프로그램이 갑자기 dump core로 종료될 때 만들어진다. Core는 하드디스크에 씌워진 메모리내의 프로그램 정보를 담고 있어 왜 프로그램이 죽었는지 조사할 수 있다.
다음과 같이 -core 옵션으로 core가 발생한 프로르램의 path와 이유를 알 수 있다.
$gdb -core core 
그리고 core를 야기시킨 함수를 조사하려면 다음과 같이 커맨드를 친다.
$gdb path/to/program -core core 

5.52 CPU부하와 메모리 사용 정보

일반적으로 프로세스와 시스템에 관한 수많은 정보들은 /proc 디렉토리에서 찾을 수 있다. top을 통해 볼 수 있는 평균부하량(load average)를 얻으려면 다음을 보며 된다.
cat /proc/loadavg 
특정 프로세스에 의한 메모리 사용 정보는 /proc/stat에서 찾을 수 있다. 더 자세한 정보는 proc 메뉴얼을 확인하라
man 5 proc 

5.53 Fedora Core2에서 한글 인코딩 바꾸기

Feodra2를 깔고나면 기본적으로 인코딩이 utf-8로 설정되어 있다. 이 설정대로 쓰게되면 pstree나 ntsysv같은 쉘 기반의 화면들이 마구 깨져나온다. 한글 인코딩을 euck로 바꿔줘야 한다.
# vi ~/.bashrc 에서 다음을 입력한다.
export LC_ALL=ko_KR.eucKR export LANG=ko_KR.eucKR 
x윈도우의 터미널을 쓴다면 그놈터미널에서 euc_kr 로 설정하면 된다.

5.54 Fedora2에서 한글man page 깨지는 현상에 대한 해결책

#export LANG=ko_KR.eucKR (i18n~~~ 파일에서 바꿔놓으면 더 좋다.) 
/etc/man.config에서
: PAGER /usr/bin/less -is 

: PAGER /usr/bin/less -isr 
로 고친다.

    /etc/man.config 에서

     KNROFF LANG=ko_KR.eucKR /usr/bin/nroff -Tkorean -mandoc 
    식으로 LANG 값을 앞에 넣어주면 깨지던 문제가 제대로 잘 나온다고 한다. man-1.5m2 에서는 위와같이 할 경우, 한글로 나오긴 하지만, man.config의 일부 내용이 출력되는 현상이 있다고..

5.55 윈도우에서 작성한 한글이 페도라2(Fedora Core2) 에서 깨져보일 때

윈도우에서 작성한 문서를 페도라2에서 열어보면 한글이 다 깨져보이는 수가 있다. 이는 encoding 차이때문인데 윈도우에서 저장한 파일은 기본적으로 euckr로 인코딩된다. Fedora Core2는 utf-8방식을 사용하기 때문에 파일을 컨버전해야 한다. 방법은 2가지다

1. 파일을 utf-8로 인코딩함

$iconv -f euckr -t utf-8 a.euckr.txt > a.utf-8.txt 

2. 에디터 프로그램의 보기에서 encoding을 euckr로 바꿔준다. (vi는 지원함)

5.56 *.so 화일을 제대로 인식하지 못할 때

UNIX 에서 *.so 로 끝나는 모듈을 인식못할 때가 있다. 특히 pkgsrc 등을 이용할 때 기본 시스템의 것과 호환이 안되는 경우가 종종 있다. 해결 방법은 원하는 so 화일이 있는 곳을 제대로 설정해주면 된다.

예를 들어 libmysqlclient.so.10 이라는 모듈이 실제로 /usr/pkg/lib/mysql/ 에 존재하지만 mysql 과 같은 프로그램이 해당 모듈을 찾을 수 없다는 메세지를 출력하며 실행되지 않는 경우가 있다. 이 때 /etc/ld.so.conf 화일에 해당 디렉토리를 추가해주고 ldconfig 명령을 실행하면 모듈을 다시 읽어들인다. --무적대공

5.57 사용자별/프로세스별 자원 사용율 모니터링 스크립트

<mon_list.sh>
#!/usr/bin/ksh trap 'echo " deleting tmp file " ; rm -f "/tmp/item" "$logdir/mon/tmp_file" "$logdir/mon/proc_list" ' EXIT # define log file name logdir="./mon" #delete proc list rm -rf "$logdir/mon" mkdir -p "$logdir" mkdir -p "$logdir/mon" # generate process list case `uname -s` in AIX) ps -e -o "user,pcpu,vsz,comm" | grep -v "<" | grep -v "ps" | grep -v "USER" | grep -v "grep" > "$logdir/mon/proc_list" ;; Linux) ps -e -p "user,pcpu,vsz,comm" | grep -v "<" | grep -v "ps" | grep -v "USER" | grep -v "grep" > "$logdir/mon/proc_list" ;; HP-UX) ps -e -o "user,pcpu,vsz,comm" | grep -v "<" | grep -v "ps" | grep -v "USER" | grep -v "grep" > "$logdir/mon/proc_list" ;; SunOS) ps -e -o "user,pcpu,vsz,comm" | grep -v "<" | grep -v "ps" | grep -v "USER" | grep -v "grep" > "$logdir/mon/proc_list" ;; esac case "$1" in -user) mon_file="$logdir/`hostname`_user_status_`date +%y%m%d`.log" awk '{print $1}' "$logdir/mon/proc_list" | sort | uniq | while read line do echo "$line" > "/tmp/item" grep "$line" "$logdir/mon/proc_list" | awk 'BEGIN{cpu=0;mem=0;cpu_sum=0;mem_sum=0;getline d < "/tmp/item"} { cpu=$2; mem=$3; cpu_sum=cpu_sum+cpu; mem_sum=mem_sum+mem; } END{ printf("%s %2.1f %2.1f\n",d,cpu_sum,mem_sum); }' >> "$logdir/mon/tmp_file" done ;; -proc) mon_file="$logdir/`hostname`_ps_status_`date +%y%m%d`.log" awk '{print $4}' "$logdir/mon/proc_list" | sort | uniq | while read line do echo "$line" > "/tmp/item" grep "$line" "$logdir/mon/proc_list" | awk 'BEGIN{cpu=0;mem=0;cpu_sum=0;mem_sum=0;getline d < "/tmp/item"} { cpu=$2; mem=$3; cpu_sum=cpu_sum+cpu; mem_sum=mem_sum+mem; } END{ printf("%s %2.1f %2.1f\n", d,cpu_sum,mem_sum); }' >> "$logdir/mon/tmp_file" done ;; *) echo "please enter the right option [-user:-proc]" exit 0 ;; esac # print log file sort -rnk 2 "$logdir/mon/tmp_file"|awk 'BEGIN{"date +%H%M%S"| getline d}{if (length($1)!=100) print d" "$0}' >> "$mon_file" echo "" >> "$mon_file" 

$>mon_list.sh -user <--- 사용자별 사용현황 $>mon_list.sh -proc <--- 프로세스별 사용현황 

5.58 각종 검색 방법

문자열찾기 방법 1 - 영어만 주로 가능
# grep -rw "찾는문자열" ./ 

문자열찾기 방법 2 - 대/소문자 구분 안하고 검색

# grep -i -l "찾는문자열" * -r 2> /dev/null 

문자열찾기 방법 3 - 한글, 영어 모두 가능

# find . -exec grep -l "찾는문자열" {} \; 2>/dev/null 

문자열찾기 방법 4 - 한글,영어, 대소문자 안가리고 검색

# find . -exec grep -i -l "찾을문자열" {} \; 2>/dev/null 

문자열찾은 후 치환

# find . -exec perl -pi -e 's/찾을문자열/바꿀문자열/g' {} \; 2>/dev/null 

파일명 찾기

# find / -name 파일명 -type f 

파일명 찾기(대소문자 구별없음)

# find / -iname 파일명 -type f 

디렉토리 찾기

# find / -name 파일명 -type d 

디렉토리 찾기(대소문자 구별없음)

# find / -iname 파일명 -type d 

출처 : Tong - polomini님의 Linux통

신고

'Program > Linux' 카테고리의 다른 글

리눅스 페도라 에서 마우스 커서가 안보일때  (0) 2008.05.19
subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14
아파치 튜닝3  (0) 2007.06.14
아파치튜닝2  (0) 2007.06.14
아파치 튜닝  (0) 2007.06.14

아파치 튜닝3

Program/Linux 2007.06.14 14:20

아파치 튜닝법


KeepAliveTimeout
===================
클라이언트가 서버로 접속을 했을 경우 하나의 웹 서버 프로세스가 해당 웹 페이지의
여러 개체들의 전송을 새로운 프로세스를 생성하지 않고 지속적으로 접속을 유지하며
담당하며, 이 클라이언트의 요청에 대한 타임아웃에 대한 값이다. 기본 15초에서
30초로 증가.

MaxKeepAliveRequests
========================
웹 서버 프로세스가 지속적으로 접속을 유지하면서 처리할 수 있는 요청 개수이다.
100으로 설정되어 있으며, 10000으로 증가.

StartServer, Min/MaxSpareServer
=================================
기본 설정은 5, 5, 10정도이며, 웹 서버가 Standalone 방식일 경우 새로운 접속
요청을 받으면 기존의 Spare Child Process를 포크하여 새로운 Child Process를
만들어내므로 기본적으로 Spare Process가 많을수록 폭주에 빨리 대처할 수 있다.
StartServer 20, MinSpareServer 20, MaxSpareServer 40으로 증가.

MaxRequestsPerChild
========================
웹 서버 프로세스가 일정 횟수의 클라이언트 요청을 처리하고 종료되는 수치이며,
1000으로 증가.

MaxClients
===============
동시에 실행될 수 있는 최대 프로세스 수를 제한하는 것이며, 기본 256으로 설정되어
있다. 이를 1024까지 증가.

로그파일 생성
=================
이용자가 접속할 때마다 기록되는 access_log 파일의 경우 한번 접속당 약 85바이트가
증가하며, 접속량이 많을 경우 이 파일의 크기는 실제로 엄청나다. 이럴 경우
접속때마다 로그파일을 액세스하는데 상당한 시간과 부하가 걸리므로 로그 파일을
일정시간마다 초기화하여 항상 경량화 시켜 줄 필요가 있다. 아파치에서 제공하는
rotatelog를 이용.

 

 

 

1. 아파치 웹 서버 튜닝
- apache/src/include/httpd.h:
HARD_SERVER_LIMIT 256 -> 1280
- apache/conf/httpd.conf:
MaxKeepAliveRequests 100 -> 10000
KeepAliveTimeout 15 -> 30
MinSpareServers 5 -> 20
MaxSpareServers 10 -> 40
StartServers 5 -> 20
MaxClients 256 -> 1024

출처 : Tong - polomini님의 Linux통

신고

'Program > Linux' 카테고리의 다른 글

subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14
아파치 튜닝3  (0) 2007.06.14
아파치튜닝2  (0) 2007.06.14
아파치 튜닝  (0) 2007.06.14
리눅스 AMP 설치  (0) 2007.06.14

아파치튜닝2

Program/Linux 2007.06.14 14:20
아파치 튜닝 정리

1. 웹 페이지 로딩시간 확인
#time -pa lynx -source http://www.gwise.com > /dev/null
real 0.74
user 0.16
sys 0.09
-------------
실제 접속시간 : 0.74-(0.16+0.09)=0.49초


2. 아파치 벤치 마킹
#man ab 사용법 보기
-n requests 요청을 수행할 개수
-c concurrency 요청을 만들 개수로 동시 사용자 개념으로 이해하면 되겠다.
-v verbosity 얼마나 자세한 정보를 화면에 출력해 줄 것인지 결정
-w HTML 문서형식으로 테이블로 만들어 결과를 화면에 출력
-k HTTP 프로토콜의 지속연결 (KeepAlive) 기능을 사용

#./ab -n 100 -c 10 http://www.gwise.com:80/
10 명의 유저가 동시에 http://www.gwise.com/index.html 을 요청하는 것을 모의 실험.
각각의 시뮬레이트 유저는 요청을 10 번씩 하게 됩니다

# ab -n 1500 -c 50 http://www.apache.kr.net:80/
요청을 30 x 50 (50 명의 사용자가, 각각 30 번의 요청)

Requests per second: 80.48
초당 80.48개를 요청 했음.

'MaxRequestsPerChild’ 는 메모리 누수현상(?) 등이 발생하지 않는다면 가능한 이 값을 높게 설정하시고요(파라미터의 값을 0 으로 설정해 무한대로 하실수도 있습니다) StartServers’ 는 프로세스가 active 되어 있는 경우가 적을 경우 값을 낮게 설정하시고, 접속량이 아주 많을 경우는 MaxClients 에 가깝게 조절하시기 바라며, MaxSpareServers 를 MaxClients 와 같게 설정합니다. MaxClients 는 너무 낮게 설정하지 않도록 주의하시기 바라며, 그렇다고 또 너무 크게 잡으셔도 안됩니다


3. 웹 서버 삽질 막기
BrowserMatch "WebZip" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out



....
Deny from env=go_out


4. 아파치 튜닝
일반 서버에서는 다른것은 그냥 Default 값으로 둔다.
(대형 서버의 경우 말고는 특히 쓸 일어 없을 것이다.)

증가 시킬 경우 배수로 한다. 꼭 이렇게 해야 한다가 아니라
이렇게 하면 좋다.

Timeout 300
클라이언트의 요청에 의해서 Server와 연결 되었을때
클라이언트와 서버간의 아무런 메시지가 발생하지 않았을때
오류로 처리하는 시간
네트워크 속도가 나쁠수록 수치값을 높게 한다.

KeepAlive on
지속적인 접속, 즉 서버 연결에 대하여 한번 이상의 요청을 허용 여부.

MaxKeepAliveRequests 100
클라이언트가 접속된 시간동안 아파치 서버에 요청할 수 있는 처리 process 개수

StartServers 5 X ? =20 -> 초반에 뜰 process 그 이상 그이하의 의미도 없다.
MinSpareServers 5 X ? =20 -> Spare 프로세스가 이것 이하 일때 끌어 올려 준다.
MaxSpareServers 10 X ? =40 -> Spare 프로세스가 이것 이상 일때 진정(?)시켜 준다.
말 그대로 Spare.... 언제 있을지 모를 요청에 대해서 컴퓨터 스스로가
조절해 준다.

MaxClients 150
클라이언트들이 동시에 최대로 접속했을때 가능한 최대 서버이 수를 지정.
Ulimit -a ~~~ max process...이 수치 이상 증가 못함.
httpd.h
HARD_SERVER_LIMIT=250 조정해서 다시 컴파일 가능

MaxClient 150 -> 동시에 떠 있을수 있는 최대 process
더 많은 수를 원할시 httpd.h 소스 파일의
HARD_SERVER_LIMIT 값을 수정 한 다음 다시 컴파일 해야 한다.

#ulimit -a
core file size (blocks) 0
data seg size (kbytes) unlimited
file size (blocks) unlimited
max memory size (kbytes) unlimited
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes 2048
pipe size (512 bytes) 8
open files 1024
virtual memory (kbytes) 2105343
-----------------------
위의 max user processes 의 수를 초과 할 수 없다.

MaxRequestPerChild 100
한 프로세스가 몇 번의 서비스를 하고 소멸될 것인지 정한다.
M$계열에서는 별 의미가 없으므로 0을 한다.
하지만 Unix 계열은 0을 사용하지 않는 것이 좋다.

가장 중요한 것은Timeout 설정입니다. 위에서 keep-alive 를 설정해 놓은
경우, 하나의 connection에서 계속해서 다음 request를 처리할 수 있기 때문에 효율적
이라고 하지만, 실제로는 그렇지 않습니다. keep-alive 를 허용하고 그 timeout을
5초로만 설정해도, 하나의 request를 처리한 후 적어도 5초동안은 그 httpd가 다른
작업을 하지 못하고 다음 request를 기다리게 됩니다.

보통 웹브라우저들은 서버로 동시에 4개의 connection을 만들게 됩니다. 한 페이지를
보는데 이미지 등등 해서 보통 4개의 connection을 만드는 것은 기본이죠. 이렇게 되면
httpd가 100개 떠 있다고 해도, 실제로는 동시에 25명의 방문자밖에 처리하지 못합니다.

그리고 keep-alive timeout이 5초인 경우, 한 명의 방문자를 처리한 후 적어도 5초동안은
계속해서 기다리면서 httpd가 놀게 됩니다.(그렇다고 해서 httpd의 수를 늘여주면 앞의
문제 때문에 load가 몰릴 때 순간적으로 부하가 지나치게 많이 걸리게 됩니다. 어떤
request는 수초가 지난 후 답을 받는 등 quality of service가 많이 떨어지죠.)

결국 한 명의 방문자를 처리하는데 4개의 httpd가 5초동안 작업한다는 뜻이고, 100개의
httpd를 띄워봐야 1초에 5명의 방문자밖에 처리하지 못하는 셈입니다. ( 1 명 / 5 sec /
4 httpd = 5 / 1 sec / 100 httpd )

그래서 검색엔진 서비스 등 traffic이 많은 사이트에서는 keep-alive 옵션을 반드시 꺼
놓게 됩니다. 그리고 connection timeout도 상당히 짧게 설정해 놓죠. 4~5초 이내로 말입니다


5. 아피치 튜닝-2(로그기록 로테이트로)
/home/apache/conf/httpd.conf
CustomLog /home/apache/logs/access_log common
TransferLog "|/home/apache/bin/rotatelogs /home/apache/logs/access_log 86400"
TransferLog "|/home/apache/bin/rotatelogs /home/apache/logs/error_log 86400"
--------------
24시간 마다 로그 화일을 갱신해 준다.
24X60X60=86400초


6. 아파치 에러 메시지 바꾸기
httpd.conf
Customizable error response (Apache style)
2) local redirects
ErrorDocument 404 /cgi-bin/missing404.pl

missing404.pl
---------------
#!/usr/bin/perl
print<<"(END_HTML)";
Content-type: text/htmlnn

요청하신 http://www.gwise.com$ENV{'REQUEST_URI'} 이 존재 하지 않습니다.
서버관리자 에게 문의 바랍니다.

(END_HTML)
exit;
---------------


7. 아파치 에러 코드
HTTP 1.1 status codes [TOP]
100 : Continue
101 : Switching protocols
200 : OK, 에러없이 전송 성공
201 : Created, POST 명령 실행 및 성공
202 : Accepted, 서버가 클라이언트 명령을 받음
203 : Non-authoritative information, 서버가 클라이언트 요구 중 일부만 전송
204 : No content, 클라언트 요구을 처리했으나 전송할 데이터가 없음
205 : Reset content
206 : Partial content
300 : Multiple choices, 최근에 옮겨진 데이터를 요청
301 : Moved permanently, 요구한 데이터를 변경된 임시 URL에서 찾았음
302 : Moved temporarily, 요구한 데이터가 변경된 URL에 있음을 명시
303 : See other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음
304 : Not modified
305 : Use proxy
400 : Bad request, 클라이언트의 잘못된 요청으로 처리할 수 없음
401 : Unauthorized, 클라이언트의 인증 실패
402 : Payment required, 예약됨
403 : Forbidden, 접근이 거부된 문서를 요청함
404 : Not found, 문서를 찾을 수 없음
405 : Method not allowed, 리소스를 허용안함
406 : Not acceptable, 허용할 수 없음
407 : Proxy authentication required, 프록시 인증 필요
408 : Request timeout, 요청시간이 지남
409 : Conflict
410 : Gone, 영구적으로 사용할 수 없음
411 : Length required
412 : Precondition failed, 전체조건 실패
413 : Request entity too large,
414 : Request-URI too long, URL이 너무 김
415 : Unsupported media type
500 : Internal server error, 내부서버 오류(잘못된 스크립트 실행시)
501 : Not implemented, 클라이언트에서 서버가 수행할 수 없는 행동을 요구함
502 : Bad gateway, 서버의 과부하 상태
503 : Service unavailable, 외부 서비스가 죽었거나 현재 멈춤 상태
504 : Gateway timeout
505 : HTTP version not supported

////////////////////////////////////////////////////////////////////
이부분은 트래픽 양이 큰 곳에서 사용하시면 좋습니다.
설정파일에서 참고할 부분들을 적은 것이니, 꼭 이렇게 바꾸실 필요는 없습니다.

MaxKeepAliveRequests 100 -> 10000
웹서버 프로세스가 지속적으로 접속을 유지하면서 처리할 수 있는 요청 개수입니다.
KeepAliveTimeout 15 -> 30
서버에 접속시에 웹페이지 객체들의 전송시 새로운 프로세스를 생성하지 않고 지속적으로 접속을 유지하고 담당하며,
이 클라이언트의 요청에 대한 타임아웃에 대한 값입니다.
StartServers 5 -> 20
MinSpareServers 5 -> 20
MaxSpareServers 10 -> 40
폭주하는 서버일 경우 SpareServer가 많으면 빨리 대처할 수 있습니다.
스탠드얼론 방식일 경우 새로운 접속 요청을 받으면 기존의 Spare Child Process를 포크해 새로운 자식 프로세스를
만들어 내므로 적당히 있어주면 좋습니다.
MaxRequestsPerChild 0 -> 1000
웹서버 프로세스가 일정 횟수의 클라이언트 요청을 처리하고 종료되는 수치입니다.
※ MaxClients 256 -> 1024
동시에 실행될 수 있는 최대 프로세스 수를 제한 하는 것입니다.
하지만 옵션을 1024로 확장하려면 소스레벨에서
아파치 설치전에 apache/src/include/httpd.h 파일에서
HARD_SERVER_LIMIT 256 으로 된것을 1280 으로 변경한후 컴파일 하여야 사용 가능하다.

출처 : Tong - polomini님의 Linux통

신고

'Program > Linux' 카테고리의 다른 글

subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14
아파치 튜닝3  (0) 2007.06.14
아파치튜닝2  (0) 2007.06.14
아파치 튜닝  (0) 2007.06.14
리눅스 AMP 설치  (0) 2007.06.14

아파치 튜닝

Program/Linux 2007.06.14 14:19
아파치 튜닝
2004/05/21 00:28
1. 아파치 웹 서버 튜닝 (프로세스 갯수 늘려주기)
- apache/src/include/httpd.h: # 1.3.x 버젼
HARD_SERVER_LIMIT 256 -> 2048
-
prefork 일때 
아파치 1.3 은 포크 가능한 자식 프로세스는 기본값이 256개로 되어 있습니다. 이것을 변경하려면  
apache_1.3.24/src/include/httpd.h 파일에서 
#define HARD_SERVER_LIMIT 256 
요것을 서버 스펙에 따라서 적당히 늘려줍니다. 
아파치 2.0 은 역시 포크 가능한 자식 프로세스는 기본값이 256개로 되어 있고 역시 숫자를 변경하려면 
httpd-2.0.49/server/mpm/prefork/prefork.c 파일에서 
#define DEFAULT_SERVER_LIMIT 256 
역시 적당히 늘려줍니다.  저는 2048개로 늘려줬습니다.

아래 다른 방식들은 직접 적용해 보지 않았습니다.
Thread 방식으로 컴파일 했을때 워낙 좀비가 많이 생겨서
실무에서는 거의 쓰기 힘들겠더라구요..
아래는 다른 곳에서 참고로 복사했습니다.

worker 방식 
기본으로 16개의 차일드 프로세스와 그안에 64개의 쓰레드를 생성가능하므로 
16*64 = 1024 개의 쓰레드를 생성 할수있습니다. 
httpd-2.0.49/server/mpm/worker/worker.c 
기본적으로 생성가능한 차일드 프로세스수 조절 
#define DEFAULT_SERVER_LIMIT 16 
각 프로세스내에 생성 가능한 쓰레드 수 조절 
#define DEFAULT_THREAD_LIMIT 64 

perchild 방식 
기본으로 8개의 차일드 프로세스와 그안에 64개의 쓰레드를 생성가능하므로 
8*64 = 512 개의 쓰레드를 생성 할수있습니다. 
httpd-2.0.49/server/mpm/perchild/perchild.c 
기본적으로 생성가능한 차일드 프로세스수 조절 
#define DEFAULT_SERVER_LIMIT 8 
각 프로세스내에 생성 가능한 쓰레드 수 조절 
#define DEFAULT_THREAD_LIMIT 64 
- apache/conf/httpd.conf:
Timeout 300 -> 180 or 150
MaxKeepAliveRequests 100 -> 1000
KeepAliveTimeout 15 -> 30
MinSpareServers 5 -> 20
MaxSpareServers 10 -> 40
StartServers 5 -> 20
MaxClients 256 -> 1024
2. 커널 소프트 레벨 튜닝
- ulimit -n 32768   # 오픈 할 수 있는 파일 갯수 증가 ulimit -a로 확인
- /proc/sys/fs/file-max: 4096 -> 32768
- /proc/sys/fs/inode-max: 16384 -> 65536
- /proc/sys/net/ipv4/tcp_keepalive_time: 7200 -> 1200
- /proc/sys/net/ipv4/tcp_fin_timeout: 60 -> 30
- /proc/sys/net/ipv4/tcp_sack: 1 -> 0
- /proc/sys/net/ipv4/tcp_timestamps: 1 -> 0
- /proc/sys/net/ipv4/tcp_syncookies: 0 -> 1
- /proc/sys/net/ipv4/tcp_retries1: 7 -> 2(3으로 되어 있어서 수정하지 않음)
- /proc/sys/net/ipv4/tcp_max_syn_backlog: 1024 -> 8192
- /proc/sys/net/ipv4/tcp_window_scaling: 1-> 0
echo 32768 > /proc/sys/fs/file-max
echo 65536 > /proc/sys/fs/inode-max
echo 1200 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 0 > /proc/sys/net/ipv4/tcp_sack
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 2 > /proc/sys/net/ipv4/tcp_retries1
echo 8192 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 0 > /proc/sys/net/ipv4/tcp_window_scaling

출처 : Tong - polomini님의 Linux통

신고

'Program > Linux' 카테고리의 다른 글

subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14
아파치 튜닝3  (0) 2007.06.14
아파치튜닝2  (0) 2007.06.14
아파치 튜닝  (0) 2007.06.14
리눅스 AMP 설치  (0) 2007.06.14

리눅스 AMP 설치

Program/Linux 2007.06.14 14:16
리눅스 APM 설치(mysql 4.0.27 | apache 2.0.52 |php 4.4.2)

2006/09/14 09:44

http://blog.naver.com/zeton74/70008527410

서버를 설치한다면, 대부분 웹 서비스를 하기 위해서 서버를 설치할 것 입니다.
현재까지 나온 최신버전 APM을 설치하는 법을 대상으로 강좌를 써 내려가보도록 하겠습니다. 물론 시간이 지나서 제가 쓴 버전이 최신이 아니게 되며, 설치시 변경된 점들이 있을 것으로 예상됩니다. 하지만 설치법은 대부분 비슷하기 때문에 특별히 달라진점이 있으면, 본 강좌를 업데이트 하도록 하겠습니다. 지금 제가 쓰는 모든 강좌는 연관성이 있으니 다른 강좌들도 참고하시기 바랍니다.
 지금 설치하려는 최신버전은 다음과 같습니다. 따로 준비하실 필요는 없고 설치과정에서 모든 자료는 받아서 설치합니다.
mysql 4.0.27
apache 2.0.52
php 4.3.6
(연관프로그램 : zlib 1.2.1 , libpng 1.2.7 ,free type 2.1.9, libjpeg v6b,gd 2.0.28 )
Zend Optimizer 2.6.2

1. zlib, libpng, free type, libjpeg, gd 설치
php 언어에는 여러 함수를 지원합니다. php설치시 라이브러리를 설치해 주어야 작동하는 함수들이 많습니다. 모든 라이브러리를 설치하는 것은 무리가 있다고 생각하며, gd라이브러리는 기본적으로 설치해 주어야 한다고 생각해서, 연관있는 위 프로그램들을 설치하도록 하겠습니다. 물론 제가 썼던 설치강좌대로 설치하셨다면, 위 라이브러리들은 모두 설치되어 있을 것입니다. 하지만, gd라이브러리와 연동이 안된 상태이며, php 연동시 문제를 일으키기 때문에 컴파일 설치하도록 하겠습니다. rpm 설치된 것들은 그대로 놔 두셔도 상관없으니 놔두고 설치하겠습니다.

(1) zlib 설치
   zlib은 압축과 관련된 라이브러리 입니다.
[root@localhost local]# cd /usr/local
[root@localhost local]# wget http://ftp.superuser.co.kr/pub/etc/zlib-1.2.1.tar.gz
[root@localhost local]# tar xvfz zlib-1.2.1.tar.gz
[root@localhost local]# cd zlib-1.2.1
[root@localhost zlib-1.2.1]# ./configure && make && make install
[root@localhost zlib-1.2.1]# cd ..
[root@localhost local]# rm -rf zlib-1.2.1*

wget 명령어를 이용해서 ftp 사이트에서 압축된 소스파일을 가져오고 난 뒤에 압축을 해제합니다.
풀어진 디렉토리로 이동하여 configure와 컴파일과 설치를 한꺼번에 명령을 내여 설치합니다.
여기서 && 표시는 configure 가 성공하면 make를 실행하고 make 가 성공하면, make install를 실행하는 의미입니다.
마지막에 압축파일과 풀어진 소스파일은 필요없기 때문에 삭제합니다.
 앞으로 설치할 모든 프로그램도 위와 같이 간단하게 설치할 것입니다.

(2) libpng 설치
  png 포맷을 다루기 위한 라이브러리입니다.
[root@localhost local]# wget http://ftp.superuser.co.kr/pub/etc/libpng-1.2.7.tar.gz
[root@localhost local]# tar xvfz libpng-1.2.7.tar.gz
[root@localhost local]# cd libpng-1.2.7
[root@localhost libpng-1.2.7]# cp scripts/makefile.linux makefile
[root@localhost libpng-1.2.7]# make test && make install
[root@localhost libpng-1.2.7]# cd ..
[root@localhost local]# rm -rf libpng-1.2.7*

 특별한 것은 makefile을 configure로 만들지 않고 , 복사한 것 외에는 다른 것이 없습니다.

(3) freetype 2 설치
 글짜를 그릴 때 쓰는 라이브러리 입니다.
[root@localhost local]# wget http://ftp.superuser.co.kr/pub/etc/freetype-2.1.9.tar.gz
[root@localhost local]# tar xvfz freetype-2.1.9.tar.gz    
[root@localhost local]# cd freetype-2.1.9
[root@localhost freetype-2.1.9]# ./configure && make && make install
[root@localhost freetype-2.1.9]# cd ..
[root@localhost local]# rm -rf freetype-2.1.9*

(4) libjpeg 설치
jpg 포맷을 다루는 라이브러리 입니다.
[root@localhost local]# wget http://ftp.superuser.co.kr/pub/etc/jpegsrc.v6b.tar.gz
[root@localhost local]# tar xvfz jpegsrc.v6b.tar.gz
[root@localhost local]# cd jpeg-6b
[root@localhost jpeg-6b]# ./configure --enable-shared --enable-static
[root@localhost jpeg-6b]# make && make test
[root@localhost jpeg-6b]# mkdir /usr/local/man/man1
[root@localhost jpeg-6b]# make install
[root@localhost jpeg-6b]# cd ..
[root@localhost local]# rm -rf jpeg*
  위 설치법에서 특별한 것은 중간에 /usr/local/man/man1이라는 디렉토리를 생성합니다. 이유는 make install 하면 /usr/local/man/man1 디렉토리가 없다고 멘 페이지가 설치가 되지 않는다는 에러가 납니다.

(5) gd 설치
그래픽 라이브러리 입니다.
[root@localhost local]# wget http://ftp.superuser.co.kr/pub/etc/gd-2.0.28.tar.gz
[root@localhost local]# tar xvfz gd-2.0.28.tar.gz
[root@localhost local]# cd gd-2.0.28
[root@localhost gd-2.0.28]# ./configure && make && make install
[root@localhost gd-2.0.28]# cd ..
[root@localhost local]# rm -rf gd-2.0.28*

2. MySQL 설치
   지금부터는 db 서버를 설치하겠습니다.  mysql은 많은 프로그램과 연동이 가능하며, linux에서 유용하게 사용할 수 있는 dbms입니다. 아직 안정화된 버전에는 dbms의 중요 기능인 트랜젝션 처리 및 사용자정의 함수 등 부족한 점이 있지만 ( 이 부분은 db의 기능보다는 성능과 가볍게 만든다고 뺏다고 하더군요^^) 대부분 잘~~ 사용하지 않는 기능들입니다. mysql은 안정성 및 성능면에서 우수하죠^^;  

(1) 설치
  설치는 성능을 약 10% 정도 끌어올려준다는 static 모드로 설치하겠습니다.

[root@localhost local]# wget http://ftp.superuser.co.kr/pub/mysql/mysql-4.0.27.tar.gz
[root@localhost local]# tar xvfz mysql-4.0.27.tar.gz
[root@localhost local]# cd mysql-4.0.27
[root@localhost mysql-4.0.27]#

CFLAGS="-static -O2 -march=i686 -funroll-loops" \
CXXFLAGS="-static -O2 -march=i686 -funroll-loops -felide-constructors -fno-exceptions -fno-rtti" \

./configure \
--prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data \
--disable-shared --enable-assembler \
--with-thread-safe-client --with-mysqld-user="mysql" \
--with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static \

--with-readline --without-debug \
--without-docs --without-bench \
--with-charset=euc_kr


아래 내용은 기타사항

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

--with-charset=latin1

--with-extra-charsets=complex

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

4.1.x 버전 이상사용시 해줘야할 옵션

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

--without-readline

은  한글입력시 입력이 되지않고

커서가 제자리에서 입력되는 문제를 해결해 줍니다

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


MySQL 4.1.X 에서는 --with-charset=euckr 으로 해야 합니다.
  위 설정에서 static 모드로 설치하며, 언어는 많이 사용하는 euc_kr로 설치합니다.
 데이터 디렉토리는 /usr/local/mysql/data 에 저장하게 설정합니다.

[root@localhost mysql-4.0.27]# make && make install
[root@localhost mysql-4.0.27]# cd ..
[root@localhost local]#  rm -rf mysql-4.0.27.tar.gz

이렇게 한방에 컴파일 및 설치까지 합니다.

(2) 설정 파일 복사
  메모리에 따라서 환경 설정 파일들을 복사해 줍니다.
my-huge.cnf 1~2G
my-large.cnf 512M
my-medium.cnf 128M~ 256M
my-small.cnf 64M 이하
위와같이 나와있지만 위 설정은 db 서버 전용으로 사용했을 때 설정입니다. 기본적을 my-medium.cnf를 복사한 다음 시스템에 맞게 설정해서 사용해야 합니다 .(모든게 그렇듯 절대적인 것이 아닙니다.)
[root@localhost local]#
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
(3) 기본 db 생성
[root@localhost local]# /usr/local/mysql/bin/mysql_install_db

(4) mysql 운영 사용자 생성
   홈 디렉토리는 필요 없기 때문에 -M 옵션을 주어서 사용자를 생성합니다.
[root@localhost local]# useradd -M mysql

(5) data 디렉토리를 mysql이라는 사용자 권한으로 바꾸어 주어야 합니다.
[root@localhost local]# chown -R mysql:mysql /usr/local/mysql/data

(6) 아무곳에서나 mysql 및 mysqldump 명령어를 실행가능하게 심볼릭 링크를 걸어줍니다.
[root@localhost local]# ln -s /usr/local/mysql/bin/mysql /usr/bin/
[root@localhost local]# ln -s /usr/local/mysql/bin/mysqldump /usr/bin/

(7) mysql 데몬을 실행시킵니다.
[root@localhost local]# /usr/local/mysql/bin/mysqld_safe &

(8) mysql root 비밀번호를 설정합니다.
[root@localhost local]# /usr/local/mysql/bin/mysqladmin -u root password 1234

(9) 운영중에 조취법&^^
- mysql root 비밀번호 잊어 먹었을 때
[root@localhost local]# killall mysqld
[root@localhost local]# /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
[root@localhost local]# mysql
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 2 to server version: 4.0.20-log

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use mysql
Database changed
mysql> update user set password=password('비밀번호') where  user='root';
Query OK, 2 rows affected (0.02 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> exit
Bye
[root@localhost local]# killall mysqld
[root@localhost local]# /usr/local/mysql/bin/mysqld_safe &

(9) MySQL 4.0.X 에서 MySQL 4.1.X 달라진점
4.0.X 에선 4.1.X 는 많은 변화들이 있습니다. 모두 기술하기는 힘들고, 중효한 몇가지만 기술하도록 하겠습니다.
1. mysql 4.1의 table 이름은 utf8으로 저장(한글 테이블명을 사용할수 없습니다.)
2. mysql db 에 user 테이블의 password 필드가 더 길어졌습니다.(16->41)
3. password 다루는 방식이 달라졌습니다. 보안을 강하게 하기 위해서 hashing 메커니즘이 바뀌었습니다.
- hashing 이 16바이트에서 41바이트바뀌었습니다. 보이는건 45바이트. 4바이트는? 소금^^;
- 새로운 포멧은 *부터 시작. 예전포멧은 그렇지 않았습니다.
- 예전 포멧을 사용하려면, old_password()함수를 사용해야 합니다.
4. configure 할때 --with-charset=euc_kr 에서 --with-charset=euckr 으로 바뀌었습니다.
*. 더 자세한 것은. ...
http://dev.mysql.com/doc/mysql/en/Upgrading-from-4.0.html 참조하세요


3. Apache 2 설치  web 서버인 apache 는 1 버전과 2버전이 있습니다. 설정 파일 이 다르고, 운영또한 다른 방법으로 돌아가기 때문에 설치 시에도 구분하여 설치해 주는 것이 좋습니다. 아파치 2 버전은 스레드를 사용하여 성능이 좋아졌다더군요.. apache 1버전을 사용하는 경우는 mod_throttle을 설치하기 위한 경우가 있죠^^; 본 강좌에서는 최신 버전을 다루기 때문에 2 버전을 설치합니다.

 (1) 설치
[root@localhost local]# wget http://ftp.superuser.co.kr/pub/apache/httpd-2.0.52.tar.gz
[root@localhost local]# tar xvfz httpd-2.0.52.tar.gz
[root@localhost local]# cd httpd-2.0.52

** MaxClient 값 튜닝( 최대 256이지만 이상으로 올려줍니다== > 1280)
vi server/mpm/prefork/prefork.c

파일에서
#define DEFAULT_SERVER_LIMIT 256 부분을 찾아서
#define DEFAULT_SERVER_LIMIT 1280 으로 수정해 줍니다.

vi server/mpm/worker/worker.c

파일에서
#define DEFAULT_SERVER_LIMIT 16  부분을 찾아서  ( 16 * 16 = 1024)
#define DEFAULT_SERVER_LIMIT 20  이렇게 수정해 줍니다. (20 * 64 = 1280)

[root@localhost httpd-2.0.52]# ./configure --enable-so --prefix=/usr/local/apache
[root@localhost httpd-2.0.52]# make && make install
[root@localhost httpd-2.0.52]# cd ..
[root@localhost local]# rm -rf httpd-2.0.52.tar.gz


4. PHP 4 설치
  현재 안정화된 최신버전이 4점대 버전입니다. php를 컴파일해서 apache 에 모듈로 올릴 것 입니다.

(1) 설치
[root@localhost local]# wget http://ftp.superuser.co.kr/pub/php/php-4.4.2.tar.gz
[root@localhost local]# tar xvfz php-4.4.2.tar.gz
[root@localhost local]# cd php-4.4.2
[root@localhost php-4.4.2]#

CFLAGS="-O3 -march=i686 -funroll-loops -fomit-frame-pointer" \
./configure \
--with-apxs2=/usr/local/apache/bin/apxs \
--with-zlib --with-gd --with-ttf --with-png \
--with-expat-dir=/usr --with-gmp --with-xml \
--with-mysql=/usr/local/mysql \
--with-language=korean \
--with-charset=euc_kr \
--disable-debug --disable-posix --disable-rpath \
--enable-safe-mode --enable-magic-quotes \
--disable-dmalloc --enable-bcmath \
--enable-dio --enable-gd-native-ttf \
--enable-sysvsem --enable-sysvshm \
--enable-wddx --enable-versioning \
--enable-pic --enable-inline-optimization \
--enable-memory-limit --enable-mbstring \
--enable-mbregex --enable-mbstr-enc-trans \
--with-config-file-path=/usr/local/lib --enable-ftp --disable-debug --enable-track-vars=yes \
--with-jpeg-dir --with-freetype-dir \
--enable-gd-native-ttf --enable-dl
--with-iconv

[root@localhost php-4.4.2]#
make && make install
[root@localhost php-4.4.2]# cp php.ini-dist /usr/local/lib/php.ini
 - php.ini 파일을 복사 해 줍니다.
[root@localhost php-4.4.2]# cd ..
[root@localhost local]# rm -rf php-4.4.2.tar.gz


5. Zend Optimizer
  php 의 성능을 최대화 해 준다는 Zend Optimizer를 설치합니다. Zend 홈페이지에 가보면 성능을 40% 향상시킨다고 합니다. ^^; 검증은 못했지만 말이죠~~ Zend는 컴파일 할 필요없이 받아서 설치하면 됩니다.^^;

(1) 설치

wget http://ftp.suidc.com/pub/ZendOptimizer/ZendOptimizer-2.6.2-linux-glibc21-i386.tar.gz
tar xvfz ZendOptimizer-2.6.2-linux-glibc21-i386.tar.gz
cd ZendOptimizer-2.6.2-linux-glibc21-i386
./install.sh

 - 위 명령을 실행시키면 다음과 같은 화면들이 주루룩~~ 나옵니다. 무조건 OK~ 또는 YES~^&^
하면 끝납니다.&&;


cd ..
rm -rf ZendOptimizer-2.6.2-linux-glibc21-i386*


6. 웹 서버 운영
 (1) 아파치 설정파일(/usr/local/apache/conf/httpd.conf) 다루기
 아파치 설정파일을 다룹니다. 변경후에는 꼭 아파치를 재시작하시기 바랍니다.

 -  .php 파일 및 html 파일에서 php 코드 실행되게 설정하려면
AddType application/x-httpd-php .php .phtml .php3 .html .htm
AddType application/x-httpd-php-source .phps위 내용을 추가해 줍니다. 추가 하게 되면 위 파일들에 있는 php 코드는 실행하게 됩니다.

- 기본 언어 설정
AddDefaultCharset ISO-8859-1 이렇게 되었는 것을
AddDefaultCharset EUC-KR 이렇게 바꾸업 줍니다. (mysql 언어와 똑같이 해 줍니다.)

- index.php를 기본으로 실행하게 설정  아파치는 기본적으로 DirectoryIndex index.html index.html.var 이렇게 설정 되어 있어 index.html 파일을 기본으로 읽습니다. 조금 바꾸어 주어 index.php 파일 및 기타 파일들도 기본으로 읽게 설정합니다.
DirectoryIndex index.html index.htm index.php index.php3 index.cgi

- 그림 파일 및 프래쉬 파일 로그 남기지 않게 설정
방문자 수가 많아지면 웹로그가 엄청 쌓이게 되고, 그 로그는 크기가  2G를 넘게 되면 웹페이지에 이상현상이 생깁니다. 그렇다고 로그를 안 남길 수는 없는 것이고, 이미지 파일들은 로그남기는 것에서 제외합니다.
CustomLog logs/access_log common 이렇게 되어 있는 것을 ..
SetEnvIfNoCase Request_URI (gif|png|jpg|css|js|bmp|jpeg|swf)$ IMAGE=1
CustomLog /usr/local/apache/logs/access_log common env=!IMAGE이렇게 바꾸면^^; 쉽게 가능합니다.

(2) php 설정파일 (/usr/local/lib/php.ini) 다루기
 php와 관련된 설정을 다룹니다. 변경후에 꼭 아파치 재 시작을 해 주시기 바랍니다.

- post, get , 쿠키 , 세션등의 변수를 일반변수로
  예전에 php는 기본적으로 위 변수를 일반변수로 사용할 수 있었습니다. 하지만 보안에 취약 하기 때문에 php 설치시 기본적으로 일반변수로 사용못하게 설정합니다. 이렇게 되면 문제가 예전에 사용하던 짜여졌던 프로그램은 정상적으로 실행되지 않습니다. 보안보다는 호환성이 더 중요하죠^^;
register_globals=On  이렇게 설정합니다.

- 업로드 용량 제한 풀기 기본적으로 업로드는 2M로 제한되어 있습니다. 만약 2M 이상으로 하면 여러 가지 설정들을 바꾸어 줘야 합니다. 업로드 되는 시간을 길 게 해 주어야 하고, 한번에 잡아먹을 메모리를 크게 해 주어야 합니다.
default_socket_timeout = 600
post_max_size = 20M
memory_limit = 20M
upload_max_filesize = 20M

 (3) mysql 및 apache 시작
- mysql 시작 : /usr/local/mysql/bin/mysqld_safe &
- apache 시작 : /usr/local/apache/bin/apachectl start

 (4) mysql 및 apache 재 시작
- mysql 재시작 : /usr/local/mysql/bin/mysqladmin -u root -p reload
  ==> 이 방법은 완벽한 재 시작이 아닙니다. 어떤 문제가 생겼을시는 완전히 중지시키고 다시 시작하세요.
- apache 재시작 : /usr/local/apache/bin/apachectl restart

 (5) mysql 및 apache 중지
- mysql 중지 : /usr/local/mysql/bin/mysqladmin -u root -p shutdown
==>  이 방법으로 죽지 않을 때는 killall mysqld 라고 하면 죽습니다.
- apache 중지 : /usr/local/apache/bin/apachectl stop
==> 대부분 이 방법으로 죽으나 죽지 않는다면, killall httpd 하시면 죽습니다.

(6) 부팅시 자동 시작 등록하기
echo ' /usr/local/mysql/bin/mysqld_safe&
/usr/local/apache/bin/apachectl start' >> /etc/rc.d/rc.local

=========================================================================
vi /etc/rc.d/rc.local

/usr/local/apache/bin/apachectl start
/usr/local/mysql/bin/mysqld_safe &
위 두줄을 추가한다.

--language=korean --skip-bdb

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

위와같은 한줄로 /etc/rc.d/rc.local 파일의 마지막 부분에 삽입합니다.


7. 확인
 이렇게 열심히 설치 하였다면.. 확인을 해야 합니다. 서버단에서 확인은 이렇게 합니다.
(1) 프로세스 확인
 [root@localhost local]# ps -ef | grep httpd
root     24247     1  0 17:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
nobody   24248 24247  0 17:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
nobody   24249 24247  0 17:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
nobody   24250 24247  0 17:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
nobody   24251 24247  0 17:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
nobody   24252 24247  0 17:14 ?        00:00:00 /usr/local/apache/bin/httpd -k start
root     24255  1677  0 17:14 pts/0    00:00:00 grep httpd
[root@localhost local]# ps -ef | grep mysql
root      5351  1677  0 16:06 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe
mysql     5371  5351  0 16:06 pts/0    00:00:04 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data --user=mysql --pid-file=/usr/local/mysql/data/localhost.localdomain.pid
--skip-locking --port=3306 --socket=/tmp/mysql.sock
root     24257  1677  0 17:14 pts/0    00:00:00 grep mysql

(2) 포트 확인
[root@localhost local]# netstat -an | grep LISTEN | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      
[root@localhost local]# netstat -an | grep LISTEN | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN  

(3) 웹으로 확인
먼저 테스트 페이지 작성 합니다. 간단하게 phpinfo() 함수를 실행시켜 보도록 하겠습니다.
[root@localhost local]# echo "" > /usr/local/apache/htdocs/index.php

위 결과를 잘 살펴보면, 설치된 라이브러리와 환경변수들을 확인할 수 있습니다.


 
8. 마치며..
  최신 버전을 대상으로 강좌를 썼지만, 또 많은 것들이 변할 것이라 생각합니다. 자그마한 버전 변화는 설치법이 거의 동일하기 때문에 강좌 업데이트는 큰 변화가 있을 때 할 것입니다.
  리눅스에서 APM은 리눅스를 키우는데 커다란 공을 세웠다고 생각합니다.  또한 쉽고 저렴하게 웹서버 및 DB 서버를 구축할 수 있어 행복한 시대를 살아간다고 생각합니다. 많은 분들에게 도움이 되길 바라며 본 강좌를 마무리 합니다.
  혹시 본강좌에 대한 질문 및 오타를 발견하게 되면, 메일 한통 보내주기 바랍니다.. 메일주소는 doly 골뱅이superuser.co.kr 입니다.. 메일 주소를 무단 수집해서 스팸메일을 보내는 이를 막기 위해서 위와 같이 표기했으며, 골뱅이 부분은 @ 치환하면 됩니다.
  이상... 2004년 6월 1일 ~ 날씨 좋은날에~ 수퍼유저 운영자 doly ...


ps . 저작권은 수퍼유저코리아에 있습니다.^^; 배포 또한 수퍼유저코리아에서만 가능합니다.
항상 문서의 내용은 최신버전의 내용을 반영하여 바뀔 수 있습니다.  

2004년 6월12일 : 김성무씨 요청으로 오타수정 및 서버 실행방법, 부팅시 자동 재 시작 부분 추가하였습니다.
2004년 6월 21일 : 포플님의 지적으로 오타 수정
2004 년 7월 30일 : DEFAULT_SERVER_LIMIT 16 ==> DEFAULT_SERVER_LIMIT 20 ,PHP configure 에서 --with-config-file-path=/usr/local/lib 으로 수정
2004년 11월 8일 : Bearth님의 요청 으로 MySQL 4.0.X 와 MySQL 4.1.X 달라진점 기술
2005년 1월 31일 : 이흥섭님의 지적으로 오타수정 (모둔 -> 모두 )

출처 : Tong - polomini님의 Linux통

신고

'Program > Linux' 카테고리의 다른 글

subversion(svn) 리눅스 설치  (0) 2007.12.20
리눅스 기본 팁  (0) 2007.06.14
아파치 튜닝3  (0) 2007.06.14
아파치튜닝2  (0) 2007.06.14
아파치 튜닝  (0) 2007.06.14
리눅스 AMP 설치  (0) 2007.06.14


티스토리 툴바