forked from hasufell/hasufell-repository
		
	
		
			
	
	
		
			297 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			297 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
|  | # Copyright 2008, 2009, 2010 Ingmar Vanhassel <ingmar@exherbo.org> | ||
|  | # Copyright 2011-2019 Timo Gurr <tgurr@exherbo.org> | ||
|  | # 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 <<EOF | ||
|  | LDPATH=/usr/@TARGET@/lib/mysql | ||
|  | EOF | ||
|  | 
 | ||
|  |     insinto /etc/logrotate.d | ||
|  |     newins "${FILES}"/logrotate.mysql mysql | ||
|  | 
 | ||
|  |     keepdir /var/lib/mysql-files | ||
|  |     edo chown mysql:mysql "${IMAGE}"/var/lib/mysql-files | ||
|  |     edo chmod 0750 "${IMAGE}"/var/lib/mysql-files | ||
|  | } | ||
|  | 
 | ||
|  | pkg_postinst() { | ||
|  |     if option sphinx ; then | ||
|  |         elog "In order to finalise your installation of the Sphinx Search Engine, you must install" | ||
|  |         elog "it in MySQL using the following command as an administrative user:" | ||
|  |         elog "" | ||
|  |         elog "mysql> 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 | ||
|  | } | ||
|  | 
 |