隔離された環境でのパッケージの操作。zfsデータセットとjailの使用

前回の記事では、プラグイン配布システムが新しいICSバージョンでどのように機能するかについて説明しました。今日は、システムに単一のプラグインをデプロイする方法について説明します。

プラグインの要件に合わせて特別に調整されたサンドボックスで各プラグインを実行することをお勧めします。さらに、システムがプラグインと相互作用することを可能にする環境で。以下では、これが標準のパッケージ処理に適用されることを理解するために、「パッケージ」という用語を使用します。



何を選ぶ?



ほとんどの場合、これには何が使用されますか?もちろん、Docker!



pkg install docker



pkg:一致する「docker」をインストールするために使用できるパッケージがリポジトリに見つかり







ません。Dockerは公式のFreeBSDサポートを持っていません。もちろん、リポジトリにはそのようなパッケージはありません。以前のバージョンのIKSでは、Dockerの非公式の自作ポートを使用していましたが、そのサポートは非​​常に面倒であり、さらに、それを使用すると多くの落とし穴が発生します。







しかし、FreeBSDには、隔離された環境に対する独自のネイティブサポートがあります。それは刑務所と呼ばれ、私たちの目的にとっては港湾労働者よりも悪くはありません。Linuxのコンテナーよりもはるかに早く登場したことは注目に値します。典型的なコンテナがどのように構成されているかを見てみましょう(bsd用語のセル)。



データセットの準備とパッケージのインストール



まず、パッケージセルを構成するデータセットを作成する必要があります。私たちのシステムはZFSファイルシステムを使用しており、継承されたデータセットをいくつでも作成できます。



デフォルトでは、システムにはFreeBSDベースワールドのデータセットがあり、そこからスナップショット(スナップショット)を作成します



。zfssnapshotzp000111 / freebsd @ snap



zp000111は、ルートファイルシステムプールの名前です。zfsmountコマンドで確認できます zp000111 / freebsdは、世界を格納するデータセットの名前です。スナップショットの名前は、@記号で示されます このスナップショットを一度作成すると、将来的にはパッケージのすべてのデータセットがそこから継承されます。



このスナップショットから、パッケージが存在するクローンを作成します



。zfsclone zp000111 / freebsd @ snap zp000111 / packet / <packet_name>



最初に、データセットを現在のシステムに



マウントし ます: mount -t zfs zp000111 / packet / < packet_name> / mnt / packets / <packet_name>



これで、必要なパッケージをインストールでき



ます。pkg-r / mnt / packet / <packet_name> install -y <packet_name>



-rスイッチは、指定されたディレクトリ内へのインストールを保証します。



必要に応じて、パッケージ内での作業に便利なmcなど、他の必要なパッケージをインストールできます。



アンマウントを行います。これは必須ではありませんが、将来的にセルを起動するために役立ちます。



umount / mnt /パケット/ <packet_name>



細胞の準備



まず、本番システムでのパッケージデータの保存を決定する必要があります。/ usr / local / share / packetsとします。



ディレクトリ<packet_name>



mkdir / usr / local / share / packet / <packet_name>を



追加します。次に、マウントポイント<packet_name> .fstabを使用してファイルを作成します。マウントされたデータセット内のどのディレクトリが同期されているかについてのjailの情報が含まれています:



/ usr / local / share / packet / <packet_name> / mnt / packet / <packet_name> / usr / local / share / data nullfs rw 00



これはディレクトリ/ usr / local / share / dataが作業システムのディレクトリに接続されることを通知する方法 マウントされたパッケージで。これはjail(ファイルシステムnullfs)であり、外部システム(rw)とデータを交換するために読み取りと書き込みの両方が許可され、ファイルシステムに関する情報を保存し、その整合性をチェックする必要はありません(0および0)。



ファイルを便利な場所、たとえば/ usr / local / etc / packets / <packet_name> / <packet_name> .fstabに保存します



。次に、パッケージのjailの構成ファイルを設定する必要があります。



最小限の設定での典型的な設定は次のようになります
host.hostname = "<packet_name>";

path = " /mnt/packets/<packet_name>";

interface = «em0»;

ip4.addr = 192.168.0.1;

allow.raw_sockets = 1;

exec.start = "/bin/sh /etc/rc";

exec.stop = "/bin/sh /etc/rc.shutdown;";

exec.clean;

enforce_statfs = 0;

mount.devfs;

mount.fstab = /usr/local/etc/packets/<packet_name>/<packet_name>.fstab;



システム内のネットワークカードの1つをインターフェイスとして指定します。外部から利用できるIPアドレスを割り当てます。また、pingやtracerouteなどのネットワーク機能を機能させるには、allow.raw_socketsオプションを有効にします。



execコマンドセクションは、jail内のシステムを起動およびシャットダウンするために実行するコマンドを指定します。これは標準のFreeBSDの世界なので、システムのオンとオフを切り替えるためのベースパスを指定します。



最後の3つのオプションを使用すると、作成されたfstabファイルに従って、外部システムのマウント、物理デバイスの接続、およびjail内のデータフォルダーの外部フォルダーへのマウントが可能になります。



ファイルは、同じディレクトリ/ usr / local / etc / packets / <packet_name> / <packet_name> .jail.confなどの便利な場所に保存します。





私たちは皆、ケージの中でパッケージを起動する準備ができています。パッケージデータセットをマウントすることから始めましょう:



mount -t zfs zp000111 / packet / <packet_name> / mnt / packet / <packet_name>



これで、



jail を実行できます: jail -f / usr / local / etc / packet / <packet_name> / <packet_name> .jail.conf -c <packet_name>



-rオプションを使用して、構成ファイルへのパスを指定し、-cは、指定された名前で新しいjailを作成する必要があることを示します。



セルが起動しました。確認できます



。jls-j<packet_name>



セルの名前とjailシステム内のIDを含む行が表示されます。



ここで、パッケージの作業システムを入力する必要がある場合は、次のコマンドを実行します



。jexec<jail_id>/ bin / tcsh







jail



を停止してパッケージをアンマウントするには、次の逆のコマンドを実行します 。jail-f / usr / local / etc / packets / <packet_name > / <packet_name> .jail.conf -r <packet_name> umount / mnt / packet / <packet_name >



さらに、パッケージによってファイルシステムの/ usr / local / share / dataフォルダーに保存されたすべてのデータは、外部システムのパス/ usr / local / share / packet / <packet_name>で利用できます。



合計



したがって、パッケージ用に分離された環境を作成しました。



外部のセルは指定されたアドレスにpingを送信するため、その中で発生したすべてのネットワークサービスもそのアドレスで利用できます。また、ユーザーデータは本番システムの外部フォルダーに保存されるため、保存とバックアップが簡単です。



同様のシステムがIKSの新しいバージョンで機能し 、その使用がさらに簡単で楽しいものになります。



今日はこれでおしまいです。ご清聴ありがとうございました。



All Articles