yoku0825さんが、CentOS8 で MySQL 8.0 をビルドする記事を書いていました。 CentOS8でもビルドするために、あれこれインストールしないといけないようです。
CentOS7インストール直後の状態では色々足りない
最近のMySQLはビルドに最新の開発ツール(cmakeやgcc)を要求してきます。 EPEL等の追加のリポジトリから、色々インストールしなければビルドできません。
手順を忘れないようにメモしておきたいと思います。
CentOS7 だと cmake時に、以下のようなエラーに出くわします。
まず、cmake が古いと、
$ cmake -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp/boost .. <snip> -- Running cmake version 2.8.12.2 CMake Warning at CMakeLists.txt:43 (MESSAGE): Please use cmake3 rather than cmake on this platform
gccもCentOS7のデフォルトのものだと古いと、
$ cmake3 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp/boost .. <snip> CMake Error at cmake/os/Linux.cmake:59 (MESSAGE): GCC 5.3 or newer is required (-dumpversion says 4.8.5) Call Stack (most recent call first): CMakeLists.txt:442 (INCLUDE)
openssl-devel, ncurses-devel が必要
$ cmake3 .. <snip> -- Looking for SHA512_DIGEST_LENGTH -- Looking for SHA512_DIGEST_LENGTH - not found -- Cannot find appropriate system libraries for WITH_SSL=system. Make sure you have specified a supported SSL version. Valid options are : system (use the OS openssl library), yes (synonym for system), </path/to/custom/openssl/installation> CMake Error at cmake/ssl.cmake:65 (MESSAGE): Please install the appropriate openssl developer package. Call Stack (most recent call first): cmake/ssl.cmake:293 (FATAL_SSL_NOT_FOUND_ERROR) CMakeLists.txt:1181 (MYSQL_CHECK_SSL)
-- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH) CMake Error at cmake/readline.cmake:71 (MESSAGE): Curses library not found. Please install appropriate package, remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel. Call Stack (most recent call first): cmake/readline.cmake:100 (FIND_CURSES) cmake/readline.cmake:194 (MYSQL_USE_BUNDLED_EDITLINE) CMakeLists.txt:1185 (MYSQL_CHECK_EDITLINE)
開発ツールをインストールする
openssl と ncurses は特に追加のリポジトリを必要としません。CentOS7標準のRPMパッケージをインストールするだけです。
$ sudo yum install openssl-devel ncurses-devel
cmakeの バージョン3以上 は CentOS7 のデフォルトのリポジトリにはないため、epel を利用します。
$ sudo yum install epel-release $ sudo yum install --enablerepo='epel' cmake3
同じくgcc 5.3以上もデフォルトのリポジトリに存在しないため、Software Collection から新しめのバージョンのものをインストールします。
$ sudo yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-2-3.el7.centos.noarch.rpm http://mirror.centos.org/centos/7/extras/x86_64/Packages/centos-release-scl-rh-2-3.el7.centos.noarch.rpm
追記:8.0.24 で gcc10 でのビルドが推奨されるようになりました。8.0.24 以降をビルドする場合は devtoolset-10 を利用する必要があります。
$ sudo yum install devtoolset-7-gcc* <snip> Dependencies Resolved ================================================================================================================================================================================ Package Arch Version Repository Size ================================================================================================================================================================================ Installing: devtoolset-7-gcc x86_64 7.3.1-5.16.el7 centos-sclo-rh 29 M devtoolset-7-gcc-c++ x86_64 7.3.1-5.16.el7 centos-sclo-rh 11 M devtoolset-7-gcc-gdb-plugin x86_64 7.3.1-5.16.el7 centos-sclo-rh 124 k devtoolset-7-gcc-gfortran x86_64 7.3.1-5.16.el7 centos-sclo-rh 11 M devtoolset-7-gcc-plugin-devel x86_64 7.3.1-5.16.el7 centos-sclo-rh 1.3 M Installing for dependencies: devtoolset-7-binutils x86_64 2.28-11.el7 centos-sclo-rh 5.3 M devtoolset-7-libquadmath-devel x86_64 7.3.1-5.16.el7 centos-sclo-rh 154 k devtoolset-7-libstdc++-devel x86_64 7.3.1-5.16.el7 centos-sclo-rh 2.5 M devtoolset-7-runtime x86_64 7.1-4.el7 centos-sclo-rh 20 k gmp-devel x86_64 1:6.0.0-15.el7 centos-base 181 k libgfortran4 x86_64 8.3.1-2.1.1.el7 centos-base 686 k libmpc-devel x86_64 1.0.1-3.el7 centos-base 32 k libquadmath x86_64 4.8.5-39.el7 centos-base 190 k mpfr-devel x86_64 3.1.1-4.el7 centos-base 68 k scl-utils x86_64 20130529-19.el7 centos-base 24 k Transaction Summary ================================================================================================================================================================================ Install 5 Packages (+10 Dependent packages)
/opt/rh/devtoolset-7
以下にインストールされました。
$ /opt/rh/devtoolset-7/root/bin/gcc -v Using built-in specs. COLLECT_GCC=/opt/rh/devtoolset-7/root/bin/gcc COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/lto-wrapper Target: x86_64-redhat-linux Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-7/root/usr --mandir=/opt/rh/devtoolset-7/root/usr/share/man --infodir=/opt/rh/devtoolset-7/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --with-default-libstdcxx-abi=gcc4-compatible --with-isl=/builddir/build/BUILD/gcc-7.3.1-20180303/obj-x86_64-redhat-linux/isl-install --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux Thread model: posix gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)
パスを通すために scl enable
を実行します。
$ scl enable devtoolset-7 bash $ which gcc /opt/rh/devtoolset-7/root/usr/bin/gcc
ビルドする
-j
オプションを付けると並列でコンパイルできて、高速です。しかし、並列だとビルドが途中でコケてしまうんですよね(たぶん、メモリ不足が原因)。
自分は以下のように、コケたら、並列度を落として再実行するようにしてます。
$ cd <mysqlのソースディレクトリ> $ mkdir build; cd build $ cmake3 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp/boost .. $ make -j 8 || make -j 6 || make -j 4 || make