From 40c8a8202be30f4c38b625b0ebadbb126a149181 Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Wed, 29 Apr 2020 15:02:43 +0200 Subject: [PATCH] dev-db/mysql: clean up after tgurr's random tree cleaning streaks --- packages/dev-db/mysql/files/logrotate.mysql | 15 + packages/dev-db/mysql/files/mysql-5.7-my.cnf | 28 ++ .../mysql-5.7.29-fix-libressl-support.patch | 79 +++++ packages/dev-db/mysql/mysql-5.7.29.exheres-0 | 296 ++++++++++++++++++ 4 files changed, 418 insertions(+) create mode 100644 packages/dev-db/mysql/files/logrotate.mysql create mode 100644 packages/dev-db/mysql/files/mysql-5.7-my.cnf create mode 100644 packages/dev-db/mysql/files/mysql-5.7.29-fix-libressl-support.patch create mode 100644 packages/dev-db/mysql/mysql-5.7.29.exheres-0 diff --git a/packages/dev-db/mysql/files/logrotate.mysql b/packages/dev-db/mysql/files/logrotate.mysql new file mode 100644 index 0000000..ce03789 --- /dev/null +++ b/packages/dev-db/mysql/files/logrotate.mysql @@ -0,0 +1,15 @@ +# Copyright 1999-2006 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/dev-db/mysql-init-scripts/files/logrotate.mysql,v 1.1 2007/01/12 16:54:20 chtekk Exp $ + +/var/log/mysql/mysql.err /var/log/mysql/mysql.log /var/log/mysql/mysqld.err { +monthly +create 660 mysql mysql +notifempty +size 5M +sharedscripts +missingok +postrotate +/usr/bin/kill -HUP `cat /run/mysqld/mysqld.pid` +endscript +} diff --git a/packages/dev-db/mysql/files/mysql-5.7-my.cnf b/packages/dev-db/mysql/files/mysql-5.7-my.cnf new file mode 100644 index 0000000..d3a59ee --- /dev/null +++ b/packages/dev-db/mysql/files/mysql-5.7-my.cnf @@ -0,0 +1,28 @@ +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html + +[mysqld] + +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M + +# Remove leading # to turn on a very important data integrity option: logging +# changes to the binary log between backups. +# log_bin + +# These are commonly set, remove the # and set as required. +# basedir = ..... +# datadir = ..... +# port = ..... +# server_id = ..... +# socket = ..... + +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M + +sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES diff --git a/packages/dev-db/mysql/files/mysql-5.7.29-fix-libressl-support.patch b/packages/dev-db/mysql/files/mysql-5.7.29-fix-libressl-support.patch new file mode 100644 index 0000000..c3604cb --- /dev/null +++ b/packages/dev-db/mysql/files/mysql-5.7.29-fix-libressl-support.patch @@ -0,0 +1,79 @@ +--- a/cmake/ssl.cmake ++++ b/cmake/ssl.cmake +@@ -186,7 +186,8 @@ MACRO (MYSQL_CHECK_SSL) + OPENSSL_FIX_VERSION "${OPENSSL_VERSION_NUMBER}" + ) + ENDIF() +- IF("${OPENSSL_MAJOR_VERSION}.${OPENSSL_MINOR_VERSION}.${OPENSSL_FIX_VERSION}" VERSION_GREATER "1.1.0") ++ CHECK_SYMBOL_EXISTS(TLS1_3_VERSION "openssl/tls1.h" HAVE_TLS1_3_VERSION) ++ IF(HAVE_TLS1_3_VERSION) + ADD_DEFINITIONS(-DHAVE_TLSv13) + SET(HAVE_TLSv13 1) + IF(SOLARIS) +@@ -196,7 +197,7 @@ MACRO (MYSQL_CHECK_SSL) + IF(OPENSSL_INCLUDE_DIR AND + OPENSSL_LIBRARY AND + CRYPTO_LIBRARY AND +- OPENSSL_MAJOR_VERSION STREQUAL "1" ++ OPENSSL_MAJOR_VERSION VERSION_GREATER_EQUAL "1" + ) + SET(OPENSSL_FOUND TRUE) + ELSE() +--- a/sql/auth/sha2_password_common.cc ++++ b/sql/auth/sha2_password_common.cc +@@ -116,7 +116,8 @@ bool SHA256_digest::retrieve_digest(unsigned char *digest, + DBUG_RETURN(true); + } + m_ok= EVP_DigestFinal_ex(md_context, m_digest, NULL); +-#if defined(HAVE_WOLFSSL) || OPENSSL_VERSION_NUMBER < 0x10100000L ++#if defined(HAVE_WOLFSSL) || OPENSSL_VERSION_NUMBER < 0x10100000L || \ ++ (defined(LIBRESSL_VERSION_NUMBER) && LIBRESSL_VERSION_NUMBER < 0x02090000fL) + EVP_MD_CTX_cleanup(md_context); + #else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + EVP_MD_CTX_reset(md_context); +--- a/sql/mysqld.cc ++++ b/sql/mysqld.cc +@@ -3419,7 +3419,7 @@ int warn_self_signed_ca() + static int init_ssl() + { + #ifdef HAVE_OPENSSL +-#if OPENSSL_VERSION_NUMBER < 0x10100000L ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) + CRYPTO_malloc_init(); + #else /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + OPENSSL_malloc_init(); +--- a/vio/viosslfactories.c ++++ b/vio/viosslfactories.c +@@ -123,21 +123,19 @@ static DH *get_dh2048(void) + DH *dh; + if ((dh=DH_new())) + { +- BIGNUM *p= BN_bin2bn(dh2048_p, sizeof(dh2048_p), NULL); +- BIGNUM *g= BN_bin2bn(dh2048_g, sizeof(dh2048_g), NULL); +- if (!p || !g +-#if OPENSSL_VERSION_NUMBER >= 0x10100000L +- || !DH_set0_pqg(dh, p, NULL, g) +-#endif /* OPENSSL_VERSION_NUMBER >= 0x10100000L */ +- ) { +- /* DH_free() will free 'p' and 'g' at once. */ ++ BIGNUM *p = BN_bin2bn(dh2048_p,sizeof(dh2048_p), NULL); ++ BIGNUM *g = BN_bin2bn(dh2048_g,sizeof(dh2048_g), NULL); ++#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) ++ dh->p=p; ++ dh->g=g; ++ if (! dh->p || ! dh->g) ++#else ++ if (!DH_set0_pqg(dh, p, NULL, g)) ++#endif ++ { + DH_free(dh); +- return NULL; ++ dh = NULL; + } +-#if OPENSSL_VERSION_NUMBER < 0x10100000L +- dh->p= p; +- dh->g= g; +-#endif /* OPENSSL_VERSION_NUMBER < 0x10100000L */ + } + return(dh); + } diff --git a/packages/dev-db/mysql/mysql-5.7.29.exheres-0 b/packages/dev-db/mysql/mysql-5.7.29.exheres-0 new file mode 100644 index 0000000..04c21bb --- /dev/null +++ b/packages/dev-db/mysql/mysql-5.7.29.exheres-0 @@ -0,0 +1,296 @@ +# Copyright 2008, 2009, 2010 Ingmar Vanhassel +# Copyright 2011-2019 Timo Gurr +# Distributed under the terms of the GNU General Public License v2 + +require cmake systemd-service + +MYSQL_MAJOR_VERSION=$(ever range 1-2) + +# In order to provide a stable code base, MySQL depends on a specific version of Boost. +# Currently only Boost.Geometry headers are used and boost is just required at build time. +BOOST_PV=1.59.0 + +# Miraculously works for MySQL >= 5.1 till at least 5.6 +SPHINX_PV="2.2.9" + +SUMMARY="A relational database management system (RDBMS)" +HOMEPAGE="https://www.mysql.com/" +DOWNLOADS=" + mirror://mysql/Downloads/MySQL-$(ever range 1-2)/${PNV}.tar.gz + mirror://sourceforge/boost/boost_${BOOST_PV//./_}.tar.bz2 + https://downloads.mysql.com/archives/${PN}-$(ever range 1-2)/${PNV}.tar.gz + sphinx? ( http://sphinxsearch.com/files/sphinx-${SPHINX_PV}-release.tar.gz ) +" + +REMOTE_IDS="freecode:${PN}" +UPSTREAM_CHANGELOG=" + https://dev.mysql.com/doc/relnotes/mysql/${MYSQL_MAJOR_VERSION}/en/news-$(ever replace_all '-').html [[ lang = [ en ] ]] +" +UPSTREAM_DOCUMENTATION=" + https://dev.mysql.com/doc/refman/${MYSQL_MAJOR_VERSION}/en/index.html [[ lang = [ en ] ]] + https://dev.mysql.com/doc/refman/${MYSQL_MAJOR_VERSION}/en/postinstallation.html [[ lang = [ en ] note = [ Postinstallation documentation ] ]] + https://dev.mysql.com/doc/refman/${MYSQL_MAJOR_VERSION}/en/upgrading-downgrading.html [[ lang = [ en ] note = [ Upgrading or downgrading documentation ] ]] +" +UPSTREAM_RELEASE_NOTES=" + https://dev.mysql.com/doc/relnotes/mysql/${MYSQL_MAJOR_VERSION}/en/ [[ lang = [ en ] ]] +" + +LICENCES="GPL-2" # with-exceptions +SLOT="0" +MYOPTIONS=" + debug + embedded-server [[ description = [ The embedded MySQL server library (DEPRECATED and slated for removal) ] ]] + memcached [[ description = [ Enable using memcached for InnoDb tables (don't know it? Don't enable it.) ] ]] + sphinx [[ description = [ Add the Sphinx Search Engine with fulltext search support (external engine) ] ]] + systemd + tcpd + ( providers: libressl openssl ) [[ number-selected = exactly-one ]] +" + +PLATFORMS="~amd64 ~x86" + +DEPENDENCIES=" + build: + virtual/pkg-config + systemd? ( sys-apps/systemd ) + build+run: + group/${PN} + user/${PN} + app-admin/eclectic[>=2.0.18] [[ note = [ Split ld-*.path, @TARGET@ substitution ] ]] + app-arch/lz4 + dev-libs/libaio + dev-libs/libedit + dev-libs/protobuf:=[>=2.6.1] + sys-libs/zlib[>=1.2.11] + providers:libressl? ( dev-libs/libressl:= ) + providers:openssl? ( dev-libs/openssl ) + tcpd? ( sys-apps/tcp-wrappers ) + !dev-db/mariadb [[ + description = [ MariaDB is a drop-in replacement for MySQL with same binary names ] + resolution = manual + ]] + !dev-db/Percona-Server [[ + description = [ Percona-Server is a drop-in replacement for MySQL with same binary names ] + resolution = manual + ]] + recommendation: + memcached? ( net/memcached [[ description = [ The option provides the bundled memcached but you might want to use a stand-alone memcached as well ] ]] ) + suggestion: + app-admin/logrotate [[ description = [ Use logrotate for rotating logs ] ]] +" + +DEFAULT_SRC_PREPARE_PATCHES=( + "${FILES}"/mysql-5.7.29-fix-libressl-support.patch +) + +# event_comment +# >= 5.6 needs libevent[>=1.4.12&<2.0] but +# a) we only have 2.0.22 at the time of writing +# b) lots of other stuff needs >=2.0 +# +# Options: +# +# 1. Add libevent 1.4.x, imlement the dep as [>=1.4.12&<2.0] and watch the fun +# 2. Us the bundled libevent for MySQL to ensure it's always the right version. +# 3. Add libevent 1.4.x as SLOT=1.4, slot 2.0.x as SLOT=2.0, dep on the 1.4 slot here. +# +# I prefer 3., of course, but I went with 2. for now to be on the safe side. +# +# dev-libs/libevent[>=1.4.12] + +pkg_pretend() { + # Sanity check when upgrading to a different x.y version of mysql + if [[ -z ${MYSQL_MAJOR_UPGRADE} ]] && has_version ${CATEGORY}/${PN} && \ + ! has_version ${CATEGORY}/${PN}[=${MYSQL_MAJOR_VERSION}*] ; then + ewarn "To install a different major version of MySQL, you have to dump/reload your database." + ewarn "When you've done this, please set 'MYSQL_MAJOR_UPGRADE=YesPlease', to continue the upgrade." + ewarn "For more information visit:" + ewarn "http://dev.mysql.com/doc/refman/${MYSQL_MAJOR_VERSION}/en/upgrading.html" + ewarn "http://dev.mysql.com/doc/refman/${MYSQL_MAJOR_VERSION}/en/downgrading.html" + die "Dump your databases before doing a major version upgrade of MySQL." + fi + + if [[ -f "${ROOT}"/etc/tmpfiles.d/${PN}.conf ]] ; then + ewarn "The configuration file /etc/tmpfiles.d/${PN}.conf has been moved to" + ewarn "/usr/$(exhost --target)/lib/tmpfiles.d/${PN}.conf and can be safely removed after upgrade" + ewarn "if you did not make any changes to it." + fi +} + +src_prepare() { + cmake_src_prepare + + # https://bugs.mysql.com/bug.php?id=72353 (only relevant when using system libevent) + edo sed \ + -e "s:\(LIBEVENT_LIBRAR\)IES:\1Y:" \ + -i "${WORKBASE}"/${PNV}/cmake/libevent.cmake + + # don't link statically against crypto libs + edo sed \ + -e '/REVERSE CMAKE_FIND_LIBRARY_SUFFIXES/d' \ + -i "${CMAKE_SOURCE}"/cmake/ssl.cmake + + # disable the automagic LDAP SASL Authentication Plugin (client-side) + # if added it requires cyrus-sasl -DWITH_SASL:STRING=system and openldap and -DWITH_AUTHENTICATION_LDAP:BOOL=TRUE + edo sed \ + -e '/ADD_SUBDIRECTORY(authentication_ldap)/d' \ + -i "${CMAKE_SOURCE}"/libmysql/CMakeLists.txt + edo rm -rf "${WORKBASE}"/${PNV}/libmysql/authentication_ldap + + option sphinx && edo ln -s "${WORKBASE}"/sphinx-${SPHINX_PV}-release/mysqlse "${WORKBASE}"/${PNV}/storage/sphinx +} + +src_configure() { + local cmakeargs=( + -DBOOST_INCLUDE_DIR:PATH="${WORKBASE}"/boost_${BOOST_PV//./_} + -DBUILD_CONFIG:STRING=mysql_release + # The default layout STANDALONE breaks all the scripts. + -DINSTALL_LAYOUT:STRING="RPM" + -DCMAKE_DISABLE_FIND_PACKAGE_Git:BOOL=TRUE + -DCMAKE_INSTALL_PREFIX:PATH=/usr + -DCOMPILATION_COMMENT:STRING="Exherbo" + -DDEFAULT_CHARSET:STRING=utf8 + -DDEFAULT_COLLATION:STRING=utf8_general_ci + -DFEATURE_SET:STRING=community + -DINSTALL_BINDIR:PATH=$(exhost --target)/bin + -DINSTALL_DOCDIR:PATH=share/doc/${PNVR} + -DINSTALL_DOCREADMEDIR:PATH=share/doc/${PNVR} + -DINSTALL_INCLUDEDIR:PATH=$(exhost --target)/include/mysql + -DINSTALL_INFODIR:PATH=share/mysql/info + -DINSTALL_LIBDIR:PATH=$(exhost --target)/lib/mysql + -DINSTALL_MANDIR:PATH=share/man + -DINSTALL_MYSQLSHAREDIR:PATH=share/mysql + # Empty value to not install the mysql-test directory + -DINSTALL_MYSQLTESTDIR:STRING= + -DINSTALL_PLUGINDIR:PATH=$(exhost --target)/lib/mysql/plugin + -DINSTALL_SBINDIR:PATH=$(exhost --target)/bin + -DINSTALL_SCRIPTDIR:PATH=$(exhost --target)/bin + -DINSTALL_SHAREDIR:PATH=share + -DINSTALL_SUPPORTFILESDIR:PATH=share/mysql + -DMYSQL_DATADIR:PATH=/var/lib/mysql + -DMYSQL_UNIX_ADDR:PATH=/run/mysqld/mysqld.sock + -DREPRODUCIBLE_BUILD:BOOL=FALSE + -DSYSCONFDIR:PATH=/etc/mysql + -DENABLE_DTRACE:BOOL=FALSE + -DENABLE_GCOV:BOOL=FALSE + -DENABLE_GPROF:BOOL=FALSE + -DENABLED_LOCAL_INFILE:BOOL=TRUE + -DENABLED_PROFILING:BOOL=TRUE + -DWITH_ASAN:BOOL=FALSE + -DWITH_ASAN_SCOPE:BOOL=FALSE + -DWITH_BOOST:PATH="${WORKBASE}"/boost_${BOOST_PV//./_} + -DWITH_CLIENT_PROTOCOL_TRACING:BOOL=FALSE + # Curl is only used with yassl + -DWITH_CURL:BOOL=FALSE + -DWITH_EDITLINE:STRING=system + -DWITH_EXTRA_CHARSETS:STRING=all + # Search for event_comment in this exlib for the reason for using bundled + -DWITH_LIBEVENT:STRING=bundled + -DWITH_LZ4:STRING=system + -DWITH_MSAN:BOOL=FALSE + -DWITH_NUMA:BOOL=FALSE + -DWITH_PROTOBUF:STRING=system + -DWITH_RAPID:BOOL=FALSE + -DWITH_SSL:STRING=/usr/$(exhost --target) + -DWITH_TEST_TRACE_PLUGIN:BOOL=FALSE + -DWITH_UBSAN:BOOL=FALSE + -DWITH_UNIT_TESTS:BOOL=TRUE + -DWITH_VALGRIND:BOOL=FALSE + -DWITH_ZLIB:STRING=system + # Default ENGINES for MySQL 5.6 community build (currently == xlarge) minus embedded + -DWITH_ARCHIVE_STORAGE_ENGINE:BOOL=TRUE + -DWITH_BLACKHOLE_STORAGE_ENGINE:BOOL=TRUE + -DWITH_FEDERATED_STORAGE_ENGINE:BOOL=TRUE + -DWITH_INNOBASE_STORAGE_ENGINE:BOOL=TRUE + ) + + if option debug ; then + cmakeargs+=( + -DCMAKE_BUILD_TYPE:STRING=Debug + ) + else + cmakeargs+=( + -DCMAKE_BUILD_TYPE:STRING=Release + ) + fi + + if option memcached ; then + cmakeargs+=( + # Unfortunately, the InnoDb/memcached interface needs libevent 1.4.x + # as bundled with MySQL or trying to use memcached WILL make MySQL + # segfault immediately. + # (Keeping this comment even though the bundled lib is used anyway in + # order to remember *why* I changed it.) + -DWITH_LIBEVENT:STRING=bundled + -DWITH_INNODB_MEMCACHED:BOOL=TRUE + ) + fi + + if option sphinx ; then + cmakeargs+=( + -DWITH_SPHINX_STORAGE_ENGINE:BOOL=TRUE + ) + fi + + if option systemd ; then + cmakeargs+=( + -DWITH_SYSTEMD:BOOL=TRUE + -DSYSTEMD_PID_DIR:PATH=/run/mysqld + -DSYSTEMD_SERVICES_DIR:PATH=${SYSTEMDSYSTEMUNITDIR} + -DSYSTEMD_TMPFILES_DIR:PATH=/usr/$(exhost --target)/lib/tmpfiles.d + ) + else + cmakeargs+=( + -DWITH_SYSTEMD:BOOL=FALSE + ) + fi + + ecmake \ + "${cmakeargs[@]}" \ + $(cmake_with debug DEBUG)\ + $(cmake_with embedded-server EMBEDDED_SERVER)\ + $(cmake_with tcpd LIBWRAP) +} + +src_install() { + cmake_src_install + + # Remove empty directories + edo rmdir "${IMAGE}"/usr/share/mysql/info + ! option debug && edo rmdir "${IMAGE}"/usr/$(exhost --target)/lib/mysql/plugin/debug + + keepdir /etc/mysql + + insinto /etc/mysql + newins "${FILES}"/mysql-$(ever range 1-2)-my.cnf my.cnf + + hereenvd 46mysql < INSTALL PLUGIN SPHINX SONAME 'ha_sphinx.so';" + elog "" + fi + + if option memcached ; then + elog "In order to finalise your installation of the memcached plugin, you must install" + elog "it in MySQL using the following command as an administrative user:" + elog "" + elog "mysql> install plugin daemon_memcached soname "libmemcached.so";" + elog "" + fi +} +