XserverでDjangoを利用する必要が生じたために、環境構築をしたい。
Python+pipenvはインストールできたため、MariaDB(データベース)を扱う際のライブラリのインストール方法を教えて欲しい。
こんなお悩みを解決します。
Djangoを利用する場合は、データベースも利用することが多いと思います。
Xserverで提供されているデータベースがMariaDBのため、本記事ではMariaDBを扱う際のライブラリのインストール方法について解説します。
インストール時に生じたエラーもあわせて記載しているため、同様の問題が生じた場合は、参考にしてください。
素早く環境構築したい方へ
環境構築が比較的容易で、共有サーバよりも、カスタマイズの自由度が高いものを求めている場合、仮想専用サーバ(VPS)を利用することをおすすめします。
詳細は、以下の記事をご覧ください。
【比較】おすすめのVPS 4選
続きを見る
前提
今回の話は、前回の続きとなります。
まだ、前回の続きを実施していない方は、下記のリンクを参考に作業を進めてください。
【解説】Homebrewを使ってXserverにPython+pipenvをインストールする
続きを見る
インストールするライブラリとその順番
通常、パッケージ管理ツールが依存関係を自動的に解決してくれますが、管理者権限なし+Homebrewを使う都合上、うまくいかない部分があります。
このため、事前にライブラリの依存関係を解消した上で、メインのMariaDB関連のライブラリをインストールします。
試行錯誤の結果、下記の順にライブラリをインストールすることで、インストール時のエラーを回避しつつ目的を達成することができました。
インストールするライブラリ名(上位ほど優先度高) | 優先度付けの理由 | 備考 |
---|---|---|
p11-kit | linux-pam のインストール時に必要なため。 | - |
systemd | linux-pam のインストール時に必要かつ、p11-kit関連でエラーが発生したため。 | p11-kit をunlinkした上でインストールする。 |
xmlto docbook docbook-xsl | linux-pam のインストール時に必要なため。 | - |
linux-pam | mariadb@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ステップで進めます。
- debugモードでインストールを実施する。
- エラーが発生した時点でターミナルにアクセスし、エラーを解消する。
- エラー解消後に引き続き処理を進める。
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選
続きを見る