MariaDBにコミットするまで(1)
今日から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
最初にgit
とcmake
が使える状態かどうか確認し、ない場合はインストールしてください。そして、以下のコマンドで依存ソフトをインストールします。
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をやろうと思います。
Discussion