# Maintainer: Christian Hesse # ALARM: Kevin Mihelich # - disable mroonga storage engine (doesn't build on ARM) # - build v7 with -j1 # ➡️ The mariadb package will be latest stable (GA / General Availability) # release, regardless of rolling or long-term release. # ➡️ The mariadb-lts package will be latest long-term release not packaged # in mariadb. So mariadb-lts will always be behind mariadb, please do not # flag out-of-date too early! # https://mariadb.com/kb/en/mariadb-server-release-dates/ pkgbase=mariadb pkgname=('mariadb-libs' 'mariadb-clients' 'mariadb' 'mytop') pkgdesc='Fast SQL database server, derived from MySQL' pkgver=11.6.2 pkgrel=2 arch=('x86_64') license=('GPL-2.0-only') url='https://mariadb.org/' makedepends=('git' 'boost' 'bzip2' 'cmake' 'cracklib' 'curl' 'jemalloc' 'judy' 'krb5' 'liburing' 'libxcrypt' 'libxml2' 'lz4' 'openssl' 'pcre2' 'systemd' 'zlib' 'zstd' 'xz') validpgpkeys=('177F4010FE56CA3336300305F1656F24C74CD1D8') # MariaDB Signing Key source=("mariadb::git+https://github.com/MariaDB/server.git#tag=mariadb-${pkgver}?signed" 'git+https://github.com/MariaDB/mariadb-connector-c.git' 'git+https://github.com/facebook/rocksdb.git' 'git+https://github.com/codership/wsrep-lib.git' 'git+https://github.com/wolfSSL/wolfssl.git' 'git+https://github.com/mariadb-corporation/libmarias3.git' 'git+https://github.com/mariadb-corporation/mariadb-columnstore-engine.git' '0001-arch-specific.patch') sha256sums=('41c74391ad5bbbcb131632d70c7d0dbe3acc48e87eaa8718e153b023b69a73ee' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' 'SKIP' '08c2c661159f4a7c54a764bb13459e37cbccdf98a93c2cf151d53f600f1fa35d') prepare() { cd mariadb/ # setup git submodules git config --file=.gitmodules submodule.libmariadb.url ../mariadb-connector-c/ git config --file=.gitmodules submodule.storage/rocksdb/rocksdb.url ../rocksdb/ git config --file=.gitmodules submodule.wsrep-lib.url ../wsrep-lib/ git config --file=.gitmodules submodule.extra/wolfssl/wolfssl.url ../wolfssl/ git config --file=.gitmodules submodule.storage/maria/libmarias3.url ../libmarias3/ git config --file=.gitmodules submodule.storage/columnstore/columnstore.url ../mariadb-columnstore-engine/ git submodule init git -c protocol.file.allow=always submodule update # MDEV-35398 Improve shrinking of system tablespace git cherry-pick -n \ 866a8ea6736d2edc0f6be552d1cdd6810c10d5ab # Arch Linux specific patches: # * enable PrivateTmp for a little bit more security # * force preloading jemalloc for memory management # * make systemd-tmpfiles create MYSQL_DATADIR patch -Np1 < ../0001-arch-specific.patch } build() { [[ $CARCH == "armv7h" ]] && MAKEFLAGS="-j1" local _cmake_options=( # build options -DCOMPILATION_COMMENT="Arch Linux" -DCMAKE_BUILD_TYPE=RelWithDebInfo #-DCMAKE_BUILD_TYPE=Debug #-DMYSQL_MAINTAINER_MODE=WARN -Wno-dev # file paths # /etc -DINSTALL_SYSCONFDIR=/etc -DINSTALL_SYSCONF2DIR=/etc/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_PCRE2=system -DWITH_READLINE=ON -DWITH_SSL=system -DWITH_SYSTEMD=yes -DWITH_UNIT_TESTS=OFF -DWITH_ZLIB=system ) # this uses malloc_usable_size, which is incompatible with fortification level 3 export CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" export CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" mkdir build cd build cmake ../mariadb/ "${_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=('liburing' 'libxcrypt' 'libcrypt.so' 'openssl' 'pcre2' 'zlib' 'zstd') optdepends=('krb5: for gssapi authentication') conflicts=('libmysqlclient' 'libmariadbclient' 'mariadb-connector-c') provides=('libmariadbclient' 'mariadb-connector-c' 'libmariadb.so' 'libmariadbd.so') replaces=('libmariadbclient') cd build for dir in libmariadb libmysqld libservices include; do make -C "$dir" DESTDIR="$pkgdir" install done # remove static libraries rm "${pkgdir}"/usr/lib/*.a # remove man pages rm -r "${pkgdir}"/usr/share/man ln -s mariadb_config "$pkgdir"/usr/bin/mariadb-config ln -s mariadb_config "$pkgdir"/usr/bin/mysql_config install -D -m0644 "$srcdir"/mariadb/man/mariadb_config.1 "$pkgdir"/usr/share/man/man1/mariadb_config.1 ln -s mariadb_config.1 "$pkgdir"/usr/share/man/man1/mariadb-config.1 ln -s mariadb_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"/mariadb/support-files/mysql.m4 "$pkgdir"/usr/share/aclocal/mysql.m4 } package_mariadb-clients() { pkgdesc='MariaDB client tools' depends=("mariadb-libs=${pkgver}" 'jemalloc' 'ncurses') conflicts=('mysql-clients') provides=("mysql-clients=${pkgver}") make -C build/client DESTDIR="${pkgdir}" install # install man pages make -C build/man DESTDIR="${srcdir}"/client-man install install -d -m0755 "${pkgdir}"/usr/share/man/man1/ for man in $(find "${pkgdir}"/usr/bin/ ! -type d); do install -D -m0644 -t "${pkgdir}"/usr/share/man/man1/ "${srcdir}"/client-man/usr/share/man/man1/"$(basename "${man}")".1 done } package_mariadb() { pkgdesc='Fast SQL database server, derived from MySQL' backup=('etc/my.cnf' 'etc/my.cnf.d/client.cnf' 'etc/my.cnf.d/enable_encryption.preset' 'etc/my.cnf.d/mysql-clients.cnf' 'etc/my.cnf.d/provider_bzip2.cnf' 'etc/my.cnf.d/provider_lz4.cnf' 'etc/my.cnf.d/provider_lzma.cnf' 'etc/my.cnf.d/s3.cnf' 'etc/my.cnf.d/server.cnf' 'etc/my.cnf.d/spider.cnf' 'etc/security/user_map.conf') install=mariadb.install depends=("mariadb-clients=${pkgver}" 'bzip2' 'coreutils' 'libxml2' 'lz4' 'systemd-libs' 'zstd') optdepends=('cracklib: for cracklib plugin' 'curl: for ha_s3 plugin' 'galera: for MariaDB cluster with Galera WSREP' 'judy: for Open Query GRAPH (OQGraph) computation engine' 'perl-dbd-mariadb: for mariadb-hotcopy, mariadb-convert-table-format and mariadb-setpermission' 'python-mysqlclient: for myrocks_hotbackup' 'xz: lzma provider') conflicts=('mysql') provides=("mariadb-server=${pkgver}" "mysql=${pkgver}") options=('emptydirs') cd build make DESTDIR="$pkgdir" install cd "$pkgdir" # no SysV init, please! rm -r etc/logrotate.d rm usr/bin/rcmysql rm usr/share/mysql/{binary-configure,mysql{,d_multi}.server} # 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{,-normalizer-mysql},doc/mariadb/} # move to pam directories install -d {etc,usr/lib}/security mv usr/share/user_map.conf etc/security/ mv usr/share/pam_user_map.so usr/lib/security/ # 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{_,-},mysql_}config rm -r usr/include/ rm usr/share/man/man1/{mariadb,mysql}_config.1 rm -r usr/share/aclocal rm usr/lib/lib* rm -r usr/lib/pkgconfig rm usr/lib/mysql/plugin/{auth_gssapi_client,caching_sha2_password,client_ed25519,dialog,mysql_clear_password,parsec,sha256_password,zstd}.so # provided by mariadb-clients for bin in $(find "${pkgdir}/../${pkgbase}-clients/usr/bin/" ! -type d); do rm "${pkgdir}"/usr/bin/"$(basename "${bin}")" "${pkgdir}"/usr/share/man/man1/"$(basename "${bin}")".1 done # provided by mytop rm usr/bin/mytop # not needed rm -r usr/{mariadb-test,sql-bench} rm usr/share/man/man1/mysql-test-run.pl.1 } package_mytop() { pkgdesc='Top clone for MariaDB' depends=('perl' 'perl-dbd-mariadb' 'perl-term-readkey') install -D -m0755 build/scripts/mytop "$pkgdir"/usr/bin/mytop }