完全に使い捨てのビルド環境を作成するにはどうすればよいですか?

完全に使い捨てのビルド環境を作成するにはどうすればよいですか?

一般的なLinuxディストリビューションを新しくインストールするとします。構築してホストするWebアプリケーションのソースコードを含むtarballをダウンロードしました。このプロジェクトは少し近代的で、Node.js/npmとRuby/gem用のシステムパッケージをインストールする必要がありました。すべての前提条件が満たされたら、Webサーバーが提供できるファイルを生成するアプリケーションを構築できるように、いくつかの他のタスクを実行するnpm install -g必要があります。gem install.js.css

これでアプリをビルドしたので、これを達成するためにインストールしなければならなかったすべてを削除したいと思います。ソースソースコード、JS / CSSコンパイラ、または今コンパイルする依存関係ビルドアーティファクトは必要ありません。場合によっては、Node.js/Rubyをインストールする必要さえありません。すぐにコードを再コンパイルする予定はありません。その日が来たら、前提条件だけを再インストールします。

私は、アプリケーションを構築するためにシステムに適用する必要があるすべての変更を「解体」する簡単な方法を探しています。つまり、システムをタールボールをダウンロードする前の状態に戻しますが、最終的なビルド結果は維持します。 (共有ライブラリの問題にもかかわらず、C / C ++コンパイルのための同様のワークフローを可能にするのに十分なプロセスが一般的であれば良かったでしょう。)

私はchrootを調べて、それが声明に合うかもしれませんが、過剰に見えます。また、仮想マシンからビルドし、ビルドアーティファクトを抽出し、単にマシンを削除することも考慮しましたが、これも非効率的だと考えられます。このユースケースに適した一種のファイルシステム「スナップショット」機能はありますか?それとも、さまざまなパッケージマネージャに専用の使い捨て一時ディレクトリで特別に作業するように指示する方法はありますか?

ベストアンサー1

いくつかのオプションがあります。

従来のアプローチは、ソースコードのすべてのアイテムをホームディレクトリに手動でインストールし、完了したらコンテンツを削除することです。これの利点は、すべてのディストリビューションで実行され、いくつかの依存関係がインストールされている場合にシステムライブラリを利用できることです。しかし、欠点は、何かを正しく構築することがしばしば難しいということです。

ほとんどのパッケージマネージャは通常、コマンドラインオプションまたは環境変数を介して設定された特定のパスにインストールできます。私はEmergency、pacman、DNFがこれをサポートすると確信しており、Zypperもそれをサポートすると確信しています。 dpkgベースのシステムを扱うときにdebootstrapプログラムを使用してchrootを生成することもできます(このプログラムを使用して初期化してからchrootし、そこにインストールされているパッケージマネージャを使用して必要なパッケージを追加できます)。

ディストリビューションオプションもいくつかあります。

  1. BTRFS<にインストールすると、SUSEはパッケージマネージャトランザクションの前後にシステムのスナップショットを撮ることができます。私はSUSEを頻繁に使用しないので、正確に説明することはできませんが、少し努力すればあなたが望むことを達成することができます。
  2. NixOSで使用されるNixパッケージマネージャは、デフォルトでカスタマイズ可能なインストール済みパッケージセットであるユーザー固有の「プロファイル」を受け入れます。これは、接続されたユーザーが自由に作成、変更、切り替え、および削除することができ(使用するためにroot権限を必要としない)、これを行うための別のクイックオプションを提供します。

おすすめ記事