ソフトウェアコンポーネントの有効期間が短い(CIとテストビルド)を実行するシステムを構築しようとしています。それは、それぞれがプライベートホストに存在するという私の要件によれば必須です。準仮想化オプションも含めるように定義しています。頭痛が大幅に軽減されるようです。
私はMacで作業しているので、ほとんどすべてのテクノロジーが使用できなくなり、libvirtやquemuなどが機能しなくなります。ただし、Debianへの展開を計画しています。そのため、ホストマシンとゲストドメインのプロビジョニングをスクリプト化できれば、Debianで実行されるものはすべて元に戻ります。
私の意図したセットアップは、Debianインストーラーをブートストラップするために使用できることでした。つまり、ブート時にマシンが自動的にプロビジョニングされることを意味します(Chef、Puppet、Babushka、問題ありません)-そのプロビジョニングの一部は、コンテナの起動に使用できるテンプレートrootfs。コンテナー自体もプロビジョニングする必要があります。これにより、コンテナーが起動したときに、コンテナーが実行する必要がある作業を認識し、その作業を実行して終了できます。
要するに、ここに私が必要とするワークフローがあります:
- マシンを(仮想またはその他の方法で)ブートし、作業を行う準備をします。
- 作業は、chef / puppet / babushka / etcによってインストールされたスクリプトによって実行される必要があります
- 作業が始まると、作業を行うために仮想マシンを起動する必要があります。
- VMは作業を行い、終了し、そのリソースを親/ホストマシンに解放します。(妥当なハードウェア上でこれを少なくとも数百のゲストVMに拡張することが重要です)
私は次のことを試して、以下に示す理由のためにそれらを放棄するようになりました:
ホストマシンの場合
- InstalinuxのプレシードDebianマイクロISOイメージ(LinuxCOEがサポートされている)(悪い: まったく機能しなかった(「カーネルモジュールが見つかりませんでした」(InstalinuxイメージがFTPリポジトリと同期していないため、このソリューションは非常に壊れやすいため、また、インストール後、既知のSSHキー、ホストキーなどをマシンにドロップするためのスコープをあまり許可していません。ファイアアンドフォーゲットのようです。結局、実行中のマシンがありますが、アクセスできません。。)
- プレシードDebian netinst ISO(悪い:上記と同じ問題。ただし、ISOとFTPリポジトリの間にカーネルの相違がないため、通常はインストールが完了します。インストール後の範囲はまだ限られています。 良い:絶対に確実で再現性があり、 MacやベアメタルマシンのVMテクノロジスタックで簡単にスローできればどこでも機能しますが、十分にポストインストールできません)
- rootfsのを構築し、ブート可能なハードディスクイメージとしてそれをコンパイルする様々な方法が(悪い:少し私は作業は地獄のように壊れやすいし得ることができますどのような、実際のマシン上にインストールすることは困難であり、複雑なビルドプロセスであるだろう。 良い: もし私はそれを機能させることができました、これはマシンをsshキー、ホストキー、ホスト名、Gitからインストールされたソフトウェア、およびその他のもので指定された仕様に事前設定するための最も広い範囲を提供するようですが、問題はどのようにパッケージするかです配布用、またはレクリエーション用のスクリプトの作成方法。)
正直なところ、VMを何もない状態から実行中の機能している有用なシステムにするために人々がどのようなテクノロジを使用することが期待されるかはわかりません。私には3つのステップのように思えますa)オペレーティングシステム、b)システム構成(ユーザーなど)、そしてc)ファイルシステムの変更。
ゲスト(仮想)マシンの場合:
- 多くのこと、私はここでの答えは、で作成された読み取り専用のrootfsと
debootstrap
、この特定のインスタンスに対して実行される作業(ジョブマニフェスト)を含むLXCコンテナー上の特別なパーティションであると思います。OSの構築、起動、ユーザーの作成、gitからのソフトウェアのチェックアウト、および作業の実行に関する通常の注意事項をすべて挿入します。
どのツールに手を伸ばせばよいのか本当にわからないのですが、問題は十分に解決されているようです。しかし、どこから始めればいいのかわかりません。
ほとんどの人は、ホストマシンについて、仮想化テクノロジを選択し、マシンを起動して動作状態にしてから、スナップショットを作成するように提案しているようです(libvirtは、このための論理的なお気に入りのようです)。スナップショットを使用して、後続のインストールをテスト用に、または本番環境で起動します。
ゲストマシンでは、lxcが最も簡単なオプションを提供しているようですが、コンテナのバックグラウンド化と、コンソール経由でのコンテナへの接続が現在のすべてのカーネルで壊れており、安定版のDebianで利用できるlxcの最新バージョンは18か月以上前のものです、そして広く使用されている多くの機能が不足しています。
通常、私はアプリケーション開発者であり、サーバーレベルのテクノロジを使用することはあまりありません(そして、SFがこの質問に「主観的すぎる」とフラグを立てることは確かです)が、どのツールに到達すればよいかは本当にわかりません。
最後の言葉は、このためにVagrantボックスを使用している1つの同様にスタックされたプロジェクト(travis-ci.org)を知っているということです。重要なサービスインフラストラクチャに使用されているテストVMの小規模なデスクトッププロビジョニング用に設計された、かなり鈍い道具、大きくて遅い、ルビー指向のツールのように見えますが、私はそれらの人の一部も知っており、私よりも賢いです、多分彼らはただあきらめた
助けてくれてありがとう。