iocage を使ってみよう
2018 年7月 26 日
(株)創夢 内藤 祐一郎
iocage とは
●
FreeBSD の上で jail を管理するためのツール
●
役割としては ezjail などと同じ
●
開発元は FreeNAS チーム
➔ FreeNAS に入っているものが ports に登録さ
れています
●
現在も github で開発中です
➔ BSDCan 2018 でも発表がありました
iocage を使うには
●
ZFS が必要です
– ZFS を前提にその機能をたくさん使っています
●
実装は Python3.6 のため
以下のパッケージをインストールします
– py36-iocage
●
インストールしたら次のコマンドで初期化します
– sudo iocage activate <pool 名 >
– ( 以後 iocage の実行には全て root 権限が必要です )
iocage のデータ領域
●
activate すると <pool 名 >/iocage というファイルシステムが作成されます
●
これは /iocage にマウントされます
●
この /iocage の中には以下のファイルシステムが作られます
1.download ( リリース毎のアーカイブ base.txz などを保存 )
2.images (import/export 用の zip ファイル )
3.jails ( 各 jail のルートファイルシステム )
4.log (iocage の動作ログ )
5.releases ( リリース毎のルートファイルシステム )
6.templates ( 各テンプレートのルートファイルシステム )
jail の作成
●
iocage create -n <jail 名 > -r < リリース名 >
– 例 : iocage create -n test10 -r 10.4-RELEASE
– < リリース名 > のアーカイブをダウンロードし、
展開した上で freebsd-update で最新のパッチを当て、
スナップショットを作成して、そのクローンから
<jail 名 > の jail を作成します
– 2回目以降はディスク内のデータが再利用されます
jail の作成(その2)
●
iocage create -n <jail 名 > -r < リリース名 > -c < 個数 >
– <jail 名 >_1 から <jail 名 >_< 個数 > までの jail を作成しま
す
– 例 : iocage create -n test -r 10.4-RELEASE -c 5
➔ test_1, test_2, test_3, test_4, test_5 が作成されます
●
iocage create -n <jail 名 > -t < テンプレート名 >
– テンプレート(後述)から jail を作成します
– -c も同様に使用できます
jail の一覧と削除
● iocage list
– 作成した jail を一覧表示します
●
iocage destroy <jail 名 > [-f]
– 作成した jail を削除します
– -f をつけると何も聞かれずに強制削除します
jail の起動・コマンド実行・終了
●
iocage start <jail 名 >
– jail を起動します
●
iocage console <jail 名 >
– jexec を実行します (root ユーザで /bin/sh が起動します )
●
iocage exec [-U <jail 内のユーザ名 >] <jail 名 > < コマンド >
– 指定したコマンドを [ 指定のユーザで ] 実行します
●
iocage stop <jail 名 >
– jail を終了します
jail の自動起動
●
iocage set boot=on <jail 名 >
– <jai 名 > のプロパティにブートするようマー
クします
● sysrc iocage_enable=YES
– rc スクリプトを有効にします
– 先ほどの boot プロパティが on の jail を rc スク
リプトが起動・終了します
– /etc/jail.conf は使用しません
ネットワーク
●
IPv4 アドレスの設定
– iocage set ip4=new <jail 名 >
– iocage set ip4_addr="em0|192.168.0.99/24" <jail 名 >
– iocage set defaultrouter=192.168.0.1 <jail 名 >
– iocage set allow_raw_sockets=1 <jail 名 >
➔ ping を使えるように
➔ IP アドレス、インタフェース名は適当に読み替
えてください
ネットワーク
●
IPv6 アドレスの設定
– iocage set ip6=new <jail 名 >
– iocage set ip6_addr="em0|2001:0:1:2::f0f0" <jail 名 >
– iocage set defaultrouter6="fe80::1%em0" <jail 名 >
➔ IP アドレス、インタフェース名は適当に読み替
えてください
ネットワーク
●
ホストの設定を引き継ぐ場合
– iocage set ip4=inherit <jail 名 >
– iocage set ip6=inherit <jail 名 >
ネットワーク
●
複数のインタフェースを使用する場合はカンマ区切りで複数記
述します
– 例 :”em0|192.168.0.99/24,em1|192.168.3.99/24”
●
vImage も利用可能ですが、
まだリリースされていないので割愛します
ディスクのマウント
●
jail 起動時にマウントするディスクを指定できます
●
iocage fstab <jail 名 > -a 
”/home/user_a /usr/home/user_a nullfs rw 0 0”
➔ホストの /home/user_a のディレクトリを jail 内の /usr/home/user_a に
マウントしてから起動します
➔ jail 側のプレフィックス (/iocage/jails/<jail 名 >/root) は不要です
➔エントリは iocage fstab <jail 名 > -l で表示されます
➔ iocage fstab <jail 名 > -r < 行番号 > でエントリを削除します
スナップショット
●
iocage snapshot <jail 名 > -n < スナップショット名 >
– 省略時のスナップショット名は YYYY-MM-
DD_hh:mm:ss
– 日時のタイムゾーンは UTC です
●
iocage snaplist <jail 名 > -l
– スナップショットの一覧表示(今はバグで -l が必
須)
●
iocage rollback <jail 名 > -n < スナップショット名 >
– 該当スナップショットにロールバック
●
iocage snapremove <jail 名 > -n < スナップショット名 >
– スナップショットの削除
クローン
●
iocage clone <jail 名 > -n < 新しい jail 名 >
– <jail 名 >@< 新しい jail 名 > でスナップショッ
トを作成し、 zfs clone します
– 今のところスナップショットからのクローン
はサポートされていません
テンプレート
●
iocage set template=yes <jail 名 >
– 既にある jail をテンプレートにします
– テンプレートは起動することができません
– iocage list にも表示されなくなります
– 一覧は iocage list -t と -t オプションを指定します
●
iocage set template=no <jail 名 >
– テンプレートから戻します
– 他 jail のテンプレートとして使われていても構いません
エクスポート
●
iocage export <jail 名 >
– iocage/images/<jail 名 >_YYYY-MM-DD.zip に書き
出します
– zip ファイルの中身は 設定の json ファイルと
zfs send したファイルシステムのイメージで
す
– sha256 のチェックサムを書いたファイルも作
成されます
インポート
●
iocage import <jail 名 >_YYYY-MM-DD
– iocage/images/<jail 名 >_YYYY-MM-DD.zip をインポートします
– 設定ファイルから jail 名を復元しインポートします
– ファイル名は iocage/jails の下のファイルシステム名に使われ
ます
– ファイル名を変えて import するとファイルシステム名が重
ならない限りインポートできますが、同じ jail 名のホストが
複数できるため管理が面倒です
アップデート・アップグレード
●
iocage update <jail 名 >
– freebsd-update を実行します
●
iocage upgrade <jail 名 > -r < リリース名 >
– freebsd-update upgrade を実行します
– -r 11.2-RELEASE などを指定します
小ネタ
●
作成した jail を SeverSpec でテストするには・・・
– spec ファイルに以下を記載します
➢ set :backend, :jexec
➢ set :jail_name, ioc-<jail 名 >
●
iocage で作成した jail の name は必ず ioc- が入るた
め、 ServerSpec 側には ioc- を付けた名前を指定します
●
その他は既存の spec ファイルがそのまま利用可能です
最後に
●
jail の作成に関する機能を一通り紹介ました
●
まだ紹介していない機能もありますので
man iocage などを参照してください
●
github にある README.mdも参考になります

Iocage

  • 1.
    iocage を使ってみよう 2018 年7月26 日 (株)創夢 内藤 祐一郎
  • 2.
    iocage とは ● FreeBSD の上でjail を管理するためのツール ● 役割としては ezjail などと同じ ● 開発元は FreeNAS チーム ➔ FreeNAS に入っているものが ports に登録さ れています ● 現在も github で開発中です ➔ BSDCan 2018 でも発表がありました
  • 3.
    iocage を使うには ● ZFS が必要です –ZFS を前提にその機能をたくさん使っています ● 実装は Python3.6 のため 以下のパッケージをインストールします – py36-iocage ● インストールしたら次のコマンドで初期化します – sudo iocage activate <pool 名 > – ( 以後 iocage の実行には全て root 権限が必要です )
  • 4.
    iocage のデータ領域 ● activate すると<pool 名 >/iocage というファイルシステムが作成されます ● これは /iocage にマウントされます ● この /iocage の中には以下のファイルシステムが作られます 1.download ( リリース毎のアーカイブ base.txz などを保存 ) 2.images (import/export 用の zip ファイル ) 3.jails ( 各 jail のルートファイルシステム ) 4.log (iocage の動作ログ ) 5.releases ( リリース毎のルートファイルシステム ) 6.templates ( 各テンプレートのルートファイルシステム )
  • 5.
    jail の作成 ● iocage create-n <jail 名 > -r < リリース名 > – 例 : iocage create -n test10 -r 10.4-RELEASE – < リリース名 > のアーカイブをダウンロードし、 展開した上で freebsd-update で最新のパッチを当て、 スナップショットを作成して、そのクローンから <jail 名 > の jail を作成します – 2回目以降はディスク内のデータが再利用されます
  • 6.
    jail の作成(その2) ● iocage create-n <jail 名 > -r < リリース名 > -c < 個数 > – <jail 名 >_1 から <jail 名 >_< 個数 > までの jail を作成しま す – 例 : iocage create -n test -r 10.4-RELEASE -c 5 ➔ test_1, test_2, test_3, test_4, test_5 が作成されます ● iocage create -n <jail 名 > -t < テンプレート名 > – テンプレート(後述)から jail を作成します – -c も同様に使用できます
  • 7.
    jail の一覧と削除 ● iocagelist – 作成した jail を一覧表示します ● iocage destroy <jail 名 > [-f] – 作成した jail を削除します – -f をつけると何も聞かれずに強制削除します
  • 8.
    jail の起動・コマンド実行・終了 ● iocage start<jail 名 > – jail を起動します ● iocage console <jail 名 > – jexec を実行します (root ユーザで /bin/sh が起動します ) ● iocage exec [-U <jail 内のユーザ名 >] <jail 名 > < コマンド > – 指定したコマンドを [ 指定のユーザで ] 実行します ● iocage stop <jail 名 > – jail を終了します
  • 9.
    jail の自動起動 ● iocage setboot=on <jail 名 > – <jai 名 > のプロパティにブートするようマー クします ● sysrc iocage_enable=YES – rc スクリプトを有効にします – 先ほどの boot プロパティが on の jail を rc スク リプトが起動・終了します – /etc/jail.conf は使用しません
  • 10.
    ネットワーク ● IPv4 アドレスの設定 – iocageset ip4=new <jail 名 > – iocage set ip4_addr="em0|192.168.0.99/24" <jail 名 > – iocage set defaultrouter=192.168.0.1 <jail 名 > – iocage set allow_raw_sockets=1 <jail 名 > ➔ ping を使えるように ➔ IP アドレス、インタフェース名は適当に読み替 えてください
  • 11.
    ネットワーク ● IPv6 アドレスの設定 – iocageset ip6=new <jail 名 > – iocage set ip6_addr="em0|2001:0:1:2::f0f0" <jail 名 > – iocage set defaultrouter6="fe80::1%em0" <jail 名 > ➔ IP アドレス、インタフェース名は適当に読み替 えてください
  • 12.
    ネットワーク ● ホストの設定を引き継ぐ場合 – iocage setip4=inherit <jail 名 > – iocage set ip6=inherit <jail 名 >
  • 13.
  • 14.
    ディスクのマウント ● jail 起動時にマウントするディスクを指定できます ● iocage fstab<jail 名 > -a ”/home/user_a /usr/home/user_a nullfs rw 0 0” ➔ホストの /home/user_a のディレクトリを jail 内の /usr/home/user_a に マウントしてから起動します ➔ jail 側のプレフィックス (/iocage/jails/<jail 名 >/root) は不要です ➔エントリは iocage fstab <jail 名 > -l で表示されます ➔ iocage fstab <jail 名 > -r < 行番号 > でエントリを削除します
  • 15.
    スナップショット ● iocage snapshot <jail名 > -n < スナップショット名 > – 省略時のスナップショット名は YYYY-MM- DD_hh:mm:ss – 日時のタイムゾーンは UTC です ● iocage snaplist <jail 名 > -l – スナップショットの一覧表示(今はバグで -l が必 須) ● iocage rollback <jail 名 > -n < スナップショット名 > – 該当スナップショットにロールバック ● iocage snapremove <jail 名 > -n < スナップショット名 > – スナップショットの削除
  • 16.
    クローン ● iocage clone <jail名 > -n < 新しい jail 名 > – <jail 名 >@< 新しい jail 名 > でスナップショッ トを作成し、 zfs clone します – 今のところスナップショットからのクローン はサポートされていません
  • 17.
    テンプレート ● iocage set template=yes<jail 名 > – 既にある jail をテンプレートにします – テンプレートは起動することができません – iocage list にも表示されなくなります – 一覧は iocage list -t と -t オプションを指定します ● iocage set template=no <jail 名 > – テンプレートから戻します – 他 jail のテンプレートとして使われていても構いません
  • 18.
    エクスポート ● iocage export <jail名 > – iocage/images/<jail 名 >_YYYY-MM-DD.zip に書き 出します – zip ファイルの中身は 設定の json ファイルと zfs send したファイルシステムのイメージで す – sha256 のチェックサムを書いたファイルも作 成されます
  • 19.
    インポート ● iocage import <jail名 >_YYYY-MM-DD – iocage/images/<jail 名 >_YYYY-MM-DD.zip をインポートします – 設定ファイルから jail 名を復元しインポートします – ファイル名は iocage/jails の下のファイルシステム名に使われ ます – ファイル名を変えて import するとファイルシステム名が重 ならない限りインポートできますが、同じ jail 名のホストが 複数できるため管理が面倒です
  • 20.
    アップデート・アップグレード ● iocage update <jail名 > – freebsd-update を実行します ● iocage upgrade <jail 名 > -r < リリース名 > – freebsd-update upgrade を実行します – -r 11.2-RELEASE などを指定します
  • 21.
    小ネタ ● 作成した jail をSeverSpec でテストするには・・・ – spec ファイルに以下を記載します ➢ set :backend, :jexec ➢ set :jail_name, ioc-<jail 名 > ● iocage で作成した jail の name は必ず ioc- が入るた め、 ServerSpec 側には ioc- を付けた名前を指定します ● その他は既存の spec ファイルがそのまま利用可能です
  • 22.