Dockerに頼らずにCentOS7でElixir開発環境を整備した話

はじめに

windowsであればバイナリが配布されているし、 macubuntuであればおもむろにbrew(apt-get)を打つだけで簡単にElixir開発環境が構築できる。
さらにFedora17以降ならばyumで同様に一発構築が可能。
しかしCentOS7では、リポジトリが登録されておらず(このあたり曖昧です)yumで環境構築ができない。

世の中には親切な人があふれていて、実はすでにdockerイメージを提供してくれている。

CentOS + Erlang + Elixir + PhoenixのDockerイメージで今日から始めるElixir on Phoenix入門

とはいえ、中身が把握できていないと不安な性分ゆえ、0から開発環境したい。
そこで、今回はしこしこ手動インストールでelixir開発環境構築をした際の備忘録。

大枠

  1. Erlang/OTPのインストール
    Erlang公式からソースコードをダウンロードしてconfiguire&make

  2. Elixirのインストール
    Elixir公式に記載されている方法にしたがってgithubからソースコードをダウンロードしてmake

1.Erlang/OTPのインストール

さっそくErlang公式からソースコードをダウンロードしてくる。
f:id:sat0yu:20150809190658p:plain
wgetなりcurlなりでダウンロードして展開

% wget http://www.erlang.org/download/otp_src_18.0.tar.gz
% tar xzf otp_src_18.0.tar.gz
% cd otp_src_18.0

早速configure&makeしたいところだけど、 先に依存関係だけ解決しておく。

% sudo yum -y install ncurses ncurses-devel openssl openssl-devel gcc-c++ unixODBC unixODBC-devel fop

準備ができたらconfigure

% ./configuire

すると、「wxがない」との指摘をうけるが、CUI開発しかしないので無視。

% sudo make
% sudo make install

無事インストールできた確認して次へ進む

% erl
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.0 (abort with ^G)

2. Elixirのインストール

ソースコードからelixirをインストールする方法を公式が掲載してくれている。
githubからクローンしてきて、makeするだけの簡単な作業。 最後にパスを通すところだけ忘れずに。

f:id:sat0yu:20150809192114p:plain

任意のディレクトリ(あとでmvするので)にクローンしてmake

% git clone https://github.com/elixir-lang/elixir.git
% cd elixir
% make clean test

/home以下だと違和感があるのでそれなりの場所に配置&リンクを張る

% cd ..
% sudo mv elixir /usr/local/src
% ln -s /usr/local/src/elixir /usr/local/elixir

最後にシェルの設定ファイル(僕は.zshenv)に以下を記述してパスを通せば完了

¥#elixirへパスを通す
export PATH="$PATH:/usr/local/elixir:/usr/local/elixir/bin"

まとめ

環境構築を終えてから、どうしてdockerfileに書かなかったのか後悔

references:

ある日突然gitが使えなくなりました -> Xcode/iOSライセンスに同意したら直りました

いつもどおり,朝一番にgit fetchしようとしたら怒られました.

Agreeing to the Xcode/iOS license requires admin privileges, please re-run as root via sudo.

原因はXcode/iOSのライセンスに同意していないせいでした.
きっと自動アップデートでも走ったんでしょうか.

調べてみると同様の事例で困った人もいたみたいですね.
参考1: Mac OSX: can't start Git after updating Mac OS/XCode : JetBrains Support
参考2: Agreeing to the Xcode/iOS license... のエラーがでた時の対処法 - Qiita

解決策(以下の3つどれでもOK):

  1. $sudo xcrun cc
  2. $sudo xcodebuild -license
  3. GUIXcodeを起動してダイアログでagreeする

僕は1番の方法で解決しました.めでたしめでたし.

 

特定の文字列を含んだファイルを格納したディレクトリをユニークに抽出するシェルスクリプト

found_dirs=()
for filepath in `find foobar -follow -type f`
do
    result=`grep ${filepath} -e hogehoge -l`
    if [ ${#result} -gt 0 ] && [ -f ${result} ]; then
        found_dirs+=(`dirname ${result}`)
    fi
done
echo "${found_dirs[@]}" | tr ' ' '\n' | sort -u

メモ

  1. 配列に次々と追加していき最後にソート&ユニークをかける方法がカンタン
  2. trコマンドは文字列の一括置換
  3. ${#str}で文字列長を取得
  4. 日本語キーボードでバッククオート(`)を打つには shift+@

Homebrewからrbenvの導入を試みたらrubyのインストールが上手くいかなかった

ことの発端は,とあるプログラムがruby依存だったことにあります.
ライトウェイト言語である以上,rubyでもバージョン管理が大変ですね.

pythonにおけるvirtualenvと同じ位置づけとして,
rubyではrbenvというものがあります.

Ruby - Homebrewのインストールとrbenvのインストール Mac編 - Qiita
にしたがって,一気にrbenvまでインストールしちゃいましょう

brew install rbenv
brew install ruby-build
brew install rbenv-gemset
brew install rbenv-gem-rehash

以上でrbenvのインストールは終了です.簡単ですね.
無事,rbenvが導入できたので早速rubyをインストールしていく. ...つもりが,ここでエラー発生.

rbenv install 2.0.0-p247 // これはOK
rbenv install 1.9.3-p547 // これはエラー

1.9.3系ではコンパイラが違っているのかな?

checking whether the C compiler works... no

などとエラー吐かれてしまう.
gccはインストールしてあるはずなのに…と,思っていたらこんな投稿を発見.
Mac(Mavericks)にRuby1.8.7を入れようとしたら大変だった話 - Qiita
環境変数CCとしてgccのパスを設定してあげる必要があるとのこと.
(CCコマンド自体のエイリアスを張り替えてもいいのですがこっちのほうが精神的に健全ですね)

CC=PATH_TO_GCC rbenv install any_version_you_want
(例) CC=/usr/local/Cellar/gcc48/4.8.3/bin/gcc-4.8 rbenv install 1.9.3-p547

ということで無事,ruby1.9系と2.0系の共存ができました.
rbenvを使っているのでコマンド一発で切り替えも可能です.

ref [1]: Ruby - Homebrewのインストールとrbenvのインストール Mac編 - Qiita
ref [2]: Mac(Mavericks)にRuby1.8.7を入れようとしたら大変だった話 - Qiita

powerpointで作成した図をeps(ベクター形式)で保存する方法 (Mac版)

  1. パワポで好きなように図を作る
  2. 1つの図に対して1枚スライドを対応させる
    (次のpsファイルとして書き出す際に,スライドごとにpsファイルが作成される)
  3. psファイルとして書き出す
    [powepoint メニュー] -> [ファイル] -> [プリント]

    f:id:sat0yu:20140624141130p:plain

    f:id:sat0yu:20140624141139p:plain

  4. ps2epsコマンドでpsファイルからepsへ変換
    $ps2eps --rotate=+ foobar.ps
    この際,なぜか画像が90℃回転してしまうので--rotateオプションで逆回転させる

完備辞書を実装した(デバッグした

以前に実装したものがバグだらけ…というか勉強不足でブロックサイズなどなどがめちゃくちゃでした.
ということで改めて実装しなおしました.

2**16 = 65535ビットまでならコードをいじらずにそのまま使えます.
それ以上にビットを管理したいのであればソース中のsBlockやlBlockあたりをいじれば動くと思われます(確認はしていません

ソースコード:
https://raw.githubusercontent.com/sat0yu/algorithm/master/bitvector.cpp
検証用データ:
https://raw.githubusercontent.com/sat0yu/algorithm/master/data/bits.dat

検証用データはパスとかいい具合に調整して使ってください

 

コマンドラインから.pngを.epsへ変換

tex周りをmakefileで一発コンパイルしようとしたところ,
画像配置のにpng -> eps変換が必要になった
もちろんxbbを使う方法もある…

  • 前提: Imagemagickおよびxpdfがインストール済み
    (いずれもbrewでインストールできます)
  • アウトライン:png -> pdf -> eps
  • 変換手順:
    %convert XXX.pdf XXX.eps
    %pdftops -eps XXX.pdf XXX.eps

実はconvertコマンドでpng -> eps変換できます.
できますが,ファイルサイズがどデカくなりますorz
そこで,ひとたびpdfを経由し,zipで圧縮をかけるらしいです.
元ネタ:Convert .pdf to .eps in terminal | Jinha Kim