Jailを試してみよう

正直なところJailと関係はないけれどせっかくなので前戯の紹介。

Jailを試してみよう 準備編
Jailを試してみよう 試す前にFreeBSDのアレコレ

ではでは本題にいっきまーす。

Jailを手動で構築

まずJailはDockerと同じくOSレベルでの仮想化なので、ホストがFreeBSDなのでもちろん子プロセスもFreeBSDです。
そんな説明はまずはどうでもよし!

あと、書籍ではZFSとの組み合わせが管理しやすいとありますが、UFSでもう作っちゃってるもんだから、もうUFSで行っちゃいましょう。

ソースコードを使うのが一番確実な方法という事なので、まずはWorldの再構築から・・・なんだそりゃ?と言うところから始めるわけですが、まぁ何とかなるでしょう。

まずはソースの準備をしました。

# cd /usr
# mkdir -p /usr/mysouce
# cd /usr/mysouce
# fetch ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/9.1-RELEASE/src.txz
# xz -dv src.txz
# tar -xvf src.tar
# cd /usr/mysouce/usr/src
# make -j5 buildworld

終わったにょろーん。

--------------------------------------------------------------
>>> World build completed on Mon Oct 20 02:10:41 JST 2014
--------------------------------------------------------------

Jail環境を構築します。

# mkdir -p /usr/jail/testjail
# cd /usr/mysouce/usr/src
# make installworld DESTDIR=/usr/jail/testjail/
# make distribution DESTDIR=/usr/jail/testjail/

こんな感じにできました。

# ls -l /usr/jail/testjail/
total 76
-rw-r--r--   2 root  wheel  1014 Oct 20 02:19 .cshrc
-rw-r--r--   2 root  wheel   256 Oct 20 02:19 .profile
-r--r--r--   1 root  wheel  6203 Oct 20 02:19 COPYRIGHT
drwxr-xr-x   2 root  wheel  1024 Oct 20 02:16 bin
drwxr-xr-x   7 root  wheel  1024 Oct 20 02:19 boot
dr-xr-xr-x   2 root  wheel   512 Oct 20 02:16 dev
drwxr-xr-x  20 root  wheel  2048 Oct 20 02:19 etc
drwxr-xr-x   3 root  wheel  1536 Oct 20 02:17 lib
drwxr-xr-x   3 root  wheel   512 Oct 20 02:17 libexec
drwxr-xr-x   2 root  wheel   512 Oct 20 02:16 media
drwxr-xr-x   2 root  wheel   512 Oct 20 02:16 mnt
dr-xr-xr-x   2 root  wheel   512 Oct 20 02:16 proc
drwxr-xr-x   2 root  wheel  2560 Oct 20 02:17 rescue
drwxr-xr-x   2 root  wheel   512 Oct 20 02:19 root
drwxr-xr-x   2 root  wheel  2560 Oct 20 02:17 sbin
lrwxr-xr-x   1 root  wheel    11 Oct 20 02:16 sys -> usr/src/sys
drwxrwxrwt   2 root  wheel   512 Oct 20 02:16 tmp
drwxr-xr-x  14 root  wheel   512 Oct 20 02:16 usr
drwxr-xr-x  23 root  wheel   512 Oct 20 02:16 var

では動作確認にょろー。

root@bsd:/root # jail -c path=/usr/jail/testjail command=/bin/sh
#

↑↑↑
これを見たらDockerを使った事がある人は、あっDockerみたいと思うと思うんだ。

root@bsd:/root # jls
   JID  IP Address      Hostname                      Path
     3  -                                             /usr/jail/testjail

jlsは動作しているJail環境の状態をリストに出力します。Docker ps ってあったけど、それと同じ感じだろう。しばらく触ってないのでDockerのコマンドも出てこないや。

出てこないやーで思い出した Jail とは全然関係のない話だけれど、たとえば映画化された小説とか、小説から映画化されたものとかで、何年も昔に見たもので内容はほとんど覚えてなかったはずなのに、何らかのきっかけでザザーッと頭の中に滝のように内容を思い出す事があるんだけれど、あれは何なんだろうね。勝手にデスノート現象と名付けた。全然計画通りじゃないし、その後を読んだりする気が減っちまうんだけれど。何となく語呂が面白いので。
まぁそういう事があるから、とりあえずだとしても検証したものは頭のどこかには残ってるんだろうなぁと思ったりしてるんだよね。んでもって日記に書くなり何なりすると残りやすいとも思う。
こういうのはエピソード記憶とか言うらしい。
記憶にも色々な種類があるそうで、ちょっと調べたけど眠くなったのですぐにやめたw

こないだのChrootの時もデスノート現象が起こったとはいえ、戻ってくる量は少なかったなぁ。
でもまぁ色々やって行けば色々とつながってくるはずだ。と思う。

閑話休題

Jailの環境もできた事だし、環境ファイルを設定していきませう。

ホスト側のrc.confにJail環境の記述をします。

# Jail
jail_enable="YES"
jail_list="testjail"

jail_testjail_rootdir="/usr/jail/testjail"
jail_testjail_hostname="testjail.vincentina.net"
jail_testjail_interface="em0"
jail_testjail_ip="192.168.24.65"
jail_testjail_devfs_enable="YES"

動かしてみます。

root@bsd:/root # /etc/rc.d/jail start
Configuring jails:.
Starting jails: testjail.vincentina.net.
root@bsd:/root # jls
   JID  IP Address      Hostname                      Path
     6  192.168.24.65   testjail.vincentina.net       /usr/jail/testjail

アタッチするには jexec と言うコマンドを。愛をこめて花束を。

root@bsd:/root # jexec 6 csh
root@testjail:/ #
root@testjail:/ # hostname
testjail.vincentina.net

/usrの上に独立したシステムとして動いています。

ホスト
root@bsd:/root # df
Filesystem  1K-blocks    Used     Avail Capacity  Mounted on
/dev/ada0p2 101556444  394724  93037208     0%    /
devfs               1       1         0   100%    /dev
/dev/ada0p3 203113112 7038120 179825944     4%    /usr
/dev/ada0p4 167580376  286872 153887076     0%    /var
devfs               1       1         0   100%    /usr/jail/testjail/dev
Jail
root@testjail:/ # df
Filesystem  1K-blocks    Used     Avail Capacity  Mounted on
/dev/ada0p3 203113112 7038116 179825948     4%    /

resolv.conf をコピー。

root@bsd:/root # cp -p /etc/resolv.conf /usr/jail/testjail/etc/
root@bsd:/root # ls -l /usr/jail/testjail/etc/re
regdomain.xml  remote         resolv.conf
root@bsd:/root # ls -l /usr/jail/testjail/etc/resolv.conf
-rw-r--r--  1 root  wheel  25 Oct 19 07:52 /usr/jail/testjail/etc/resolv.conf

UID/GIDが被らないようにする。

root@bsd:/root # cat /usr/jail/testjail/etc/pw.conf
defaultpasswd no
minuid 10000
maxuid 19999
mingid 10000
maxgid 19999

では、ぼちぼちホストをリブートしてみよう。rc.conf で jail_enable=”YES” としているので、起動時に実行されているはず。

root@bsd:/root # jls
   JID  IP Address      Hostname                      Path
     1  192.168.24.66   testjail.vincentina.net       /usr/jail/testjail
root@bsd:/root # jexec 1 csh
root@testjail:/ #

大丈夫そうですね、ではKVMでゲストを作った時はだいたい最初にYum updateをしているので、Freebsd-updateでもしてみます。

root@testjail:/ # freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 5 mirrors found.
Fetching public key from update5.freebsd.org... done.
Fetching metadata signature for 9.1-RELEASE from update5.freebsd.org... done.
Fetching metadata index... done.
Fetching 2 metadata files... done.
Inspecting system... done.
Preparing to download files... done.
Fetching 38 patches.....10....20....30.... done.
Applying patches... done.
Fetching 104 files... done.

The following files will be added as part of updating to 9.1-RELEASE-p19:

OKっぽいです。と思ったのですが、Jail内ではchflagsが許可されないので、実行はできませんでした。
許可するのは何だか嫌なので、ホストからやります。

root@testjail:/ # exit
exit

root@bsd:/root # mkdir -p /usr/jail/freebsd-update
root@bsd:/root # freebsd-update -b /usr/jail/testjail -d /usr/jail/freebsd-update/ fetch install

終わったにょろーんと思いきや、ソースをホストと合わせてるので、そりゃあ同じくLOTなのでやっぱりこれが出た。

WARNING: FreeBSD 9.1-RELEASE-p19 is approaching its End-of-Life date.
It is strongly recommended that you upgrade to a newer
release within the next 2 months.
Installing updates...install: /usr/jail/testjail//usr/src/crypto/openssl/ssl/s3_cbc.c: No such file or directory

もうバカかとあほかと。

root@bsd:/root # mkdir -p /usr/jail/testjail/usr/src/crypto/openssl/ssl/
root@bsd:/root # freebsd-update -b /usr/jail/testjail -d /usr/jail/freebsd-update/ fetch install

やっと終わりました。

Installing updates... done.

ん~、実験はこのくらいにしておいて、あとは本を読んだらいいかなぁと思うので、この辺で終わりたいと思います。

ららばい。

 

Related Posts


投稿者: Takeken

インターネット利用者のITリテラシーを向上したいという設定の2次元キャラです。 サーバー弄りからプログラミングまで手を付けた自称エッセイストなたけけんの物語。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です