시작부터 이야기 하면 이것은 /proc 에 관한 이야기이다

mount -t proc proc /mnt/gentoo/proc 명령은 젠투를 설치한 사람이라면 한번씩은 사용하는 명령어인데

이 proc 라는건 현재 실행중인 리눅스 시스템의 각종 상태를 보여주는 가상 파일시스템이다.
(실제로는 파일이 아니라, 상태를 파일화 해서 보여주는 것이라는 뜻)

상태를 보여준다는 측면도 있지만 실제로 이 상태가 커널의 파라미터로써 현재 동작하고 있는 커널의 설정값으로 이해한다면, 이 값을 변경해서 커널의 동작을 변경함으로써 시스템을 조절할 수 있음 역시 알 수 있을 것이다.

예를들면 /proc/sys/net/ip_forward 의 내용을 1 로 변경하여 ip 프로토콜의 포워딩을 가능하게 설정할 수 있다.
(리눅스로 라우터를 만든다면 반드시 패킷포워드가 설정되어야 하므로 필수적인 셋팅이다)

다만 실제 파일이 아니며, 커널이 특정 작업의 결과를 반영하여 보여주는 것 이므로 에디터로 내용을 바꾸는 것은 그다지 좋은 방법이 아니다.

그래서 리다이렉션등을 사용해서 변경해 주는것이 좋음을 잊지 말자.


이정도가 내가 원문에서 가장 기억에 남는 내용이고
더 자세한 정보와 팁은 아래 원문을 참조하길 바란다.

출처 : ibm

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

실행중인 리눅스 관리하기
/proc 파일시스템은 리눅스의 탁월한 특징 중 하나이다. 이를 통해 머신을 끄고 재부팅 하지 않고 OS의 상세한 부분들을 관리할 수 있다.

상업적으로 매우 중요한 시스템을 관리해 본 사람이라면 업타임(uptime)의 가치를 안다. 역으로 말하면 다운타임(downtime)으로 인해 사용자들로부터 듣게될 원성으로 인한 두통을 알 것이다. 기업이 유닉스 서버를 실행하는 이유 중 하나는 유닉스의 신뢰성과 안정성 때문이다. 주의 깊게 관리된다면 한 동안 재부팅 할 필요 없이 지내게 된다. 게다가 서버를 실행상태로 유지하면서 커널 레벨에서 관리 작업도 수행할 수 있다. 하드웨어를 업그레이드하기 위해 시스템을 재시작 해야 하거나 누군가가 전원 코드를 실수로 뺄 수 있다면 서비스에 피해를 주지 않고 관리작업을 수행하는 것을 알아두는 것이 좋다.

이 글에서는 재부팅 없이 다양한 관리 작업을 수행하고 시스템을 변경할 수 있는 방법이 소개되어 있다. 리눅스는 시스템을 실행 상태로 유지 시킨 채 리눅스 기저의 값과 설정을 변경하는 다양한 방법을 제공한다.

Note: 본 자료는 2.4 레벨 커널 기준이다. 일부 옵션과 기능은 다른 커널 버전과 다를 수 있다.

실행중인 커널 매개변수 변경하기

리눅스는 시스템이 실행중인 동안 커널/시스템을 재부팅 할 필요 없이 관리자들이 커널을 변경할 수 있는 깔끔한 방법을 제공한다. 이는 /proc 이라고 하는 가상 파일시스템으로 수행된다. Linux Gazette는 /proc에 관한한 가장 간단하고 쉬운 레퍼런스를 제공한다. (참고자료) 기본적으로 /proc 파일시스템은 실행 커널을 볼 수 있는 시각을 제공한다. 이는 퍼포먼스를 감시하고 시스템 정보를 발견하며 시스템이 어떻게 설정되었는지를 파악하고 그 설정을 변경할 때 유용하다. 이러한 파일시스템을 가상 파일시스템(virtual filesystem)이라고 한다. 실제 파일시스템이 아니기 때문이다. 이것은 일반적인 파일시스템 구조에 어태치된 커널에 의해 제공되어 이에 액세스 할 수 있게 한다.

시스템이 실행중일 때 실행중인 커널 매개변수를 변경하는 몇 가지 방법이 있다는 사실은 커널 설정 변경에 상당한 힘과 유연성을 시스템 관리자들에게 제공해준다고 볼 수 있다. 이러한 유형의 구현은 일부의 리눅스 커널 개발자들에게 영감을 주는 생각이었다. 하지만 힘도 너무 크면 오히려 나쁠 수도 될 수 있지 않은가? 가끔 그렇다. /proc 파일시스템에 있는 무엇인가를 변경한다면 변경하려는 것이 무엇이고 시스템에 미칠 영향에 대해 반드시 알아야한다. 이들은 실제로 유용한 기술이지만 잘못된 행동은 원치 않는 결과를 가져다 줄 수 있다. 이런 작업이 처음이거나 변경으로 인한 결과를 확신하지 못한다면 중요하지 않는 머신에 연습을 먼저 하기 바란다.

어떻게 변경 할 것인가?

우선 커널에 변경을 가하지 않는 방법을 생각해보자. /proc 파일시스템으로 곧바로 뛰어들어 텍스트 에디터에 있는 파일을 열고 변경을 수행하고 파일을 저장하면 안될 두 가지 중요한 이유가 있다:

  • 데이터 무결성: 모든 파일들은 실행 시스템을 나타내고 있고 커널이 언제라도 이들 파일 중 어떤 것이라도 변경할 수 있기 때문에 시스템이 데이터를 실행중일 때 에디터를 열고 데이터를 변경한다면 저장을 한다고 해도 커널이 기대하는 것과 다를 수 있다.
  • 가상 파일: 모든 파일들은 실제로 존재하는 것이 아니다. 저장된 데이터가 어떻게 동기화 될 수 있겠는가?

따라서 이러한 파일들을 변경할 때의 답은 에디터를 사용하지 않는 것이다. /proc 파일시스템에 있는 모든 것을 변경할 때 echo 명령어를 사용하고 명령행에서 온 아웃풋을 /proc 밑의 선택된 파일에 리다이렉트 해야한다:

echo "Your-New-Kernel-Value" > /proc/your/file

이와 비슷하게 /proc 에서 정보를 보고싶다면 그 목적에 맞게 설계된 명령어를 사용하거나 cat 명령어를 사용한다.

무엇을 변경 할 것인가?

/proc을 잘 사용하기 위해 커널 해커가 될 필요가 없다. 이 파일시스템의 구조에 대한 기본적인 이해만으로도 충분히 도움이 된다.

/proc에 있는 각각의 파일들은 매우 특별한 파일 권한들을 할당받았고 특별한 사용자 아이디에 의해 소유된다. 이는 매우 신중하게 수행되어 정확한 기능이 관리자와 사용자들에게 보일 수 있도록 한다. 특별한 권한이 개별 파일에 어떤 일을 수행하는지를 다음과 같이 요약했다:

  • Read-only: 사용자가 변경할 수 없는 파일: 시스템 정보를 나타내는데 사용됨.
  • Root-write: 파일이 /proc에서 쓰기가 가능하다면, 루트(root) 사용자만 쓸 수 있음.
  • Root-read: 일반적인 시스템 사용자는 볼 수 없고 루트 사용자만 볼 수 있는 파일.
  • Other: 여러가지 이유로 위 세 개의 경우가 섞인 것도 있다.

/proc에 대한 매우 광범위한 일반화는 /proc/sys 디렉토리를 제외하고 대부분 읽기 전용이라는 것을 알게 될 것이다. 이 디렉토리는 대부분의 커널 매개변수를 갖고 있으며 시스템이 실행되는 동안 변경되도록 설계되었다.

Making changes

/proc의 각 파일에 대한 정확한 정보와 사용법을 이 글에서는 다루지 않겠다. 이 글에서 다루어지지 않은 /proc 파일에 대한 자세한 정보의 경우, 최상의 소스는 리눅스 커널 소스 그 자체일 것이다. 매우 훌륭한 문서까지 포함되어 있다. /proc에 있는 다음 파일들은 시스템 관리자들에게 유용하다.

/proc/scsi

시스템 관리자로서 배워두면 가장 유용할 것 중 하나이다. 사용가능한 핫스왑(hot-swap) 드라이브가 있을 때 시스템을 재부팅하지 않고 더 많은 디스크 공간을 추가하는 방법이다. /proc을 사용하지 않고, 드라이브를 삽입할 수 있으나 시스템이 새로운 디스크를 인식하도록 하려면 재부팅해야 한다. 다음과 같은 명령어로 새로운 드라이브를 시스템이 인식하도록 할 수 있다:

echo "scsi add-single-device w x y z" > /proc/scsi/scsi

이 명령어가 올바르게 작동하도록 하려면 매개변수 값인 w, x, y, z를 정확히 해야한다:

  • w는 첫 번째 어댑터가 0 인 호스트 어댑터 ID 이다.
  • x는 첫 번째 채널이 0 인 호스트 어댑터 상의 SCSI 채널이다.
  • y는 디바이스의 SCSI ID 이다.
  • z는 첫 번째 LUN이 0 인 LUN 넘버이다.

디스크가 시스템에 추가되면 이전에 포맷된 파일시스템들을 마운트하거나 포맷을 시작할 수 있다. 디스크가 어떤 디바이스가 도리지 불확실하거나 기존에 존재하는 파티션을 점검하고 싶다면 fdisk -l 같은 명령어를 사용하면 된다.

바꿔 말하면 재부팅 필요 없이 시스템에서 디바이스를 제거하는 명령어는 다음과 같다:

echo "scsi remove-single-device w x y z" > /proc/scsi/scsi

이 명령어를 입력하고 시스템에서 핫스왑 SCSI 디스크를 제거하기 전에 디스크에서 파일시스템을 먼저 언마운트한다.

/proc/sys/fs/

/proc/sys/fs/file-max
이것은 할당받을 수 있는 최대 파일 핸들 수를 지정한다. 열린 파일의 최대 수가 다 되었기 때문에 더 이상의 파일을 열 수 없다는 에러 메시지를 사용자가 받는다면 이 값을 늘려야한다. 수는 제한 없이 설정될 수 있고 파일에 새로운 숫자 값을 작성하여 변경할 수 있다.

기본 설정: 4096

/proc/sys/fs/file-nr
이 파일은 file-max와 관련이 있고 세 개의 값을 보유하고 있다:

  • 할당받은 파일 핸들의 수
  • 사용된 파일 핸들의 수
  • 최대 파일 핸들의 수
이 파일은 읽기 전용이며 정보 전달만을 목적으로 한다.

/proc/sys/fs/inode-*
"inode"라는 이름으로 시작하는 모든 파일은 "file"로 시작하는 파일과 같은 작동을 수행하지만, 파일 핸들 대신 inode와 관련된 작동을 수행한다.

/proc/sys/fs/overflowuid & /proc/sys/fs/overflowgid
이것은 16 비트 사용자와 그룹 ID를 지원하는 모든 파일시스템용 User ID (UID)와 Group ID (GID)를 갖고있다. 이 값들은 변경될 수 있지만 원하면 그룹과 패스워드 파일 엔트리를 변경하는 것이 더 쉽다.

기본 설정: 65534

/proc/sys/fs/super-max
이것은 수퍼 블록 핸들러의 최대 수를 지정한다. 마운트 한 모든 파일시스템은 수퍼 블록을 사용하여 많은 파일시스템들을 마운트하더라도 실행 될 수 있도록 할 수 있다.

기본 설정: 256

/proc/sys/fs/super-nr
현재 할당된 수퍼 블록의 수 이다. 이 파일은 읽기 전용이며 정보 전달만을 목적으로 한다.

/proc/sys/kernel

/proc/sys/kernel/acct
프로세스 어카운딩이 로그를 포함하고 있는 파일시스템 상의 빈 공간의 양을 기반을 해서 발생할 경우를 제어하는 세 개의 설정 가능한 값을 갖고있다:

  1. 빈 공간이 이 비율 이하가 되면 프로세스 어카운팅은 멈춘다.
  2. 빈 공간이 이 비율 이상이 되면 프로세스 어카운딩이 시작된다.
  3. 다른 두 개의 값이 검사되는 (초당) 빈도수.
이 파일에서 값을 변경하려면 스페이스로 분리된 숫자 리스트로 echo 해야한다.

기본 설정: 2 4 30

이 값들은 로그를 포함하고 있는 파일시스템의 빈 공간이 2% 미만이라면 어카운팅을 멈춘다. 그리고 빈 공간이 4% 이상 이라면 다시 시작한다. 검사는 30초 마다 이루어진다.

/proc/sys/kernel/ctrl-alt-del
이 파일은 시스템이 ctrl+alt+delete 키 조합을 받을 때 어떻게 반응하는지를 제어하는 바이너리 값을 갖고 있다. 두 개의 값은 다음과 같은 것을 나타낸다:

  1. 0 값은 ctrl+alt+delete가 트랩(trap)되어 init 프로그램으로 보내지는 것을 의미한다. 셧다운 명령어를 입력한 것 처럼 시스템이 정지하고 재시작하도록 한다.
  2. 1 값은 ctrl+alt+delete 트랩되지 않고 어떤 깨끗한 셧다운도 수행되지 않을 것을 의미한다. 전원을 끈 것과 같은 이치이다.

기본 설정: 0

/proc/sys/kernel/domainname
이를 사용하여 네트워크 도메인 이름을 설정할 수 있다. 기본 값이 없으며 이미 설정되었을 수도 아닐 수도 있다.

/proc/sys/kernel/hostname
기본 값이 없으며 이미 설정되었을 수도 아닐 수도 있다. 네트워크 호스트 이름을 설정할 수 있다.

/proc/sys/kernel/msgmax
이것은 하나의 프로세스에서 다른 프로세스로 보내질 수 있는 최대 메시지 사이즈를 지정한다.

기본 설정: 8192

/proc/sys/kernel/msgmnb
하나의 메시지 큐에서의 최대 바이트 수를 지정한다.

기본 설정: 16384

/proc/sys/kernel/msgmni
최대 메시지 큐 식별자의 수를 지정한다.

기본 설정: 16

/proc/sys/kernel/panic
"커널 패닉"으로 인해 재부팅 되기 전에 커널이 기다려야 할 시간을 나타낸다. 0초 설정은 커널 패닉 시 재부팅 할 수 없다.

기본 설정: 0

/proc/sys/kernel/printk
중요성을 기준으로 해서 로깅 메시지가 전송될 곳을 지정하는 숫자 값을 갖고 있다:

  1. Console Log Level: 이 값보다 높은 우선순위를 지닌 메시지들은 콘솔에 프린트된다.
  2. Default Message Log Level: 우선순위가 없는 메시지들은 이 우선순위로 프린트된다.
  3. Minimum Console Log Level: Console Log Level이 설정될 수 있는 최소(가장 높은 우선순위) 값.
  4. Default Console Log Level: Console Log Level 용 기본 값.

기본 설정: 6 4 1 7

/proc/sys/kernel/shmall
주어진 지점의 시스템에서 사용될 수 있는 총 공유 메모리 (바이트) 양.

기본 설정: 2097152

/proc/sys/kernel/shmax
커널에 허용된 최대 공유 메모리 세그먼트 사이즈 (바이트)를 지정한다.

기본 설정: 33554432

/proc/sys/kernel/shmmni
전체 시스템을 위한 최대 공유 메모리 세그먼트의 수.

기본 설정: 4096

/proc/sys/kernel/sysrq
0이 아닐 때 System Request Key를 활성화한다.

기본 설정: 0

/proc/sys/kernel/threads-max
커널에서 사용할 수 있는 최대 쓰레드의 수.

기본 설정: 2048

/proc/sys/net

/proc/sys/net/core/message_burst
새로운 경고 메시지를 작성하는데 필요한 시간 (1/10 초); 이 시간동안 받은 다른 경고 메시지들은 누락된다. 시스템을 메시지로 넘쳐나게 하려는 사람들의 "Denial of Service" 공격을 방지하는데 사용된다.

기본 설정: 50 (5초)

/proc/sys/net/core/message_cost
모든 경고 메시지와 관련된 비용의 값을 보유하고 있다. 값이 높을 수록 경고 메시지가 더욱 무시된다.

기본 설정: 5

/proc/sys/net/core/netdev_max_backlog
인터페이스가 커널이 처리할 수 있는 것보다 빠른 패킷을 받았을 때 큐에 허용된 최대 패킷 수를 제공한다.

기본 설정: 300

/proc/sys/net/core/optmem_max
소켓 당 할당된 최대 버퍼 사이즈를 지정한다.

/proc/sys/net/core/rmem_default
수신 소켓 버퍼의 기본 사이즈(바이트) 이다.

/proc/sys/net/core/rmem_max
수신 소켓 버퍼의 최대 사이즈(바이트) 이다.

/proc/sys/net/core/wmem_default
송신 소켓 버퍼의 기본 사이즈(바이트) 이다.

/proc/sys/net/core/wmem_max
송신 소켓 버퍼의 최대 사이즈(바이트) 이다.

/proc/sys/net/ipv4
모든 IPv4와 IPv6 매개변수는 커널 소스 문서에 모두 문서화되었다. /usr/src/linux/Documentation/networking/ip-sysctl.txt 파일을 참조하기 바란다.

/proc/sys/net/ipv6
IPv4와 같다.

/proc/sys/vm

/proc/sys/vm/buffermem
버퍼 메모리에 사용될 총 시스템 메모리(퍼센트) 양을 제어한다. 파일에 공간 분리 리스트를 작성하여 설정될 수 있는 세 개의 값을 갖고 있다:

  1. 버퍼에 사용될 최소 메모리 비율.
  2. 남아있는 시스템 메모리가 적을 경우 시스템 메모리가 없어질 때 시스템은 이 정도의 버퍼 메모리를 유지하려고 한다.
  3. 버퍼에 사용될 최대 메모리 비율.

기본 설정: 2 10 60

/proc/sys/vm/freepages
시스템이 다른 레벨의 빈 메모리에 어떻게 반응할 것인지를 제어한다. 공간 분리 리스트를 파일에 작성하여 설정할 수 있는 세 개의 값이 있다:

  1. 시스템에서 비어있는 페이지의 수가 최소 한계에 다다랐다면 커널에만 더 많은 메모리를 할당하도록 허용된다.
  2. 시스템에서 비어있는 페이지의 수가 이 한계 밑으로 떨어지면 커널은 공격적으로 빈 메모리로 스와핑을 시작하며 시스템 퍼포먼스를 유지한다.
  3. 커널은 이 정도의 시스템 메모리를 빈 상태로 유지할 것이다. 이 밑으로 떨어지면 커널 스와핑이 시작된다.

기본 설정: 512 768 1024

/proc/sys/vm/kswapd
커널이 메모리를 스와핑하도록 어떻게 허용할 지를 제어한다. 공간 분리 리스트를 파일에 작성하여 설정할 수 있는 세 개의 값이 있다:

  1. 커널이 한번에 빈 공간으로 둘 최대 페이지의 수. 스왑으로 대역폭을 늘리려면 이 숫자를 늘린다.
  2. 각 스왑에 대해 커널이 페이지를 빈 곳으로 유지하는 최대 시간.
  3. 한 스왑에서 커널이 작성할 수 있는 페이지의 수. 이것은 시스템 퍼포먼스에 가장 큰 영향을 미친다. 값이 클수록 스와핑 될 데이터는 많아지고 디스크 검색에 사용되는 시간은 줄어든다. 하지만 값이 너무 크면 시스템 퍼포먼스에 역효과를 가져온다.

기본 설정: 512 32 8

/proc/sys/vm/pagecache
/proc/sys/vm/buffermem과 같은 작업을 수행하지만 메모리 매핑과 일반적인 파일 캐싱을 위해 작동한다.




위로


영속적인 커널 설정

/proc/sys 디렉토리에는 어떤 커널 매개변수라도 변경할 수 있도록 편리한 유틸리티가 있다. 이를 사용하여 실행 커널을 변경할 수 있지만 시스템 부트에서 실행되는 설정 파일 또한 있다. 이것은 실행 커널을 변경하고 그들을 설정 파일에 추가시켜 시스템 재부팅 후에도 어떤 변경이라도 남아있게 된다.

이 유틸리티는 sysctl 이라고 하며 sysctl(8)의 맨페이지에 모두 문서화 되어 있다. sysctl용 설정 파일은 /etc/sysctl.conf이며 편집 될 수 있다. sysctl.conf(8)에 문서화되어 있다. Sysctl/proc/sys 밑에 있는 파일들을 변경될 수 있는 개별 변수들로 취급한다. 따라서, 예를 들어, 시스템에 허용된 최대 파일 핸들의 수를 나타내는 /proc/sys 밑의 파일인 /proc/sys/fs/file-maxfs.file-max로 나타난다.

이 예제는 sysctl 표기에서 몇 가지 이상한 점을 드러낸다. sysctl은 can only change variables under the /proc/sys 디렉토리 밑에 있는 변수들을 변경할 수 있기 때문에 변수 이름의 일부는 이 디렉토리 밑에 있는 것으로 가정되는 변수로서 무시된다. 디렉토리 분리자(슬래시, /)는 마침표(.)로 변경되었다.

/proc/sys 에 있는 파일들과 sysctl의 변수들 간 변환에 적용되는 두 개의 간단한 규칙이 있다:

  • 시작부터 /proc/sys를 누락한다.
  • 파일이름에서 슬래시를 마침표로 바꾼다.

이 두 개의 규칙으로 /proc/sys에 있는 모든 파일 이름을 sysctl의 모든 변수 이름으로 바꿀 수 있다. 변수 변환에 대한 일반적인 파일은 다음과 같다:

/proc/sys/dir/file --> dir.file
dir1.dir2.file --> /proc/sys/dir1/dir2/file

변경될 수 있는 모든 변수들을 볼수 있고 이에 더하여 sysctl -a 명령어를 사용하여 그들의 현재 설정을 볼 수 있다.

sysctl를 사용하여 변수들이 변경될 수 있는데 이는 위에 사용된 echo 메소드와 같은 작업을 수행한다:

sysctl -w dir.file="value"

file-max 예제를 다시 사용하여, 다음과 같이 두 개의 메소드 중 하나를 사용하여 이 값을 16384로 변경할 수 있다:

sysctl -w fs.file-max="16384"

또는:

echo "16384" > /proc/sys/fs/file-max

sysctl은 설정 파일을 변경하지 않음을 기억하라. 수동으로 하도록 남겨두었다. 재부팅 후에도 변경을 영속성있게 유지하려면 이 파일을 유지하라.

Note: 모든 배포판이 sysctl을 지원하는 것은 아니다. 이는 특정 시스템의 경우이며, 시스템 부팅 시 실행되도록 하려면 위에 설명된 에코와 리다이렉트 메소드를 사용하여 시작 스크립트에 이 명령어를 추가한다.




위로


시스템 설정을 위한 명령어

시스템이 실행되는 동안 다른 비커널 시스템 매개변수를 변경하고 또한 재부팅 필요 없이 설정을 발효시킬 수 있다. 이들은 주로 서비스, 데몬, 서버로 분류되며 /etc/init.d 디렉토리에 있다. 이 디렉토리에 리스팅될 수 있는 스크립트가 점점 광범위해지기 때문에 여기에서 모든 다양한 설정을 다루기엔 불가능하다. 아래 몇 가지의 예제는 /etc/init.d 스크립트가 다양한 리눅스 배포판에서 어떻게 조작될 수 있는지를 설명하고 있다. 재부팅 필요 없이 설정 데몬과 리로드를 변경하는 것은 유용한 예제이다:

  • 웹 서버 설정 변경과 Apache 리로딩
  • 원하지 않는 inetd 로그인 서비스 제거
  • 네트워크 설정 조작
  • NFS를 통한 새로운 파일시스템 반출
  • 방화벽 시작/중지

우선, 시스템 서비스를 조직하는 일반적인 방법은 직접 /etc/init.d에 있는 스크립트를 통해서이다. 이 스크립트들은 매개변수를 취하여 그들이 제어할 서비스를 조작한다. 유효한 작동이 무엇인지 보기위해 매개변수 없이 스크립트 이름을 입력할 수 있다. 일반적인 매개변수들은 다음과 같다:

  • start: 중지된 서비스 시작
  • stop: 실행되는 서비스 중지
  • restart: 멈춘 후 실행 서비스 시작. 또는 중지된 서비스 시작
  • reload: 연결을 끊지 않은 채 서비스 설정 리로드
  • status: 서비스의 실행 여부를 나타내는 아웃풋

예를 들어 다음의 명령어는 연결된 사용자 세션을 종료하지 않고 xinetd 설정을 리로드 한다:

/etc/init.d/xinetd reload

Red Hat은 service 명령어를 제공하는데 이는 서비스를 조작한다. service 명령어는 스크립트 이름을 타이핑할 때와 같은 기능을 제공한다. 신택스는 다음과 같다:

service script-name [parameter]

예를 들어:

service xinetd reload

SuSE 역시 rc 라는 명령어를 제공한다. 이는 서비스 명령어와 비슷하다. 하지만 명령어와 스크립트 이름 사이에 공간이 없다:

rc{script-name} parameter

예:

rcapache start




위로


참고자료




위로

출처 : http://www-128.ibm.com/developerworks/kr/library/l-adfly.html
,

서버 복구 완료

from My Life/한 일 2007. 3. 2. 01:50


2월28일에 모든 system 패키지를 모두 설치하여 Stage2 로 진입했었다.
이날 Stage2를 백업한 다음, 네트워크 관리도구와 기타 유틸리티, 설정을 잡고 커널다운로드까지 마쳤다

3월1일 어제 커널 컴파일과 삼바, sshd, iptables 설정을 마쳤다.
커널컴파일은 프레임버퍼를 분명 넣었는데도 인식하지 못하고 현재 일반모드로 동작하고 있다.
나머지 모든 셋팅은 성공적이다.

iptables 셋팅을 백업해 둔 것이 너무나 기쁘고 감사했다.

여기에 stage3까지 잡은 셋팅 내역을 잠시 적어둔다

1. ntp-client
2. ntop
3. samba
4. syslog-ng
5. iptables

이 정도이고 /etc/make.profile 은 2006.1의 server 프로필을 가리키도록 했다.


여튼 현재는 데이터 복원중.

지금까지 했던 서버 구축작업 중 (젠투로만!) 가장 빨리 끝났다 ^-^


하나님 감사합니다 (_ _)
,


시스템 이미지 백업본을 믿고 있던 나는, 데이터 파티션을 마운트 해 놓은것을 깜빡 하고

rm -rf / 

.......하는 만행을 저질렀다.. (터얼써억) oTL


뭐 어쩔 수 없지 재설치 하지 뭐. 하고 툭툭 털고 일어났던 것도 잠시.

분명 2006.1 의 stage1 타르볼인데. /usr/portage/scripts/bootstrap.sh 하는 중 다음과 같은 에러를 내며 뻗어버렸다!!

an't locate ExtUtils/MakeMaker/Config.pm in @INC (@INC contains: /etc/perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux /usr/lib64/perl5/vendor_perl/5.8.8 /usr/lib64/perl5/vendor_perl /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux /usr/lib64/perl5/site_perl/5.8.8 /usr/lib64/perl5/site_perl /usr/lib64/perl5/5.8.8/x86_64-linux /usr/lib64/perl5/5.8.8 /usr/local/lib/site_perl .) at /usr/lib64/perl5/5.8.8/ExtUtils/MakeMaker.pm line 7.
BEGIN failed--compilation aborted at /usr/lib64/perl5/5.8.8/ExtUtils/MakeMaker.pm line 7.
Compilation failed in require at Makefile.PL line 11.
BEGIN failed--compilation aborted at Makefile.PL line 11.

!!! ERROR: perl-core/Test-Simple-0.64 failed.
Call stack:
ebuild.sh, line 1546: Called dyn_compile
ebuild.sh, line 937: Called src_compile
ebuild.sh, line 1255: Called perl-module_src_compile
perl-module.eclass, line 136: Called perl-module_src_prep
perl-module.eclass, line 125: Called die

!!! Unable to build! (are you using USE="build"?)
!!! If you need support, post the topmost build error, and the call stack if relevant.


사용자 삽입 이미지

<<< 문제의 사건현장 #1 >>>

실제 /usr/lib/perl5/5.8.8/ExtUtils/MakeMaker 에는 Config.pm 이 없었다.

다른 Config.pm 을 넣으면 에러가 발생하는것은 물론이다.

이럴때 Perl 을 재 설치 할 수 있음 좋겠는데. 하던 차에 모 루마니아 인의 블로그에서 해답을 찾았다.

바보같이.. emerge 에는 --nodeps 라는 스위치가 있었다!! man emerge 해서 생각해 보면 쉬운 문제였는데!!  (rpm 의 -i 와 동일한 역활).

이것으로 Perl 과 Perl 에 필수적이면서 의존적인 패키지들을 설치한다.
(혹시나 해서 libperl만 설치해 봤는데 안된다.. ;ㅅ; )

emerge --nodeps gdbm libperl perl

이런다음 부트스트래핑을 진행하면 잘 된다! >_<
,

서버 깨먹다.

from My Life/한 일 2007. 2. 26. 00:53


사용자 삽입 이미지


모든 삽질은 여기서 시작되었따!! ㅠ_ㅠ




정확하게 말하면 서버를 깨먹었다기 보다도, 하드웨어 이주에 실패했다는 표현이 더 정확하겠다.

내가 패키지 설치에 실패했거나, 설정 오류나 명령어 실패로 OS 를 날린건 아니니까..
(한편으로는 그렇기도 하다 ;ㅅ; )


원래 내 개인 서버는 Pentium 3 Coopermine 에서 돌던 녀석이다 보드는 i815 고 부두 그래픽 카드에 Realtek NIC가 탑재된 녀석.

그런데 문제는 보드의 USB가 인식되지 않아 프린터 설치가 불가능했다.

/dev/lp0 로 (일반 패러렐) 어떻게든 해 보려고 했지만 USB 인터페이스가 아니면 드라이버는 소용이 없을 것이란 구글 형님의 훈수가 결국 Duron 850 으로의 이주를 결정하게 했다.

문제는 여기서 발생했다.

/etc/make.conf 에서 CFLAGS 를 march=pentium3 로 -fomit-frame-pointer 루프 어레이인가를 4까지 최적화 하고 -O3 로 설정했었다.

설마 했는데 CPU가 Duron (AMD)로 바뀌었다고 부팅이 안되는 것이다.

결국 커널 중 2.6.18 대를 버리고 2.6.14 로 부팅하니 어떻게든 부팅은 되었다.

문제는 ntop 이나 gcc, python 이 동작하질 않았고 당연하게도 portage 마저 동작하지 않았다.

(illegal instuction 에러를 냄)

소프트웨어를 하드웨어에 꼭 맞게 최적화 하는것이 양날의 검이라는 사실을 이때서야 깨달았다.
나중에 하드웨어를 새로 구성할 것을 고려하지 않았고 좋지 않은 사양이기에 최적화를 위해 한 일이 이렇게 발목을 잡을줄은 생각하지 못했다.


결국 Gentoo LiveCD 로 부팅해서 system 패키지와 glibc 를 재 컴파일/설치 하기로 방향을 잡았다.

그.러.나





chroot로 진입한 환경에서 아까 동작하지도 않던 gcc 가 동작할 리 없지 않은가.. [털썩]


이럴때는  gcc만 새로 설치해서 작업하면 좋은데,  얽히고 섥힌 라이브러리의 의존성과 해당 파일의 목록을 외워둔 것도 아니고.


프로그램 목록(파일목록) 은 그렇다 치더라도, 그것을 배치해야 할 디렉토리 위치조차 모른다는게 결정적이다.

젠투 리눅스 개발자들과 LFS로 수많은 삽질에 삽질을 거듭하시는 분들은 잘 아시겠지만.


결국 gcc를 사용하기 위해 stage1 타르볼을 덮어 써 보았다.
무슨일이 일어날지 궁금하기도 했고, 어차피 시스템 전체 백업은 되어 있으니 망가뜨리면서 공부해 보는것도 나쁜일은 아니라고 생각했다.


그 결과, 당연하게도 gcc 기동은 성공. 하지만 하나라도 emerge 시도를 하면  glibc 와 호환이 안되는 건지 /lib 디렉토리의 pthread 동적 라이브러리에서 에러를 뿜어냈다.

그 이후에는 어떤 프로그램을 실행해도, 심지어 ls 따위를 실행해도 동일한 반응.

하는 수 없이 타르볼을 다시 덮어쓰고 glibc 를 재 컴파일 했다.

이후 bootstrap 시 perl 모듈 중  (dev-perl/Locale-gettext-1.05)

* Using ExtUtils::MakeMaker
Can't locate ExtUtils/MakeMaker/Config.pm in @INC (@INC contains: /etc/perl /usr/lib/perl5/vendor_perl/5.8.8/i686-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl/5.8.7 /usr/lib/perl5/vendor_perl /usr/lib/perl5/site_perl/5.8.8/i686-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/5.8.8/i686-linux-thread-multi /usr/lib/perl5/5.8.8 /usr/local/lib/site_perl .) at /usr/lib/perl5/5.8.8/ExtUtils/MakeMaker.pm line 7.
BEGIN failed--compilation aborted at /usr/lib/perl5/5.8.8/ExtUtils/MakeMaker.pm line 7.
Compilation failed in require at Makefile.PL line 2.
BEGIN failed--compilation aborted at Makefile.PL line 2.

!!! ERROR: dev-perl/extutils-pkgconfig-1.07 failed.
Call stack:
ebuild.sh, line 1568: Called dyn_compile
ebuild.sh, line 937: Called src_compile
ebuild.sh, line 1261: Called perl-module_src_compile
perl-module.eclass, line 136: Called perl-module_src_prep
perl-module.eclass, line 125: Called die

!!! Unable to build! (are you using USE="build"?)
!!! If you need support, post the topmost build error, and the call stack if relevan

이런 오류가 나는데 일단 관련 링크 첨부

http://www.gentoo.ro/forum_viewtopic.php?19.8292


하아.. 루마니아 어다.. ㅠ ㅠ

이후 하드디스크를 초기화 하고 재 셋팅에 들어갔지만, 역시 bootstrap 시 오류 발생..

대체 뭐란 말인가..

일단 오늘의 삽질 일기는 여기까지..

나머지는 내일 불타오르도록 하자!!


,

NAT 를 linux 에서

from My Life/한 일 2007. 2. 25. 23:14

커 널 2.4에서 IP 공유(ip masquerade), 서버 부하분산(port forwarding), 투명 프락시(redirection)를 사용하려면 iptables 프로그램을 사용해야 한다. 물론 커널 쪽 세팅도 필요하다. 2.2에서는 ipchains와 ipmasqadm으로 분리되어 있었는데 이를 하나로 통합했을 뿐 아니라 사용법도 훨씬 쉬워졌다. 또한 확장성을 고려해서 설계되었다는 장점이 있다.

iptables는 NAT 기능뿐 아니라 filtering 기능도 들어 있다. filtering은 패킷을 걸러 내는 즉 없애는(거부하는) 기능을 담당하므로 주로 방화벽을 구축하는데 사용한다. NAT는 패킷의 내용 즉 주소, 포트번호 등을 변경한다. 한 개의 IP 주소를 여러 대의 피시에서 공유하여 인터넷을 사용하는 데는 NAT 기능을 사용해야 한다.(2.2에서의 ip masquerade) 한 개의 도메인 네임에 대해 여러 대의 서버가 서비스를 제공하는 서버 부하분산에도 역시 NAT가 사용된다.(2.2에서의 port forwarding)

이 글에서는 커널 2.4에서 IP 공유와 서버 부하분산을 구현하는 방법을 설명한다.


I. 참고자료


II. 준비작업

    커널 2.4에서 NAT를 구현하려면 커널에 해당 코드를 올리고(모듈로도 가능) 사용자 프로그램 (iptables)을 설치해야 한다. 아래의 모든 작업은 데비안 2.2(potato)에서 테스트하였다. 커널은 2.4.2를 사용했다.

    1. iptables 프로그램 설치

      1) 파일 다운로드

      iptables의 최신버전은 1.2이다. Netfilter Project 사이트(http://netfilter.kernelnotes.org/ )에서 다운받아 설치한다. 위 사이트에서 아래 파일을 다운 받는다.

      -rwxr--r--    1 bae      root       151774 Feb 24 18:00 iptables-1.2.tar.bz2

      2) 압축 해제

      bunzip2 iptables-1.2.tar.bz2
      tar xvf iptables-1.2.tar

      iptables-1.2 디렉토리가 만들어지고 그 안에 소스가 위치한다.

      3) cd iptables-1.2

      4) 2.4 커널 소스를 /usr/src/linux에 설치한다.

      5) make

      ·2.4 커널 소스가 다른 디렉토리에 있으면 아래 명령이 필요하다.
        make KERNEL_DIR=<<커널 디렉토리명>>

      6) make install

      실행파일은 /usr/local/sbin/iptables 이다. 라이브러리도 동시에 설치된다. 다른 곳에서 iptables 파일만 복사해서는 NAT를 사용할 수 없다. 라이브러리도 같이 설치해야 하므로 컴파일하거나 rpm으로 설치해야 한다.

    2. 커널 코드 올리기

    filtering이나 NAT를 사용하려면 필히 커널에 해당 코드가 올라가야 한다. 모듈로 올리는 방법과 컴파일해서 코드에 포함시키는 방법이 있다.

    여기서는 커널을 컴파일해서 코드를 설치하는 경우의 make menuconfig(make config, make xconfig) 에서  필요한 선택사항을 설명한다.(커널 2.4.2) NAT와 직접 관련된 선택사항만 설명했다. 네트워크나 랜카드에 관련된 부분은 자신의 시스템에 맞게 선택해야 한다.

      1) 메인 메뉴의 “Networking options  “ 에서 아래 부분을 선택한다.

      [*]Network packet filtering
      [*]Socket Filtering
      [*]Unix domain sockets
      [*]Unix domain sockets
      [*]TCP/IP networking

      IP: Netfilter Configuration  --->

      <*> Connection tracking (required for masq/NAT)
      <*> FTP protocol support
      <*> IP tables support (required for filtering/masq/NAT)

      아래 항목 중에서 일반적인 IP 공유나 서버부하분산을 구현하려면 <*> 표시가 있는 항목을 선택한다. 나머지는 패킷 필터링을 사용하거나 특수한 NAT 기능 구현시만 필요하다.

            < >   limit match support
      < >   MAC address match support
      < >   netfilter MARK match support
      < >   Multiple port match support
      < >   TOS match support
      < >   Connection state match support
      < >   Unclean match support (EXPERIMENTAL)
      < >   Owner match support (EXPERIMENTAL)
      < >   Packet filtering
      <*>   Full NAT
      <*>   MASQUERADE target support : 유동 IP 사용시 필요하다.
      < >   REDIRECT target support     : 투명프락시 사용시 필요하다.
      < >   Packet mangling
      < >   LOG target support

      2) 아래 메뉴를 선택하면 NAT 기능을 사용할 수 없다.

      "Networking options"에서 "Fast switching (read help!)"


III. NAT에 대한 이해

    iptables를 정확히 사용하려면 iptables에서 정의하는 NAT의 개념을 알아야 한다.

    1. NAT 사용 예

    아래 그림을 기준으로 설명한다. 아래 그림에서 리눅스C에는 두 개의 랜카드가 설치되어 있고 인터넷 쪽의 랜카드(eth0) 에는 공인 IP(고정) 가 부여되어 있다.(211.217.xxx.yyy) 두번째 랜카드에는 내부어드레스(192.168.1.1)가 부여되어 있고 내부 랜(192.168.1.0/24)에 연결되어 있다.

         <그림 1>

      1) 여러 대의 피시에서 한 개의 IP를 공유하여 인터넷을 사용

      adsl 이나 케이블모뎀으로 인터넷을 연결하는 경우 보통은 1개의 IP 주소를 받는다. (여러 개를 받을 수 있는 서비스가 있으나 비용이 많이 든다.) 이때 한 개의 IP주소를 여러 대의 피시에서 공유하여 인터넷을 사용하려 할 경우 NAT가 사용된다.  우리가 IP Masquerade라 불러왔다. 그림 1] 에서 윈도우A, 윈도우B 두 대의 피시에서 리눅스C의 공인 IP(211.217.xxx.yyy)를 공유해서 인터넷을 사용하게 설정하는 경우이다.

      2) 한 개의 IP 주소(도메인네임)에 여러 대의 서버를 연결하는 경우

      부하분산을 위해 한 개의 도메인네임(FQDN)에 대해 여러 대의 서버를 운영하는 경우도 NAT를 사용한다.  즉 www.linuxlab.co.kr 도메인 한 개에 웹서버, 메일서버, FTP 서버를 따로 운영하는 경우이다. 부하평준화(load balance) 기능도 구현이 가능하다. 즉 www.linuxlab.co.kr 도메인에 대한 웹서비스를 여러 대의 서버가 담당하게 하는 경우이다. 2.2에서는 port forwarding이라 불리웠다.

      (커널 2.2에서 port forwarding 사용법은 리눅스 월드 2000년 3월호에 있다.)

      그림 1] 에서 윈도우C에서 bae@www.linuxlab.co.kr로 메일을 보내면 메일은 192.168.1.10 서버로 전달되고 웹을 검색하면(http://www.linuxlab.co.kr) 192.168.1.11 서버가 응답하게 설정하는 것이다.

      3) 투명 프락시

      학원에서 인터넷 강의를 하는 경우는 동일 네트워크에 연결된 여러 대의 피시에서 동시에 같은 사이트를 연결한다. 이 경우 프락시 서버를 설치하면 모든 피시는 우선 프락시 서버에서 방문하려는 사이트의 페이지가 있는지를 확인하고 여기에 없을 경우는 프락시서버에서 해당 사이트를 연결해 페이지를 가져다 피시에게 준다.

      프락시 서버를 사용하려면 피시의 웹브라우저에 프락시서버를 지정해 주어야 한다. 그런데 투명프락시의 경우는 클라이언트 피시의 웹브라우저에 프락시서버를 지정할 필요가 없다.

      리눅스에 투명프락시를 설정하면 리눅스를 통과하는 패킷은 자동으로 리눅스에 설치된 프락시서버 프로그램(예: squid)으로 연결된다.(리눅스를 각 피시의 디폴트게이트로 지정하면 모든 패킷은 리눅스를 통과한다.) 예전에는 리다이렉션이라고 불리웠다.

      그림 1]에서 윈도우A에서 www.debian.org의 페이지를 검색하면 리눅스C에 설치된 프락시서버프로그램(squid)이 www.debian.org를 연결해 대신 데이터를 가져다 윈도우A에 넘겨주는 설정이다. 이 글에서는 투명프락시 설정은 설명하지 않는다. Transparent Proxy with Squid mini-HOWTO를 참고 하라.

    2. iptables에서 NAT 의 분류

    iptables에서는 크게 두 부류의 NAT로 분류한다. 위의 1) 의 경우를 SNAT(Source NAT) 위의 2) , 3)의 경우는 DNAT(Destination NAT) 라 분류한다.

    SNAT는 패킷의 소스 어드레스를 변경한다는 의미이다. 즉 내부 어드레스인 192.168.1.100 윈도우A 에서 www.debian.org 리눅스서버를 연결하면 debian 서버에서 볼 때 패킷의 소스가 192.168.1.100이 아닌 211.217.xxx.yyy로 나타나기 때문이다.

    SNAT는 라우팅(경로) 결정 이후에 이루어진다.(post-routing) 패킷의 목적지 주소는 이미 정해져 있으므로(www.debian.org) 라우팅 경로는 결정되어 있고 패킷의 소스 주소가 리눅스를 떠나기 직전에 변경된다.(192.168.1.100 -> 211.217.xxx.yyy)

    DNAT는 이와는 반대다. 리눅스C에서 패킷의 목적지 주소를 변경한다. 윈도우C에서 bae@www.linuxlab.co.kr 주소로 메일을 보내면 리눅스C에 도착한 패킷의 목적지가 리눅스 B의 주소로 변경된다. 즉 패킷의 목적지 주소가 먼저 변경되고(211.217.xxx.yyy -> 192.168.1.10) 그 변경된 주소에 의거하여 새로운 라우팅 경로가 찾아진다. 즉 DNAT는 라우팅 이전 단계에서 작용한다.(pre-routing)

    post-routing와 pre-routing 은 무척 혼동된다. 즉 내가 왼쪽이라 하면 상대에서 나를 볼 때는 오른쪽이다. 결국 NAT 가 routing 보다 전에 작용하느냐 후냐의 구분으로 보면 된다. (iptables 파라메터 지정에서 이 둘을 혼동하면 에러가 난다.)


IV. IPTABLES 설정

    1. Source NAT 는 아래와 같이 지정한다.(기존의 IP Masquerade를 말함.)

    iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4

    iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 1.2.3.4-1.2.3.6
    iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to 1.2.3.4:1-1023

    -t -A 는 위의 글(2)을 읽으면 이해가 되리라고 본다. -o 는 패킷을 보내는 인터페이스 장치이다. SNAT 에서는 패킷을 내 보내는 장치(랜카드)를 지정할 수 있다.  --to 는 나가는 패킷에 부여할  소스 주소이다. IP 공유라면 --to 는 인터넷 쪽의 공인 IP 를 지정하면 된다.(지정 않아도 상관없다.)
     

    주의]

    리눅스에 NAT를 설치하는 경우 리눅스는  게이트웨이로 작용하므로 IP Forwarding이
    필요하다.
    아래 명령을 포함하는 스크립트를 /etc/rc.boot/ 디렉토리에 넣는다.(데비안)

    #!/bin/bash
    echo “IP forwarding setting..”
    echo “1” > /proc/sys/net/ipv4/ip_forward

    IP forwarding 이 활성화되었는지를 확인하려면 아래 명령을 준다.

    churlsu:/etc/rc.boot# cat /proc/sys/net/ipv4/ip_forward
    1

    값이 1이면 활성화(enable) 되어 있다.


    1.1 실제 사용 예

      1) 한국통신 ADSL을 리눅스에 연결해 인터넷을 공유(IP MASQUERADING)하는
          경우의 설정은 아래와 같다.(라이트나 프리미엄처럼 유동 IP를 받는 서비스의
          경우에만 해당한다.)

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

      2) 그림1] 에서 리눅스C의 eth0에 부여된 IP(고정)를 윈도우 A,B에서 공유하여
          인터넷을 사용하게 설정하려면 아래와 같다. 전용선 또는 ADSL My IP, Multi IP
          사용시에 해당한다.

          iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to
          211.217.xxx.yyy

          * -s 192.168.1.0/24는 지정 않아도 된다.

      3) 그림 1] 에서 리눅스 C의 eth0가 케이블모뎀에 연결되어 있다면 아래처럼
          지정한다.(유동 IP)

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

    1.2 확인

      - iptables 설정 내용을 확인하려면 아래 명령을 준다.

         iptables -t nat -L

      - 192.168.1.0 네트워크에서 211.217.xxx.yyy 공인 IP를 공유하도록 설정한 경우
         (위의 1.1의 2) 의 출력
       

      Chain PREROUTING (policy ACCEPT)
      target     prot opt source               destination

      Chain POSTROUTING (policy ACCEPT)
      target     prot opt source             destination
      SNAT       all  --  192.168.1.0/24  anywhere       to:211.217.xxx.yyy

      Chain OUTPUT (policy ACCEPT)
      target     prot opt source            destination


    2. DNAT

    DNAT 는 부하분산이나 평준화에만 사용하는게 아니다. 간단한 방화벽으로도 꽤 유용하다. 즉 위의 리눅스C에 DNAT를 설정하여 웹서버와 메일서버를 내부 주소인 리눅스 A와 B에서 서비스 하도록 지정하고 인터넷에서 다른 연결은 리눅스C로 지정하면 리눅스 C가 간단한 방화벽 구실을 담당한다.

    2.1 사용 예

    -  그림1]에서 처럼 윈도우C에서 www.linuxlab.co.kr 의 홈페이지를 검색하려 할 때 이를
        리눅스A에서 담당하게 하려면 아래처럼 설정한다.

        iptables -A PREROUTING -t nat -p tcp  -d 211.217.xxx.yyy  --dport 80 \
        -j DNAT --to  192.168.1.11:80

      1)  -A PREROUTING  : DNAT 는 먼저 목적지 주소를 변경하고(211.217.xxx.yyy를
           192.168.1.11로) 다음에 라우팅이 이루어진다.

      2)  -t nat  : 부하분산도 nat 기능이다.

      3)  -p tcp  : 웹(www)은 tcp 를 사용한다.

      4)  -d 211.217.xxx.yyy  --dport 80 : 들어오는 패킷의 목적지 주소가
           211.217.xxx.yyy 이고 포트번호가 www(80번) 인 경우만 이 규칙을 적용한다.

      5)  -j DNAT : destination Nat

      6)  --to  192.168.1.11:80 : 패킷의 목적지 주소를 192.168.1.11 포트번호를 80번으로
          설정하라는 뜻. 따라서 192.168.1.11 서버에는 80번 포트에서 웹서버 프로그램이
          가동 되야 한다.

    - 메일서버를 리눅스B (192.168.1.10)로 설정하려면 아래처럼 지정한다.

    iptables -A PREROUTING -t nat -p tcp  -d 211.217.xxx.yyy  --dport 25 \
    -j DNAT --to  192.168.1.10:25

    - DNS 서버를 192.168.1.10으로 변경하려면 아래처럼 지정한다.

    iptables -A PREROUTING -t nat -p udp  -d 211.217.xxx.yyy  --dport 53 \
    -j DNAT --to  192.168.1.10:53

    주의]  DNS 는 udp 를 사용한다.

    2.2 DNAT 설정 확인

    웹을 192.168.1.11 로 DNAT 설정을 하면 아래처럼 나온다.(리눅스C에서 아래 명령을 준다.)

    churlsu:~# iptables -t nat -L
    Chain PREROUTING (policy ACCEPT)
    target     prot opt  source      destination
    DNAT     tcp  --  anywhere   churlsu.linuxlab.co.krtcp dpt:www to:192.168.1.11:80

    3. iptables 설정 해제

    - 기존에 설정돼 있는 모든 nat 설정을 지우려면 아래 명령을 준다.

      iptables -t nat -F

    - iptables 의 모든 설정이 해제된 경우는 아래와 같다.

    churlsu:~# iptables -t nat -L
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination

    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination

    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination


V.  iptables  옵션

    아래는 nat 에서 사용하는 중요한 옵션만 설명했다. 나머지는 man 페이지를 참고 하라.

    1) -t  : --table

    table 을 선택한다. filter, nat, mangle 세가지 선택이 있다. 커널에 해당 테이블을 지원하는 코드가 들어 있어야 한다. 모듈 자동적재를 사용한다면 해당 테이블을 선택하면 그와 관련된 커널 모듈이 적재된다.  디폴트는 filter 이므로 nat를 사용하려면 필히 nat 를 지정해야 한다.

    2) -A  : --append

    규칙을 추가한다.

    INPUT, FORWARD :  -t가 filter인 경우 사용 가능
    POSTROUTING, PREROUTING: -t가 nat인 경우 사용 가능
    OUTPUT: 양쪽 다 사용

    3) -i :   --in-interface

    패킷이 들어오는(incoming) 인터페이스(장치)를 지정한다. (-t 가 nat 이면 PREROUTING에서만 지정 가능하다.) 인터페이스명 앞에 “!” 을 추가하면 그 장치는 제외한다는 의미가 된다. 뒤에 “+”를 추가하면 그 이름으로 시작하는 모든 장치를 의미한다. 디폴트는 +이다.

    4) -o :  --out-interface

    outgoing 인터페이스 즉 패킷이 나가는 네트워크 장치를 지정한다. (-t가 nat이면 POSTROUTING 에서만 지정 가능하다) “!” 과 “+” 은 -i 와 동일한다.

    5) -s  :  --source

    소스 어드레스/netmask 를 지정한다. SNAT에서 밖으로 나가는 패킷의 소스어드레스에 따라 규칙을 적용하려 할 때 지정한다.  주소는 호스트네임, 네트워크네임, IP 주소 등을 사용할 수 있다. 아래 형식이 가능하다. 앞에 “!”을 넣으면 반대의 개념이 된다.

            - 192.168.1.100
            - 192.168.1.0/24
            - 192.168.1.0/255.255.255.0

    6) -d :  --destination

    목적지 주소/netmask 를 지정한다. DNAT 에서 들어오는 패킷의 목적지 주소에 따라 규칙을 적용하려 할 때 지정한다. 위의 -s 와 사용법이 같다.

    7) -p :  --protocol

    tcp 나 udp 를 지정한다.

    8) --to :  --to-source,  --to-destination,  

    --to 는 SNAT  에서는 --to-source의 의미이다. 즉 내보내는 패킷에 새로 부여할 소스 IP 주소를 지정한다.  보통은 인터넷 쪽에 연결된 랜카드의 주소이다.

    DNAT 에서는 --to-destination 의 의미이다. 즉 패킷의 새로운 목적지 주소이다. Port forwarding 에서 는 내부 랜에 설치된 서버의 주소이다.

    9) --dport :

    -p 와 같이 사용된다. DNAT에서 들어오는 패킷의 목적지 포트에 따라 규칙을 적용하려 할 때 지정한다.


    출처 : http://www.schkorea.zc.bz/bbs/view.php?id=programming_unix&no=42

,
 출처 http://usr.gentoo.or.kr/forum/read.php?table=tip&no=4722&page=1&PHPSESSID=bc42fb4b2f635b2d67b2ef901efbeebb <<<-
...에 제가 진행 중 주의할 부분을 추가했습니다.


삽질에 삽질을 거듭하게 되어 .... 젠투에 usb로 물린 canon laser shot
lbp-1210을
윈도우에서 사용할수있도록 하게 되어서 이렇게 글을 남깁니다...

http://software.canon-europe.com/
일단 위의 곳에서 자신에게 맞는 프린터드라이버를 받습니다.

그럼 필요한 패키지들을 열거 하자면...
cups
samba
ghostscript
그리고 위에서 받은 프린터 드라이버
rpm

문제가 많았던 곳이....cups로 캐논 프린터를 사용하는 부분이 여튼 복잡합니
다.
그리고 cups에서 잡은 프린터를 삼바에 export 시키는 부분도 까다롭습니
다.

삼바설정과 cups설정, 그리고 커널설정은 생략합니다.

http://www.gentoo.org/doc/en/printing-howto.xml
http://www.gentoo.org/doc/en/quick-samba-howto.xml

위의 링크를 참고하시어 설정하기 바랍니다.

canon capt printer driver를 받아 압축을 풀면
cndrvcups-common-1.3x-x.i386.rpm
cndrvcups-capt-1.3x-x.i386.rpm
두가지 파일이 생깁니다. rpm -ivh --nodeps로 common모듈부터 차례로
설치 합니다.

설치가 되었으면 /etc/init.d/cupsd restart 혹은 start로 cups데몬을 시작
합니다.
필요하다면 rc-update add cupsd default로 등록해주시구요...

그리고 ppd파일을 등록합니다.
# /usr/sbin/lpadmin -p [printer name] -m [PPD file name] -v
ccp:/var/ccpd/fifo0 -E
예로 LBP-1210프린터를 사용할경우인데요..
/usr/sbin/lpadmin -p LBP-1210 -m CNCUPSLBP1210CAPTK.ppd -v
ccp:/var/ccpd/fifo0 -E

ppd파일은 /usr/share/cups/model 디렉토리에있으니 확인바랍니다.




다음 ccpd데몬파일에 프린터를 등록합니다.
# /usr/sbin/ccpdadmin -p [Printer Name] -o [Printer Device Path]
예로 LBP-1210프린터는
/usr/sbin/ccpdadmin -p LBP-1210 -o /dev/usb/lp0

그리고...
/etc/ccpd.conf파일을 손봐줍니다.
------------------------------------------------------------------
# Canon Printer Daemon for CUPS Configuration Data

<Path>
# CUPS configuration file path.
# Default /etc/cups/

CUPS_ConfigPath /etc/cups/

# Log directory path.
LogDirectoryPath /var/log/CCPD/

</Path>

# Printer entries.
# Mapping each "Printer Name" to each "Printer Device Port".
# The "Printer Name" has to be identical to the CUPS printer
queue name.
#
# For example, if you prepare a printer named "LBP3200" as a
CUPS printer
# queue name, and the printer is connected to the USB
port "/dev/usb/lp0",
# you can use the following three lines example just by
removing the
# comment symbol "#" of each line.
#<Printer LBP3200>
#DevicePath /dev/usb/lp0
#</Printer>
# 요부분부터 ......LBP-1210일경우입니다.
<Printer LBP-1210>
DevicePath /dev/usb/lp0
</Printer>

<Ports>
# Status monitoring socket port.
# Default 39787
UI_Port 39787
</Ports>
---------------------------------------------------------------------------

그리고 ...데몬파일을 손봐줍니다.
이파일은 이곳게시판(팁)에 어떤분이 미리 만들어 두신걸 보고 베꼈습니다.
/etc/init.d/ccpd
---------------------------------------------------------------------------


#!/sbin/runscript
# startup script for Canon Printer Daemon for CUPS (ccpd)

depend() {
after logger
after cupsd
}

LOCKFILE=/var/lock/subsys/ccpd

start()
{
ebegin "Starting ccpd"
start-stop-daemon --start --quiet --exec /usr/sbin/ccpd
eend $?
[ "$?" = "0" ] && touch ${LOCKFILE}
}

stop()
{
ebegin "Stopping ccpd"
start-stop-daemon --stop --quiet --exec /usr/sbin/ccpd
eend $?
[ "$?" = "0" ] && rm -f ${LOCKFILE}
}

status()
{
ebegin "ccpd:" `pidof ccpd`
}
-----------------------------------------------------------------

다음 /etc/init.d/ccpd start 로 데몬을 실행합니다.
필요하다면 rc-update add ccpd default로 등록해주시구요....

다음 ... 잘 연결되어있는 캐논프린터의 전원을 꺼줍니다.
그리고 전원을 다시 켜줍니다. 어쨋거나 중요한 부분입니다.-0-

cups설정이 잘 되었다면...
cups가 설치된 자리에서라면 웹브라우저를 열고
http://localhost:631/admin
접속하여 .... 프린터 메뉴에서 보시면 프린터가 잡혀있을겁니다.
테스트 페이지를 출력하여봅니다.

만약 프린터에서 아무런 반응이 없다면 컴퓨터를 리부팅하고
다시 프린터 전원을 껏다가 켭니다.

dmesg로 프린터 드라이버가 잘 로딩 되었는지도 확인해보시구요...

다음은 윈도우용 cups드라이버를 설치할 차례입니다.
이 드라이버가 있어야 윈도우에 프린터를 설치하고 프린트 할 수 있게 됩니다.

이 드라이버도 몇가지가 있지만 cups ps드라이버를 사용하도록 하겠습니다.

http://www.cups.org/windows/articles.php
이곳에서 최신드라이버를 받습니다.

압축을 풀게되면
cups6.inf
cups6.ini
cups6.ppd
cupsps6.dll
cupsui6.dll
파일이 생깁니다. 이중 cups6.inf를 제외하고 /usr/share/cups/drivers로
옮깁니다.
그리고 .... 윈도우에서 몇가지 파일을 찾아야하는데....
%windows%\system32\spool\drivers\w32x86\3 폴더에서
ps5ui.dll
pscript.hlp
pscript.ntf
pscript5.dll
파일을 찾아 위처럼 /usr/shar/cups/drivers로 옮깁니다.
윈도우 2000이상입니다.

다음 /etc/samba/smb.conf의 설정에서....
------------------------------------------------------
[global]
load printers = yes
printing = cups
printcap name = cups

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
public = yes
guest ok = yes
writable = no
printable = yes
printer admin = root

[print$]
comment = Printer Drivers
path = /etc/samba/drivers
browseable = yes
guest ok = no
read only = yes
write list = root
---------------------------------------------------------
특히 [global]에서 security = share 부분이 있다거나 한다면
주석처리를 하십시요. security = user로 하라는 말이 많았지만.
아예 주석처리를 해서 디폴트로 설정하였습니다.
그리고 guest ok = yes이옵션도 역시 주석처리 하십시요.

다음 중요한 cupsaddsmb를 사용하여 cups를 samba에 export합니다.
삼바서버를 잘 설정하셨다면....
smbpasswd -a root로 사용자를 추가하셧으리라 생각합니다.
사용자가 또 있다면
smbpasswd -a 사용자로 추가하십시요...

cupsaddsmb 의 맨페이지는 좋은 설명을 보여줄것같습니다.
cupsaddsmb -H 삼바서버 -U root -h cups프린트서버 -v 프린터이름
예로...위의 설정대로 서버가 apple이고 프린터가 LBP-1210이라면
# cupsaddsmb -H apple -U root -h apple -v LBP-1210

이라고 쳐주면 장황한 메시지를 뿌리며 설정을 마치게 됩니다.
# ls /etc/samba/printers
/usr/share/cups/drivers에 복사하였던 파일과 ppd파일, 그리고 3이라는
디렉토리에 같은 파일들이 보일겁니다.

다음 원하는데로 /etc/samba/smb.conf파일을 수정합니다.
제경우 security = share로 다시 고치고 ....
그리고!!!! [print$] 섹션에서 guest ok = no 부분을 yes로
변경합니다. 윈도우에서 프린터 설치시 다운받지 못하는 현상이
발생해서 입니다.

변경시에는 /etc/init.d/samba restart로 재실행을 해주시고...

자 이제 윈도우로 와서...

프린터추가를 합니다. 네트워크 프린터를 선택하면 자연스럽게
설치가 될겁니다.

한가지 더!!!!!!!! 주의할점은 ...

설치된 프린터의 속성> 인쇄 기본 설정> 고급 창에서
문서옵션> 포스트스크립트옵션> 포스트스크립트출력옵션을
인캡슐화된 포스트스크립트(EPS)를 선택하여야 합니다.

자 이제 마음껏 윈도우에서 젠투에 연결된 프린터를 사용하시기
바랍니다.

잘못된부분 보충할부분 지적바랍니다.

참고자료
http://forums.gentoo.org/viewtopic-t-110931-postdays-0-
postorder-asc-start-200.html
http://forums.gentoo.org/viewtopic-t-456501-highlight-
cups+samba+printer+share.html
http://forums.gentoo.org/viewtopic-t-110931-postdays-0-
postorder-asc-highlight-samba+cups+window-start-0.html
http://gentoo-
wiki.com/Talk:HOWTO_Native_Windows_Printing_with_CUPS/Sam
ba#Cups_Windows_Driver_.26_Samba
http://www.cups.org/doc-1.2/man-cupsaddsmb.html
http://www.gentoo.org/doc/en/printing-howto.xml
http://www.gentoo.org/doc/en/quick-samba-howto.xml

추가참고
http://kr.blog.yahoo.com/bihxx/2
http://search.luky.org/vine-users.7/msg07177.html
https://help.ubuntu.com/community/HardwareSupportComponentsPrinters/CanonPrinters/Canon_LBP_2900
http://linuxforum.ru/index.php?s=d4053bd2851e9fa4f192462586b4c4b8&showtopic=57079&st=0&p=565698&#entry565698
http://forum.pardus-linux.org/viewtopic.php?f=3&t=10063&view=next


,


이미 많은 분들이 성공하셨고, 지금도 그 성능을 만끽하고 계신 그것!

미국 IT업계의 떠오르는 큰형님 "구글" 과 이곳 저곳에서 화제가 되고 있는 "오픈소스" 그들이 힘을 합쳤다!

이름하야 MacFUSE 와 ntfs-3g 를 여러분들께 소개합니다!!

MacFUSE 는 http://code.google.com/p/macfuse/ 에서
ntfs-3g 는 http://files.lifehack.org/download/macfuse/NTFS-3G%2020070116-r3.dmg 에서 다운로드 할 수 있습니다.

MacFUSE 먼저 설치하시고 ntfs-3g 를 후에 설치합니다. 그럼 끝.  That's all. >_<


----------------------------
혹시 설치가 안돼신다고요?!


ntfs-3g 설치시 macfuse_required 메세지와 함께 설치 안될 때가 있습니다.
그럴경우 ntfs-3g.pkg 디렉토리(패키지 내용보기) 의  Info.plist 에서 다음 구문을 삭제해 주세요

<key>IFRequirementDicts</key>
<array>
<dict>
<key>Level</key>
<string>requires</string>
<key>MessageKey</key>
<string>macfuse_required</string>
<key>SpecArgument</key>
<string>/Library/Receipts/MacFUSE.pkg</string>
<key>SpecType</key>
<string>file</string>
<key>TestObject</key>
<true/>
<key>TestOperator</key>
<string>eq</string>
<key>TitleKey</key>
<string>macfuse_package</string>
</dict>
</array>

이 전체를 삭제합니다.

아마 MacFUSE를 설치하면 MacFUSE.pkg 가 /Library/Receipts 로 복사되어야 하는데 그렇지 않기 때문에 저 요구사항 설정값에 위배되어 설치가 안되는 듯 합니다. ^-^

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

더 자세한 이야기

FUSE 란?


Filesystem in USErspace 의 약자입니다. 각종 파일시스템을 Userspace 의 프로그램으로 사용할 수 있게 하는 라이브러리로 보입니다.

사용자 삽입 이미지
(그림 출처 http://fuse.sourceforge.net/ )

위 그림처럼 커널단에 모듈(또는 커널의 일부)로 존재해서 Userspace 의 특정 처리를 파일 시스템화 하는 것입니다

원래는 linux를 위한 이것을  Mac OS X 에 포팅한 것이 MacFUSE 이고요

이것을 응용하여  Spotlight FS 나 sshFS  같은 것을 구현할 수 있다고 합니다.

위의 MacFUSE 다운로드 사이트에 가시면 자세한 비디오 시연을 보실 수 있고 완성된 SpotlightFS를 다운로드 하실 수 있습니다.

속도는 생각보다 좋지 않습니다. 8기가 분량의 데이터를 외장 USB2.0 하드디스크에 복사할 때 약 9~10시간 정도 걸리더군요 (30기가 분량의 원격 데이터와 같이 복사했는데 그것은 예상시간이 37시간 찍혀서 나오더군요. 30기가 단독복사 예상시간은 약 34시간.)

그래도 쓸 수 있다는게 어딥니까!! ;ㅅ;


그럼 ext2 는?!

ext2 파일 시스템을 MacFUSE를 이용하여 읽는 녀석은 아직 없고, 이미 이전에 출시된 다른 패키지가 있습니다.

http://sourceforge.net/projects/ext2fsx/ 이녀석인데요.

자세한 사용법은 동봉된 README.rtf 를 참조하시면 되겠습니다 ^-^




새해 복 많이 받으시고 올 해는 각자 계획하셨던 일들 다 이루는 한해가 되시기를 ^-^


,

2007년 2월 18일의 일기

from My Life 2007. 2. 19. 16:43

계획대로라면 오늘 데이터백업과, ERD작업 그리고 적절하게 JSP연습을 했어야 했다.

하지만 외장하드디스크 파티셔닝이 생각보다 잘 되지 않았다.

기존의 파티셔닝은 하드디스크의 50%도 활용하지 않게 해 두고 데이터의 종류에 맞게 3개로 분할해 두었었다.

문제는 그 용량이 거의 다 차버렸기 때문에, 파티셔닝을 동적으로 늘릴 방법이 필요했다.


맥에서는 iPartition, 리눅스에서는 GParted, 그리고 지금 당장 윈도우가 없기 때문에 사용할 수 없는 파티션매직.


iPartition은 인식은 성공, 파티셔닝 불가
GParted 는 라이브시디가 있다는 걸 모르고 있었다.

결국 디스크 유틸리티로 파티션을 전부 지우고 파티셔닝을 통짜로 하기로 마음먹었다.

여기서 문제가 발생했다. -_-


파티션을 지우는것까지는 좋았다. 하지만 파티션을 새로 입히는것이 안된다.

결국 터미널에서 fdisk 로 파티션을 잡았다.
MacOS가 유닉스 기반이라는 점이 뿌듯한 순간이었다. 

리눅스용 fdisk 는 시작 실린더를 입력 후 용량을 입력하면 자동으로 실린더 번호를 잡아주는데 MacOS의 fdisk 는 첫 실린더 번호를 입력 후 "블록수" 를 입력해야 했다.


어쨌든 이렇게 파티셔닝은 성공했으나, MacOS 에서는 파일시스템을 HFS+ 로도 HFS로도, UFS 로도 절대 입힐 수 없었다.

결국 Gparted 라이브시디와  PE를 동원하고  ext2 까지 입혀본 결과 가장 사용할 만한 파일시스템은 NTFS  였고, MacFUSE 와 ntfs-3g 를 설치한 후 서버 데이터를 복사하기 시작했다.

여기까지 성공인듯 했다. 완료 예상시간이 37시간 뜬것을 빼면.


결국 PE로 부팅, 네트워크 셋업 후 직접 USB 하드를 연결해서, 서버의 데이터를 복사중이다.


여튼 성공했다.
그렇지만 이런 삽질들이 너무 비 생산적인 일이 아닌가 싶어 씁쓸하다..


,

>>> 지금부터 소개해 드릴 글은 "다음/세계엔"에 뜬 어떤 분의 글을 퍼온 것입니다 <<<





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


다음 메인에 뜬 일본서 연봉 1000만엔 이상 받기 라는 글을 보고 혹시나 잘못된 정보로 현혹되시는 분이 있으실 수 있다는 염려가 들었기에 키보드를 두들겨 봅니다.

 

일본에는 많은 한국인 유학생이 있습니다. 정말 다양한 목적을 가지고 여러 분야에서 열심을 다하고 계시는 분들이 많이 계시지요. 다양한 상황을 전부 경험해 본 것은 아니지만 그 글을 읽고 저는 제 경험 속의 학부1학년생 혹은 유학 온지 얼마 안된 많은 분들과 너무나 생각이 닮았다는 느낌을 지우기 어려웠습니다. (서울대를 가는 방법을 몰랐다는 것이나... (가도 중간은 했다??), 전혀 다른 상황의 사람들(미국 학생들)이 주로 본다는 싸이트를 소개하지 않나, 실제로 현재 투자은행에 근무하는 사람의 이야기로는 믿기 힘든 수준의 카더라통신, 리쿠르트 싸이트의 소개, 한국어 잘 구사하는 재일교포가 많아서 한국어는 메리트가 없다 라는 등. 무슨 초등학생 글도 아니고) 그 정도의 현실 인식을 가진 분과는 더 이상 긴 이야기를 해도 서로가 별로 득이 될 것 같지 않습니다.

 

조목조목 이해하기 힘든 주장들을 반박 할 수도 있지만, 그저 제 생각을 써볼까 합니다.

 

그 글을 읽고 가장 먼저 떠오른 말이 있었습니다. 

 

오늘날 인터넷에 연결이 가능한 아이라면, 만약 그 아이가 충분한 호기심과 인터넷 접속 수단만 갖고 있다면, 그건 나와 똑 같은 능력이 있다는 얘기나 다름없다.

 

마이크로 소프트의 빌게이츠 가 한말입니다. 그렇습니다. 예전에는 알 수도 없었고, 알지도 못하는 다양한 정보가 지금은 클릭 몇 번으로 알만한 정보, 알고 있는 듯한 지식이 되어 버린 것이지요.

 

예를 들면 제가 초등학생에게 내일까지 16세기 르네상스 시대의 미술과 문학의 특징에 대해서 정리해서 나에게 알려줘 라고 숙제를 내리면 하루도 안 걸려서 수백 페이지의 멋진 논문을 만들어 올 수 있는 시대란 말입니다.

이게 정보의 대중화 이지요.

 

정보의 대중화는 모든 사람들에게 기회를 제공하기 까지 했습니다.

이전엔 회계법인이 뭔지 금감원 이 뭐하는 곳인지 로펌은 또 새로나온 음식인지 컨설팅 기업은 또한 어떤 일을 하는 기업인지 알고 싶지도 않았고 알 필요도 없는 위치의 사람들 까지도 이젠 누구나 탐내는 고액연봉이 기다리는 직장이 되었습니다. 또한

MBA는 학부생(,.-) 들이 가고 싶어 하는 꿈의 학교가 되었죠.

 

신문에서는 나옵니다. 누구 누구가 이번에 모기업에 상무, 전무가 되었는데 연봉이 얼마더라 .. 부러워라 합니다. 그래서 찾아 보니 보이는 건 학력란 이고 ~ 명문대 나왔네..역시.. ,  와튼스쿨에서 MBA 이수했네~~역시…” 라며 명문대를 나오고 MBA를 이수하면 고액연봉자가 되는 구나 라고 실제 과정과는 반대로 생각해 버리는 실수를 저지르는 듯 합니다.

 

MBA는 중학생이 고등학교 가듯이 혹은 학벌 세탁을 하려고 가는 곳이 아닙니다. 그리고 학부생이 취직을 통한 사회경력이 없는 상태로 가는 일반대학원도 아닙니다.

 

우리가 신문에서 봤던 고액 연봉의 임원이 되는 사람은 사비를 들어서 대학4년 졸업하자 마자 MBA 과정에 들어간 경우는 거의 없다고 봅니다. 기업에서 근무하며 근무성적과 어학성적 우수한 자로 기업측에서 임원(중역)으로써의 적임자로 판단해서 2년에서 길게는 3년이 걸리는 억들어 가는 돈을 써가면서 보내는 것이 MBA입니다.

 

 

단순히 생각해 보십시요

기업경험이 전무한 학생신분의 사람을 MBA 나왔다고 (고액연봉의 예로 들었던...)

증권회사 운용역, 혹은 VC 심사, 최고의 컨설팅 기업에서 컨설턴트로 쓸 거라고 생각하십니까? (*아니 난 신입사원 혹은 취직이 안되서 그냥 취직만 하는게 꿈이라서 라고 생각하시면 곤란)


남의 돈을 맡아서 운용하는 일이 쉽습니까? 펀드 매니저가 대학 졸업해서 일류 증권 회사에 취직 잘하면 바로 된다고 생각하십니까?

용돈관리나 잘 하라고 말 하고 싶습니다. 증권회사가 그 돈 있으면 불우이웃 돕는게 회사에게는 더 큰 이익이 될 겁니다. 조금만 더 클릭질 해보시면 알지만 운용을 맡는(펀드매니져) 분들은 정말이지 증권 회사 내에서도 특수집단에 가까울 만큼 되는 것이 쉽지 않습니다. (무슨 홈트레이딩 하듯 생각하시면)

 

 컨설턴트의 자문을 받는 회사나 정부의 사람들이 곱셈을 못하거나 혹은 학벌이 낮아서, 아이디어가 없거나 전략을 못 세워서 그 큰돈을 컨설팅 기업에 줘가면서 자문을 구하는 줄 아십니까?

 

철수 박사를 비롯한 각국의 수많은 변호사회계사, 기업 사장들이 MBA 스쿨에 앉아서 수업을 듣습니다. 학부 4년 졸업해서 MBA(하이랭킹의 MBA) 바로 갔다고 칩시다

(보통 경력 3년 이상을 요한다) 안철수 박사와 동급생으로 무슨 토론을 하고 싶습니까? 변호사로써 국제무역과 기업 인수합병에 경력을 쌓은 동급생과 서로 얼마나 창조적인 대화가 나눠질까요? (허버드 MBA유학기[아와세 다이스케]책 참조)우수한 성적으로 졸업하지 않으면 처음 직장을 가지려는 자로써는 상당히 불리한 조건임에 틀림 없네요.

 

컨설팅 기업에 취직하겠다고 칩시다.

(고액연봉자 즉, 파트너 급으로써의) 당신이 제공 할 수 있는 당신만의 스페셜한 분야는 뭔가요? 유전공학을 전공하셨나요? 전자공학에 박사이신가요? 회계법인에 회계사로써 혹은 법무법인에 변리사로 경력이 있으신가요? 아니면?? 의지만 있으신 건가요? 혹은 친구들의 고민상담을 많이 들어 줘봐서 잘 할 것 같아서 인가요?

(펀드매니저를 하고 싶다면서 대학 수학점수는 왜 포기해 버리는지<어이없는 사람 있음>)

 

그렇습니다. 정보가 넘칩니다.

CPA 위에 CFA 가 있고 FRM 이 있다는 것까지 알아 버렸습니다. (위라고 표현한 것은 CFA가 해당분야 경력 5년이상, 3년간의 시험 및 영어시험 이고 지원자격이 대학졸업자 이기에 이렇게 표현 했을 뿐입니다.) 그렇다고 CPA 공부하는 사람에게 요즘 회계사 너무 많아서 메리트가 없데~라고 이야기 하는 것은 동물원 침팬지가 웃는 소리 입니다. 본인을 얼마나 가치 있는 세계적인 인재로 착각 하는 겁니까? 명문대 4년 졸업하면 삼성이고 LG고 서로 어서 오십시요 라고 반기며 임원으로 고액연봉 계약할 줄 아십니까?

그리고 나는 CFA 할껀데, 넌 고작 CPA 할려고 ? 라고 회사 취직도 아직 안 한 대학생이 할 단계의 말은 아니지요.

 

그럼 알았습니다. 벌써 몇 번의 클릭질로 알아버린 고액연봉의 인재가 될려면 어떻게 해야 할까요?

 

꿈(생각)은 높게 발은 현실에

삼성 경제연구소의 표어처럼

취직을 해야 합니다. !!

 

앞에서 언급한 하이 엔드급회사도 좋고 4년 학부 졸업하면 바로 취직을 해야 합니다.

성실성의 잣대인 학점관리도 해야 합니다. 어학을 많이 필요로 하는 회사를 노린다면 영어 점수도 만들어 놔야 합니다. 일단 취직을 한 후에 리더로써의 타의 모법이 되는 모습을 보인 다음에 회삿돈으로 MBA를 가던 뭘 하든 하십시요. (한국학생들은 특이하다 라고 할 정도로 사비유학생 비율이 높다고 합니다.)

 

그 후에 맥킨지보스턴 컨설팅 그룹이든 (기존에 다녔던지 새롭게 옮기던지) 재계약을 해서 연봉을 높이는 겁니다.

 

학벌 때문에 차이가 있다고 하시는 분은 자신의 학벌에 맞는 일을 찾으세요. 왜 남의 돈을 맡고 전문지식을 제공하는 하이엔드급 인재가 남들보다는 똑똑해야지요, 억울하거나 욕이 나오면 앞으로 사시면서 더욱 많은 억울한 일과 욕 나오는 일들이 기다리고 있으니 너무 벌써부터 그러시면 안 됩니다.

 

세상에는 똑똑한 사람이 넘칩니다. 80%사람이 본인은 타인이 생각지 못하는걸 생각하고 스스로를 남들보다 똑똑하다고 생각한다고 합니다. 기업의 입장에서 보면 회사문만 나서면 반짝반짝 보석같이 빛나는 우수한 인재들이 수없이 많은 명품매장 진열장에서 바로 당장이라도 팔리길 소원하면서 스스로를 빛내고 있습니다.

 

기업은 정말이지 한 푼의 손해도 입지 않으려고 합니다. 그런 기업이 리스크를 감소하고도 비행기를 타고 사막 한가운데로 날아가 모래알 속에서 반짝이는 진주를 찾길 기대 하는 건, 기업에게도 우리에게도 엄청난 낭비입니다.

 

기업 회장에게 자신을 소개하는 편지를 쓰면 나의 값을 알아봐주셔서 날 믿고 키워 주지 않을까 라고 착각하는 사람도 봤습니다. 과연 읽을 까요? 명품매장이 널린 시대인데!!

 

우리의 선택은 좁아졌습니다.

공채를 통과하기 위해 지금 하고 있는 학과 공부와 자신의 특기를 살릴 수 있는 일에 투자하십시요. 신문기사에 난 소위 잘나가는 사람 학력란 만 보고 내가 저기만 갔다면 이라고 후회하는 수십 만명중 한명이 되지 마시길 바랍니다.

 

 

 

참고자료:

일본의 명문대학교의 취직활동 중인 날고 긴다는 일본인 학생들도 평균 30사 지원에 1군데 정도 붙는 정도 입니다. (제미활동 해보신 분이면 아시죠)

그리고 최종면접 까지 가는 수명의 학생들의 출신학교는 거의 6~8개 대학으로 압축됩니다. (국립3,사립3~4) (소위 말하는 최상위 기업의 경우)

꽤 이름있는 학교 출신 일본인의 경우 그런 기업에 들어 가지 못하는 것이 억울하지 않느냐 는 저의 질문에 당연하다 라고 생각한답니다.)

한국인 유학생의 경우는? 취직 준비해서 노력한 사람은 취직하고 취직 생각이 없던 사람은 안하는 정도입니다. 학부1학년생들이 착각하는 삼성이나 엘지는 서로 오라고 하는 일은 결코 없습니다.

또 흔히 일어는 본인이 충분하고, +영어를 잘하면 일본에서 취업에 유리할 거란 착각도 많이 하십니다. 하지만 평균 9차 면접까지 하는 심층 면접에서 (그전에 일본학생들과 똑같이 쳐야하는 필기시험을 통과할 정도의 기술 능력은 제쳐두고...) 가장 중요한 것은 논리적인 일본어 구사능력 입니다.


p.s

원본 글에 있는

1. 학벌 2. 어학능력(영어 능력 포함) 3. 적극성

위의 것이 없는 사람은 없다 라고 할 정도로 학력 인플레이션 다 된 사회임을 잊지 마세요.

 

월급 연봉 등 대학별 취직현황이 궁금하시면

2006 5 16
사용자 삽입 이미지


































































































출처 : http://bbs3.worldn.media.daum.net/griffin/do/country/bbs/
read?bbsId=C001&articleId=15598&pageIndex=1&searchKey=&searchValue=
,