グローバルなHackageデータベースを、会社のデプロイ用に凍結された小さいデータベースにスナップショットしたいと思います。Hackageの一部をプライベートサーバーに最も簡単にコピーするにはどうすればよいですか?
4 に答える
これは、可能な限り最も簡単な方法でそれを行う1つのスクリプトです:https ://github.com/jamwt/mirror-hackage
hackage2リポジトリから直接MirrorClientを使用することもできます:http://code.haskell.org/hackage-server/
これは、タイトルの2つの質問に対する答えではなく、OPが達成したいことについての私の解釈に対する答えです。
プロダクションサークルの安定性のレベルに応じて、いくつかの方法で問題に取り組むことができます。
私は依存関係を2つの部分に分割しました。haskellプラットフォームで使用できるもの(すべてのプラットフォームを本番環境で使用し続ける)と、それ以外の少数のパッケージのみを使用し、誰にも(自分自身を含めて)追加させないものです。 (開発者としての)怠惰のために、依存関係ツリーにさらに多くのパッケージを追加します。これらの追加パッケージは、ある種のスクリプトを使用し、cabal fetchを使用してハッキング(バージョンにロック)から収集します。それらを安全に保管してください。安全なパッケージを使用するインストールスクリプトを作成し、新しいマシン(開発者)がチームに追加された場合は、そのスクリプトを使用します。
yackageは素晴らしいですが、それはすべてあなたがあなたの製品をどのように出荷するかにかかっています。古いバージョンを本番環境で使用している場合は、バージョンごとにyackageを設定する必要があります。これは、数年後には静かに煩わしいものになる可能性があります。
Voker57のhackage-mirror.shを使用してHackageをダウンロードできます。実行するには「curl」が必要です。DebianベースのLinuxディストリビューションを使用している場合は、apt-getinstallcurlと入力してcurlをインストールできます。
これはHackageの一部ではありませんが、Hackage全体をダウンロードするbashスクリプトを作成しました。これは、HTTPサーバーを使用してミラーとしてさらに簡単に設定できます。また、 Stackですぐに使用できるGHCコンパイラなどの必要なものをすべてダウンロードします。
現在、完全なHackageミラーは〜10GiB(すべてのバージョンの〜100000パッケージ)を占有し、GHCコンパイラのようなスタック関連のものは〜21GiB(〜200ファイル)を占有します。スクリプトを実行すると、すでにダウンロードされているものがスキップされるため、新しいものだけがダウンロードされます。したがって、これは「オフラインでライブ」し、オンライン時に最新の状態に同期するための非常に便利な方法です。