Archive for December, 2011

munin: Call to accept timed out

munin을 돌리고 있는데, 뭔가 이상한게 보인다. 그래프가 중간중간 끊기는거다... 그래 점검하는 호스트가 좀 많기로서니... 좀 힘들어한다는 느낌이 들었다.

여기저기 둘러봤지만 .. 글쎄 확실한 해결책이 없다. 결국은 perl 소스를 조금 보기로했지..

ProcessManager.pm에서 accept를 기다리는 timeout이 아래처럼 10으로 되어있는데, 간딘히 360으로 해놨다. 우선 로그보니 timeout 메시지는 안나온다.

#accept_timeout  => 10,
accept_timeout  => 360,


su 명령을 wheel 그룹만 허용하기..

$ chown root.wheel /bin/su
$ chmod 4750 /bin/su
$ chattr +i /bin/su

근데 말이다.. su 명령은 아예 막고, sudo만 사용하게 하는건 어떨까?


keepalived를 설정하는데… vrid가 중복이네??

keepalived를 설정하는데 receive an invalid ip number count associated with VRID! 라는 로그가 계속 나온다. 말그대로 VRID로 받은 패킷의 IP 갯수와 설정된 IP 갯수가 다르다는데, 엇뜬 이해하기가 힘들다.

고민해보니깐.. VRID가 중복된 것 아닐까? 이 네트웍에 다른 vrrp가 동작하는 것이 아닐까하고 VRID를 바꾸니까 동작한다.

금방 바꿔서 문제를 해결했지만, 이런 문제를 사전에 인지하려면 뭔가 방법이 필요했다. 현제 네트웍에서 사용중인 VRID를 모두 알 수 없을까??? 여기저기 자료를 찾아봤지만, 이런 문제에 대한 직접적인 해결 방법은 찾을 수 없었다.

그러다가 눈에 띈게 vrrp 프로토콜은 224.0.0.18로 boradcasting한다는 사실.  그리고 keepalived에서 vrrp는 기본 설정상 1초에 1번 vrrp advertising을 한다는 것.. 라서 해당 224.0.0.18와 통신하는 것을 패킷을 보면 vrid가 나오겠구나 생각하고 해봤는데..

$ sudo tcpdump -i eth0 host 224.0.0.18
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
19:17:30.574665 IP 192.168.0.199 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 1, prio 101, authtype simple, intvl 1s, length 28
19:17:30.574676 IP 192.168.0.199 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 1, prio 101, authtype simple, intvl 1s, length 28
19:17:30.574770 IP 192.168.0.199 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 2, prio 101, authtype simple, intvl 1s, length 24
19:17:30.574773 IP 192.168.0.199 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 2, prio 101, authtype simple, intvl 1s, length 24

다행이도 생각했던 것 처럼 나온다. 그래서 아래처럼 5초 동안 VRIP를 감사하면 현재 네트웍의 VRIP가 다 나오고 여기서 없는 것으로 피해가면 된다!!

sudo timeout 5 tcpdump -i eth0 host 224.0.0.18 2>&1 | grep vrid | awk '{print $9}' | sort | uniq

VMWare에서 Xen설치할때 vmnet 어쩌구저쩌구..

Ubuntu에서 VMWare를 사용하고 있었습니다. 원래는 VirtualBox를 사용했었지만, 그녀석이 안의 가상머신에서는 가상화 기술(vmx or svm)을 지원해주지 않아서 말이죠..

그런데 VMware에 Xen을 설치하고 재부팅하면 네트웍 카드를 promiscuous로 허용하지 않는다고 메시지가 뜹니다. 보안때문이라나.. 간단히 아래처럼 하면 됩니다.

$ chmod a+rw /dev/vmnet*

이렇게하면 되기는 하는데, 시스템을 리부팅하면 /dev/vmnet*의 권한이 다시 재설정됩니다. ㅡㅡ 그래서 또 권한을 주고 udev에 등록을.~

$ cp -a /dev/vmnet* /lib/udev/devices

삽질 끝~


screen 상태표시줄에 세션 이름 표시하기

screen을 여러 세션을 쓰다보면 현재 어떤 세션에 있는지 헷갈린다. 지금만 봐도 세션을 열어놓은게 5개정도이고, 거기서 한 4~5개씩 윈도우를 열어넣고 있으니...

그래서 세션 이름을 상태줄에다 표시하는 방법을 찾아봤다.

screen이 실행하면 $STY 환경변수에 세션이름을 가지고 있는데, 이걸 표시하면 된다. 그런데 이걸 screenrc에 넣으면 표시가 안된다. 그래서 screen -X로 스크린에 명령을 직접 내리는 방식으로 변경했다.

if [ "$STY" != '' ]; then
_STY=`echo $STY | sed 's/^[0-9]*\.//'`
screen -X hardstatus alwayslastline "$_STY] %-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"
fi

훨씬 쾌적한 screen life!


커널 옵션 한방에 수정하기

요즘 Xen을 가지고 놀고 있습니다.

아직 공부하는 중이라 커널 컴파일을 자주하게 되는데 이럴때 정말로 귀찮은게 커널의 옵션들을 일일이 맞춰주는 겁니다. 정말로 귀찮습니다.

그래서 걍 스크립트질로 처리해버렸네요~~

#!/bin/sh
# Xen 관련 설정들: http://wiki.xensource.com/xenwiki/XenParavirtOps 참고
configs="CONFIG_PARAVIRT=y
CONFIG_XEN=y
CONFIG_PARAVIRT_GUEST=y
CONFIG_PARAVIRT_SPINLOCKS=y
CONFIG_HVC_DRIVER=y
CONFIG_HVC_XEN=y
CONFIG_XEN_FBDEV_FRONTEND=y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_XEN_NETDEV_FRONTEND=y
CONFIG_XEN_PCIDEV_FRONTEND=y
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=y
CONFIG_XEN_FBDEV_FRONTEND=y
CONFIG_XEN_XENBUS_FRONTEND=y
CONFIG_XEN_SAVE_RESTORE=y
CONFIG_XEN_GRANT_DEV_ALLOC=m
CONFIG_XEN_TMEM=y
CONFIG_CLEANCACHE=y
CONFIG_FRONTSWAP=y
CONFIG_XEN_SELFBALLOONING=y
CONFIG_X86_IO_APIC=y
CONFIG_ACPI=y
CONFIG_ACPI_PROCFS=y
CONFIG_XEN_DOM0=y
CONFIG_PCI_XEN=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XENFS=y
CONFIG_XEN_COMPAT_XENFS=y
CONFIG_XEN_SYS_HYPERVISOR=y
CONFIG_XEN_GNTDEV=y
CONFIG_XEN_BACKEND=y
CONFIG_XEN_NETDEV_BACKEND=m
CONFIG_XEN_BLKDEV_BACKEND=m
CONFIG_XEN_PCIDEV_BACKEND=m
CONFIG_XEN_PRIVILEGED_GUEST=y
CONFIG_XEN_BALLOON=y
CONFIG_XEN_SCRUB_PAGES=y
CONFIG_XEN_DEV_EVTCHN=y
CONFIG_XEN_GNTDEV=y
"
# Xen 추가 설정
configs="$configs
CONFIG_XEN_BLKDEV_TAP=y
CONFIG_XEN_BLKDEV_BACKEND=y
"

# initramfs에 필요한 설정들
configs="$configs
CONFIG_MD_RAID0=y
CONFIG_MD_RAID1=y
CONFIG_MD_RAID10=y
CONFIG_MD_RAID456=y
"

config_script='scripts/config'

for _config in $configs ; do
        key=`echo $_config | awk 'BEGIN {FS="=";} {print $1}'`
        value=`echo $_config | awk 'BEGIN {FS="=";} {print $2}'`

        case "$value" in
                y)
                        $config_script --enable $key
                        ;;
                m)
                        $config_script --module $key
                        ;;
                *)
                        $config_script --disable $key
        esac
done
  • Update: BLKDEV_TAP 추가 (blktap2 디바이스 사용

netsted screen

screen 안에서 screen을 사용할 경우(방화벽을 통해서 들어가는 시스템... 등등)에 ctrl + a를 누르면 최초 실행한 screen이 이 명령을 먹어버린다.

그럼 screen 안의 screen에는 어떻게 명령을 내릴까? 아주 간단하다.

Ctrl + a, a 명령으로 내리면 된다. screen이 netsted된 횟수만큼 a를 누르고 다음 명령~

ㅋㅋ


  • Copyright © 1996-2010 Your wish is my command. All rights reserved.
    iDream theme by Templates Next | Powered by WordPress