make menuconfig ARCH=um환경 설정을 하게 되면 UML 전용의 메뉴들을 볼 수 있고, 설정할 수 있습니다. 일반적인 커널 설정 화면과는 차이점이 있습니다.
make linux ARCH=um명령으로 빌드하면 되고 빌드 후에는 커널 소스 디렉터리에 linux 라는 실행 파일이 생성됩니다. UML은 리눅스 커널을 프로세스로 실행하는 것이므로 이는 당연합니다.
make modules ARCH=um명령으로 하면 됩니다.
apt-get install user-mode-linux명령을 실행하면 설치가 되며, /usr/bin/linux -> /usr/bin/linux.uml 파일이 설치되어 실행됩니다. 미리 빌드된 데비안의 UML을 쓰거나 앞서 커널 빌드에서 만든 linux를 사용해도 됩니다. 선택은 자유입니다.
dd if=/dev/zero of=/mnt/root_fs bs=1024K count=500count 값을 500으로 설정했으니 500M의 공간이 만들어집니다. 루트 파일 시스템으로 사용할 이미지 파일을 만들었으니 원하는 파일 시스템으로 포맷을 합니다. 여기서는 EXT3 파일 시스템으로 포맷합니다
mkfs -t ext3 /mnt/root_fs경고가 나타나지만 Y만 선택하면 됩니다.
mkdir /mnt/um mount -o loop /mnt/root_fs /mnt/um-o loop는 루프백 디바이스로 마운트하라는 것으로 ISO 파일이나 하드 디스크 이미지를 마운트하기 위해 종종 사용합니다. 다음은 완전히 부팅되는 데비안 이미지를 만드는 것인데, 데비안에서는 이를 위해 편리한 명령을 제공합니다.
apt-get install debootstrap명령으로 데비안 부트스크랩 패키지를 설치하고
debootstrap --arch i386 etch /mnt/um http://ftp.kr.debian.org/debian명령을 실행하면 데비안 미니 설치 과정에서 보았던 최소 설치된 데비안이 부팅되는 이미지가 생성됩니다. etch 라는 코드명을 사용한 것은 현재 testing 배포판을 사용하기 때문이고, 자신이 사용하는 배포판의 종류에 따라 sid, sarge를 설정할 수도 있고, 우분투 Breezy 사용자라면 breezy도 가능합니다. 물론 우분투 사용자는 다운로드 소스를 우분투리눅스로 변경해야합니다. 해당 URL은 /etc/apt/sources.list에 있는 것을 사용하면 되니, 정확한 주소는 자신의 시스템에 있는 sources.list 파일을 참고하면 됩니다. 이제 부트스트랩 이미지가 만들어졌으면 몇가지 수정을 해줘야합니다. 부트스트랩 이미지는 말 그대로 설치 작업을 위한 이미지라서 설정 정보가 하나도 들어있지 않습니다.. 먼저 /mnt/um/etc/fstab 파일을 만들어서 마운트 정보를 추가합니다.
/dev/ubd0 / ext3 defaults 0 1 proc /proc proc defaults 0 0/mnt/um/etc/hostname 파일도 수정해서 다른 호스트이름을 부여해야 합니다. 제 경우엔 호스트 PC의 이름이 curl이므로
curl-uml0로 이름을 수정했습니다. /mnt/um/etc/hosts 파일에는 다음 내용을 추가
127.0.0.1 localhost/mnt/um/etc/securetty 파일에는 다음을 추가
tty0 ttys/0/mnt/um/dev 디렉터리로 이동해서 UML에서 사용할 디바이스 명을 생성합니다.
cd /mnt/um/dev mknod --mode=660 ubd0 b 98 0 chown root:disk ubd0/mnt/um/etc/inittab 파일의 끝 부분을 다음과 같이 수정합니다.
1:2345:respawn:/sbin/getty 38400 tty0 #2:23:respawn:/sbin/getty 38400 tty2 #3:23:respawn:/sbin/getty 38400 tty3 #4:23:respawn:/sbin/getty 38400 tty4 #5:23:respawn:/sbin/getty 38400 tty5 #6:23:respawn:/sbin/getty 38400 tty6실행레벨 2~6까지는 모두 주석처리하는 것이고, 첫번째는 tty1로 되어 있는 것을 tty0로 수정하는 것이 전부입니다. 여기까지 진행했으면 다음은 root 비밀번호를 설정합니다.
cd /mnt/um chrootchroot 명령을 실행하면 현재 사용중인 시스템 정보가 아니라 /mnt/um을 루트 디렉터리로하는 시스템 정보를 사용하게 됩니다.
passwd -u root passwd root명령으로 root 계정의 비밀번호를 설정합니다. chroot 명령을 실행한 다음이므로 현재 시스템이 아닌 /mnt/um을 루트 디렉터리로 하는 시스템에서의 root 비밀번호 설정이니 안심해도 됩니다.
adduser user1명령으로 일반 사용자 계정을 추가합니다. UML에서는 root 사용자 로그인이 바로 안되니 일반 사용자 계정으로 로그인하고, su 명령으로 root가 되어야 합니다.
cd /mnt명령으로 디렉터리 위치를 변경하고
umount /mnt/um명령으로 마운트를 해제하고 앞에서 apt-get install user-mode-linux 명령으로 설치했던 /urs/bin/linux를 실행해서 UML을 시작할 수 있습니다.
linux ubd0=/mnt/root_fs메모리 크기를 설정하고 싶다면
linux ubd0=/mnt/root_fs mem=128M과 같이 실행하면 됩니다. 데비안의 linux 대신에 앞에서 빌드한 linux를 이용하고 싶다면
/usr/src/linux-2.6.20/linux ubd0=/mnt/root_fs mem=128M이와 같이 실행하면 됩니다. 실행하면 실제 리눅스를 부팅하는 화면이 나타나고, 실제 리눅스 로그인 화면까지 나타나는 것을 볼 수 있습니다. 모니터링은 호스트와 게스트 사이에 특별한 소켓이 생성되는데, uml_mconsole에서 이 소켓명을 적어주는 것으로 통신할 수 있습니다. uml_mconsole은 UML 커널의 시작, 중지 등을 제어할 수 있고, uml_switch는 UML 간의 네트워크 스위치를 만드는 작업을 수행합니다. 가상 네트워크 구축을 위해 활용할 수 있습니다. 커널 디버깅을 하려면
gdb linux명령을 실행하고
gdb>r udb0=/mnt/root_fs mem=96M명령을 실행하면 됩니다.
Kernel Hacking ->Compile the kernel with frame pointers - Enable ->Show command line arguments on the host in TT mode - Disable이 두가지만 설정하면 됩니다.
이전 글 : 커널에서 CPU 정보 처리하기
다음 글 : JavaFX 스크립트 소개(1)
최신 콘텐츠