ユーザ用ツール

サイト用ツール


os:freebsd:jail:jailzfs

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
os:freebsd:jail:jailzfs [2025/04/13 09:11] hayashios:freebsd:jail:jailzfs [2025/04/13 09:14] (現在) hayashi
行 1: 行 1:
-====== jailzfs ====== +====== jailzfsの利用 ======
-====== jail+zfs ======+
  
 jailとzfsと組み合わせて、種になるjailを作成して、そのスナップショットをテンプレートにしてzfs cloneで作成します。\\ jailとzfsと組み合わせて、種になるjailを作成して、そのスナップショットをテンプレートにしてzfs cloneで作成します。\\
行 10: 行 9:
   # zfs create tank01/jail/base   # zfs create tank01/jail/base
  
-===== 元となるjailの構築 ===== 
- 
-入れるのはbaseとlib32でとりあえず大丈夫でしょう。 
- 
-  # bsdinstall jail /jail/base 
- 
-<del>//**※baseシステムをupdateしているとftpで10.0-RELEASE-p1ディレクトリにアクセスしようとして、失敗するので注意**//</del>((<del>/usr/libexec/bsdinstall/mirrorselect ディレクトリ名に uname -r を使用しているため。9.0-p3あたりから改善要望が出ているが、今のところ未対応の模様</del>))\\ 
-2015.05.20 直った模様(10.1-RELEASE-p10で確認) 
- 
-//※最初のサイト選択で、<Other> を選択して、-pn (nはパッチレベル)を取り除くことでも対応可能// 
-===== 元となるjailのupdate ===== 
- 
- 
-必要に応じて元jailをupdateしておく((-b でbaseディレクトリを -d でtempを指定している))((jailが起動していなくてもOK)) 
- 
-  # freebsd-update -b /jail/base -d /jail/base/var/db/freebsd-update fetch 
-  # freebsd-update -b /jail/base -d /jail/base/var/db/freebsd-update install 
- 
-jail環境で 
-  # sysctl security.jail.param.allow.chflags=1 
-とすることで、jail環境内でも freebsd-update を利用できる模様。((2014.05.07現在未確認)) 
- 
-===== 設定 ===== 
- 
-/etc/jail.conf 
-<code> 
-# common variables 
-exec.prestart   += "ifconfig ${nic} inet ${ip4.addr} add"; 
-exec.start       = "/bin/sh /etc/rc"; 
-exec.stop        = "/bin/sh /etc/rc.shutdown"; 
-exec.poststop   += "ifconfig ${nic} inet ${ip4.addr} -alias"; 
-exec.clean; 
-$nic             = "xn0"; 
-mount.devfs; 
-path             = "/jail/$name"; 
-host.hostname    = $name; 
- 
-# each jail 
-base    { ip4.addr = 192.168.0.128; } 
-</code> 
- 
-この例では、ホストと同じネットワークに接続する設定で、起動時にIP alias を振ってる。 
- 
-ホストと同じIPならこんな感じ 
-<code> 
-# common variables 
-exec.start = "/bin/sh /etc/rc"; 
-exec.stop  = "/bin/sh /etc/rc.shutdown"; 
-exec.clean; 
-mount.devfs; 
-path = "/jail/$name"; 
-host.hostname = $name; 
- 
-# each jail 
-base { 
-        ip4.addr = <ホストのIPアドレス>; 
-        allow.chflags;       <= chflagsの使用許可(freebsd-updateが実行できるようにするため) 
-        allow.raw_sockets;   <= RAW SOCKETの使用許可(ping等が使用できるようにするため) 
-} 
-</code> 
-/etc/rc.conf 
-  jail_enable="YES" 
- 
-起動するjailを指定する場合 
-  jail_list="jail01 jail02 jail05" 
- 
-並列起動((起動に失敗するケースが有ったのでOFFにしてる)) 
-  jail_parallel_start="YES" 
 ===== スナップショット ===== ===== スナップショット =====
  
行 85: 行 16:
   # zfs list -t snapshot   # zfs list -t snapshot
  
-===== 新しい監獄をzfs cloneで作る =====+===== 新しいjailをzfs cloneで作る =====
  
   # zfs clone tank01/jail/base@10.0p1 tank01/jail/NewJail   # zfs clone tank01/jail/base@10.0p1 tank01/jail/NewJail
  
-/etc/jail.confを忘れないように 
- 
-===== 起動 ===== 
- 
-  # service jail start base 
- 
- 
- 
-===== 一覧 ===== 
- 
-  # service jail status 
-    OR 
-  # jls 
-  JID  IP Address      Hostname                      Path 
-    -               yourjail.localdomain          /path/to/yourjail 
- 
-===== jailに入る ===== 
- 
-  # jexec 1  /bin/sh 
-          ↑  ↑ ログイン用シェル 
-          ↑ jail ID (jail名でも可) 
- 
-===== 止める ===== 
- 
-  # service jail stop base 
- 
-===== 削除 ===== 
- 
-  # service jail stop base 
-  # chflags -R noschg /jail/base/* 
-  # rm -R /jail/base/* 
- 
-===== pkgngの利用 ===== 
- 
-[[os:freebsd:pkg_8|pkgコマンド]]はjailの外から利用可能です 
- 
-  #  pkg -j jail名|jailID info 
- 
-<del>ただし、先にjail内でpkgのインストールが必要です</del>((現在は不要。12.1で確認)) 
- 
-<del>  jail# pkg 
- 
-ちなみに、jail内でpkgコマンドを使う場合、updateもしておかないと、動かないので注意 
- 
-  jail# pkg update</del> 
- 
-===== Host側のディレクトリをマウント ===== 
- 
-nullfsを利用します。((古い記述だとカーネルの再構築が必要となっていますが、10.0では不要でした))\\ 
-例:/usr/ports を jailで共有する\\ 
-/etc/fstabに以下のような記述\\ 
- 
-  /usr/ports/ /jail/jail名/usr/ports nullfs ro,noauto 0 0 
- 
-mountすればjail側で使えるようになります 
-  # mount /jail/jail名/usr/ports 
- 
-/etc/jail.confだとこんな感じで書けば、jailの起動時にマウントして停止時にumountしてくれるはず 
- 
-<code> 
-jail名 { 
-    exec.prestart   += "mount /jail/jail名/usr/ports"; 
-    exec.poststop   += "umount /jail/jail名/usr/ports"; 
-} 
-</code> 
- 
-/etc/jail.confで完結させる場合((12.0からmount_nullfsを使用するようになりました)) 
- 
-<file ini /etc/jail.conf> 
-exec.prestart   += "mount_nullfs -o ro  /usr/ports/ /jail/$name/usr/ports"; 
-exec.prestart   += "mount_nullfs        /var/cache/pkg/ /jail/$name/var/cache/pkg"; 
- 
-exec.poststop   += "umount /jail/$name/usr/ports"; 
-exec.poststop   += "umount /jail/$name/var/cache/pkg"; 
- 
-</file> 
-==== /usr/portsの場合 ==== 
-リードオンリーでマウントしてるので、このままではビルドが失敗します。以下のように **/etc/make.conf** で作業用のディレクトリを指定します。 
-<file> 
-WRKDIRPREFIX = /var/ports 
-DISTDIR = /var/ports/distfiles 
-PACKAGES = /var/ports/packages 
-</file> 
-==== 共有メモリは推奨されない ==== 
- 
-**PostgreSQL**のように共有メモリを使用するものはJAILでの動作は推奨されない 
-[[http://www.jp.freebsd.org/QandA/HTML/1866.html]]((# sysctl -w security.jail.sysvipc_allowed=1)) 
- 
-===== ListenポートとIPアドレスの調整 ===== 
- 
-ホストとjailで別々のIPを振った場合、サーバソフトでもそれを意識した設定が必要\\ 
-つまり、listenアドレスをきちんと指定しないとエラーを起こす。 
- 
-ホストで待ち受けているポートを見る 
- 
-<code> 
-# sockstat -l4 
-USER COMMAND  PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS 
-root sendmail 1359 3 tcp4 127.0.0.1:25 *:* 
-root sshd     1356 4 tcp4 *:22 *:* 
-root syslogd  1293 7 udp4 *:514 *:* 
-</code> 
-==== apache ==== 
- 
-/usr/local/etc/apache/httpd.conf 
- 
-  Listen 192.168.1.jailアドレス:80 
-  Listen 192.168.1.jailアドレス:443 
- 
-==== Nginx ==== 
-/usr/local/etc/nginx/nginx.conf((前述手順でjailを作った場合なくても動いた)) 
- 
-  listen 192.168.1.jailアドレス:80 
-==== lighttpd ==== 
- 
-/usr/local/etc/lighttpd/lighttpd.conf 
- 
-  server.bind = "192.168.1.jailアドレス" 
-  ...... 
-  $SERVER["socket"] == "192.168.1.jailアドレス:80" { } 
- 
-==== sshd ==== 
- 
-/etc/ssh/sshd_config((前述手順でjailを作った場合なくても動いた)) 
- 
-  ListenAddress <ホストのIPアドレス> 
- 
-<code> 
-# service sshd restart 
-# sockstat -l4 
-USER COMMAND  PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS 
-root sendmail 1359 3 tcp4 127.0.0.1:25 *:* 
-root sshd     1356 4 tcp4 <ホストのIPアドレス>:22 *:* 
-root syslogd  1293 7 udp4 *:514 *:* 
-</code> 
- 
-==== syslogd ==== 
- 
-/etc/rc.confに以下を追記する 
- 
-  syslogd_flags="-ss" 
- 
-<code> 
-# service syslogd restart 
-# sockstat -l4 
-USER COMMAND  PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS 
-root sendmail 1359 3 tcp4 127.0.0.1:25 *:* 
-root sshd     1356 4 tcp4 <ホストのIPアドレス>:22 *:* 
-root syslogd  1293 7 udp4 <ホストのIPアドレス>:514 *:* 
-</code> 
- 
-==== inetd ==== 
- 
-/etc/rc.confに以下を追記する 
- 
-  inetd_flags="-wW -C 60 -a <ホストのIPアドレス>" 
- 
-===== jail内のUID/GIDの範囲を指定する ===== 
- 
-jail内の/etc/pw.conf(/jail/jail名/etc/pw.conf)で指定 
- 
-  defaultpasswd no 
-  minuid 10000 
-  maxuid 19999 
-  mingid 10000 
-  maxgid 19999 
- 
-===== 起動順 ===== 
-/etc/rc.confのjail_listを記述することで起動準を指定できる 
- 
-  jail_list="jail1 jail2 jail3" 
- 
-===== 依存 ===== 
- 
-他のjialに依存してる場合、/etc/jail.confで depend で指定する 
- 
-<code> 
-db64 { 
-        host.hostname = "db64.example.com"; 
-        path = "/home/jails/db64"; 
-        ip4.addr += "192.168.46.2/32"; 
-        allow.raw_sockets = 0; 
-        mount.fstab = "/etc/fstab.db64"; 
-        exec.consolelog = "/var/log/jail_db64_console.log"; 
-} 
- 
-www64 { 
-        host.hostname = "www.example.com"; 
-        path = "/home/jails/www64"; 
-        ip4.addr += "192.168.46.4/32"; 
-        allow.raw_sockets = 0; 
-        mount.fstab = "/etc/fstab.www64"; 
-        exec.consolelog = "/var/log/jail_www64_console.log"; 
-#       depend db,db64; 
-        depend db64; 
-} 
-</code> 
- 
-===== Memo ===== 
- 
-デフォルトの状態では、traceroute、ping、bpfを利用したWIDE-DHCP等のraw socketを利用するプログラムが正常に動作しません。 これらを利用するためには、hostの「/etc/sysctl.conf」に以下の記述を追記 
- 
-  security.jail.allow_raw_sockets=1 
- 
-/etc/resolv.confの直し忘れが多いので注意 
- 
-===== 参考 ===== 
-  * [[https://people.allbsd.org/~hrs/FreeBSD/sato-FBSDW20200925-jail.pdf|復習 FreeBSD Jail]] 
-  * [[http://journal.reallyenglish.com/2009/10/21/freebsd-jail-for-programmer-1.html|FreeBSD/Jailを使用したプログラマのための仮想環境]] 
-  * [[http://bompopo.wordpress.com/2014/02/16/freebsd10-0r%E3%81%A7jail%E3%81%AE%E8%A8%AD%E5%AE%9A/|FreeBSD10.0Rでjailの設定]] 
-  * [[http://bompopo.wordpress.com/2014/02/17/%E4%B8%80%E6%AD%A9%E9%80%B2%E3%82%81%E3%81%9Fjail-conf%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9/|一歩進めたjail.confの書き方]] 
-  * [[http://blog.livedoor.jp/dankogai/archives/51916648.html|FreeBSD - Jailは仮想化ではなく半仮想化と呼ぶべきではないか]] 
-  * [[http://rauq04.blogspot.jp/2012/03/freebsd-memo-qjail.html|qjail を使って簡易仮想環境作成]] 
-  * [[http://www.bugbearr.jp/?FreeBSD%2FJail|FreeBSD/Jail]] 
-  * [[http://d.zinrai.info/blog/html/2013/08/22/freebsd_jail_vimage_zfs.html|FreeBSD 9.1 VIMAGE + ZFS で Jail環境構築]] 
-  * [[http://gihyo.jp/admin/serial/01/bsd-yomoyama/0003|複数バージョンのFreeBSDをJailで共有させる方法]] 
-  * [[https://therub.org/2014/08/11/convert-freebsd-jails-from-rc.conf-to-jail.conf/|Convert FreeBSD 10 Jails from rc.conf to jail.conf]] 
-  * [[https://gist.github.com/sdebnath/086874c5df8b68e0df69|FreeBSD Jails with VLAN HOWTO]] 
-  * [[https://bastille.readthedocs.io/en/latest/chapters/jail-config.html|jail.conf]] 
-  * [[https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=233310|jails: Modularize configuration system (conf.d)]] 
-  * [[https://qiita.com/dankogai/items/ffc4f31a8a949bd7ec01|ZFS - スナップショットいつやるか?今でしょ!]] 
  
  
os/freebsd/jail/jailzfs.txt · 最終更新: 2025/04/13 09:14 by hayashi