2014년 12월 20일 토요일

CentOS 6.5에 Open vSwitch 설치

잘 정리된 설명서가 있으면,10분이면 할 일을 하루 종일 자료 찾느라 시간을 허비하고 있다.
다음에 빠르게 Open vSwitch를 설치하기 위해서 메모를 해두어야겠다.

* Open vSwitch Source Code 다운로드 하기
 wget 명령으로 openvswitch source를 다운로드한다.
  # wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz

* 압출을 풀고, openvswitch-2.3.1 디렉토리에서 아래의 명령을 수행한다.
  # boot.sh
  # configure--with-linux=/usr/modules/`uname -r`/build    (중요: 이 경로가 잘못되면, 나중에 kernel module이 설치되지 않는다)

  # make
  # make install 
  # ln -s /usr/src/kernels/`uname -r`/include/linux generated   (중요: 이 부분이 매뉴얼에는 없다. 원래 필요없는 작업인데, make 파일이 잘못만들어져서 임의로 수작업을 해야 한다. generated 디렉토리를 만들지 않으면, 아래의 make modules_install 명령이 실패한다.)
  # make modules_install
  # rmmod  openvswitch    (참고: 꼭 필요한 절차는 아니다. Old Version을 remove하기 위해서)
  # modprobe  openvswitch

* kernel module이 잘 insert되었는지 확인한다.
  # dmesg
    ... ( 중간 생략 ) ...
    openvswitch: Open vSwitch switching datapath 2.3.1, built Dec 20 2014 16:33:44

* 새로 빌드한 kernel module의 정보를 확인한다.
 # modinfo openvswitch
    filename:       /lib/modules/2.6.32-431.1.2.0.1.el6.x86_64/extra/openvswitch.ko
    version:        2.3.1
    license:        GPL
    description:    Open vSwitch switching datapath
    srcversion:     B6EF1BA3A4922A40ED09655
    depends:        libcrc32c
    vermagic:       2.6.32-431.1.2.0.1.el6.x86_64 SMP mod_unload modversions
    parm:           vlan_tso:Enable TSO for VLAN packets (int)


* Open vSwitch가 사용할 DB를 초기화한다.
  # mkdir -p /usr/local/etc/openvswitch
  # ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema   (위에서 make 명령을 수행했던 source package directory에서 수행해야 한다. 안 그러면, 실패한다.)


* Open vSwitch의 설정 DB를 기동한다.
  # ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock \
                 --remote=db:Open_vSwitch,Open_vSwitch,manager_options \
                 --private-key=db:Open_vSwitch,SSL,private_key \
                 --certificate=db:Open_vSwitch,SSL,certificate \
                 --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \
                 --pidfile --detach

  (참고로, 위와 같이 옵션을 추가하면 SSL을 사용하겠다는 것이다)

* DB를 처음 생성했으므로, 초기화한다.
  # ovs-vsctl  --no-wait  init

* Open vSwitch 데몬을 기동한다.
  # ovs-vswitchd --pidfile --detach
  2014-12-20T08:26:52Z|00001|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connecting...
  2014-12-20T08:26:52Z|00002|reconnect|INFO|unix:/usr/local/var/run/openvswitch/db.sock: connected


여기까지하면, Open vSwitch가 동작한다. 단, 구체적인 switch 설정을 하지 않았기 때문에 일을 하지는 않는다.
아래와 같이 간단하게 bridge network을 구성해보자.

* Bridge br0 라는 것을 생성한다. 그리고 Bridge br0에 물리적 NIC를 binding한다.
  # ovs-vsctl add-br br0
  # ovs-vsctl add-port br0 em1
  # ovs-vsctl add-port br0 vmnet8
  # ovs-vsctl show
    Bridge "br0"
        Port "vmnet8"
            Interface "vmnet8"
        Port "br0"
            Interface "br0"
                type: internal
        Port "em1"
            Interface "em1"


 이것으로 간단한 Bridge Network까지 구성했다.

2014년 12월 19일 금요일

Bare-metal and hosted Hypervisor 비교 (Virtual Machine Manager 비교)

소규모로 가상화 환경을 만들어서, Test Environment를 만들려고 보니 어떤 Hypervisor를 설치해야 할지 잘 모르겠다.
그래서 Hypervisor를 비교하는 작업부터 하고, 제일 나에게 맞는 Hypervisor를 선택해야지.


지금까지 세상에 나온 Hypervisor는 Bare-metal vertualization 방식과 Hosted virtualization 방식이 있다.

Bare-metal virtualization hypervisor 방식은 Hypervisor가 별도의 OS 없이 직접 Hardware resource를 제어한다. 그래서 성능이 잘 발휘되고, 안정성이 높다.대규모 Data Center에서 Mission Critical Job을 수행하는 경우라면, Bare-metal 가상화 방식이 제격이다.
그러나 범용 OS가 아니라서 Hardware에 대한 device driver 지원이 제한적이다. 이런 이유 때문에 Hardware를 선택할 때부터 잘 고려해야 한다.

Hosted virtualization hypervisor는 Hypervisor가 설치될 Machine에 별도의 OS가 설치되어 있어야 한다.
즉, Hosted hypervisor는 Application처럼 동작한다. 따라서 Hardware 특성을 타지 않고, OS가 추상화한 Device를 사용할 수 있다. 따라서 호환성(Compatibility)이 높다.
그러나 Hosted hypervisor는 VM이 항상 Host OS를 경유하여 Hardware resource에 접근하기 때문에 성능이 떨어진다.
이런 이유 때문에 Data Center에서는 Hosted hypervisor를 사용할 수 없고, 대체로 PC Computer에서 사용된다.

< 출처: http://www.xenproject.org/developers/teams/hypervisor.html >



위에서 살펴본 2가지 방식의 Hypervisor의 각 제품을 자세히 살펴보면 아래와 같다.

[ Bare-metal Virtualization Hypervisors ]

* VMWare ESX and ESXi
나는 5년 전부터 VMWare Player로 VM을 사용해왔기 때문에, 거부감없이 VMWare ESX를 사용할 수 있을 것 같았다.
게다가 VMWare가 hypervisor 기술분야에서 제일 완성도 높은 기술을 구현하고 있기 때문에 제일 관심이 간다. 그러나, VMWare ESX는 많이 비싸다.
ESXi라는 무료 버전이 있지만, 유료 버전에 비해서 사용할 수 있는 기능이 극히 드물다.
그래도 간단한 기능만 테스트해볼 거라면, ESXi를 설치해서 VM을 올리는 것도 좋은 생각같다.

* Microsoft Hyper-V
완성도 높고, 대중적이라서써볼까 했는데, 비싸다고 하네.
그리고 Linux에서 주로 Test를 하는 나로써는 굳이 Microsft Hyper-V를 사용할 일이 없을 것이다.

* Citrix XenServer
Open Source Project인 Xen 에서 출발한 제품이다. Open Source Project에서 차용한 기술이라 핵심 기술은 무료이다. 그러나 Citrix에서 추가한 기능은 돈을 내야 쓸 수 있다.
  유료 기능:
    - VM Migration
    - Resource를 운영중에추가할당하기
    - 실시간 성능 모니터링
    - Open vSwitch 내장됨 (built-in)
결국 무료로 테스트를 해보려면, Xen을 쓰는 것과 별만 다르지 않다.
곧 Xen을 내 Linux 장비에 설치해봐야겠다.

* Oracle VM  <-- 추천 (Recommend)
Oracle VM도 Xen Project에서 출발했다.
Oracle VM은 단순하고, 꾸밈이 별로 없다. 그래서 초보자도 쉽게 접근할 수 있다. 게다가 무료이다.
기능면에서는 Citrix XenServer나 VMWare ESX보다 떨어지지만, 꼭 Commercial Machine에 쓸게 아니라면 (연구용으로) 괜찮은 제품이다.

* Xen

Citrix 회사가 Xen이라는 Open Source Project로 시작했다.
지금은 여러 회사가 지원과 투자를 하고 있다. 아직까지는 Citrix 회사의 50% 정도의 공헌을 하고, 나머지 장비 제조사와 대형 SW 제조사들이 지원하는 형국이다.
CentOS 6.4, CentOS 7 에 Xen4 + XAPI가 탑재되어 있다.
임의로 설치 또는 Upgrade하려면, 아래와 같이 하면 된다.
  " yum install xen "



[ Hosted Virtualization Hypervisors ]

* VMWare Player
무료이고, 아주 많은 사용자가 있다.
VM을 여러개 수행할 수 없는 제약이 있다.
설명서에는 VM을 생성할 수 없고, 재생(Play)만 할 수 있다고 하는데, 이 문장의 정확한 의미를 모르겠다.

* VMWare Workstation
VMWare Player와 비슷하고, 몇 가지 기능이 추가된다.
단, 유료이고 대략 20만원 정도의 라이센스 비용을 지불해야 한다.


* Oracle VM VirtualBox
나는 대략 8년 정도 이 제품을 사용해왔고, 지금까지 만족스럽게 사용하고 있다.
무료(Free License)라는 것이 믿기지 않을 정도로 완성도 높으면서 필요한 기능을 다 제공한다.
더욱 마음에 드는 것은 VMWare에서 생성한 VM을 Oracle VirtualBox가 재생(play)할 수 있다. 즉, 타사 제품과의 호환성이 높다.
내 추측이지만, XenProject의 부수물이 VirtualBox에 포함되어 있을 테니까, 나중에 Xen으로 갈아타더라도 거부감이 적을 것 같다.


*Redhat Enterprise Virtualization (KVM)
Kernel-based Virtual Machine(KVM)은 Bare-metal virtualization과 hosted virtualization hypervisor 특성을 모두 가지고 있다.
KVM은 이름이 의미하는 것처럼 Linux Kernel에 탑재된 Hypervisor이기 때문에, VM이 Host OS를 경유하지 않고, Hardware resource에 접근한다.
유료라는 것과 다른 Hypervisor보다 적은 기능을 제공하는 단점이 있다.


그 외에도 몇 가지 제품이 더 있지만, 워낙 사용자가 없는 제품이라서 언급하지 않겠다.


지난 8년간 Hosted Hypervisor를 많이 써왔기 때문에, 이제부터 Bare-metal hypervisor를 사용할 계획이다.
Bare-metal hypervisor를 사용하면서 느낀 점이 있으면 또 추가로 글을 작성하겠다.








2014년 12월 18일 목요일

돼지의 동물복지

나의 형이 상무이사로 재직중인 돈마루 라는 회사는 동물복지에 상당한 투자를 한다.
동물복지라는 것이 참으로 신선한 발상이다. 단, 소비자 입장에서는 비싼 댓가를 치러야 먹을 수 있을 것이다.
50년 전으로 거슬러 올라가서, 볏짚과 풀을 뜯어 먹이고 시골의 마당에서 키운 가축을 생각해보면, 정말 그 가격은 어마어마했었다.
즉, 좋은 환경에서 자란 가축을 매입하기 위해서는 그에 상응하는 비용을 지불하는 것이 지당하다.
우리 형이 하는 동물복지 방식의 목축이 계속 잘 되면 좋겠다.

 KBS 뉴스 "다음 달부터 돼지도 ‘동물복지’ 적용"

[C Language] MACRO

C언어의 매크로에 관한 예제이다. 매크로 함수의 인자로 들어온 Symbol 자체를 Value 처럼 넘겨받기 위해서는 아래와 같이 ## 이라는 특수문자를 사용해야 한다. [Example Source Code] #define MY_SAMPLE_MACRO(class_num, class_type) sample_func(##class_num, ##class_type) int main(void) { MY_SAMPLE_MACRO(123, RED); return 0; }

NTFS 파티션을 CentOS 리눅스로 MOUNT 하기


< NTFS 파티션을 CentOS 리눅스로 마운트 하기 >
1. 밑에 3 설치를 위해 yum-priorities 먼저 설치
[root@localhost ~]# yum install yum-priorities -y
2. priorities.conf 수정
[root@localhost ~]# vi /etc/yum/pluginconf.d/priorities.conf
[main]
enabled = 1
check_obsoletes = 1
priority=2

3. rpmforge 설치
[root@localhost ~]# rpm -ivh 
[설치경로]
설치경로 찾기
- rpmforge 시작하는것중 가장 최근것의 파일명 복사해서 앞의 주소와 붙인다.
- 최종경로를 복사해서 위의 [설치경로] 붙여넣고 실행

4. 설치된 rpm 으로 패키지 업데이트
[root@localhost ~]# yum check-update
5. “fuse”, “fuse-ntfs-3g”, “dkms”, “dkms-fuse” 설치
[root@localhost ~]# yum install fuse fuse-ntfs-3g dkms dkms-fuse -y
6. 마운트용 디렉토리 생성
[root@localhost ~]# mkdir /mnt/window
7. fdisk -l 마운트할 파티션정보 찾기
[root@localhost ~]# fdisk -l
=> HPFS/NTFS 으로 표시되는 /dev/sda[넘버] 찾는다.
8. ntfs-3g 타입으로 마운트 실행
[root@localhost ~]# mount -t ntfs-3g /dev/sdb1 /mnt/window
9. 마운트한 파티션 사용
[root@localhost ~]# cd /mnt/window
[root@localhost window]# ls -al

TCPDUMP로 HTTP Packet (웹 페이지) Decode, Tshark(Text Wireshark) 사용법

Windows PC에서는 Wireshark이 Network Packet을 예쁘게 출력해주지만,
Linux 서버에 telnet, ssh 접속해서 tcpdump를 하면 정말 보기 어렵다.
원격 서버에 telnet, ssh 접속해서 Network Packet을 예쁘게 출력하려면 2가지 방법이 있다.

(방법1) tshark 명령 사용
tshark을 사용하면, Network Packet이 정말 예쁘게 출력된다.
만약, CentOS를 사용하는 User라면 아래와 같이 wireshark패키지를 설치한다.

  yum install wireshark

그런 후에 아래와 같이 tshark 명령을 수행한다. (-V 옵션이 decode를 하라는 뜻이다)


# tshark -i eth0 -nV port 53

Frame 10: 387 bytes on wire (3096 bits), 387 bytes captured (3096 bits) on interface 0
(중간 생략)
Ethernet II, Src: 00:08:5a:00:40:78 (00:08:5a:00:40:78), Dst: f0:1f:af:dc:ae:3b (f0:1f:af:dc:ae:3b)
    Destination: f0:1f:af:dc:ae:3b (f0:1f:af:dc:ae:3b)
        Address: f0:1f:af:dc:ae:3b (f0:1f:af:dc:ae:3b)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Source: 00:08:5a:00:40:78 (00:08:5a:00:40:78)
        Address: 00:08:5a:00:40:78 (00:08:5a:00:40:78)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Type: IP (0x0800)
Internet Protocol Version 4, Src: 168.126.63.1 (168.126.63.1), Dst: 1.235.191.65 (1.235.191.65)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)
    Total Length: 373
    Identification: 0x942b (37931)
    Flags: 0x00
        0... .... = Reserved bit: Not set
        .0.. .... = Don't fragment: Not set
        ..0. .... = More fragments: Not set
    Fragment offset: 0
    Time to live: 56
    Protocol: UDP (17)
    Header checksum: 0x44a1 [correct]
        [Good: True]
        [Bad: False]
    Source: 168.126.63.1 (168.126.63.1)
    Destination: 1.235.191.65 (1.235.191.65)
User Datagram Protocol, Src Port: 53 (53), Dst Port: 61224 (61224)
    Source port: 53 (53)
    Destination port: 61224 (61224)
    Length: 353
    Checksum: 0x8acc [validation disabled]
        [Good Checksum: False]
        [Bad Checksum: False]
Domain Name System (response)
    [Request In: 9]
    [Time: 0.003702000 seconds]
    Transaction ID: 0x0898
    Flags: 0x8180 Standard query response, No error
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .0.. .... .... = Authoritative: Server is not an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... .0.. .... = Z: reserved (0)
        .... .... ..0. .... = Answer authenticated: Answer/authority portion was not authenticated by the server
        .... .... ...0 .... = Non-authenticated data: Unacceptable
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 11
    Authority RRs: 4
    Additional RRs: 4
    Queries
        plus.google.com: type A, class IN
            Name: plus.google.com
            Type: A (Host address)
            Class: IN (0x0001)
    Answers
        plus.google.com: type A, class IN, addr 173.194.127.226
            Name: plus.google.com
            Type: A (Host address)
            Class: IN (0x0001)
            Time to live: 58 seconds
            Data length: 4
            Addr: 173.194.127.226 (173.194.127.226)
        plus.google.com: type A, class IN, addr 173.194.127.227
            Name: plus.google.com
            Type: A (Host address)
            Class: IN (0x0001)
            Time to live: 58 seconds
            Data length: 4
            Addr: 173.194.127.227 (173.194.127.227)
        plus.google.com: type A, class IN, addr 173.194.127.228
            Name: plus.google.com
            Type: A (Host address)
            Class: IN (0x0001)
            Time to live: 58 seconds
            Data length: 4
            Addr: 173.194.127.228 (173.194.127.228)
        plus.google.com: type A, class IN, addr 173.194.127.229
            Name: plus.google.com
            Type: A (Host address)
            Class: IN (0x0001)
            Time to live: 58 seconds
            Data length: 4
            Addr: 173.194.127.229 (173.194.127.229)
        plus.google.com: type A, class IN, addr 173.194.127.230
            Name: plus.google.com
            Type: A (Host address)
            Class: IN (0x0001)
            Time to live: 58 seconds
            Data length: 4
            Addr: 173.194.127.230 (173.194.127.230)



(방법2) tcpdump 명령의 -A 옵션 사용

tshark을 사용할 수 없는 경우라면, 아래 명령처럼 -A 옵션을 주면, TCP 또는 UDP의 Payload가 ASCII 로 출력된다.
(즉, Readable Character만 터미널에 출력함)

-A 옵션만 주면, TCP 세션을 수립하기 위한 SYN과 ACK 및 FIN도 모두 보여지기 때문에
Filter에  tcp[32:4] = 0x47455420 조건을 추가한다. ("GET "에 대한 Pointcode 값이다)


[ HTTP GET 요청 메시지만 출력 ]
tcpdump -i p2p2 -s 1500 -An 'src net 192.168.0.0/24' and dst port 80 and 'tcp[32:4] = 0x47455420'


[ HTTP GET 요청과 응답 메시지 모두 출력 ]
tcpdump -i em2 -s 1500 -An 'src net 192.168.0.0/24' and 'tcp[32:4] = 0x48545450' or 'tcp[32:4] = 0x47455420'

또는 

tcpdump -i em2 -An -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

(참고: 위의 3개 명령 중에서 3번째 줄의 명령이 제일 출력 포맷이 예쁘다)

출력은 아래와 같은 형태로 된다.

13:17:04.233515 IP 192.168.0.207.57084 > 112.175.42.43.http: Flags [P.], seq 5014:5577, ack 12833, win 324, options [nop,nop,TS val 1951264 ecr 632892989], length 563
E..g.n@.@. .....p.*+...P7..FL......D*......
... %..=GET /include/style/default/SiteHeader/new_window_icon_blue.png HTTP/1.1
Referer: http://wwwimages.adobe.com/www.adobe.com/include/style/compressed.css
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: wwwimages.adobe.com
Connection: Keep-Alive
Cookie: READER_HTTPREFERER=http%3A%2F%2Fwww%2Eadobe%2Ecom%2F; READER_NEW_USER=false; REFERER_URL=http%3A%2F%2Fwww%2Eadobe%
13:17:04.257579 IP 192.168.0.207.47618 > 112.175.13.198.http: Flags [P.], seq 7922:8258, ack 1194783, win 65535, options [nop,nop,TS val 1951270 ecr 3946957185], length 336
....P!.B3...............
...&.A..GET /_common/showThumb.asp?dire=infoMovie&fn=IMG%5F1272thumb%2Ejpg HTTP/1.1
Referer: http://kumon.co.kr/product/edu2_math.asp
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: kumon.co.kr
Connection: Keep-Alive
Cookie: ASPSESSIONIDSQQAQABD=MCBEOLEDLACODBPMGANNNFHG


13:17:04.465645 IP 192.168.0.207.47152 > a184-50-205-15.deploy.static.akamaitechnologies.com.http: Flags [P.], seq 335:669, ack 563, win 123, options [nop,nop,TS val 1951322 ecr 3284250484], length 334
E....N@.@..n.....2...0.PS.y..i.....{Z......
...Z...tGET /itunes/features/ HTTP/1.1
Referer: https://itunes.apple.com/app/id657500465?mt=8
Cache-Control: no-cache, must-revalidate
Pragma: no-cache
User-Agent: Wget/1.14 (linux-gnu)
Accept: */*
Host: www.apple.com
Connection: Keep-Alive


Cookie: ccl=fZMrl+bDAe8OE6vShNUGZA==; dssid2=3069a63c-9e19-42bf-b4bb-ec4af96b2ccd; geo=KR

How to use Remote PCAP (RPCAP) [원격 서버의 PCAP을 PC에서 실시간 모니터하는 방법)

[ Server Side ]
STEP 1. Remote Server에 rpcapd 다운
         - http://www.pawelko.net/xmedia/divers/rpcapd.gz

STEP 2. Gzip –d rpcapd.gz 압축 풀기

STEP 3. chmod 777 rpcapd 실행권한 부여

STEP 4. 기본적으로 rpcapd는 TCP 2002 포트를 사용한다
 (iptables에서 2002포트를 열어주던 아니면 # service iptables stop를 이용하여 방화벽을 끈다)

STEP 5. rpcapd –n –d


[ Client Side ]
Wireshark.exe -i rpcap://10.10.1.2/eth1 -k -B 1

Wireshark.exe -i rpcap://mcdn.aaa.com/p2p2 -k -B 1

환경변수 MALLOC_CHECK_ 설정하기

glibc

  • Red Hat 엔터프라이즈 리눅스 4에 포함된 버전 glibc는 데이터 손상을 최대할 빨리 검색하여 방지할 수 있도록 내부 정상 감시 기능을 추가로 수행합니다. 데이터 손상이 감지되면 다음과 같은 메시지가 표준 오류로 나타날 것입니다 (만일 표준 오류(stderr)이 열려있지 않은 경우에는 syslog으로 기록됩니다):

    *** glibc detected *** double free or corruption: 0x0937d008 ***
    또는
    *** glibc detected *** invalid pointer free: 0x0937d008 ***

    이 오류 메시지를 생성하는 프로그램은 디폴트로 제거(kill)됩니다; MALLOC_CHECK_ 환경 변수를 이용하여 오류 메시지 생성 여부를 선택하실 수 있습니다. 다음과 같은 설정이 가능합니다:
    • 0 — 오류 메시지를 생성하지 않고, 프로그램을 제거하지 않음
    • 1 — 오류 메시지를 생성하지만, 프로그램을 제거하지 않음
    • 2 — 오류 메시지를 생성하지는 않지만, 프로그램은 제거함 <== 기본값
    • 3 — 오류 메시지를 생성하고 프로그램을 제거함

    알림

    만일 MALLOC_CHECK_ 변수를 0이 아닌 다른 값으로 설정할 경우, glibc는 기본 설정 보다 광범위한 검사를 수행하므로결국 시스템 성능에 영향을 미칠 수 있습니다.


** 쉘 설정 파일에 setenv MALLOC_CHECK_  0 으로 세팅한다.


Bourne 쉘의 경우 
MALLOC_CHECK_=0;
export MALLOC_CHECK_

Bash 쉘의 경우 
export MALLOC_CHECK_=0

csh, tcsh 쉘의 경우 
setenv MALLOC_CHECK_ 0

SU 명령 권한 및 사용자 설정

일반 사용자(User)가 root 계정으로 switch user 할 수 있으려면,
/etc/pam.d/su 파일에 아래와 같이 설정되어야 한다.



[Path: /etc/pam.d/su]
auth            include         system-auth
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         optional        pam_xauth.so

Process 분석을 위한 Command (ldd, nm)

ldd  program_name
  --> program_name이 참조하는 Library의 경로를 출력함.

nm  program_name
  --> program_name object에서 symbol list를 추출하여 출력함.

System Library 추가 및 관리 (ldconfig 명령, /etc/ld.so.conf.d 파일)

프로세스가 기동하면서 Shared Object(Library)를 참조할 수 있도록 아래와 같이 설정 절차를 거쳐야 한다.

1) /etc/ld.so.conf.d Directory에 아래와 같은 Library Directory를 지정해야 한다.
    예)  /usr/lib/qt4/lib
          /home/andrew/project1/lib
          /home/andrew/project2/lib


2) ldconfig 명령을 수행하여 설정 내용을 시스템에 실시간으로 반영한다.

rdate로 시스템 시각 동기화하기

인터넷에 rdate 요청을 받아주는 서버가 많이 있다.
따라서, 내가 NTP 서버를 별도로 운영할 필요없이 아래와 같이 유명한 rdate 서버쪽으로
표준시각을 요청하면 좋다.


<예시>

rdate -s time-b.nist.gov


rdate -s time-b.timefreq.bldrdoc.gov

rdate -s ptbtime1.ptb.de  (최근에 잘 안 됨)

SNAT 설정 (iptables 이용)

NAT에 대한 개념 설명은 아래의 Joinc 사이트를 참고한다.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/System_management/NAT



echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 203.247.50.3
또는
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 203.247.50.3-203.247.50.7
또는
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 203.247.50.3:1-1023

-s    옵션은 Private IP 주소 대역이다. 지정하지 않아도 무방하다.
-o   옵션은 패킷을 보내는 인터페이스 장치를 지정한다. 
      SNAT에서는 패킷을 내보내는 장치를 지정할 수 있다. 
--to 옵션은 나가는 패킷에 부여할 소스 주소이다. IP공유라면 --to는 인터넷 쪽의 공인 IP를 지정하면 된다.
       (eth0에 동적 IP 주소가 할당될 것이라면, Public IP 주소를 지정하지 않아도 상관없다.)
-j    옵션에 SNAT 대신 MASQUERADE 설정을 해도 된다.


즉, 아래와 같이 옵션을 생략하고 사용해도 문제없이 동작한다.

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

sshd 데몬의 root 접속 허용 설정

/etc/ssh/sshd_config 파일에서 아래의 항목을 yes로 설정해야 한다.

PermitRootLogin yes

Install EPEL and additional repositories


작업을 하기 전에 현재 설정된 Repository List를 출력한다.
  yum repolist   (참고: 확장자가 *.repo 인 모든 파일 정보를 출력)




[Install EPEL and additional repositories]

참고로, EPEL repository는 Extra Packages for Enterprise Linux repository를 의미한다.


아래의 wget 명령과 rpm 명령을 각각 한번씩만 수행하면 모든 설정 작업은 끝난다.
(/etc/yum.repos.d/ 디렉토리에서 파일을 수작업으로 편집하지 않아도 된다)


Install the EPEL Repository
[CentOS 6.x 또는 RedHat Enterprise 6.x]
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6*.rpm

[CentOS 7.x 또는 RedHat Enterprise 7.x]
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -Uvh epel-release-7*.rpm


Install the IUS repository (optional)
[RedHat 6.x]
wget http://dl.iuscommunity.org/pub/ius/stable/RedHat/6/x86_64/ius-release-1.0-13.ius.el6.noarch.rpm
rpm -Uvh ius-release*.rpm

또는 아래와 같이 직접 rpm 명령으로 repository를 추가할 수 있다.
rpm -Uvh http://download.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

rpm -Uvh http://mirror.premi.st/epel//6/x86_64/epel-release-6-8.noarch.rpm


[RedHat 7.x]


http://dl.iuscommunity.org/pub/ius/stable/RedHat/7/x86_64/ius-release-1.0-13.ius.el7.noarch.rpm
sudo rpm -Uvh ius-release*.rpm

자전거 페달 장착 - 나사산 방향

사람이 안장에 앉아서 페달을 바라봤을때

 - 왼쪽발 페달 : 역방향 나사산
 - 오른발 페달 : 정방향 나사산 (일반적인 나사산 방향과 같음)

즉, 오른발 페달은 일반 나사와 같이 시계방향으로 돌리면 조여진다.


백운지식문화밸리

[사업 개요]
 1992년부터 추진해온 백운호수 주변 개발사업이 국토해양부 중앙도시계획심의원회 심의를 통과했다.
 국토부는 12월 22일, 의왕시 백운호수 일대 95만 4천 제곱미터에 대한 개발계획을 심의 의결했다.

  - 주거단지 :  총 2천 400세대
    + 단독 주택
    + 4층 이하 타운하우스
    + 7층 이하 공동주택
    + 12층 이하 임대 아파트
  - 생태 공원
  - 수변 아트홀                    
  - 업무시설 : 
    + 호텔
    + 외국의료기관
    + 오피스
    + 외국인 학교, 교육문화
    + 비즈니스센터, 글로벌 컨벤션 센터
    + 문화상업시설
    + R&D센터


  - 사업시행 : 의왕도시공사
  - 사업기간 : 2012년 ~ 2015년 (예정)
  - 사업비    : 1조 3천 600억원 (추산)
  - 개발계획승인 : 2012년 상반기

 그리고 백운지식문화밸리는 아래와 같은 특징을 가지고 있다.
  - 저층 주거단지 (아파트 같은 고층 주거 단지 없음)
  - 해외동포경제무역타운 (해외 동포를 위한 주거단지와 비즈니스센터) 
     + 글로벌 빌리지 : 300가구
     + 미주, 유럽, 아시아 건축 양식으로 설계됨
     + 드라마, 영화 촬영 세트장으로도 활용할 계획
  - 공익성 차원에서 임대주택 소량 건설 (본래의 지식문화밸리 취지를 훼손하지 않는 선에서 수량 결정)


[해외동포 국제무역타운 조감도]

[분양가격 / 청약 자격]
 수요자 입장에서 가장 중요한 것은 가격이 아닐까 생각한다. 그리고 청약 자격이 그 다음으로 중요할 것이다.
  - 가격 예측
      + 현재 공개된 분양 가격은 공급면적 110 제곱미터 - 4억 6천만원 선이다. (비싸다 ㅜㅜ)
      + 2014년에 청약접수를 한다고 가정하면, 평당 1,500만원 선에서 분양할 것같다.
      + 왜냐하면, 주변 신축 아파트 시세가 그 정도 하고
      + 용적률이 1종/2종 주거지 선에서 결정되므로 대지지분이 크기 때문이다.
      + 위의 이유만 가지고 보면, 평당 2,000만원도 갈 것 같지만,
      + 청계지구, 포일지구의 청약 당시 분위기에서도 보았듯이
      + 무리한 가격을 요구하지 않았다. 백운지식문화밸리도 비슷한 분위기일 것 같다.
  - 청약 자격
      + 솔직한 심정은 포일지구 때와 비슷하게 국민주택규모의 주택은 의왕시민에게만
      + 청약자격을 주면 좋겠다는 생각이다.
      + 그리고 실질적인 청약 당첨 자격은 주택청약통장 9년 ~ 10년은 되어야 안전하게 당첨이 될 것 같다.
      + 물론 이것도 분양가격에 따라 변수가 크다. 분양가격이 높으면 청약 경쟁률이 떨이지고
      + 따라서 청약통장 납부 횟수가 적어도 당첨되기 쉽다. (보통 6년만 넘어도 될 것 같다)


[기타]
타운하우스(고급빌라) 분양현황과 관련해 추진위원회의 현해성 위원은 "현재 총300세대를 분양하고 있는데 신청자가 이미 초과된 상태"라며 "입주 의향금 1천만원(분양가 5억원)을 납입한 신청자는 13일 현재 총 220세대로, 전체 분양신청자의 70%를 차지하고 있다"고 말했다.


[국제무역타운 홍보용 이미지]



[해외동포경제무역타운 - 아시아타운 조감도]


 나머지 더 자세한 정보는 의왕 시청을 직접 방문하여 알아봐야겠다.