error: Installed (but unpackaged) file(s) found:
/usr/lib/libxerces-depdom.so.26.0
Installed (but unpackaged) file(s) found:
/usr/lib/libxerces-depdom.so.26.0


이런 메세지를 만나게 된다.

아마도 RPM 빌드시 spec파일에 정의된대로 chroot 과정을 거치거나 할때 이미 파일이 설치된 걸로 착각하는(?) 등등일 경우 나는 문제 같은데,

%define _unpackaged_files_terminate_build 0


spec의 맨 위쪽 define이 열거된곳에 위 라인을 삽입하여 무시할 수 있다.


---------------------------
정보 출처 :
http://linux.i-heart.co.kr/viewtopic.php?t=39 의 siteadmin인 nopain님의 팁
Posted by freezn
error: Package already exists: %package debuginfo


같은 메세지만 나오고 헷소리를 낸다면

홈디렉토리의 .rpmmacros 파일이나 /var/lib/rpm/배포판/macros 파일을 열어서

ex)
vi ~/.rpmmacros

%debug_package %{nil}를 추가하자.

echo "%debug_package %{nil}" >> /root/.rpmmacros


이런 식으로 간단히도 가능.

그러면 정상적인 에러메세지를 보여줄 것이다.

내 경우는 %changelog에 %install이 한번 더 등장한다는 것이었는데
changelog부터는 무조건 주석처럼 무시될거라 생각한 실수.
%install에서 뭘 고쳤다는 로그를 남기다보니 이런 실수가 있었다.

주의하자.
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
RPM들의 SPEC파일을 보면 Copyright와 License가 같은 용도로 사용되는 경우가 있다.

예를 들면 Troy Engel 씨가 패키징한 libnet 패키지에서는
Copyright: BSD 으로 되어있고

RHEL3에 포함된 레드헷에서 패키징한 diskdumputils 패키지에서는
License: GPL 으로 되어있다.

당연히(?) License 라는 택을 사용하다가 생각해보니 분명 나도 maximum rpm에서 Copyright로 읽은 기억이 나서 Copyright로 써봤더니 vi가 빨간 배경을 깔아버린다. -_-;
음 설마 syntax 오류라는걸까나 :)
(물론 빌드는 잘 됐다.)

주) maximum rpm 의 관련 부분 : http://www.rpm.org/max-rpm/s1-rpm-build-creating-spec-file.html

- maximum rpm이 작성된지도 오래되었으니 바뀌었을 수 도 있겠군.. :)

그래서 찾아보니 페도라 메일링 리스트 로그에 다음과 같은 내용이 있었다.
jove라는 소스를 -tb옵션으로 빌드하려고하니 다음과 같은 에러메세지가 발생한 다는 것이다.
"error: Legacy syntax is unsupported: copyright"


D. Hugh Redelmeier씨에 의하면
레드헷 리눅스 6.2 전에는 License라는 태그가 없었고 지원되지 않았지만 이후 변경되었다고 한다.
때문에 이전 버전과 이후 버전에서 동시에 사용하기 위한 방법을 제시하고 있는데...

%define ancient_OS 1

%if %{ancient_OS}
Copyright: foo
%else
License: foo
%endif


뭐... 귀찮겠다 -_-;
(결국 6.2면 대체 rpm/build 버전이 몇이 들어가 있는거냐... 싶어 License택만 사용하기로 했다.)

해당로그 : https://www.redhat.com/archives/fedora-test-list/2005-May/msg00963.html

Vender, Packager, License는 있지만 Copyrighter가 없는게 좀 찜찜한 구석이 있다보니 이에 대한 것도 문제가 되는가보다.

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

재밌는건 Copyright를 License로 인식하여 지원하는 것 같다는 것이다.

Troy Engel의 libnet 패키지(Source RPM: libnet-1.1.2.1-1.rh.el.um.1.src.rpm)를 보면 Copyright: BSD 라고 되어있지만
-qi옵션으로 정보를 보면 License: BSD 로 출력된다.

결국 옛날 패키지가 아니면 License로 쓰면 된다는 것이다.
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
Apache 웹서버 설정.
당연히 디렉토리를 만들었고 퍼미션도 701~707 까지  다 줘봤는데, 아래와 같은 에러가 나더라.

Starting httpd Syntax error on line 267 of /etc/httpd/conf/httpd.conf:
DocumentRoot must be a directory
                                                                              [FAILED]

OTL...

구글링해본 결과 원인은 SELinux ...아이고 -_-
이놈에 보안정책이 뭔지

chcon -R -t httpd_user_content_t [디렉토리]


해법 출처 :
http://www.superuser.co.kr/home/superuserboard/view.html?id=1628&code=apache&start=0&position=

---

추가 :

403 forbidden 에는..

setsebool -P httpd_enable_homedirs on

(setsebool 명령이 없으면 yum -y install policycoreutils-python )

출처 : http://stackoverflow.com/questions/14786881/apache-restart-causes-documentroot-must-be-a-directory-even-though-it-is-a-dire


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
작은 프로젝트에서 Windows + Apache + FirebirdSQL + PHP를 사용할 일이 있었습니다.
이 내용은 그 때 정리한 것입니다.

다들 아시겠지만 FirebirdSQL은 Borland Interbase 6.x대에서 오픈소스화 된 프로젝트로 무료로 사용가능하며 아주 작고 강력한 DBMS입니다.
이러한 특성때문에 많은 프로그램에서 자신들의 프로그램에 포함시켜 설치를 제공하는 곳이 많으며 Interbase와는 많은 호환이되어 PHP에서도 Interbase용 함수를 사용합니다.

--------------------------------------------------------------------
- Apache1.3 + FireBird 1.5 + PHP4.3 설치 과정

1. 버전
. Apache 1.3.33 - http://httpd.apache.org
. PHP 4.3.10 - http://php.net
. Firebird 1.4.2.4731 - http://firebirdsql.org



2. 설치파일들
. apache_1.3.33-win32-x86-no_src.exe
. php-4.3.10-Win32.zip
. Firebird-1.5.2.4731-Win32.exe


Apache와 Firebird는 설치, php는 적당한 경로에 압축을 풀어주세요.

3. httpd.conf 파일 설정
= httpd.conf에 다음과 같은 내용을 추가한다.

############################################################################
# Config for PHP4 on Apache 1.3.33
############################################################################
# 주의1. 아파치 설정에서 경로는 대신 /을 사용할 것.
# 주의2. 경로는 자신의 경로로 바꿀 것
AddType application/x-httpd-php .php
# For PHP 4
LoadModule php4_module "C:/PHP/sapi/php4apache.dll"
# specify the directory where php.ini is
SetEnv PHPRC "C:/PHP"
############################################################################

= httpd.conf 에서 DirectoryIndex 을 찾아 index.html 뒤에 index.php 를 추가한다.



4. PHP 설정
= PHP디렉토리의 php4ts.dll 파일을 windows 디렉토리로 복사
= PHP디렉토리의 php.ini-dist 파일을 php.ini 파일로 이름을 변경하여 window 디렉토리로 복사
= Interbase 의 사용을 위해 PHPdlls 에 있는 gds32.dll 을 windows의 system32 에 복사 (이미 존재할 시 덮어씌울 필요는 없음, 버전이 새로운 것이 높다면 덮어씌우면 됨)


= php.ini 에서 수정할 사항

; extension_dir = "C:PHPextensions"의 주석 제거
; (만약 extension_dir 의 경로가 다르다면 맞는 경로로 설정)
; extension=php_interbase.dll ;주석 제거
; magic_quotes_sybase 을 On으로


= php.ini 에서 추가할 사항

; 만약 이미 존재한다면 옵션만 수정할 것
[InterBase]
ibase.allow_persistent PHP_INI_SYSTEM
ibase.max_persistent PHP_INI_SYSTEM
ibase.max_links PHP_INI_SYSTEM
ibase.default_db PHP_INI_SYSTEM
ibase.default_user PHP_INI_ALL
ibase.default_password PHP_INI_ALL
ibase.default_charset PHP_INI_ALL
ibase.timestampformat PHP_INI_ALL
ibase.dateformat PHP_INI_ALL
ibase.timeformat PHP_INI_ALL




--------------------------------------------------------------------
- 설정 확인.
htdocs 에 php 파일을 하나 만들고 phpinfo(); 함수를 넣어봅니다.
웹으로 접속해봅시다.

보라색표에 PHP로고와 PHP Version 4.3.10 같은 문구가 나타났나요?
이제 ctrl+f로 interbase를 검색해봅시다.
관련 항목들이 나오며 Interbase Support enabled 로 나오나요?

그렇다면 설정이 제대로 된 것 입니다.^^



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


설정 내용들의 간단한 설명

1. httpd.conf 의 설정에서.

다들 아시겠지만 httpd.conf는 아파치웹서버의 설정파일이다.
PHP 스크립트를 사용하기위해 아파치를 많이들 이용하며,

Windows상에서의 Apache+PHP연동에 대한 자료를 찾아보면 php.exe를 이용하는 방법이 많이 나와있다.
이런 팁들에서 특이한건 PHP모듈을 로딩해놓고도 php.exe를 이용한다는 것이다.
(이런 내용의 설정이다. Action application/x-httpd-php "/php/php.exe")

설치문서를 찾아보면 보안문제를 비롯한 여러문제로 인해 php.exe를 이용하는 방법은 권장하고 있지 않으며, php-apache 모듈의 이용을 권장하고 있다.

정확하지 않은 카더라통신 수준의 기억에 의하면 Windows 9X대 에서는 php.exe를 이용하는 수밖에 없기 때문에 그와같은 설정을 했던 것 같다.


2. PHP설정단계에서.
php4ts.dll 의 역할은 정확하게 기억나지 않는다. -_-;

php.ini 는 다들 아시겠지만 php의 설정파일이다. 나중에 메모리 제한등을 여기서 해결할 수 있다.

gds32.dll 은 GD라이브러리가 아닌 Interbase 연결을 위한 라이브러리이다. (에러가 나더라도 GD관련 에러로 착각하지 말자.)

3. php.ini수정에서.
magic_quotes_sybase 을 On으로 바꾸는 것은 Interbase/Firebird 관련 함수를 사용하기위해서 이렇게 하라고 http://kr2.php.net/ibase 에 나와있다. (왠지는 모른다.)

extension=php_interbase.dll 의 주석해제는 Interbase/Firebird 관련 함수가 들어있는 라이브러리 모듈을 활성화 시키는 것이다.
만약 이 라인을 그대로 주석인채 서비스를 연결해보면 관련 함수가 연결단부터 없는 함수라는 메세지를 보여줄 것이다.

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

발견된 문제 #1
FirebirdSQL 을 Zip Binary(파일명 Firebird-1.5.2.4731_win32.zip) 으로 설치하였을 경우 Undefined service gds_db/tcp 라는 요상한메세지가 나오며 DB연결에 실패한다.
물론 설정 확인에서도 정상이었다.
- 해결책
FirebirdSQL을 Install 버전으로 설치한 후 다시 Uninstall 하고 FirebirdSQL을 다시 설정하면 정상적으로 된다. 이유는 아직 파악하지 못하였다.
아마 서비스등록과 레지스트리 등록외에도 무언가 필요한게 남는 것 같지만 좀더 알아봐야할 것 같다.

...윈도우즈system32driversetcservices 라는 파일이 있다.
이 파일에 gds_db 3050/tcp 식의 3050 tcp포트를 정의한 라인이 있는지 확인해보자. listening 포트를 정의하는 이 파일인 이것에 굳이 추가하지 않아도 되지만 좀더 확연한 처리를 위해 등록하곤 한다.

이것을 추가하는 것으로 해결이되었다.
특이한 것은 인스톨 버전에서는 이러한 내용이 없는 것으로 보아 다른 방법을 사용하는 것 같으며, 마지막
(뉴라인or 엔터) 를 잊지 말자.
Posted by freezn

웹페이지 소스를 긁어오려는데 IE가 아니면 막아놨다?
각종 꽁수로 "난 IE야~" 라고 우겨도 안된다?

그럼 이렇게...

예제 :

// alloc COM (IE)
$ie = new COM("InternetExplorer.Application");
// $ie->Visible = false; // 이런 것도 가능...

$ie->Navigate($url);
while($ie->readyState!=4); // Loading Complete 확인??

$srcHTML = $ie->Document->documentElement->outerHTML;

// free object
$ie->Quit();
unset($ie);

필요사항 :

- PHP >= 5
- OS는 역시 Windows
- 해당 컴포넌트가 윈도우에 등록 되어 있어야 함

MS Word, MS Excel, MS Access 등 M$오피스들은 COM객체를 거의 제공함 ㅡㅡ;;
Posted by freezn