※注意事項:本記事は、2019.09.25時点の内容です。速報的な情報としてお読みください。
概要
CentOS8が公式ページからダウンロードできるようになったので、ElixirのWebフレームワークであるPhoenixが起動できるかを確認してみました。
なお、CentOS8のインストールの種類は、「サーバ(GUI)」で実施しています。
先に結論
起動はできました。
しかし、ライブラリのインストールの準備(というか調査)に少し手間がかかりました。
具体的には、以下の二つのパッケージの確認に手間取りました。
- libyaml-devel
- inotify-tools
所感としては、現状はdnfでインストールできる標準パッケージやEPELの環境が整ってから、実施するようにした方が良さそうです。
Elixirのインストール
CentOS8では、標準でインストールはできない様子。
dnf install elixir
としても、そんなものないと言われます。
そのため、asdfでElixirの環境を準備してみます。
asdfのインストール
asdfの公式ページのインストール手順に従い、asdfをインストールしていきます。
gitのインストールはsudo dnf install git
で実施できます。
gitをインストールしたら、続いてGitHubからasdfのコード一式をcloneしてきます。
$ git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.7.4
続いて、asdfのパスを**.bashrc**に設定します。(bash以外を利用している方は、公式ページをみて読み替えてください。)
$ echo -e '\n. $HOME/.asdf/asdf.sh' >> ~/.bashrc
$ echo -e '\n. $HOME/.asdf/completions/asdf.bash' >> ~/.bashrc
続いて、プラグインを利用するための依存パッケージをインストールしますが、ここで一点ハマりポイントがありました。
CentOS8と同じくdnfを利用しているFedoraのコマンドで実行すると、「libyaml-devel」がdnf経由ではインストールできませんでした。標準のパッケージとしては登録されていないようです。
$ sudo dnf info libyaml-devel
メタデータの期限切れの最終確認: 0:34:21 時間前の 2019年09月25日 13時16分32秒 に実施しました。
エラー: 表示するための一致したパッケージはありません
www.rpmfind.netというサイトでCentOS8用のrpmがないか探したり、CenttOS8のEPELも入れてみましたが、libyaml-develはやはり見つかりませんでした。
ただ、幸いなことにErlangとElixirのインストールにおいては、libyaml-develはインストールされていなくても影響がなかったので、今回は抜かした状態で他のパッケージをインストールしました。
sudo dnf install \
automake autoconf readline-devel \
ncurses-devel openssl-devel \
libxslt-devel libffi-devel libtool unixODBC-devel \
unzip curl
Erlangのインストール
Elixirをインストールする前にErlangをインストールします。
ここで、Erlangのインストールに「make」コマンドが必要になります。
asdfのインストール時にはmakeがインストール対象に含まれていませんでしたので、以下のようなコンパイルでエラーが発生したら、sudo dnf install make
でmakeをインストールしてください。
$ asdf install erlang 22.1
〜(略)〜
Building Erlang/OTP 22.1 (asdf_22.1), please wait...
WARNING: It appears a required development package 'make' is not installed.
Configure failed.
checking whether g++ accepts -g... no
checking for ld... ld
checking for mixed cygwin or msys and native VC++ environment... no
checking for mixed cygwin and native MinGW environment... no
checking if we mix cygwin with any native compiler... no
checking if we mix msys with another native compiler... no
checking for env... /bin/env
checking for GNU make... no
configure: error: GNU make is required!
ERROR: /home/mzryuka/.asdf/plugins/erlang/kerl-home/builds/asdf_22.1/otp_src_22.1/make/configure failed!
makeがインストールされていれば、erlangのコンパイルが通りました。
※ なお、erlang自体のインストール(コンパイル)には、マシンスペックにもよりますが10分程度の時間がかかります。
$ asdf install erlang 22.1
Extracting source code
Building Erlang/OTP 22.1 (asdf_22.1), please wait...
APPLICATIONS DISABLED (See: /home/mzryuka/.asdf/plugins/erlang/kerl-home/builds/asdf_22.1/otp_build_22.1.log)
* jinterface : No Java compiler found
APPLICATIONS INFORMATION (See: /home/mzryuka/.asdf/plugins/erlang/kerl-home/builds/asdf_22.1/otp_build_22.1.log)
* wx : Can not find C++ compiler
* No OpenGL headers found, wx will NOT be usable
* No GLU headers (glu.h) found, wx will NOT be usable
* wxWidgets not found, wx will NOT be usable
DOCUMENTATION INFORMATION (See: /home/mzryuka/.asdf/plugins/erlang/kerl-home/builds/asdf_22.1/otp_build_22.1.log)
* documentation :
* fop is missing.
* Using fakefop to generate placeholder PDF files.
Erlang/OTP 22.1 (asdf_22.1) has been successfully built
Installing Erlang/OTP 22.1 (asdf_22.1) in /home/mzryuka/.asdf/installs/erlang/22.1...
You can activate this installation running the following command:
. /home/mzryuka/.asdf/installs/erlang/22.1/activate
Later on, you can leave the installation typing:
kerl_deactivate
Cleaning up compilation products for
Cleaned up compilation products for under /home/mzryuka/.asdf/plugins/erlang/kerl-home/builds
Erlang 22.1 has been installed. Activate globally with:
asdf global erlang 22.1
Activate locally in the current folder with:
asdf local erlang 22.1
$
いくつか気になるメッセージも出ていますが、一旦はおいときます。
asdf global erlang 22.1
を実行して、erlangを実行できるようにしておきます。
Elixirのインストール
続いて、Elixirのインストールです。
こちらは、あっさりインストールが終わります。
$ asdf plugin-add elixir
$ asdf install elixir 1.9.1-otp-22
$ asdf global erlang 1.9.1-otp-22
を実行後、iex
で起動を確認しておきます。
iexの起動が確認できたらPhoenixのインストールを行います。
Phoenixのインストール
Elixirのインストールが完了したので、続いてPhoenixのインストールを実行します。
node.js、hex、rebar、Phoenixの順にインストールしていきます。
node.jsのインストール
CentOS8の標準で、node.jsの10(10.14.1)がインストール可能です。
$ sudo dnf install nodejs
hexとrebarのインストール
こちらも特に問題なく実行できます。
$ mix local.hex --force
$ mix local.rebar --force
Phoenixのインストール
ひとまず、現時点でPhoenixの最新の1.4.10をインストールします。
こちらも特に問題なく実行できます。
$ mix archive.install hex phx_new 1.4.10 --force
Phoenixの実行
inotify-toolsのインストール
必須ではありませんが、devモードでの実行時では、inotify-toolsがインストールされていないとmix phx.server
実行時にワーニングメッセージが出てきます。
そのため、inotify-toolsはインストールするのが良いでしょう。
ただし、残念ながらinotify-toolsも、現時点では標準パッケージやEPELには含まれていませんでした。
幸い、inotify-toolsのバージョンはCentOS7時点から大きく変動していないので、Fedora30で利用されているRPMを使ってインストールしておきます。
$ wget http://download-ib01.fedoraproject.org/pub/fedora/linux/updates/30/Everything/x86_64/Packages/i/inotify-tools-3.14-17.fc30.x86_64.rpm
$ sudo rpm -ivh inotify-tools-3.14-17.fc30.x86_64.rpm
これで、inotify-toolsについてのメッセージは出てこなくなります。
PhoenixのTOP画面の起動
まずは、TOP画面が起動することを目指します。DBアクセスについては一旦は省略。
そのため、--no-ecto
をつけてPhoenixのプロジェクトを作成します。
ここでは、プロジェクト名は「hiyoko」にしています。
$ mix phx.new hiyoko --no-ecto
実行時に聞かれるFetch and install dependencies? [Yn]
もY
でインストールします。
プロジェクトができたら、プロジェクトディレクトリへ移動した後でmix phx.server
を実行します。
起動が確認できたら、localhost:4000にアクセスします。
無事にTOP画面が表示されました。