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의 간단한 예제 이며, 조금 더 참고하거나 해볼 만한 예제가 있다면 올리도록 할 것이다.
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의 간단한 예제 이며, 조금 더 참고하거나 해볼 만한 예제가 있다면 올리도록 할 것이다.
'Development Tip' 카테고리의 다른 글
Ubuntu 11.10 application : Terminator (0) | 2012.02.20 |
---|---|
Android git mirror site (0) | 2011.09.30 |
VMware Server Ver2.0.X : [Solved] VMware tools install fail (0) | 2011.03.16 |
Kernel source 보는 방법(site 및 tool) (0) | 2011.02.24 |
Eclipse Git Repository Plugin (Egit) (0) | 2010.12.31 |