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

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

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

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

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

手順概要

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

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

direnv リポジトリのクローン

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

$ git clone https://github.com/direnv/direnv
$ cd direnv

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

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

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

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

$ git checkout v2.7.0

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

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

$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang make

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

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

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

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

# /opt/bin が無い場合は作成します
$ sudo mkdir -p /opt/bin

# direnvを/opt/binにコピー
$ sudo cp direnv /opt/bin

.bashrc にdirenv用のhookを設定

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

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

$ cp $(readlink .bashrc) .bashrc.new && mv .bashrc.new .bashrc

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

$ echo 'eval "$(direnv hook bash)"' >> ~/.bashrc

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

参考

スポンサーリンク
レクタングル(大)

シェアする

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

フォローする

スポンサーリンク
レクタングル(大)