일상의 정리

마운트 되지 않은 파티션이 이미 마운트 되어 있다고 나오는 경우 해결 방법

리눅스/설치
마운트 되지 않은 HDD 의 파티션을 마운트 하려하니 이미 마운트 되어 있다고 나오고

fsck -f -y /dev/sda1

명령을 실행하니 아래와 같이 이미 마운트 되어 있다고 나온다.

fsck 1.39 (29-May-2006)
e2fsck 1.39 (29-May-2006)
fsck.ext3: Device or resource busy while trying to open /dev/sda1
Filesystem mounted or opened exclusively by another program?

이 에러는 대개의 경우 2가지 이다..

실제로 언마운트 되지 않아서 에러를 리포트 하는 경우 

이 경우는  /proc/mounts 파일을 보면 해제 되지 않을 경우 내용이 있다.

실제로 누가 이 파티션을 사용중인지 
lsof 와 fuser 로 확인할 수 있다.

위의 경우가 아니라면... (예를 들어 fstab 에 등록 되어 있지 않으며 부팅하자 마자 )

레이드 파티션으로 인식 되어 있지 않은 지 의심해 보는 것이 좋다.

dmraid -r
명령을 내려 보면 RAID 로 인식되는 파티션이 표시된다.

만약 RAID 구성으로 인식되어 있다면

dmraid -rE

명령으로 RAID 구성을 해제하고 리부팅 해 주면 정상적으로 사용할 수 있다.
 

qmail CNAME_lookup_failed_temporarily. 에러 발생시 조치 방법

리눅스/설치
qmail 서버 운영 시 

상대방 서버에 메일이 전송되지 않을 때
/var/log/qmail/qmail-send/current 로그에
CNAME_lookup_failed_temporarily

에러가 있다면...

다음과 같은 경우 중 하나이다.
1. 내 서버의 dns resolve 문제
2. 상대방 서버의 dns 설정에 문제 (MX는 A여야 함)
3. 잘 되던게 안되거나 대형 포탈 (특히 hanmail 같은 경우)

3 번의 경우에는 qmail 이 사용하는 dns.c 를 패치해 주어야 한다.
기존 dns.c 의 경우 쿼리응답이 512 바이트까지만 처리 가능하지만.
대형 포탈들은 많은 서버로 인해 응답이 512바이트를 초과하기 때문이다.

http://www.ckdhr.com/ckd/qmail-103.patch

패치 후 컴파일 하고 기존 바이너리 파일과 교체하면 정상적으로 메일이 발송된다.

CentOS 5 + SANE + USB Scanner

리눅스/설치

SANE 을 이용하면 Linux 에서도 Scanner 를 사용할 수 있다.

CentOS 5를 설치하면 기본적으로 sane 관련 패키지들이 설치 되어 있다..

만약 설치 되어 있지 않다면 yum 을 이용해서 설치 하도록 하자.

설치 된 상태에서 USB 스캐너를 지원하는 모델이라면

그냥 USB를 꼽기만 하면 된다.

USB를 꼽고 인식 되었는 지 확인 하려면 root 사용자에서

lsusb 명령으로 인식 여부를 확인할 수 있다.

인식 되었다면

scannerimage -L

명령으로 sane 에서 사용가능한 장치로 인식 되었는 지 확인한다

제대로 인식이 되었다면...

X-Windows 시스템이라면 xsane 을 이용해서 스캔 작업을 할 수 있다.

하지만 우리의 목표는 단순하게 윈도에서 터미널을 이용해서 스캐너를 공유하는 것이므로

명령어 모드에서 스캔을 한다.

다음이 스캔 명령이다.

scanimage -d `scanimage -L | cut -c 9-28` --format tiff --mode Color --resolution 200 > 파일명

여기서 scanimage -L | cut -c 9-28  이 부분이 스캐너 이름을 구하는 부분이다.

mode 부분에 GrayScale 이라고 넣으면 흑백으로 스캔이 가능하다.

파일명 을 공유 폴더로 쓰게 만들면 어느 계정이든지 로그인 해서 공유 폴더로 스캔할 수 있다..

단 이때 scanimage 를 root 로 로그인해야 스캐너에 접근이 가능한 문제가 있다.

이걸 해결하기 위해서는 udev 설정을 수정해야 한다.

먼저 scanner 그룹을 추가하고
/etc/group 의 scanner 그룹에 스캐너를 사용할 사용자를 추가한다.

그리고 /etc/udev/rules.d 로 가서
 60-libsane.rules 파일을 수정한다.

해당되는 스캐너 모델에 가서

SYSFS{idVendor}=="04b8", SYSFS{idProduct}=="0104", SYMLINK+="scanner-%k", GROUP="scanner", MODE="660", OPTIONS="last_rule"

와 같이 적어 준다.

이제 USB를 다시 연결하면 스캐너 디바이스의 그룹이 위에서 설정한 데로 root 와 scanner 가 된다.

scanner 그룹에 추가된 사용자로 로그인 한 사용자는 root 권한 없이 스캐너 접근이 가능하다.

BIND 동적 업데이트 하기

리눅스/설치

외부에서 DHCP로 변경되는 IP를 BIND에 동적으로 업데이트 해 주기
기본적인 문서는 아래를 참조
http://bind.cslab.kr/dynamic-update

외부 업데이트를 위해서 TSIG (Transaction Signature)를 이용함
1. 서버측 TSIG 설정
TSIG 키 생성

dnssec-keygen 프로그램으로 키 생성
  • -a hmac-md5 : 알고리즘 종류
  • -b 128 : 키 길이(128 bit) / 최대값 : 512 bits
  • -n HOST : 키 종류(HOST)
# dnssec-keygen -a hmac-md5 -b 128 -n HOST test.com.

  • 생성파일 확인 : 다음 2개의 파일이 생성됨
K{name}.+157.+{random}.key
K{name}.+157.+{random}.private

{name}은 저 위에서 HOST 에 지정한 도메인(test.com) 명임

  • named.conf 수정
zone “test.com" {
    type master;
    file “test.com.external.zone.db";
    // TSIG Key Based Access Control
    allow-update { key test.com.; };
};
key "test.com." {
    algorithm hmac-md5;
    secret "XXXXXXXXXXXXXXXXXXXX";
};

named.conf 의 해당 도메인(test.com)에 allow-update 부분에 key로 업데이트 하도록 추가

아래쪽 XXXXX 부분에는 위에서 생성한 .private 파일안의 Key: 이후에 나오는 문자열을 복사해 넣는다.
named.conf 는 다수의 사람에게 공개될 수 있으므로, 위의 key 부분은 별도의 파일로 만들어 주는 것이 좋다
이럴 경우에는 예를 들면 tsig.key 라는 파일에 위 구문을 저장한 후 named.conf 에는
include "/etc/tsig.key";
를 추가해서 Key 파일을 읽어 들이도록 한다.
  • 파일권한설정
/var/named (물론 chroot  설정이 되어 있다면 설정된 디렉토리) 의 사용자 권한이 named 사용자가 write 할 수 있는지 확인하고 안되어 있다면 권한을 부여한다.
chown named named;


2. 클라이언트 측 스크립트
원격지 DNS를 동적으로 업데이트할 때는 nsupdate를 이용한다.
서버에서 만든 2개의 키파일을 복사해 온다.

#!/bin/sh
# Update the name server with our info
HOSTNAME=host.domain.com
PREV_FILE=/root/prev_ip
PREV_IP=`cat $PREV_FILE`
CUR_IP=`/sbin/ifconfig eth0 | head -2 | tail -1 | awk '{ printf("%s\n", $2); }' | sed "s/addr://"`
if [ "$PREV_IP" != "$CUR_IP" ]
then
/usr/bin/nsupdate -d -k /root/keys/Kdomain.com.+157+59903.key <<-EOF
       prereq yxdomain $HOSTNAME
       update delete $HOSTNAME A
       update add $HOSTNAME 60 A $CUR_IP
       send
EOF
echo $CUR_IP > $PREV_FILE
fi
exit 0
다음 명령으로 nsupdate를 실행
nsupdate -d -k K{name}.+157.+{random}.private
>prereq nxdomain <호스트명>.
>prereq yxdomain <호스트명>.
>
위에서 보듯이 prereq 로 호스트명을 지정한다.
이때 호스트명이 이미 존재할 경우 yxdomain 을 없을 경우 nxdomain 을 입력해 주어야 한다..
자세한 건 BIND 문서를 참조

호스트를 추가 하거나 삭제 하는 명령어를 실행하고 최종적으로 send 명령어로 명령을 전송한다.
nsupdate -d -k Ktest.com.+157.+12345.private
>prereq yxdomain new.test.com.
>update delete new.test.com.
>update add new.test.com. 60 IN A 192.168.0.5
>show
>send

아래는 자동으로 IP를 업데이트 하는 스크립트이다.

#!/bin/sh
# Update the name server with our info
HOSTNAME=host.domain.com
PREV_FILE=/root/prev_ip
PREV_IP=`cat $PREV_FILE`
CUR_IP=`/sbin/ifconfig eth0 | head -2 | tail -1 | awk '{ printf("%s\n", $2); }' | sed "s/addr://"`
if [ "$PREV_IP" != "$CUR_IP" ]
then
/usr/bin/nsupdate -d -k /root/keys/Kdomain.com.+157+59903.key <<-EOF
       prereq yxdomain $HOSTNAME
       update delete $HOSTNAME A
       update add $HOSTNAME 60 A $CUR_IP
       send
EOF
echo $CUR_IP > $PREV_FILE
fi
exit 0

위 스크립트를 crontab 에 등록해서 5분마다 실행하게 할 경우 IP 변경시에 자동으로 업데이트 한다.

Linux 상에서 svn 사용하기

리눅스/설치
대개의 프로젝트는 윈도에서 하므로 TortoiseSVN을 사용하지만...
일부 서버는 리눅스 상에서 개발하므로 리눅스에서도 사용해야 되는 경우가....

다음은 리눅스에서 svn 기본 명령 사용법 정리이다.

1. 저장소 만들기
일단 root로 로그인
# cd /home/svn
--> 저장소를 생성
# svnadmin create --fs-type fsfs <repository명>
--> svn group이 저장소에 Access 가능하도록 directory 속성변경
# chmod -R o-x <repository명>
# chmod -R o-r <repository명>
# chmod -R g+w <repository명>
# chgrp -R svn <repository명>

2. 자신의 계정에서 생성한 저장소 Access
--> 자신의 사용자로 로그인
--> ~/.bash_profile 에 다음 줄 추가하여 환경변수 생성
export SVN_EDITOR=vi
--> 원하는 폴더로 감
$ cd ~/gits
--> 요렇게 하면 현재 디렉토리 아래에 <directory명>에 해당되는 directory가 생성되고 그 아래 소스트리를 만들면 된다.
$ svn checkout svn+ssh://localhost/home/svn/<repository명> <directory명>
--> <directory명> 으로 가서 작업
--> 로컬 디렉토리 또는 파일 저장소에 추가하기
$ svn add <파일명>
--> 로컬 디렉토리 또는 파일 커밋하기
$ svn commit
--> 저장소의 최근 내용으로 로컬 파일 업데이트 하기
$ svn update

더 자세한 내용은 아래 페이지 참조

http://www.pyrasis.com/main/Subversion-HOWTO

FreeNX 설치

리눅스/설치

1. http://www.nomachine.com/ 에서 다운로드 받는다.

2. Client, Node, Server 순으로 설치를 한다.
  # sudo rpm -i nxclient-3.3.0-6.x86_64.rpm
  # sudo rpm -i nxnode-3.3.0-12.x86_64.rpm
  # sudo rpm -i nxserver-3.3.0-14.x86_64.rpm

3. 설치 후 /usr/NX/scripts/setup/nxserver --install 실행

4. 키 생성을 위해 /usr/NX/bin/nxserver --keygen 실행

5. /usr/NX/share/keys/default.id_dsa.key 내용을 클라이언트 프로그램 설정 부분에 키 항목에 추가.

6. 만약 별도의 사용자 DB를 유지하고자 한다면 /usr/NX/etc/server.cfg 파일을 수정
EnableUserDB = "1"
EnablePasswordDB = "1"
"1"로 한 경우에는 6-1로..

기존 리눅스 사용자를 그대로 쓰려면 위의 "1"을 "0"으로 바꾼다.
EnableClipboard = "both"

6-1. 계정 추가 및 암호설정을 위해 nxserver --useradd username 실행

7. 데몬 재시작. /etc/init.d/nxserver restart

8. sshd 설정 확인
Load up your /etc/ssh/sshd_config file into an editor:

/etc/ssh/sshd_config 편집

다음 라인을 추가하거나 확인한다.
AuthorizedKeysFile /usr/NX/home/nx/.ssh/authorized_keys2

sshd 데몬을 재시작
sudo /etc/init.d/ssh restart

다음 명령을 쳐서 아래 화면 내용이 나오면 정상적인 상태이다
sudo /usr/NX/bin/nxserver --status

This should return:

NX> 900 Connecting to server ..
NX> 110 NX Server is running.
NX> 999 Bye.

9. 접속 후 한글이 안되는 경우가 있다. 이런 경우 다음과 같이 하면 된다.
사용자 홈 디렉토리에 .bash_history 파일에 다음 내용을 추가 한다.

export LC_CTYPE="ko_KR.UTF-8"
export XMODIFIERS=@im=SCIM
export GTK_IM_MODULE=scim
export QT_IM_MODULE=scim

svn+ssh 암호 없이 사용하기

리눅스/설치

1. Cent OS 에 svn 설치하기

 

# yum install subversion

 

# mkdir /home/svn

 

2. 저장소 위치 설정

# groupadd svn

/etc/group 에 svn 그룹에 포함될 사용자(svn을 사용할 사용자)를 추가한다.

 

3. 저장소 추가

# cd /home/svn

# svnadmin create --fs-type fsfs sample

--> group 쓰기가 가능하도록 설정한다

# chgrp -R svn sample

# chmod -R g+w sample

 

ssh 로 사용할 경우에는 패스워드 파일 생성등 별도의 작업이 필요 없다.

 

4. TortoiseSVN 에서 암호 없이 접속하기

접속할 계정으로 터미널 접속

$ ssh-keygen -b 1024 -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/admin/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/admin/.ssh/id_dsa.
Your public key has been saved in /home/admin/.ssh/id_dsa.pub.

$ cd .ssh

$ mv id_rsa.pub authorized_keys

$ ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is 89:79:86:1b:cb:fc:a0:05:9c:65:88:b5:4c:1b:7f:c8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
Last login: Sun Jan 11 00:43:26 2004 from 192.168.0.25

만약... 위의 방법으로 접속이 실패했다면...
sshd가 인증키로 인증을 허용하지 않기 때문이다.
이럴 경우.
sshd_config(보통은 /etc/ssh/sshd_config)에 다음 두줄이 포함되어 있는지 확인하자.

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

만약 개인키를 암호 없이 사용하는 것이 찝찝하다면 ssh-keygen 을 실행시 암호를 주면 된다.
 

Winscp 나 psftp 를 이용해서 위에서 만든 개인키 (id_rsa) 를 가져온다.


puttygen을 실행 후 메뉴 중의 Convesions - Import Key 로 가져온 개인키를 로드

다른 건 건드리지 말고 


Save private key 로 개인키를 적당한 이름의 xxx.ppk 파일로 저장한다.


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

1. pagent.exe 를 사용하는 방법 
-------------------------------------------------------
저장 후 pageant.exe 를 실행하며 트레이 아이콘에 표시되는 데 Add Key 로

위에서 저장한 xxx.ppk 파일을 로드한다.

 

이 상태에서 SVN 명령을 수행할 경우 암호 없이 사용가능하다.
-------------------------------------------------------

-------------------------------------------------------
2. TortoisePlink 를 이용하는 방법
-------------------------------------------------------
TortoiseSVN을 설치한 후 

c:\Documents and Settings\username\Application Data\Subversion\config

파일을 오픈한 후

[tunnels]
항목에 다음과 같이 추가한다.
ssh2222 = C:/Program Files/TortoiseSVN/bin/TortoisePlink.exe -P 2222 -i "d:/keys/mykey.ppk"

2222는 ssh 포트가 다를 경우 지정하는 것이고
-i 뒤에 키파일을 지정한다.

위와 같이 한 후 
svn+ssh2222://
처럼 포트를 바꾸고 패스워드를 묻지 않도록 사용할 수 있다.
---------------------------------------------------------