# Maintainer: Bartłomiej Piotrowski # Maintainer: Christian Hesse # ALARM: Kevin Mihelich # - disable mroonga storage engine (doesn't build on ARM) # - patch to link (unused) static libs against libatomic on v5/v6 to fix FTBFS pkgbase=mariadb pkgname=('mariadb-libs' 'mariadb-clients' 'mariadb' 'mytop') pkgdesc='Fast SQL database server, derived from MySQL' pkgver=10.3.12 pkgrel=5 arch=('x86_64') license=('GPL') url='https://mariadb.org/' makedepends=('boost' 'bzip2' 'cmake' 'jemalloc' 'libaio' 'libxml2' 'lz4' 'lzo' 'openssl' 'systemd' 'zlib' 'zstd') validpgpkeys=('199369E5404BD5FC7D2FE43BCBCB082A1BB943DB') # MariaDB Package Signing Key source=("https://ftp.heanet.ie/mirrors/mariadb/mariadb-$pkgver/source/mariadb-$pkgver.tar.gz"{,.asc} '0001-MDEV-18360-Prevent-set_max_open_files-from-allocating-too-many-files.patch' '0002-fix-galera_recovery-with-fs.protected_regular-enabled.patch' 'atomic.patch') sha256sums=('f7449a34c25e0455928d7983dae83fd2069fe1f16c4c5f4aeed9ed9d3f081ff6' 'SKIP' 'f2a93769bfd9a5421871846b091ff752dfceea1791beab2ee55ac93d24df02c7' '66e0acac7436fd8925710ef5cc66ba1a8f63a385ce374f01ae83096cc33d97a0' '7769fd8eb2bb3a6644a2200d01918ff887be25638d79dbec25897fe0d87badc4') prepare() { cd $pkgbase-$pkgver/ # Changes to the upstream unit files: # * remove the alias from unit files, we install symlinks in package function # * enable PrivateTmp for a little bit more security # * force preloading jemalloc for memory management sed -i -e '/^Alias/d' \ -e '/^PrivateTmp/c PrivateTmp=true' \ -e '/# Environment="LD_/a Environment="LD_PRELOAD=/usr/lib/libjemalloc.so"' \ support-files/mariadb{,@}.service.in # let's create the datadir from tmpfiles echo 'd @MYSQL_DATADIR@ 0700 @MYSQLD_USER@ @MYSQLD_USER@ -' >> support-files/tmpfiles.conf.in # instantiated configs are not subject to be included from main config sed -i 's|@sysconf2dir@|@sysconfdir@|' support-files/mariadb@.service.in # fix path to our config sed -i 's|my.cnf.d|mysql/my.cnf.d|' support-files/rpm/{my.cnf,enable_encryption.preset} # MDEV-18360 Prevent set_max_open_files from allocating too many files # https://bugs.archlinux.org/task/61433 # https://github.com/systemd/systemd/issues/11510 # https://jira.mariadb.org/browse/MDEV-18360 patch -Np1 < ../0001-MDEV-18360-Prevent-set_max_open_files-from-allocating-too-many-files.patch # fix galera_recovery with fs.protected_regular enabled # https://github.com/MariaDB/server/pull/1137 patch -Np1 < ../0002-fix-galera_recovery-with-fs.protected_regular-enabled.patch if [[ $CARCH == arm || $CARCH == armv6h ]]; then patch -p0 -i ../atomic.patch fi } build() { local _cmake_options=( # build options -DCMAKE_BUILD_TYPE=RelWithDebInfo -Wno-dev # file paths # /etc -DINSTALL_SYSCONFDIR=/etc/mysql -DINSTALL_SYSCONF2DIR=/etc/mysql/my.cnf.d # /run -DINSTALL_UNIX_ADDRDIR=/run/mysqld/mysqld.sock # /usr -DCMAKE_INSTALL_PREFIX=/usr # /usr/bin /usr/include -DINSTALL_SCRIPTDIR=bin -DINSTALL_INCLUDEDIR=include/mysql # /usr/lib -DINSTALL_PLUGINDIR=lib/mysql/plugin -DINSTALL_SYSTEMD_UNITDIR=/usr/lib/systemd/system/ -DINSTALL_SYSTEMD_SYSUSERSDIR=/usr/lib/sysusers.d/ -DINSTALL_SYSTEMD_TMPFILESDIR=/usr/lib/tmpfiles.d/ # /usr/share -DINSTALL_SHAREDIR=share -DINSTALL_SUPPORTFILESDIR=share/mysql -DINSTALL_MYSQLSHAREDIR=share/mysql -DINSTALL_DOCREADMEDIR=share/doc/mariadb -DINSTALL_DOCDIR=share/doc/mariadb -DINSTALL_MANDIR=share/man # /var -DMYSQL_DATADIR=/var/lib/mysql # default settings -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci # features -DENABLED_LOCAL_INFILE=ON -DPLUGIN_EXAMPLE=NO -DPLUGIN_FEDERATED=NO -DPLUGIN_FEEDBACK=NO -DWITHOUT_MROONGA_STORAGE_ENGINE=1 -DWITH_EMBEDDED_SERVER=ON -DWITH_EXTRA_CHARSETS=complex -DWITH_JEMALLOC=ON -DWITH_LIBWRAP=OFF -DWITH_PCRE=bundled -DWITH_READLINE=ON -DWITH_SSL=system -DWITH_SYSTEMD=yes -DWITH_UNIT_TESTS=OFF -DWITH_ZLIB=system ) mkdir build cd build cmake ../"$pkgbase-$pkgver" "${_cmake_options[@]}" make } check() { cd build/mysql-test # Takes *really* long, so disabled by default. #./mtr --parallel=5 --mem --force --max-test-fail=0 } package_mariadb-libs() { pkgdesc='MariaDB libraries' depends=('bzip2' 'libaio' 'lz4' 'lzo' 'openssl' 'xz' 'zlib') conflicts=('libmysqlclient' 'libmariadbclient' 'mariadb-connector-c') provides=('libmariadbclient' 'mariadb-connector-c') replaces=('libmariadbclient') cd build for dir in libmariadb libmysqld libservices include; do make -C "$dir" DESTDIR="$pkgdir" install done ln -s mariadb_config "$pkgdir"/usr/bin/mysql_config install -D -m0644 "$srcdir"/"$pkgbase-$pkgver"/man/mysql_config.1 "$pkgdir"/usr/share/man/man1/mysql_config.1 install -D -m0644 support-files/mariadb.pc "$pkgdir"/usr/share/pkgconfig/mariadb.pc install -D -m0644 "$srcdir"/"$pkgbase-$pkgver"/support-files/mysql.m4 "$pkgdir"/usr/share/aclocal/mysql.m4 cd "$pkgdir" # remove static libraries rm usr/lib/*.a } package_mariadb-clients() { pkgdesc='MariaDB client tools' depends=("mariadb-libs=${pkgver}" 'jemalloc') conflicts=('mysql-clients') provides=("mysql-clients=$pkgver") cd build make -C client DESTDIR="$pkgdir" install # install man pages for man in mysql mysql_plugin mysql_upgrade mysqladmin mysqlbinlog mysqlcheck mysqldump mysqlimport mysqlshow mysqlslap mysqltest; do install -D -m0644 "$srcdir"/"$pkgbase-$pkgver"/man/"$man.1" "$pkgdir"/usr/share/man/man1/"$man.1" done } package_mariadb() { pkgdesc='Fast SQL database server, derived from MySQL' backup=('etc/mysql/my.cnf' 'etc/mysql/my.cnf.d/client.cnf' 'etc/mysql/my.cnf.d/enable_encryption.preset' 'etc/mysql/my.cnf.d/mysql-clients.cnf' 'etc/mysql/my.cnf.d/server.cnf') install=mariadb.install depends=("mariadb-clients=${pkgver}" 'inetutils' 'libsystemd' 'libxml2' 'zstd') optdepends=('galera: for MariaDB cluster with Galera WSREP' 'perl-dbd-mysql: for mysqlhotcopy, mysql_convert_table_format and mysql_setpermission') conflicts=('mysql') provides=("mysql=$pkgver") options=('emptydirs') cd build make DESTDIR="$pkgdir" install cd "$pkgdir" # no SysV init, please! rm -r etc/mysql/{init.d,logrotate.d} rm usr/bin/rcmysql rm usr/share/mysql/{binary-configure,mysql{,d_multi}.server} # these should have useful names mv usr/lib/sysusers.d/{sysusers,mariadb}.conf mv usr/lib/tmpfiles.d/{tmpfiles,mariadb}.conf # links service files with old name for compatibility ln -s mariadb.service usr/lib/systemd/system/mysqld.service ln -s mariadb@.service usr/lib/systemd/system/mysqld@.service # move to proper licenses directories install -d usr/share/licenses/mariadb mv usr/share/doc/mariadb/COPYING* usr/share/licenses/mariadb/ # move it where one might look for it #mv usr/share/{groonga,doc/mariadb/} #mv usr/share/{groonga-normalizer-mysql,doc/mariadb/} # already installed to real systemd unit directory or useless rm -r usr/share/mysql/systemd/ rm -r usr/lib/systemd/system/mariadb@bootstrap.service.d # provided by mariadb-libs rm usr/bin/mariadb_config rm usr/bin/mysql_config rm -r usr/include/ rm usr/share/man/man1/mysql_config.1 rm -r usr/share/{aclocal,pkgconfig} rm usr/lib/lib* rm usr/lib/mysql/plugin/{auth_gssapi_client,caching_sha2_password,dialog,mysql_clear_password,sha256_password}.so rm -r usr/lib/pkgconfig/ # provided by mariadb-clients rm usr/bin/{mysql,mysql_plugin,mysql_upgrade,mysqladmin,mysqlbinlog,mysqlcheck,mysqldump,mysqlimport,mysqlshow,mysqlslap,mysqltest} rm usr/share/man/man1/{mysql,mysql_plugin,mysql_upgrade,mysqladmin,mysqlbinlog,mysqlcheck,mysqldump,mysqlimport,mysqlshow,mysqlslap,mysqltest}.1 # provided by mytop rm usr/bin/mytop # not needed rm -r usr/{data,mysql-test,sql-bench} rm usr/share/man/man1/mysql-test-run.pl.1 } package_mytop() { pkgdesc='Top clone for MariaDB' depends=('perl' 'perl-dbd-mysql' 'perl-term-readkey') cd build install -D -m0755 scripts/mytop "$pkgdir"/usr/bin/mytop }