GA

2019/12/07

ConoHaの上でひたすらMySQLをビルドする簡単なおしごと in 2019年

この記事は ConoHa Advent Calendar 2019 の7日目の記事です。

去年一昨年三年前 とひたすらConoHa VPS 1GBプランでMySQLをビルドしています。
今年も変わらずビルドをするわけですが、去年と比べてMySQL 5.5系はMySQL 5.5.62のままだったので飛ばします。
MySQL 5.5は2018年12月でSustaining Support期間に入っているので、もう(Security Fixを含め)新しいリリースはないのでしょう。これがサポートが切れるということだ。
今年もサクッと新しいサーバーを立ち上げ…お、CentOSが8.0のがあるのでこれにしよう。
それではLet’s build.
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.46.tar.gz
$ tar xf mysql-5.6.46.tar.gz
$ cd mysql-5.6.46/
$ cmake .
-bash: cmake: command not found
ウッ。8系では dnf でインストールするんですよねおれしってる。
$ sudo dnf install cmake
$ cmake .
..
-- Running cmake version 3.11.4
-- Could NOT find Git (missing: GIT_EXECUTABLE)
CMake Error: CMake was unable to find a build program corresponding to "Unix Makefiles".  CMAKE_MAKE_PROGRAM is not set.  You probably need to select a different build tool.
CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
-- Configuring incomplete, errors occurred!
See also "/home/yoku0825/mysql-5.6.46/CMakeFiles/CMakeOutput.log".
ウッ、 git, make, gcc, g++ あたりがいないせいな気がする。
$ sudo dnf install git make gcc gcc-c++
$ cmake .
..
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:66 (MESSAGE):
  Please install the appropriate openssl developer package.

Call Stack (most recent call first):
  cmake/ssl.cmake:260 (FATAL_SSL_NOT_FOUND_ERROR)
  CMakeLists.txt:482 (MYSQL_CHECK_SSL)

-- Configuring incomplete, errors occurred!
See also "/home/yoku0825/mysql-5.6.46/CMakeFiles/CMakeOutput.log".
See also "/home/yoku0825/mysql-5.6.46/CMakeFiles/CMakeError.log".
最近のMySQLはYaSSLバンドルをやめてOpenSSL一本になったので、 openssl-devel が入ってないとダメ、と。
$ sudo dnf install openssl-devel
$ cmake .
..
CMake Error at cmake/readline.cmake:92 (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:135 (FIND_CURSES)
  cmake/readline.cmake:225 (MYSQL_USE_BUNDLED_EDITLINE)
  CMakeLists.txt:484 (MYSQL_CHECK_EDITLINE)

-- Configuring incomplete, errors occurred!
See also "/home/yoku0825/mysql-5.6.46/CMakeFiles/CMakeOutput.log".
See also "/home/yoku0825/mysql-5.6.46/CMakeFiles/CMakeError.log".
今度は ncurses-devel (毎度転けさせてる気がするこれ)
$ sudo dnf install ncurses-devel
$ cmake .
..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/yoku0825/mysql-5.6.46
よし cmake 終わったので make
$ time make
..
real    24m56.940s
user    21m53.985s
sys     2m38.626s
いやあgccのバージョンが新しくなったせいか、ワーニングいっぱい出る…。
とはいえ無事にビルドも終わった。
$ sudo make install
$ du -sh /usr/local/mysql
1.1G    /usr/local/mysql
これを5.7.28と8.0.18でもやるだけの簡単なおしごと。
$ wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.28.tar.gz
$ tar xf mysql-boost-5.7.28.tar.gz
$ cd mysql-5.7.28/
$ cmake -DWITH_BOOST=./boost
..
-- Checking for module 'libtirpc'
--   Package 'libtirpc', required by 'virtual:world', not found
CMake Error at cmake/rpc.cmake:76 (MESSAGE):
  Could not find rpc/rpc.h in /usr/include or /usr/include/tirpc
Call Stack (most recent call first):
  rapid/plugin/group_replication/configure.cmake:60 (MYSQL_CHECK_RPC)
  rapid/plugin/group_replication/CMakeLists.txt:25 (INCLUDE)

-- Configuring incomplete, errors occurred!
See also "/home/yoku0825/mysql-5.7.28/CMakeFiles/CMakeOutput.log".
See also "/home/yoku0825/mysql-5.7.28/CMakeFiles/CMakeError.log".
MySQL 5.7とそれ以降はビルドにBoostライブラリの特定のバージョンを要求するので、面倒がないBoost同梱版のソースをダウンロードしてきて指定してやる。
あれ何だこれ、見たことないやつが出た。ライブラリの方を要求してるっぽく見えて、Ncursesと同じでdevelが必要なやつっぽい。
$ sudo dnf install libtirpc
Package libtirpc-1.1.4-3.el8.x86_64 is already installed.

$ sudo dnf install libtirpc-devel
$ cmake -DWITH_BOOST=./boost
..
CMake Error at rapid/plugin/group_replication/rpcgen.cmake:100 (MESSAGE):
  Could not find rpcgen
Call Stack (most recent call first):
  rapid/plugin/group_replication/CMakeLists.txt:36 (INCLUDE)

-- Configuring incomplete, errors occurred!
See also "/home/yoku0825/mysql-5.7.28/CMakeFiles/CMakeOutput.log".
See also "/home/yoku0825/mysql-5.7.28/CMakeFiles/CMakeError.log".
ん-。色々新しく必要になるものが増えたのか、CentOS 7と8の違いなのかよくわからん。
$ sudo dnf --enablerepo=PowerTools install rpcgen
$ cmake -DWITH_BOOST=./boost
..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/yoku0825/mysql-5.7.28
cmakeできたのでmake。
$ time make
..
real    67m32.487s
user    50m14.800s
sys     6m39.203s

$ sudo make install
$ du -sh /usr/local/mysql
2.3G    /usr/local/mysql
最後はMySQL 8.0.18。
$ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.18.tar.gz
$ tar xf mysql-boost-8.0.18.tar.gz
$ cd mysql-8.0.18/
$ cmake -DWITH_BOOST=./boost
..
CMake Error at CMakeLists.txt:341 (MESSAGE):
  Please do not build in-source.  Out-of source builds are highly
  recommended: you can have multiple builds for the same source, and there is
  an easy way to do cleanup, simply remove the build directory (note that
  'make clean' or 'make distclean' does *not* work)

  You *can* force in-source build by invoking cmake with
  -DFORCE_INSOURCE_BUILD=1

-- Configuring incomplete, errors occurred!
See also "/home/yoku0825/mysql-8.0.18/CMakeFiles/CMakeOutput.log".
あ、そうか、8.0はソースディレクトリの外側でビルドしないといけないんだった。
$ cd ..
$ mkdir work
$ cd work
$ cmake -DWITH_BOOST=../mysql-8.0.18/boost ../mysql-8.0.18
..
CMake Error at CMakeLists.txt:341 (MESSAGE):
  Please do not build in-source.  Out-of source builds are highly
  recommended: you can have multiple builds for the same source, and there is
  an easy way to do cleanup, simply remove the build directory (note that
  'make clean' or 'make distclean' does *not* work)

  You *can* force in-source build by invoking cmake with
  -DFORCE_INSOURCE_BUILD=1
あれ、前と同じエラーが出る時はCMakeCache.txtかな。
$ rm ../mysql-8.0.18/CMakeCache.txt
$ cmake -DWITH_BOOST=../mysql-8.0.18/boost ../mysql-8.0.18
..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/yoku0825/work
大正解。
$ time make
..
real    161m15.531s
user    110m1.582s
sys     15m43.989s

$ sudo make install
$ du -sh /usr/local/mysql
2.2G    /usr/local/mysql

8.0.18、更に時間がかかるようになっていた。。
明日は 8mitsu さんです。

0 件のコメント :

コメントを投稿