After having explained how to build MySQL 8 (MySQL 8.0 and MySQL 8.1) on OL9 and OL7, this episode of the series will cover how to build MySQL 8 on Oracle Linux 8 (OL8) and compatible (EL8, CentOS 8, …).
My build machine is a VM.Standard.E4.Flex instance on OCI having 8 OCPUs and 128GB of ram with Oracle Linux 8.8. The machine has also a block volume of 50GB attached and mounted in /home/opc/rpmbuild:
Getting the source RPM
To get the source RPM, you need first to install the MySQL Community’s repo:
$ sudo dnf install -y https://dev.mysql.com/get/mysql80-community-release-el8-7.noarch.rpm
But comparing to OL7 and OL9, this is maybe the most complicate process if you are not aware of how to proceed.
To be able to use the MySQL Community Repo, we need first to remove the one provided by the system:
$ sudo dnf module disable mysql -y
And now we can download the src rpm for the version we want to recompile.
For MySQL 8.0:
$ dnf download --source mysql-community-server
And for the latest MySQL Innovation Release (8.1):
$ dnf download --source mysql-community-server --enablerepo=mysql-innovation-community
On my system, now, both files are present:
$ ls -lh *src.rpm
-rw-rw-r--. 1 opc opc 514M Aug 19 11:12 mysql-community-8.0.34-1.el8.src.rpm
-rw-rw-r--. 1 opc opc 515M Aug 19 11:11 mysql-community-8.1.0-1.el8.src.rpm
Dependencies
To build RPMs, you need at least the following package:
$ sudo dnf install -y rpm-build
Of course MySQL also need several packages including libraries and compiler required to compile it. To know which one we need, we can already try to rebuild the rpm:
$ rpmbuild --rebuild mysql-community-8.1.0-1.el8.src.rpm
[...]
error: Failed build dependencies:
cmake >= 3.6.1 is needed by mysql-community-8.1.0-1.el8.x86_64
cyrus-sasl-devel is needed by mysql-community-8.1.0-1.el8.x86_64
gcc-toolset-12-annobin-annocheck is needed by mysql-community-8.1.0-1.el8.x86_64
gcc-toolset-12-annobin-plugin-gcc is needed by mysql-community-8.1.0-1.el8.x86_64
libaio-devel is needed by mysql-community-8.1.0-1.el8.x86_64
libtirpc-devel is needed by mysql-community-8.1.0-1.el8.x86_64
ncurses-devel is needed by mysql-community-8.1.0-1.el8.x86_64
numactl-devel is needed by mysql-community-8.1.0-1.el8.x86_64
openldap-devel is needed by mysql-community-8.1.0-1.el8.x86_64
perl is needed by mysql-community-8.1.0-1.el8.x86_64
perl(Env) is needed by mysql-community-8.1.0-1.el8.x86_64
perl(JSON) is needed by mysql-community-8.1.0-1.el8.x86_64
perl(Memoize) is needed by mysql-community-8.1.0-1.el8.x86_64
perl(Time::HiRes) is needed by mysql-community-8.1.0-1.el8.x86_64
rpcgen is needed by mysql-community-8.1.0-1.el8.x86_64
So let’s start by installing those packages:
sudo dnf install -y cmake cyrus-sasl-devel gcc-toolset-12-annobin-annocheck \
gcc-toolset-12-annobin-plugin-gcc libaio-devel libtirpc-devel \
ncurses-devel numactl-devel openldap-devel perl perl-JSON \
perl-Env perl-Memoize
$ sudo dnf install -y https://yum.oracle.com/repo/OracleLinux/OL8/codeready/builder/x86_64/getPackage/rpcgen-1.3.1-4.el8.x86_64.rpm
We also need to install the following two packages:
$ sudo dnf install -y systemd-devel curl-devel
Building RPMs
Now we are ready to build all the rpms from the source package. This is the command to rebuild everything for the version you want:
$ rpmbuild --rebuild mysql-community-8.1.0-1.el8.src.rpm
When done, all the new rpms can be found in ~/rpmbuild/RPMS/x86_64/:
$ ls -lh ~opc/rpmbuild/RPMS/x86_64/
total 966M
-rw-rw-r--. 1 opc opc 17M Aug 19 12:40 mysql-community-client-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 36M Aug 19 12:44 mysql-community-client-debuginfo-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 3.6M Aug 19 12:41 mysql-community-client-plugins-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 4.3M Aug 19 12:44 mysql-community-client-plugins-debuginfo-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 671K Aug 19 12:40 mysql-community-common-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 3.3M Aug 19 12:42 mysql-community-debuginfo-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 25M Aug 19 12:42 mysql-community-debugsource-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 2.3M Aug 19 12:41 mysql-community-devel-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 2.3M Aug 19 12:40 mysql-community-icu-data-files-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 1.6M Aug 19 12:41 mysql-community-libs-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 3.0M Aug 19 12:44 mysql-community-libs-debuginfo-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 36M Aug 19 12:39 mysql-community-server-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 27M Aug 19 12:40 mysql-community-server-debug-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 126M Aug 19 12:44 mysql-community-server-debug-debuginfo-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 242M Aug 19 12:43 mysql-community-server-debuginfo-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 363M Aug 19 12:41 mysql-community-test-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 28M Aug 19 12:44 mysql-community-test-debuginfo-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 5.2M Aug 19 12:41 mysql-router-community-8.1.0-1.el8.x86_64.rpm
-rw-rw-r--. 1 opc opc 45M Aug 19 12:44 mysql-router-community-debuginfo-8.1.0-1.el8.x86_64.rpm
And voilà !
Once again, this is not too trivial when we know how it works and what are the right dependencies.
As usual, enjoy MySQL !