CoreOSにdirenvをソースから入れる

CoreOSで頻繁に手動でコンテナを起動していると、各種環境変数をいい感じで管理するためにdirenvを使いたくなります。
direnvのバイナリをダウンロードして導入することもできますが、今回はCoreOS上でdirenvをソースからコンパイルして導入する方法を紹介します。

direnv自体の使い方については

等に分かりやすく解説されていますので、こちらを参照ください。

ちなみに、CoreOSは利用できるライブラリが限られ、独自にライブラリをインストールすることも難しいため、独自にツールを導入する場合にはバイナリ単体で動作するツールを入れることが多いです。direnvもgo実装のバイナリ単体で動作するツールです。

手順概要

全体の手順としては以下のとおりです。

  • GitHubからリポジトリをクローン
  • ソースをdockerコンテナ内部でコンパイル
  • バイナリを /opt/bin にコピー
  • .bashrc にdirenv用のhookを設定

direnv リポジトリのクローン

まず、direnvのリポジトリをGitHubからクローンします。

dockerコンテナ内部でソースをコンパイル

コンパイルですが、CoreOSにはそもそもgolangが入っていないし、入れるのも大変なので、direnvのソースディレクトリをgolangのコンパイル環境を備えたdockerコンテナにマウントしてコンパイルします。

コンパイルには、Dockerオフィシャルのgolang環境のコンテナである golang を利用します。

お好みですが、コンパイル前に、まず最新リリースのコミットにチェックアウトします。
(記事執筆時点では、 v2.7.0 でした)

そして、golangコンテナにカレントディレクトリをマウント(コンテナ内部の /usr/src/myapp に)してコンパイルします。
direnvはコンパイル用にMakefileが用意されているため、makeコマンドでコンパイルできます。

下記のようにコンテナを起動してコンパイルします。

初回はコンテナのダウンロードで多少時間がかかるかと思いますが、コンテナが起動しコンパイルが終わると、カレントディレクトリにdirenvのバイナリができています。

バイナリを/opt/binにコピー

CoreOSは、/opt/binにデフォルトでパスが通っているので、独自にツールを入れる場合はここが便利です。

下記のようにdirenvのバイナリを /opt/bin にコピーします

.bashrc にdirenv用のhookを設定

direnvはディレクトリ移動毎に、.envrcファイルの有無を判定し環境変数をロード・アンロードするツールのため、利用しているシェルに応じたhookを.bashrc等に設定する必要があります。CoreOSの場合はbashなので、ホームディレクトリの.bashrcにdirenv用のhookを追加します。

まずその前に、CoreOSの.bashrcはデフォルトではシンボリックリンクなので、リンクを解除します。

そして、.bashrcにdirenv用のhookを追記します。

以上で設定完了です。シェルの再起動後からdirenvを利用できます。

参考

シェアする

  • このエントリーをはてなブックマークに追加

フォローする