yoku0825さんが、CentOS8 で MySQL 8.0 をビルドする記事を書いていました。
CentOS8でもビルドするために、あれこれインストールしないといけないようです。
yoku0825.blogspot.com
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 https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ 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
$ 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