正直なところ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.
ん~、実験はこのくらいにしておいて、あとは本を読んだらいいかなぁと思うので、この辺で終わりたいと思います。
ららばい。