os:freebsd:jail:jailzfs
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン | |||
| os:freebsd:jail:jailzfs [2025/04/13 09:11] – hayashi | os:freebsd:jail:jailzfs [2025/04/13 09:14] (現在) – hayashi | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== jailzfs ====== | + | ====== jailでzfsの利用 |
| - | ====== jail+zfs ====== | + | |
| jailとzfsと組み合わせて、種になるjailを作成して、そのスナップショットをテンプレートにしてzfs cloneで作成します。\\ | jailとzfsと組み合わせて、種になるjailを作成して、そのスナップショットをテンプレートにしてzfs cloneで作成します。\\ | ||
| 行 10: | 行 9: | ||
| # zfs create tank01/ | # zfs create tank01/ | ||
| - | ===== 元となるjailの構築 ===== | ||
| - | |||
| - | 入れるのはbaseとlib32でとりあえず大丈夫でしょう。 | ||
| - | |||
| - | # bsdinstall jail /jail/base | ||
| - | |||
| - | < | ||
| - | 2015.05.20 直った模様(10.1-RELEASE-p10で確認) | ||
| - | |||
| - | // | ||
| - | ===== 元となるjailのupdate ===== | ||
| - | |||
| - | |||
| - | 必要に応じて元jailをupdateしておく((-b でbaseディレクトリを -d でtempを指定している))((jailが起動していなくてもOK)) | ||
| - | |||
| - | # freebsd-update -b /jail/base -d / | ||
| - | # freebsd-update -b /jail/base -d / | ||
| - | |||
| - | jail環境で | ||
| - | # sysctl security.jail.param.allow.chflags=1 | ||
| - | とすることで、jail環境内でも freebsd-update を利用できる模様。((2014.05.07現在未確認)) | ||
| - | |||
| - | ===== 設定 ===== | ||
| - | |||
| - | / | ||
| - | < | ||
| - | # common variables | ||
| - | exec.prestart | ||
| - | exec.start | ||
| - | exec.stop | ||
| - | exec.poststop | ||
| - | exec.clean; | ||
| - | $nic = " | ||
| - | mount.devfs; | ||
| - | path = "/ | ||
| - | host.hostname | ||
| - | |||
| - | # each jail | ||
| - | base { ip4.addr = 192.168.0.128; | ||
| - | </ | ||
| - | |||
| - | この例では、ホストと同じネットワークに接続する設定で、起動時にIP alias を振ってる。 | ||
| - | |||
| - | ホストと同じIPならこんな感じ | ||
| - | < | ||
| - | # common variables | ||
| - | exec.start = "/ | ||
| - | exec.stop | ||
| - | exec.clean; | ||
| - | mount.devfs; | ||
| - | path = "/ | ||
| - | host.hostname = $name; | ||
| - | |||
| - | # each jail | ||
| - | base { | ||
| - | ip4.addr = < | ||
| - | allow.chflags; | ||
| - | allow.raw_sockets; | ||
| - | } | ||
| - | </ | ||
| - | / | ||
| - | jail_enable=" | ||
| - | |||
| - | 起動するjailを指定する場合 | ||
| - | jail_list=" | ||
| - | |||
| - | 並列起動((起動に失敗するケースが有ったのでOFFにしてる)) | ||
| - | jail_parallel_start=" | ||
| ===== スナップショット ===== | ===== スナップショット ===== | ||
| 行 85: | 行 16: | ||
| # zfs list -t snapshot | # zfs list -t snapshot | ||
| - | ===== 新しい監獄をzfs cloneで作る ===== | + | ===== 新しいjailをzfs cloneで作る ===== |
| # zfs clone tank01/ | # zfs clone tank01/ | ||
| - | / | ||
| - | |||
| - | ===== 起動 ===== | ||
| - | |||
| - | # service jail start base | ||
| - | |||
| - | |||
| - | |||
| - | ===== 一覧 ===== | ||
| - | |||
| - | # service jail status | ||
| - | OR | ||
| - | # jls | ||
| - | JID IP Address | ||
| - | | ||
| - | |||
| - | ===== jailに入る ===== | ||
| - | |||
| - | # jexec 1 /bin/sh | ||
| - | ↑ ↑ ログイン用シェル | ||
| - | ↑ jail ID (jail名でも可) | ||
| - | |||
| - | ===== 止める ===== | ||
| - | |||
| - | # service jail stop base | ||
| - | |||
| - | ===== 削除 ===== | ||
| - | |||
| - | # service jail stop base | ||
| - | # chflags -R noschg / | ||
| - | # rm -R / | ||
| - | |||
| - | ===== pkgngの利用 ===== | ||
| - | |||
| - | [[os: | ||
| - | |||
| - | # pkg -j jail名|jailID info | ||
| - | |||
| - | < | ||
| - | |||
| - | < | ||
| - | |||
| - | ちなみに、jail内でpkgコマンドを使う場合、updateもしておかないと、動かないので注意 | ||
| - | |||
| - | jail# pkg update</ | ||
| - | |||
| - | ===== Host側のディレクトリをマウント ===== | ||
| - | |||
| - | nullfsを利用します。((古い記述だとカーネルの再構築が必要となっていますが、10.0では不要でした))\\ | ||
| - | 例:/ | ||
| - | / | ||
| - | |||
| - | /usr/ports/ / | ||
| - | |||
| - | mountすればjail側で使えるようになります | ||
| - | # mount / | ||
| - | |||
| - | / | ||
| - | |||
| - | < | ||
| - | jail名 { | ||
| - | exec.prestart | ||
| - | exec.poststop | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | / | ||
| - | |||
| - | <file ini / | ||
| - | exec.prestart | ||
| - | exec.prestart | ||
| - | |||
| - | exec.poststop | ||
| - | exec.poststop | ||
| - | |||
| - | </ | ||
| - | ==== / | ||
| - | リードオンリーでマウントしてるので、このままではビルドが失敗します。以下のように **/ | ||
| - | < | ||
| - | WRKDIRPREFIX = /var/ports | ||
| - | DISTDIR = / | ||
| - | PACKAGES = / | ||
| - | </ | ||
| - | ==== 共有メモリは推奨されない ==== | ||
| - | |||
| - | **PostgreSQL**のように共有メモリを使用するものはJAILでの動作は推奨されない | ||
| - | [[http:// | ||
| - | |||
| - | ===== ListenポートとIPアドレスの調整 ===== | ||
| - | |||
| - | ホストとjailで別々のIPを振った場合、サーバソフトでもそれを意識した設定が必要\\ | ||
| - | つまり、listenアドレスをきちんと指定しないとエラーを起こす。 | ||
| - | |||
| - | ホストで待ち受けているポートを見る | ||
| - | |||
| - | < | ||
| - | # sockstat -l4 | ||
| - | USER COMMAND | ||
| - | root sendmail 1359 3 tcp4 127.0.0.1: | ||
| - | root sshd 1356 4 tcp4 *:22 *:* | ||
| - | root syslogd | ||
| - | </ | ||
| - | ==== apache ==== | ||
| - | |||
| - | / | ||
| - | |||
| - | Listen 192.168.1.jailアドレス: | ||
| - | Listen 192.168.1.jailアドレス: | ||
| - | |||
| - | ==== Nginx ==== | ||
| - | / | ||
| - | |||
| - | listen 192.168.1.jailアドレス: | ||
| - | ==== lighttpd ==== | ||
| - | |||
| - | / | ||
| - | |||
| - | server.bind = " | ||
| - | ...... | ||
| - | $SERVER[" | ||
| - | |||
| - | ==== sshd ==== | ||
| - | |||
| - | / | ||
| - | |||
| - | ListenAddress <ホストのIPアドレス> | ||
| - | |||
| - | < | ||
| - | # service sshd restart | ||
| - | # sockstat -l4 | ||
| - | USER COMMAND | ||
| - | root sendmail 1359 3 tcp4 127.0.0.1: | ||
| - | root sshd 1356 4 tcp4 <ホストのIPアドレス>: | ||
| - | root syslogd | ||
| - | </ | ||
| - | |||
| - | ==== syslogd ==== | ||
| - | |||
| - | / | ||
| - | |||
| - | syslogd_flags=" | ||
| - | |||
| - | < | ||
| - | # service syslogd restart | ||
| - | # sockstat -l4 | ||
| - | USER COMMAND | ||
| - | root sendmail 1359 3 tcp4 127.0.0.1: | ||
| - | root sshd 1356 4 tcp4 <ホストのIPアドレス>: | ||
| - | root syslogd | ||
| - | </ | ||
| - | |||
| - | ==== inetd ==== | ||
| - | |||
| - | / | ||
| - | |||
| - | inetd_flags=" | ||
| - | |||
| - | ===== jail内のUID/ | ||
| - | |||
| - | jail内の/ | ||
| - | |||
| - | defaultpasswd no | ||
| - | minuid 10000 | ||
| - | maxuid 19999 | ||
| - | mingid 10000 | ||
| - | maxgid 19999 | ||
| - | |||
| - | ===== 起動順 ===== | ||
| - | / | ||
| - | |||
| - | jail_list=" | ||
| - | |||
| - | ===== 依存 ===== | ||
| - | |||
| - | 他のjialに依存してる場合、/ | ||
| - | |||
| - | < | ||
| - | db64 { | ||
| - | host.hostname = " | ||
| - | path = "/ | ||
| - | ip4.addr += " | ||
| - | allow.raw_sockets = 0; | ||
| - | mount.fstab = "/ | ||
| - | exec.consolelog = "/ | ||
| - | } | ||
| - | |||
| - | www64 { | ||
| - | host.hostname = " | ||
| - | path = "/ | ||
| - | ip4.addr += " | ||
| - | allow.raw_sockets = 0; | ||
| - | mount.fstab = "/ | ||
| - | exec.consolelog = "/ | ||
| - | # | ||
| - | depend db64; | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | ===== Memo ===== | ||
| - | |||
| - | デフォルトの状態では、traceroute、ping、bpfを利用したWIDE-DHCP等のraw socketを利用するプログラムが正常に動作しません。 これらを利用するためには、hostの「/ | ||
| - | |||
| - | security.jail.allow_raw_sockets=1 | ||
| - | |||
| - | / | ||
| - | |||
| - | ===== 参考 ===== | ||
| - | * [[https:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[http:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
os/freebsd/jail/jailzfs.1744535496.txt.gz · 最終更新: by hayashi
