1. Process Management : Namespace 내용
   Namespace의 기본 개념을 번역함. 
   Namespace concept (Professional Linux kernel architecture)

2. namespace 실습
  // 검색을 해봤는데, 와닿을 만한 예제를 찾지 못했다. 검색어를 잘못 선정했나.. 
 // unshare() 함수 사용의 예제 임.

 Reference site : http://glandium.org/blog/?p=217

                        http://www.debian-administration.org/articles/628
 

unshare() system call로 새로운 namespace를 만들고 확인해보는 실습이다. 


위의 소스를 살짝 설명을 하자면, 
일단 unshare system call은 root permission이 없으면 수행을 하지 못한다.  현재 실행하고 있는 UID의 값이  root(UID == 0)가 아니면 실행을 중단한다. 
shell 에서 (geteuid 는 effective uid 값을 가져오는 함수임)
$ man 2 geteuid
하면 자세한 정보가 나온다. 

일단 root permission으로 실행되었다면, unshare system call에 CLONE_NEWNS flag와 함께 호출한다. 새로운 namespace를 생성하는 과정임(현재 process에서 fork 하여 생성된 child process인 경우에만 아래의 코드를 실행한다.)
 
코드를 구현하고,
$ gcc -o newns newns.c (위의 소스 파일 이름이 newns.c 이다)

 
위의 terminal의 명령 순서를 설명하면,
나의 경우에 ~/work/namespace/ 하위에 first와 second file을 만들고 각각 first 에는 "FIRST" 문자열을 second 에는 "SECOND" 문자열을 기록 해두었다.

$ sudo ./newns 를 통해 새로운 namespace를 만들고
$ mount -n --bind second first

(참고로, mount 의 --bind 옵션은 심볼릭 링크 파일을 파일로 인식하는 FTP 에서 링크 대신 마운트를 시킴으로써 링크와 비슷한 역할을 할 수 있도록 하는 것이다.)

$ cat first

first 파일의 내용을 보면 "SECOND"라고 나온다. 하지만 또 다른 터미널을 하나 더 연 다음에,
같은 디렉토리로 이동 후 같은 파일의 내용을 보면,

<another terminal>
$ cat first
FIRST
라고 나온다.

Namespace의 간단한 예제 이며, 조금 더 참고하거나 해볼 만한 예제가 있다면 올리도록 할 것이다.  

+ Recent posts