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 · 最終更新: 2025/04/13 09:11 by hayashi