広告 プログラミング

【解説】Homebrewを使ってXserverにMariaDB関連のライブラリをインストールする

※本ページには、プロモーション(広告)が含まれています。

悩んでいる人

XserverでDjangoを利用する必要が生じたために、環境構築をしたい。

Python+pipenvはインストールできたため、MariaDB(データベース)を扱う際のライブラリのインストール方法を教えて欲しい。

こんなお悩みを解決します。

Djangoを利用する場合は、データベースも利用することが多いと思います。

Xserverで提供されているデータベースがMariaDBのため、本記事ではMariaDBを扱う際のライブラリのインストール方法について解説します。

インストール時に生じたエラーもあわせて記載しているため、同様の問題が生じた場合は、参考にしてください。

素早く環境構築したい方へ

環境構築が比較的容易で、共有サーバよりも、カスタマイズの自由度が高いものを求めている場合、仮想専用サーバ(VPS)を利用することをおすすめします。

詳細は、以下の記事をご覧ください。

あわせて読みたい
【比較】おすすめのVPS 4選

続きを見る

前提

今回の話は、前回の続きとなります。

まだ、前回の続きを実施していない方は、下記のリンクを参考に作業を進めてください。

あわせて読みたい
【解説】Homebrewを使ってXserverにPython+pipenvをインストールする

続きを見る

インストールするライブラリとその順番

通常、パッケージ管理ツールが依存関係を自動的に解決してくれますが、管理者権限なし+Homebrewを使う都合上、うまくいかない部分があります。

このため、事前にライブラリの依存関係を解消した上で、メインのMariaDB関連のライブラリをインストールします。

試行錯誤の結果、下記の順にライブラリをインストールすることで、インストール時のエラーを回避しつつ目的を達成することができました。

インストールするライブラリ名(上位ほど優先度高)優先度付けの理由備考
p11-kitlinux-pamのインストール時に必要なため。-
systemdlinux-pamのインストール時に必要かつ、p11-kit関連でエラーが発生したため。p11-kitをunlinkした上でインストールする。
xmlto docbook docbook-xsllinux-pamのインストール時に必要なため。-
linux-pammariadb@10.5のインストール時に必要なため。debugモードを用いてインストールする。
mysql-client mariadb@10.5 mariadb-connector-cインストール対象のライブラリ群となるため。-
ライブラリをインストールする順番

依存関係のライブラリのインストール

順にインストールを進めていきます。

途中でトリッキーな方法を取るため、注意点も挙げながら解説します。

p11-kitのインストール

通常のbrewコマンドでインストールすると、途中でパーミッションエラーが発生し、インストールに失敗します。

このため、p11-kitはHomebrew経由でソースコードからビルドします。

ありがたいことに、Homebrewにはソースコードからビルドするオプション(-s)が用意されているため、これを用いたインストールを以下に示します。

brew install p11-kit -s

Homebrewでは、インストール時に-sオプションを指定することで、ソースコードからビルドすることができます。

systemdのインストール

systemdをインストールする際、何故かp11-kitの依存関係が解消できずに、インストールに失敗します。(下記参照)

==> Installing mysql-client dependency: systemd
==> meson setup --prefix=${HOME}/.linuxbrew/Cellar/systemd/253 --libdir=${HOME}/.linuxbrew/Cellar/systemd/253/lib --buildtype=release --wrap-mode=nofallback --sysconfdir=/home
==> meson compile -C build
Last 15 lines from ${HOME}/.cache/Homebrew/Logs/systemd/02.meson:
[794/1987] Compiling C object src/nspawn/libnspawn-core.a.p/nspawn-mount.c.o
[795/1987] Compiling C object libnss_systemd.so.2.p/src_nss-systemd_nss-systemd.c.o
[796/1987] Compiling C object src/nspawn/libnspawn-core.a.p/nspawn-oci.c.o
[797/1987] Compiling C object src/shared/libsystemd-shared-253.a.p/install.c.o
[798/1987] Compiling C object src/shared/libsystemd-shared-253.a.p/varlink.c.o
[799/1987] Compiling C object systemd-fstab-generator.p/src_fstab-generator_fstab-generator.c.o
[800/1987] Compiling C object src/shared/libsystemd-shared-253.a.p/bus-unit-util.c.o
[801/1987] Compiling C object systemd-analyze.p/src_analyze_analyze-security.c.o
[802/1987] Compiling C object journalctl.p/src_journal_journalctl.c.o
[803/1987] Compiling C object systemd.p/src_core_main.c.o
[804/1987] Compiling C object src/shared/libsystemd-shared-253.a.p/json.c.o
[805/1987] Compiling C object src/udev/libudev-core.a.p/udev-rules.c.o
ninja: build stopped: subcommand failed.
INFO: autodetecting backend as ninja
INFO: calculating backend command to run: ${HOME}/.linuxbrew/Homebrew/Library/Homebrew/shims/linux/super/ninja -C /tmp/systemd-22221111-63821-1wdd577/systemd-253/build

このため、一旦p11-kitをunlinkした上で、インストール後に再度linkさせます。

以下のコマンドを実行し、systemdをインストールしてください。

brew unlink p11-kit
brew install systemd
brew link p11-kit

xmlto、docbook、docbook-xslのインストール

こちらは、後述するlinux-pamをインストール際に必要なCATALOG_FILEのパスを取得するためにソースコードからビルドします。

以下のコマンドを実行し、xmlto, docbook, docbook-xslをインストールしてください。

brew install xmlto docbook docbook-xsl -s

インストール後に、XML_CATALOG_FILESという環境変数を設定する旨が表示されるため、内容を控えておいてください。

# example
XML_CATALOG_FILES=/home/xs012/.linuxbrew/etc/xml/catalog

こちらは、次で説明するlinux-pamのエラー解消時に使用します。

ユーザ名(xs012となっている部分)は、各々の環境に依存するため、そのままコピペして使っても動かないことに注意してください。

linux-pamのインストール

今回一番苦戦したlinux-pamのインストールとなります。

こちらは通常の方法ではインストールできなかったため、debugモードを用いて一部手動でインストールを進めます。

インストール自体は、以下の3ステップで進めます。

  1. debugモードでインストールを実施する。
  2. エラーが発生した時点でターミナルにアクセスし、エラーを解消する。
  3. エラー解消後に引き続き処理を進める。

debugモードでのインストール

Homebrewには、debugモードが用意されているため、今回は、これを用いてエラー発生時の対応を進めます。

以下のコマンドを実行し、debugモードでのインストールを開始してください。

brew install --verbose --debug linux-pam -s

先程よりも多くの情報が表示された後、以下のようなエラーが発生すると思います。

make[4]: Leaving directory `/tmp/linux-pam-22221111-98105-pt9fri/Linux-PAM-1.5.3/doc/specs'
make[3]: Leaving directory `/tmp/linux-pam-22221111-98105-pt9fri/Linux-PAM-1.5.3/doc/specs'
Making all in sag
make[3]: Entering directory `/tmp/linux-pam-22221111-98105-pt9fri/Linux-PAM-1.5.3/doc/sag'
/usr/bin/xmllint --nonet --xinclude --relaxng http://docbook.org/xml/5.0/rng/docbookxi.rng --noent --noout Linux-PAM_SAG.xml
echo "No fo2pdf processor installed, skip PDF generation"
I/O error : Attempt to load network entity http://docbook.org/xml/5.0/rng/docbookxi.rng
warning: failed to load external entity "http://docbook.org/xml/5.0/rng/docbookxi.rng"
Relax-NG parser error : xmlRelaxNGParse: could not load http://docbook.org/xml/5.0/rng/docbookxi.rng
Relax-NG schema http://docbook.org/xml/5.0/rng/docbookxi.rng failed to compile
No fo2pdf processor installed, skip PDF generation
/usr/bin/xmllint --nonet --xinclude --relaxng http://docbook.org/xml/5.0/rng/docbookxi.rng --noent --noout Linux-PAM_SAG.xml
I/O error : Attempt to load network entity http://docbook.org/xml/5.0/rng/docbookxi.rng
warning: failed to load external entity "http://docbook.org/xml/5.0/rng/docbookxi.rng"
Relax-NG parser error : xmlRelaxNGParse: could not load http://docbook.org/xml/5.0/rng/docbookxi.rng
Relax-NG schema http://docbook.org/xml/5.0/rng/docbookxi.rng failed to compile
make[3]: *** [Linux-PAM_SAG.txt] Error 5
make[3]: *** Waiting for unfinished jobs....
make[3]: *** [html/Linux-PAM_SAG.html] Error 5
make[3]: Leaving directory `/tmp/linux-pam-22221111-98105-pt9fri/Linux-PAM-1.5.3/doc/sag'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/tmp/linux-pam-22221111-98105-pt9fri/Linux-PAM-1.5.3/doc'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/linux-pam-22221111-98105-pt9fri/Linux-PAM-1.5.3'
make: *** [all] Error 2
/usr/bin/env ${HOME}/.linuxbrew/Homebrew/Library/Homebrew/shims/shared/curl --version
/usr/bin/env /usr/bin/ruby -e puts\ RUBY_VERSION
${HOME}/.linuxbrew/Homebrew/Library/Homebrew/ignorable.rb:29:in `block in raise'
BuildError: Failed executing: make
1. raise
2. ignore
3. backtrace
4. irb
5. shell
Choose an action:

「Choose an action」となっている部分に「5」を入力し、Enterを押下します。

CATALOG_FILEのパスを指定してmakeを実行

ターミナルに遷移するため、先ほど控えたCATALOG_FILEのパスを指定した上で、makeコマンドを実行してください。

今回の例の場合、以下のようになります。

XML_CATALOG_FILES=/home/xs012/.linuxbrew/etc/xml/catalog make

今回は、CATALOG_FILESのパスが指定されていなかったことが要因だったため、上記の方法で解消できました。

コマンド実行後にmakeが完了すると思うので、Ctrl-Dを1度実行してターミナルを抜けてください。

Homebrewによるインストール継続

ターミナルを抜けると先ほどと同じことを問われます。

今回は、「2」を入力し、Enterを押下してください。

BuildError: Failed executing: make
1. raise
2. ignore
3. backtrace
4. irb
5. shell
Choose an action: 

先ほどターミナルで処理を行った際にmakeは完了しているため、以降の処理(make install)も正常に実行できます。

最後にlinux-pamがインストールされていることを確認しておきましょう。

以下のコマンドを実行し、linux-pamが存在することを確認してください。

brew list

MariaDB関連のライブラリのインストール

一通り準備が整ったため、MariaDB関連のライブラリをインストールしていきます。

mysql-client、mariadb@10.5、mariadb-connector-cのインストール

以下のコマンドを実行し、インストールを完了させてください。

brew install mysql-client mariadb@10.5 mariadb-connector-c

問題なくインストールが完了すれば、以下のようなメッセージが表示されます。

mariadb@10.5 is keg-only, which means it was not symlinked into ${HOME}/.linuxbrew,
because this is an alternate version of another formula.

If you need to have mariadb@10.5 first in your PATH, run:
  echo 'export PATH="${HOME}/.linuxbrew/opt/mariadb@10.5/bin:$PATH"' >> ${HOME}/.bash_profile

For compilers to find mariadb@10.5 you may need to set:
  export LDFLAGS="-L${HOME}/.linuxbrew/opt/mariadb@10.5/lib"
  export CPPFLAGS="-I${HOME}/.linuxbrew/opt/mariadb@10.5/include"

For pkg-config to find mariadb@10.5 you may need to set:
  export PKG_CONFIG_PATH="${HOME}/.linuxbrew/opt/mariadb@10.5/lib/pkgconfig"

To start mariadb@10.5 now and restart at login:
  brew services start mariadb@10.5
Or, if you don't want/need a background service you can just run:
  ${HOME}/.linuxbrew/opt/mariadb@10.5/bin/mysqld_safe --datadir=${HOME}/.linuxbrew/var/mysql

.bash_profileの更新

先程の出力結果にPATHやFLAGの設定が記載されていたので、それを.bash_profileに反映します。

前回の結果もあわせると以下のようになると思います。

# User specific environment and startup programs
export HOMEBREW_FORCE_BREWED_GIT=
export HOMEBREW_FORCE_BREWED_CURL=
export HOMEBREW_CURL_PATH=${HOME}/opt/curl/bin/curl
export HOMEBREW_GIT_PATH=${HOME}/opt/git/bin/git
export HOMEBREW_PREFIX=${HOME}/.linuxbrew
export HOMEBREW_CELLAR=${HOME}/.linuxbrew/Cellar
export HOMEBREW_REPOSITORY=${HOME}/.linuxbrew/Homebrew
export MANPATH=${HOME}/.linuxbrew/share/man${MANPATH+:$MANPATH}
export INFOPATH=${HOME}/.linuxbrew/share/info:${INFOPATH:-}
export PATH=${HOME}/.linuxbrew/opt/mariadb@10.5/bin:${HOME}/.linuxbrew/opt/binutils/bin:${HOME}/opt/curl/bin:${HOME}/opt/git/bin:${HOME}/opt/gettext/bin:${HOME}/opt/ssl/bin:${HOME}/.linuxbrew/bin:${HOME}/.linuxbrew/sbin${PATH+:$PATH}
export LDFLAGS=-L${HOME}/.linuxbrew/opt/mariadb@10.5/lib
export CPPFLAGS=-I${HOME}/.linuxbrew/opt/mariadb@10.5/include
export PKG_CONFIG_PATH=${HOME}/.linuxbrew/opt/mariadb@10.5/lib/pkgconfig
export LD_LIBRARY_PATH=${HOME}/.linuxbrew/opt/mariadb@10.5/lib

変化しているのは、最後の5行の下記の部分となります。

# add ${HOME}/.linuxbrew/opt/mariadb@10.5/bin to PATH
export PATH=${HOME}/.linuxbrew/opt/mariadb@10.5/bin:${HOME}/.linuxbrew/opt/binutils/bin:${HOME}/opt/curl/bin:${HOME}/opt/git/bin:${HOME}/opt/gettext/bin:${HOME}/opt/ssl/bin:${HOME}/.linuxbrew/bin:${HOME}/.linuxbrew/sbin${PATH+:$PATH}
# add environment variables of LDFLAGS, CPPFLAGS, PKG_CONFIG_PATH
export LDFLAGS=-L${HOME}/.linuxbrew/opt/mariadb@10.5/lib
export CPPFLAGS=-I${HOME}/.linuxbrew/opt/mariadb@10.5/include
export PKG_CONFIG_PATH=${HOME}/.linuxbrew/opt/mariadb@10.5/lib/pkgconfig
export LD_LIBRARY_PATH=${HOME}/.linuxbrew/opt/mariadb@10.5/lib

まとめ

今回は、データベースを操作するためのライブラリ一式をインストールする手順について解説しました。

途中、トリッキーな方法でエラーを解消していたため、場当たり的な感じは否めませんが、目的は達成できているので問題ないと判断します。

この後は、仮想環境を作成後、Djangoのプロジェクトを作り必要なWebアプリを構築していきます。

素早く環境構築したい方へ

環境構築が比較的容易で、共有サーバよりも、カスタマイズの自由度が高いものを求めている場合、仮想専用サーバ(VPS)を利用することをおすすめします。

詳細は、以下の記事をご覧ください。

あわせて読みたい
【比較】おすすめのVPS 4選

続きを見る

スポンサードリンク

-プログラミング
-,