PHP cli (5.3.3)로 스크립트를 하나 만들어놨다.

파일 처리한 후 rename 함수로 백업 경로로 옮기는 스크립트인데

용량 확보와 속도 개선을 위해 추가 디스크를 마운트 시켜놓고 나니 이런 오류가 발생했다.

[PHP] PHP Warning:  rename(/AAA/XXX,/BBB/XXX):
Operation not permitted in XXX.php on line XX

황당하게도 처리는 제대로 되었고 경고만 뜬다.


http://kr1.php.net/manual/en/function.rename.php


원인을 찾아보니 php 의 rename은 리눅스의 rename 명령을 이용하는 것이다보니 본래는 디스크간 이동을 위한 것이 아니다.

그러므로 디스크간 이동을 위해서는 system 이나 exec 함수로 식으로 수정하거나


exec("mv /AAA/XXX /BBB/XXX") ;

or

if(copy('/AAA/XXX', '/BBB/XXX')==TRUE) unlink('/AAA/XXX');

식으로 수정하면 경고 없이 깔끔하게 된다.

Posted by freezn
삽질기행/잡다정보2006. 12. 21. 03:23
Edward C. Bailey, "Maximum RPM" :
RPM을 다룬 문서(책) 중 가장 상세함... 하지만 좀 오래됨...
http://www.redhat.com/docs/books/max-rpm/max-rpm-html/index.html
http://www.rpm.org/max-rpm/

Eric Foster-Johnson, "RPM Guide" :
좀더 쉽게 쓰여진 편이고 예제도 풍부함
Python-RPM 모듈을 사용할 때도 좋음...
http://fedora.redhat.com/docs/drafts/rpm-guide-en/

Paul Nasrat, "RPM Python(and friends)" :
Python-RPM 모듈과 펄등에서의 활용을 다룬 문서
http://people.redhat.com/pnasrat/rpm-python/rpm-python-slides/frames.html
Posted by freezn
yum으로 다음의 패키지를 설치한다.

nautilus-open-terminal


정보 출처 : http://linux.rasmil.dk/cms/modules/dokuwiki/doku.php?id=howto:fc5
Posted by freezn
CPU : P4 2.4B
M/B : GIGABYTE 8GEM667 (i845GE)
Graphic card : Sapphire RADEON 9100 (64MB)
RAM : SEC 256*2

ATI...
예전부터 리눅스용 드라이버 지원이 좋지만은 않다는걸 알고는 있었지만 퀘이크3가 계속 땡기는 참에 ㅠ_ㅠ

(DVI출력도 안되니 듀얼도 못쓰고...)

fglrx를 설치해보려했건만 ...

왜 안되는겨 ;ㅁ;

시냅틱에서 받아서 설치도 해보고 ATI에서 다운받은 바이너리로도 해보고 컴파일해서 모듈로도 올려봤지만 매번 부팅후 처음엔 화면이 나오다가 몇분 지나거나 불여우를 켜는 순간 그야말로 뻗어버린다.


xorg.conf에 그래픽카드 섹션
Section "Device"
Identifier "ATI Technologies, Inc. Radeon 9100 (R200 QM)"
Driver "ati"
BusID "PCI:1:0:0"
Option "UseInternalAGPGART" "no"
Option "VideoOverlay" "on"
Option "OpenGLOverlay" "off"
EndSection


아래쪽 3가지 옵션들은 충돌이 있을 수 있는 부분들이라던가... 누군가 의 블로그 내용에서 퍼온것이지만 가장 관건은 결국 드라이버를 fglrx로 올리면 같은 현상이다.

모바일라데온9600인 선배 노트북은 잘되던데... 그래픽카드를 새로 사야하나 -_-;;

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

ATI홈페이지에 8.18.8 버전이 릴리즈 됐길래 설치해보니 다운도 안되고 잘된다....

고 좋아했더니 어째 속도가 느리다.

음... 설마... 하면서 fglrxinfo 해보니

...mesa 3d (...)

결론은 처음부터 다시 ㅡㅡ;

뭐... 3D를 제대로 못돌리는건 아쉽지만 일단 DVI 출력이 잘되니 그냥 쓰기로 ㅡㅡ;;

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

8.26.18 버전이 나왔길래 또 해봤다.
나머지는 사양은 똑같고 그래픽카드만 유니텍 RADEON 9000 128MB 으로 바꿨다.
(연수생 할 때 옆에 계시던 분이 버리려는 거 주섬주섬 받아왔다...;;)

그냥 다음 다음 눌러 설치하고 aticonfig --initial 해버리니

오... 잘 잡힌다. (바꾼 다음에도 기존버전은 잘 잡히지 않았었다.)


결론. Radeon 9100 은 까다롭다 - _-;;

Posted by freezn
삼성 PC에 CentOS 4.2 를 설치했다. (모델명은 M2950. P4 1.6 모델이다.)

여튼 설치가 다 되고 부팅을 시켜보니

이게 왠걸

Initializing hardware: storage network (그대로 멈췄음)


음.. audio가 떠야하는데 안뜨는걸 보니 오디오와 충돌인가? 라는 생각은 오산이었다. 서버 전용으로 사용할거라 내장 오디오를 disable 시켰더니 이제 부팅은
Initializing hardware: storage network audio ...


오.. 잘되는군

근데 왜 네트웍이 안되지?ㅡㅡ;

찾아보니... 노트북(laptop) 쪽에서 자주 나는 문제인 것 같은데...
ACPI랑 관련이 있나보다.

grub 부팅 옵션에 다음 2가지를 추가해줬다.

acpi=off amp=off


잘 된다.
(하지만 ACPI를 꺼버렸으므로 시스템 halt 시 전원 버튼을 눌러야 끌 수 있는 작은 문제가 있다.)

ps. 이와 비슷하거나 이상해지는 상황은 FC3/4에서도 마찬가지인데...
그럼 이 PC모델이 문제인 거겠지? :(
Posted by freezn
heartbeat.

고가용성을 위한 서비스 어쩌구라는데...

복잡한건 싫으니 쉽게 가자.

Fail Over Cluster 다.

서버 하나가 죽었을때 비상용 서버로 연결하는거다.



수십대씩일때도 가능하겠지만, 이 포스팅으로 정리하려는건 서버가 2대일때 메인서버가 죽은 경우 서브서버로 연결하는 경우다.

----------------------------------------------------------------
환경 :

같은 서브넷에 속한 서버 2대
나같이 빈곤한 (ㅡ_ㅜ) 사람은 서버 1대에 랜카드 2개 준비하기도 까다롭고 서버간에 거리가 좀 될 경우 시리얼(RS232C) 케이블로 서버 두대를 연결하기도 골치아프다.

그래서 이런 상황이다.

A──스위치──B

뭐 간단한 환경 ~_~

스위치를 통해 외부와 연결되어있는거다.

각각 호스트네임과 아이피가 다음과 같다고 하자.
가상으로 줄 아이피 : 192.168.0.201
A : fz1 : 192.168.0.202 <- 메인
B : fz2 : 192.168.0.203 <- 비상용 서브

참고로, 각 서버를 노드로 칭할 수 도 있으니 노드라는 용어를 사용해도 헷갈리지 말자.
----------------------------------------------------------------

heartbeat설치는 그까이꺼 뭐 대충 소스로 깔든 rpm으로 깔든...

설정을 보자
다음 파일들이 필요하다.
/etc/ha.d/authkeys
/etc/ha.d/ha.cf
/etc/ha.d/haresources

나같은 경우 기본 스펙대로 rpm패키지를 만들어서 설치했기 때문에 /usr/share/doc/heartbeat-2.0.2/ 경로에 sample파일이 있었지만,
없어도 이 포스팅에선 별 관계 없다. 간단하기 땜시...
----------------------------------------------------------------

설정 내용은 다음과 같이 했다.
/etc/ha.d/authkeys
auth 1
1 crc

/etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 2 # 노드간 beat 주기-초
deadtime 10 # 노드 사망 확인 시간-초
udpport 694 # 신호 보낼 포트
udp ech0 # 신호 보낼 장치
node fz1 # 각 노드
node fz2 # 각 노드

/etc/ha.d/haresources
fz1 192.168.0.202 # 메인서버

----------------------------------------------------------------
다 됐다.

이제 fz1 서버 부터 서비스를 시작하다.
/etc/init.d/heartbeat start (혹은 /etc/rc.d/init.d/heartbeat 라도)

꼭 그래야하는건 아니지만 메인 서버를 먼저 켜는게 좋은가보다.

그리고 fz2도 마찬가지로 시작한다.

이제 192.168.0.201으로 접속해보자. (두 서버가 사용할 가상 아이피다.)

192.168.0.201로 접속했을때 우선은 fz1으로 접속될 것이다.

이제 fz1을 끄거나 fz1의 heartbeat서비스를 중지 시켜보자.
/etc/init.d/heartbeat stop

그리고 10~12초 후 -_-a (신호주기2초+사망진단 10초) 192.168.0.201 로 접속하면
fz2 서버로 접속이 된다.

참고로 나같은 경우 httpd에 php로 echo exec("hostname"); 시켜서 확인했다.

----------------------------------------------------------------
주) 두 서버간에 해당 udp포트(이 포스트에서는 694)를 꼭 열어두자. 신호를 주고받지 못해 서로 사망했다고 생각하고 서로 아이피를 잡느라 난리가 날 수 있다.

----------------------------------------------------------------
참고 문헌
아이네트호스팅 - Linux Fail Over Cluster System 구축하기
http://www.inet.co.kr/faq/stories.php?story=03/10/17/7500350

KLTP - heartbeat 를 이용하여 고가용성(High Availability ) 서비스 구현하기
http://kltp.kldp.org/stories.php?story=03/01/07/7241711
Posted by freezn
vpopmail 없이 qmail 만을 이용해서 사용할 때 그나마 좀 편리해지라고 삽질 해봤다.

#!/bin/bash
##################################################
DIR_BASE=/home/MailHome
QM_BIN_DIRMAKE=/var/qmail/bin/maildirmake
QM_DIR_NAME=Maildir
GID=mailusers
if (test -z $1); then
       echo "usage : $0 [mailuserid]"
else
       UID=$1
       DIR_HOME=${DIR_BASE}/${UID}
       DIR_USER_MAIL=${DIR_HOME}/${QM_DIR_NAME}
       useradd -g ${GID} -s /sbin/nologin -d ${DIR_HOME} ${UID}
       RETVAL=$?
       # when account create successfully
       if (test $RETVAL -eq 0); then
               rm -rf ${DIR_HOME}/.[a-zA-Z0-9]*
               ${QM_BIN_DIRMAKE} ${DIR_USER_MAIL}
               chown ${UID}.qmail -R ${DIR_USER_MAIL}
               chmod 770 -R ${DIR_USER_MAIL}
               passwd ${UID}
       fi
fi

추가 과정 :
쉘 접속이 불가능한 계정을 추가한다.
계정 추가에 성공하면:
해당 계정 홈디렉토리에 숨겨진 파일들을 지워버린다.
홈디렉토리 안에 Maildir 을 생성한다(qmail 메일 디렉토리)
생성한 메일디렉토리에 qmail 데몬이 접근할 수 있도록 한다.
추가한 계정의 패스워드를 정한다.

1. 사용자 추가
2. (아이디 중복 등) 사용자 추가에 실패시
3. 사용자 제거
Posted by freezn