😳

MariaDBにコミットするまで(1)

2021/10/05に公開

今日からMariaDBにコミットするまでの過程を記述していこうと思います。まずは公式のcontributeというページを見ます。ここにコードで貢献する方法のリンクがあり、基本的にはその記述に従って今回はビルドとテストをやろうと思います。

環境

cat /etc/os-release 
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.3 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

ビルド

こちらに従います。

https://mariadb.org/get-involved/getting-started-for-developers/get-code-build-test/

依存

まずはGitHubでMariaDBのソースコードをforkします。そして、ローカルにcloneします。

名前がserverで紛らわしいですが、気にしないことにします。 YOUR-USERNAMEには自分のGitHubのアカウント名を入れます。

git clone https://github.com/YOUR-USERNAME/server

最初にgitcmakeが使える状態かどうか確認し、ない場合はインストールしてください。そして、以下のコマンドで依存ソフトをインストールします。

sudo apt update
sudo apt install mariadb-server
sudo apt install build-essential libncurses5-dev gnutls-dev bison zlib1g-dev ccache -y

ここまでに余計なファイルは生成されていないはずですが、以下のコマンドを打てばそれらを排除できます。

git clean -dffx
git reset --hard HEAD
git submodule update --init --recursive

次にビルドをします。

cloneしたレポジトリの横に以下のようなデバッグ用のディレクトリを作る場合

mkdir build-mariadb-server-debug
cd build-mariadb-server-debug
cmake ../server -DCMAKE_BUILD_TYPE=Debug

cloneしたレポジトリ内にディレクトリを作る場合

mkdir bld
cd bld
cmake .. -DCMAKE_BUILD_TYPE=Debug

以下のようなエラーが出てくる場合はlibncurses5-devというパッケージをインストールし、rm -f CmakeCache.txtでキャッシュを消すとうまくいくことがあります。

Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)

コンパイル

ninjaを使う方法もありますが、ここではcmakeを使ってコンパイルしていこうと思います。

下の8の部分は自分のPCの利用可能なコア数に応じて自由に値を入れられます。

  • cmakeのバージョンが3.20+である場合
cmake --build . --parallel $(nproc)
  • cmakeのバージョンが3.20+でない場合
cmake --build . -- -j$(nproc)

これでコンパイルまでは完了したはずです。

テスト

最後にテストをします。mysql-testというディレクトリにテストフレームワークが入っています。

以下のようなコマンドですべてのテストを実行できます。

cd mysql-test
./mtr --parallel=$(nproc) --mem --force --max-test-fail=40

すると以下のようにテストが完了します。

(sudoしまくっているけど、大丈夫なのかこれは...)
sudoをしないようなコマンドに変えました。

次は?

次は以下のJIRAにまとめられた初心者向けのIssueをやろうと思います。

https://jira.mariadb.org/browse/MDEV-15736?jql=resolution %3D Unresolved AND labels %3D beginner-friendly ORDER BY updated DESC

Discussion