nas4free 에 jail 설치

FreeBSD_Jail jail은 FreeBSD가 설치된 컴퓨터를 여러개의 독립된 sub-system들 (jails)로 나누어주는 OS 수준에서의 가상화를 말한다. 각각의 sub-system은 서로 독립적이어서 (서로 간섭하지 않음) 각 jail 내에서 실행되는 application (program)은 자기가 속한 영역 내의 resource만을 사용할 뿐이며 application이 마치 감옥에 갇혀 있는 것과 유사하다고 할 수 있다. FreeBSD 가 설치된 1대의 컴퓨터 내에 jail들을 설치하고 각 독립된 영역(jail)에 FreeBSD를 설치하면, 한대의 컴퓨터로 여러개의 FreeBSD 컴퓨터가 있는 듯한 효과를 볼 수 있다. 그리고 각 sub-system에 별도의 IP를 부여할 수 있어 각 sub-system (jail)에 blog, wiki, cloud를 설치하여 각각 독립적으로 운용할 수 있다.

nas4free는 ssh, ftp, afs, nfs 등 다양한 서비스를 제공하지만, 기본적으로 nas 용으로 design되어있으며, 서비스로 제공되는 weberver는 lighttpd를 기반으로 하고 있고, apache webserver 를 사용하기 어려워 apache webserver를 기반으로 하는 다른 webservice를 이용하기가 쉽지 않다. 하지만 다행히도 nas4free 는 FreeBSD 9.1 을 기반으로 하고 있어 jail을 손쉽게 설치 할 수가 있다. jail 을 설치하고 jail 내에 apache, mysql 과 php를 설치하면 MAC OS 에서의 MAMP와 유사한 FAMP 환경을 구축할 수 있다. FAMP 기반위에 blog, wiki, .. 등을 설치하면 nas 기능을 사용하면서도, blog나 wiki로 사용할 수 있다. : )

nas4free 에 jail을 설치하는 방법은 웹상에 잘 나와 있는데 모두 영어로 되어 있어 내 컴퓨터에 jail을 설치 하면서 아래와 같이 한글화 하였다. 본인의 경우는 nas4free 9.2.0.1 (revision 972) 를 설치하였고 jail 내에 다시 wordpress를 설치하여 개인 블로그로 사용하고 있다.

사전 작업

nas4free 에 jail을 설치하려면 당연히 nas4free가 설치되어야 하는데 nas4free 설치 방법은 이미 인터넷에 잘 알려져 있어 여기에서 설명하지는 않겠다.

설치 과정의 편의를 위해 일단 ssh service에서 root로 직접 로그인 가능하도록 변경한다.

webgui에서 Services –> SSH –> Permit root login 를 체크하고 save and restart 를 클릭
webgui에서 System –> Advanced –> sysctl.conf 를 클릭하고 우측 하단의 +를 누른 후 Name에 security.jail.chflags_allowed 를 , Value 에 1 을 입력하고 save를 클릭
webgui에서 System –> Advanced –> rc.conf 를 클릭하고 우측 하단의 +를 누른 후 Name에 jail_enable 을 , Value 에 YES 를 입력하고 save를 클릭.
폴더 및 마운트 위치 설정

jail을 설치할 nas4free로 ssh를 통해 root 로 로그인 한다. 만약 일반 사용자로 로그인 하였다면 su 명령을 통해 root 로 다시 로그인 하여 root 권한을 얻도록 한다. nas4free에서 hdd를 /mnt/DATA/로 마운트 되어 있고, 설치할 jail의 이름을 blog 라고 하자.

# mkdir /jail
# mkdir /mnt/DATA/jail
# mkdir /mnt/DATA/jail/{work,blog,conf}
# mount_nullfs /mnt/DATA/jail /jail

FreeBSD 다운로드 및 설치

다음과 같은 명령어로 FreeBSD를 다운로드하여 jail folder 내에 설치한다.

# cd /jail/work
# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/`uname -m`/`uname -m`/`uname -r | cut -d- -f1-2`/base.txz
# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/`uname -m`/`uname -m`/`uname -r | cut -d- -f1-2`/lib32.txz

만약 32bit verssion nas4free를 설치하였다면 32 비트 라이브러리는 설치할 필요가 없다고 한다.

# tar xvf /jail/work/base.txz -C /jail/blog/
# tar xvf /jail/work/lib32.txz -C /jail/blog/
# cd /jail
# mkdir -p conf/root/{etc/rc.d/,usr/bin,usr/sbin}
# cp blog/etc/rc.d/jail conf/root/etc/rc.d/
# cp blog/usr/sbin/{jail,jexec,jls} conf/root/usr/sbin/
# cp blog/usr/bin/mktemp conf/root/usr/bin/

jail을 설정하기

# cp /etc/resolv.conf /jail/blog/etc/
# cp /jail/blog/usr/share/zoneinfo/Asia/Seoul /jail/blog/etc/localtime

jail 내에서 마운트할 폴더나 hdd를 /jail/conf/fstab 내에 포함 시킨다. 만약 nas4free 의 /mnt/DATA/Data1 폴더를 jail 내에서 /mnt/Data1 으로 사용하고자 한다면 다음과 같은 명령어를 수행한다.

# touch /jail/conf/fstab.blog
# mkdir /jail/blog/mnt/Data1
# nano /jail/conf/fstab.blog
/mnt/DATA/Data1 /jail/blog/mnt/Data1 nullfs ro 0 0

를 입력하고 저장 (control-X –> Y )한다. 여기서 /mnt/Data1 폴더에 write 하려면 ro를 rw 로 변경한다.
다음으로 jail 내 rc.conf.local 파일을 만들어 준다.

# touch conf/rc.conf.local 
# nano conf/rc.conf.local 

다음을 입력하고 저장한다.

### EXAMPLE - MODIFY TO FIT YOUR NEEDS ###
jail_enable="YES"	# enable jails YES|NO
jail_list="blog"	# name of the jails to start "proto www..."
jail_blog_rootdir="/jail/blog"  # path to our jail 
jail_blog_hostname="blog.domain.local" # hostname 
jail_blog_ip="192.168.1.100" # ip of the jail 
jail_blog_interface="re0" # Network Interface to use, 
# replace on your NAS interface name 
jail_blog_devfs_enable="YES" # use devfs 
jail_blog_mount_enable="YES" # mount YES|NO 
jail_blog_fstab="/jail/conf/fstab.blog" # File with Filesystems to mount

마지막 셋업 및 jail의 구동

# nano /jail/conf/jail_start

위의 명령 시행 후 다음의 내용을 입력한다.

#!/bin/tcsh -x
#mounting to /jail
mkdir /jail
mount_nullfs /mnt/DATA/jail /jail
# copy jail binaries to /usr, not needed if N4F is 454 or up
# because Daoyama include needed files, uncoment if you use low .454 version
# cp -r /jail/conf/root/ /
# link config files to /etc
ln -s /jail/conf/rc.conf.local /etc
#start all jails
/etc/rc.d/jail start

저장한 후 다음과 같이 실행권을 부여한다.

# chmod 755 /jail/conf/jail_start

nas4free의 webgui에서 System –> Advanced –> Command script를 클릭한 후 Command에 /mnt/DATA/jail/conf/jail_start, Type에 PostInit 를 입력한 후 저장한다.

nas4free를 리부팅하고, ssh를 사용하여 nas4free 로 로그인한다. command line mode에서

# jls 

명령을 실행하여 다음과 같은 내용이 나타나면 jail 이 정상적으로 실행되는 것이다.

JID  IP Address      Hostname                      Path
1    192.168.1.100   blog.domain.local            /jail/blog

nas4free 의 commanline mode에서 jail (blog) 로 들어가려면

# jexec 1 csh

를 실행하면 된다.

참고자료

1. How to setup a jail on top of NAS4FREE
2. FreeBSD jail on embedded Nas4Free Install

nas4free 에 jail 설치

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.