/[gentoo-x86]/eclass/mysql.eclass
Gentoo

Diff of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.135 Revision 1.144
1# Copyright 1999-2009 Gentoo Foundation 1# Copyright 1999-2009 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.135 2010/03/03 23:57:13 robbat2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.144 2010/04/01 20:36:39 robbat2 Exp $
4 4
5# @ECLASS: mysql.eclass 5# @ECLASS: mysql.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# Author: Francesco Riosa (Retired) <vivo@gentoo.org> 7# Author: Francesco Riosa (Retired) <vivo@gentoo.org>
8# Maintainers: MySQL Team <mysql-bugs@gentoo.org> 8# Maintainers: MySQL Team <mysql-bugs@gentoo.org>
51 ;; 51 ;;
52 *) 52 *)
53 die "Unsupported EAPI: ${EAPI}" ;; 53 die "Unsupported EAPI: ${EAPI}" ;;
54esac 54esac
55 55
56
57# @ECLASS-VARIABLE: MYSQL_PV_MAJOR
58# @DESCRIPTION:
59# Upstream MySQL considers the first two parts of the version number to be the
60# major version. Upgrades that change major version should always run
61# mysql_upgrade.
62MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})"
63
56# @ECLASS-VARIABLE: MYSQL_VERSION_ID 64# @ECLASS-VARIABLE: MYSQL_VERSION_ID
57# @DESCRIPTION: 65# @DESCRIPTION:
58# MYSQL_VERSION_ID will be: 66# MYSQL_VERSION_ID will be:
59# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99] 67# major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
60# This is an important part, because many of the choices the MySQL ebuild will do 68# This is an important part, because many of the choices the MySQL ebuild will do
77# @DESCRIPTION: 85# @DESCRIPTION:
78# Specifiy if community features are available. Possible values are 1 (yes) 86# Specifiy if community features are available. Possible values are 1 (yes)
79# and 0 (no). 87# and 0 (no).
80# Community features are available in mysql-community 88# Community features are available in mysql-community
81# AND in the re-merged mysql-5.0.82 and newer 89# AND in the re-merged mysql-5.0.82 and newer
82if [ "${PN}" == "mysql-community" ]; then 90if [ "${PN}" == "mysql-community" -o "${PN}" == "mariadb" ]; then
83 MYSQL_COMMUNITY_FEATURES=1 91 MYSQL_COMMUNITY_FEATURES=1
84elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then 92elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then
85 MYSQL_COMMUNITY_FEATURES=1 93 MYSQL_COMMUNITY_FEATURES=1
86elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then 94elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then
87 MYSQL_COMMUNITY_FEATURES=1 95 MYSQL_COMMUNITY_FEATURES=1
112 >=sys-apps/sed-4 120 >=sys-apps/sed-4
113 >=sys-apps/texinfo-4.7-r1 121 >=sys-apps/texinfo-4.7-r1
114 >=sys-libs/readline-4.1 122 >=sys-libs/readline-4.1
115 >=sys-libs/zlib-1.2.3" 123 >=sys-libs/zlib-1.2.3"
116 124
125[[ "${PN}" == "mariadb" ]] \
126&& DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )"
127
117# Having different flavours at the same time is not a good idea 128# Having different flavours at the same time is not a good idea
118for i in "" "-community" ; do 129for i in "mysql" "mysql-community" "mariadb" ; do
119 [[ "${i}" == ${PN#mysql} ]] || 130 [[ "${i}" == ${PN} ]] ||
120 DEPEND="${DEPEND} !dev-db/mysql${i}" 131 DEPEND="${DEPEND} !dev-db/${i}"
121done 132done
122 133
123RDEPEND="${DEPEND} 134RDEPEND="${DEPEND}
124 !minimal? ( dev-db/mysql-init-scripts ) 135 !minimal? ( dev-db/mysql-init-scripts )
125 selinux? ( sec-policy/selinux-mysql )" 136 selinux? ( sec-policy/selinux-mysql )"
134 145
135# dev-perl/DBD-mysql is needed by some scripts installed by MySQL 146# dev-perl/DBD-mysql is needed by some scripts installed by MySQL
136PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" 147PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
137 148
138# For other stuff to bring us in 149# For other stuff to bring us in
139PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})" 150PDEPEND="${PDEPEND} =virtual/mysql-${MYSQL_PV_MAJOR}"
140 151
141# Work out the default SERVER_URI correctly 152# Work out the default SERVER_URI correctly
142if [ -z "${SERVER_URI}" ]; then 153if [ -z "${SERVER_URI}" ]; then
143 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}" 154 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}"
155 if [ "${PN}" == "mariadb" ]; then
156 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})"
157 SERVER_URI="http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/mariadb-${MARIA_FULL_PV}.tar.gz"
144 # The community build is on the mirrors 158 # The community build is on the mirrors
145 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 159 elif [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
146 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz" 160 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz"
147 # The (old) enterprise source is on the primary site only 161 # The (old) enterprise source is on the primary site only
148 elif [ "${PN}" == "mysql" ]; then 162 elif [ "${PN}" == "mysql" ]; then
149 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz" 163 SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${MY_PV}.tar.gz"
150 fi 164 fi
160 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2 174 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
161 http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2" 175 http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
162 176
163DESCRIPTION="A fast, multi-threaded, multi-user SQL database server." 177DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
164HOMEPAGE="http://www.mysql.com/" 178HOMEPAGE="http://www.mysql.com/"
179if [[ "${PN}" == "mariadb" ]]; then
180 HOMEPAGE="http://askmonty.org/"
181 DESCRIPTION="MariaDB is a MySQL fork with 3rd-party patches and additional storage engines merged."
182fi
183if [[ "${PN}" == "mysql-community" ]]; then
184 DESCRIPTION="${DESCRIPTION} (obsolete, move to dev-db/mysql)"
185fi
165LICENSE="GPL-2" 186LICENSE="GPL-2"
166SLOT="0" 187SLOT="0"
167IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test" 188IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test"
168 189
169mysql_version_is_at_least "4.1" \ 190mysql_version_is_at_least "4.1" \
182|| IUSE="${IUSE} berkdb" 203|| IUSE="${IUSE} berkdb"
183 204
184[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \ 205[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
185&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling" 206&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
186 207
187# PBXT engine 208[[ "${PN}" == "mariadb" ]] \
209&& IUSE="${IUSE} libevent"
210
211# MariaDB has integrated PBXT
212# PBXT_VERSION means that we have a PBXT patch for this PV
213# PBXT was only introduced after 5.1.12
214pbxt_patch_available() {
215 [[ "${PN}" != "mariadb" ]] \
188mysql_version_is_at_least "5.1.12" \ 216 && mysql_version_is_at_least "5.1.12" \
189&& [[ -n "${PBXT_VERSION}" ]] \ 217 && [[ -n "${PBXT_VERSION}" ]]
218 return $?
219}
220
221pbxt_available() {
222 pbxt_patch_available || [[ "${PN}" == "mariadb" ]]
223 return $?
224}
225
226# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
227# MariaDB has integrated XtraDB
228# XTRADB_VERS means that we have a XTRADB patch for this PV
229# XTRADB was only introduced after 5.1.26
230xtradb_patch_available() {
231 [[ "${PN}" != "mariadb" ]] \
232 && mysql_version_is_at_least "5.1.26" \
233 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
234 return $?
235}
236
237pbxt_patch_available \
190&& PBXT_P="pbxt-${PBXT_VERSION}" \ 238&& PBXT_P="pbxt-${PBXT_VERSION}" \
191&& PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \ 239&& PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
192&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \ 240&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \
241
242pbxt_available \
193&& IUSE="${IUSE} pbxt" 243&& IUSE="${IUSE} pbxt"
194 244
195# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set 245xtradb_patch_available \
196mysql_version_is_at_least "5.1.26" \
197&& [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
198&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \ 246&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \
199&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \ 247&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \
200&& XTRADB_SRC_URI1="http://www.percona.com/percona-builds/xtradb/${XTRADB_SRC_URI_COMMON}" \ 248&& XTRADB_SRC_URI1="http://www.percona.com/percona-builds/xtradb/${XTRADB_SRC_URI_COMMON}" \
201&& XTRADB_SRC_URI2="http://www.percona.com/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \ 249&& XTRADB_SRC_URI2="http://www.percona.com/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \
202&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} )" \ 250&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} )" \
396 myconf="${myconf} $(use_with perl bench)" 444 myconf="${myconf} $(use_with perl bench)"
397 myconf="${myconf} --enable-assembler" 445 myconf="${myconf} --enable-assembler"
398 myconf="${myconf} --with-extra-tools" 446 myconf="${myconf} --with-extra-tools"
399 myconf="${myconf} --with-innodb" 447 myconf="${myconf} --with-innodb"
400 myconf="${myconf} --without-readline" 448 myconf="${myconf} --without-readline"
449 myconf="${myconf} $(use_with ssl openssl)"
401 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)" 450 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
402 451
403 # --with-vio is not needed anymore, it's on by default and 452 # --with-vio is not needed anymore, it's on by default and
404 # has been removed from configure 453 # has been removed from configure
454 # Apply to 4.x and 5.0.[0-3]
405 if use ssl ; then 455 if use ssl ; then
406 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio" 456 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
407 fi
408
409 if mysql_version_is_at_least "5.1.11" ; then
410 myconf="${myconf} $(use_with ssl /usr)"
411 else
412 myconf="${myconf} $(use_with ssl openssl)"
413 fi 457 fi
414 458
415 if mysql_version_is_at_least "5.0.60" ; then 459 if mysql_version_is_at_least "5.0.60" ; then
416 if use berkdb ; then 460 if use berkdb ; then
417 elog "Berkeley DB support was disabled due to build failures" 461 elog "Berkeley DB support was disabled due to build failures"
474 518
475configure_51() { 519configure_51() {
476 # TODO: !!!! readd --without-readline 520 # TODO: !!!! readd --without-readline
477 # the failure depend upon config/ac-macros/readline.m4 checking into 521 # the failure depend upon config/ac-macros/readline.m4 checking into
478 # readline.h instead of history.h 522 # readline.h instead of history.h
479 myconf="${myconf} $(use_with ssl)" 523 myconf="${myconf} $(use_with ssl ssl /usr)"
480 myconf="${myconf} --enable-assembler" 524 myconf="${myconf} --enable-assembler"
481 myconf="${myconf} --with-geometry" 525 myconf="${myconf} --with-geometry"
482 myconf="${myconf} --with-readline" 526 myconf="${myconf} --with-readline"
483 myconf="${myconf} --with-zlib-dir=/usr/" 527 myconf="${myconf} --with-zlib-dir=/usr/"
484 myconf="${myconf} --without-pstack" 528 myconf="${myconf} --without-pstack"
485 use max-idx-128 && myconf="${myconf} --with-max-indexes=128" 529 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
530 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
531 myconf="${myconf} $(use_enable community community-features)"
532 if use community; then
533 myconf="${myconf} $(use_enable profiling)"
534 else
535 myconf="${myconf} --disable-profiling"
536 fi
537 fi
486 538
487 # 5.1 introduces a new way to manage storage engines (plugins) 539 # 5.1 introduces a new way to manage storage engines (plugins)
488 # like configuration=none 540 # like configuration=none
541 # This base set are required, and will always be statically built.
489 local plugins="csv,myisam,myisammrg,heap" 542 local plugins="csv,myisam,myisammrg,heap"
490 if use extraengine ; then 543 if use extraengine ; then
491 # like configuration=max-no-ndb, archive and example removed in 5.1.11 544 # like configuration=max-no-ndb, archive and example removed in 5.1.11
492 # not added yet: ibmdb2i 545 # not added yet: ibmdb2i
493 # Not supporting as examples: example,daemon_example,ftexample 546 # Not supporting as examples: example,daemon_example,ftexample
494 plugins="${plugins},archive,blackhole,federated,partition" 547 plugins="${plugins},archive,blackhole,federated,partition"
495 548
549 if [[ "${PN}" != "mariadb" ]] ; then
496 elog "Before using the Federated storage engine, please be sure to read" 550 elog "Before using the Federated storage engine, please be sure to read"
497 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html" 551 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
552 else
553 elog "MariaDB includes the FederatedX engine. Be sure to read"
554 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
555 fi
498 fi 556 fi
499 557
500 # Upstream specifically requests that InnoDB always be built: 558 # Upstream specifically requests that InnoDB always be built:
501 # - innobase, innodb_plugin 559 # - innobase, innodb_plugin
502 # Build falcon if available for 6.x series. 560 # Build falcon if available for 6.x series.
508 if use cluster ; then 566 if use cluster ; then
509 plugins="${plugins},ndbcluster" 567 plugins="${plugins},ndbcluster"
510 myconf="${myconf} --with-ndb-binlog" 568 myconf="${myconf} --with-ndb-binlog"
511 fi 569 fi
512 570
571 if [[ "${PN}" == "mariadb" ]] ; then
572 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
573 # caught above.
574 plugins="${plugins},maria,innobase"
575 if use pbxt ; then
576 plugins="${plugins},pbxt"
577 else
578 myconf="${myconf} --without-plugin-pbxt"
579 fi
580 myconf="${myconf} $(use_with libevent)"
581 # This is not optional, without it several upstream testcases fail.
582 # Also strongly recommended by upstream.
583 myconf="${myconf} --with-maria-tmp-tables"
584 fi
585
513 myconf="${myconf} --with-plugins=${plugins}" 586 myconf="${myconf} --with-plugins=${plugins}"
514}
515
516xtradb_applicable() {
517 mysql_version_is_at_least "5.1.26" \
518 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
519 && use xtradb
520 return $?
521}
522
523pbxt_applicable() {
524 mysql_version_is_at_least "5.1.12" \
525 && [[ -n "${PBXT_VERSION}" ]] \
526 && use pbxt
527 return $?
528} 587}
529 588
530pbxt_src_configure() { 589pbxt_src_configure() {
531 mysql_init_vars 590 mysql_init_vars
532 591
534 593
535 einfo "Reconfiguring dir '${PWD}'" 594 einfo "Reconfiguring dir '${PWD}'"
536 AT_GNUCONF_UPDATE="yes" eautoreconf 595 AT_GNUCONF_UPDATE="yes" eautoreconf
537 596
538 local myconf="" 597 local myconf=""
539 myconf="${myconf} --with-mysql=${S} --libdir=${MY_LIBDIR}" 598 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)"
540 use debug && myconf="${myconf} --with-debug=full" 599 use debug && myconf="${myconf} --with-debug=full"
541 # TODO: is it safe/needed to use econf here ?
542 ./configure ${myconf} || die "Problem configuring PBXT storage engine" 600 econf ${myconf} || die "Problem configuring PBXT storage engine"
543} 601}
544 602
545pbxt_src_compile() { 603pbxt_src_compile() {
546 # Be backwards compatible for now 604 # Be backwards compatible for now
547 if [[ $EAPI != 2 ]]; then 605 if [[ $EAPI != 2 ]]; then
598 && use minimal ; then 656 && use minimal ; then
599 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 657 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
600 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 658 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
601 fi 659 fi
602 660
661 # Bug #290570, 284946, 307251
603 # Bug #290570 fun. Upstream made us need a fairly new GCC4. 662 # Upstream changes made us need a fairly new GCC4.
604 if mysql_version_is_at_least "5.0.83" ; then 663 # But only for 5.0.8[3-6]!
664 if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
605 GCC_VER=$(gcc-version) 665 GCC_VER=$(gcc-version)
606 case ${GCC_VER} in 666 case ${GCC_VER} in
607 2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;; 667 2*|3*|4.0|4.1|4.2)
668 eerror "Some releases of MySQL required a very new GCC, and then"
669 eerror "later release relaxed that requirement again. Either pick a"
670 eerror "MySQL >=5.0.87, or use a newer GCC."
671 die "Active GCC too old!" ;;
608 esac 672 esac
609 fi 673 fi
610 674
611 # This should come after all of the die statements 675 # This should come after all of the die statements
612 enewgroup mysql 60 || die "problem adding 'mysql' group" 676 enewgroup mysql 60 || die "problem adding 'mysql' group"
687 rm -f "scripts/mysqlbug" 751 rm -f "scripts/mysqlbug"
688 fi 752 fi
689 753
690 local rebuilddirlist d 754 local rebuilddirlist d
691 755
692 if xtradb_applicable ; then 756 if xtradb_patch_available && use xtradb ; then
693 einfo "Replacing InnoDB with Percona XtraDB" 757 einfo "Replacing InnoDB with Percona XtraDB"
694 pushd "${S}"/storage 758 pushd "${S}"/storage
695 i="innobase" 759 i="innobase"
696 o="${WORKDIR}/storage-${i}.mysql-upstream" 760 o="${WORKDIR}/storage-${i}.mysql-upstream"
697 # Have we been here already? 761 # Have we been here already?
802 find . -type f -name Makefile -print0 \ 866 find . -type f -name Makefile -print0 \
803 | xargs -0 -n100 sed -i \ 867 | xargs -0 -n100 sed -i \
804 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 868 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
805 869
806 if [[ $EAPI == 2 ]]; then 870 if [[ $EAPI == 2 ]]; then
807 pbxt_applicable && pbxt_src_configure 871 pbxt_patch_available && use pbxt && pbxt_src_configure
808 fi 872 fi
809} 873}
810 874
811# @FUNCTION: mysql_src_compile 875# @FUNCTION: mysql_src_compile
812# @DESCRIPTION: 876# @DESCRIPTION:
813# Compile the mysql code. 877# Compile the mysql code.
814mysql_src_compile() { 878mysql_src_compile() {
815 # Be backwards compatible for now 879 # Be backwards compatible for now
816 case ${EAPI:-0} in 880 case ${EAPI:-0} in
817 2) : ;; 881 2) : ;;
818 0 | 1) mysql_src_configure ;; 882 0 | 1) mysql_src_configure ;;
819 esac 883 esac
820 884
821 emake || die "emake failed" 885 emake || die "emake failed"
822 886
823 pbxt_applicable && pbxt_src_compile 887 pbxt_patch_available && use pbxt && pbxt_src_compile
824} 888}
825 889
826# @FUNCTION: mysql_src_install 890# @FUNCTION: mysql_src_install
827# @DESCRIPTION: 891# @DESCRIPTION:
828# Install mysql. 892# Install mysql.
834 DESTDIR="${D}" \ 898 DESTDIR="${D}" \
835 benchdir_root="${MY_SHAREDSTATEDIR}" \ 899 benchdir_root="${MY_SHAREDSTATEDIR}" \
836 testroot="${MY_SHAREDSTATEDIR}" \ 900 testroot="${MY_SHAREDSTATEDIR}" \
837 || die "emake install failed" 901 || die "emake install failed"
838 902
839 pbxt_applicable && pbxt_src_install 903 pbxt_patch_available && use pbxt && pbxt_src_install
840 904
841 # Convenience links 905 # Convenience links
842 einfo "Making Convenience links for mysqlcheck multi-call binary" 906 einfo "Making Convenience links for mysqlcheck multi-call binary"
843 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 907 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
844 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 908 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
868 if use !test ; then 932 if use !test ; then
869 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test 933 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
870 fi 934 fi
871 935
872 # Configuration stuff 936 # Configuration stuff
937 if mysql_version_is_at_least "5.1" ; then
938 mysql_mycnf_version="5.1"
873 if mysql_version_is_at_least "4.1" ; then 939 elif mysql_version_is_at_least "4.1" ; then
874 mysql_mycnf_version="4.1" 940 mysql_mycnf_version="4.1"
875 else 941 else
876 mysql_mycnf_version="4.0" 942 mysql_mycnf_version="4.0"
877 fi 943 fi
878 einfo "Building default my.cnf" 944 einfo "Building default my.cnf"
880 doins scripts/mysqlaccess.conf 946 doins scripts/mysqlaccess.conf
881 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \ 947 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
882 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 948 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
883 > "${TMPDIR}/my.cnf.ok" 949 > "${TMPDIR}/my.cnf.ok"
884 if mysql_version_is_at_least "4.1" && use latin1 ; then 950 if mysql_version_is_at_least "4.1" && use latin1 ; then
885 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok" 951 sed -i \
952 -e "/character-set/s|utf8|latin1|g" \
953 "${TMPDIR}/my.cnf.ok"
886 fi 954 fi
887 newins "${TMPDIR}/my.cnf.ok" my.cnf 955 newins "${TMPDIR}/my.cnf.ok" my.cnf
888 956
889 # Minimal builds don't have the MySQL server 957 # Minimal builds don't have the MySQL server
890 if ! use minimal ; then 958 if ! use minimal ; then
966 for script in \ 1034 for script in \
967 support-files/my-*.cnf \ 1035 support-files/my-*.cnf \
968 support-files/magic \ 1036 support-files/magic \
969 support-files/ndb-config-2-node.ini 1037 support-files/ndb-config-2-node.ini
970 do 1038 do
1039 [[ -f "${script}" ]] \
971 dodoc "${script}" 1040 && dodoc "${script}"
972 done 1041 done
973 1042
974 docinto "scripts" 1043 docinto "scripts"
975 for script in scripts/mysql* ; do 1044 for script in scripts/mysql* ; do
1045 [[ -f "${script}" ]] \
976 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 1046 && [[ "${script%.sh}" == "${script}" ]] \
1047 && dodoc "${script}"
977 done 1048 done
978 1049
979 einfo 1050 einfo
980 elog "You might want to run:" 1051 elog "You might want to run:"
981 elog "\"emerge --config =${CATEGORY}/${PF}\"" 1052 elog "\"emerge --config =${CATEGORY}/${PF}\""
982 elog "if this is a new install." 1053 elog "if this is a new install."
983 einfo 1054 einfo
984 fi 1055 fi
985 1056
986 if pbxt_applicable ; then 1057 if pbxt_available && use pbxt ; then
987 # TODO: explain it better 1058 # TODO: explain it better
988 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';" 1059 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
989 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;" 1060 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
990 elog "if, after that, you cannot start the MySQL server," 1061 elog "if, after that, you cannot start the MySQL server,"
991 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then" 1062 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
1042 fi 1113 fi
1043 fi 1114 fi
1044 1115
1045 local pwd1="a" 1116 local pwd1="a"
1046 local pwd2="b" 1117 local pwd2="b"
1118 local MYSQL_ROOT_PASSWORD=''
1047 local maxtry=5 1119 local maxtry=15
1120
1121 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then
1122 MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")"
1123 fi
1048 1124
1049 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then 1125 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1050 ewarn "You have already a MySQL database in place." 1126 ewarn "You have already a MySQL database in place."
1051 ewarn "(${ROOT}/${MY_DATADIR}/*)" 1127 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1052 ewarn "Please rename or delete it if you wish to replace it." 1128 ewarn "Please rename or delete it if you wish to replace it."
1055 1131
1056 # Bug #213475 - MySQL _will_ object strenously if your machine is named 1132 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1057 # localhost. Also causes weird failures. 1133 # localhost. Also causes weird failures.
1058 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost" 1134 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1059 1135
1060 einfo "Creating the mysql database and setting proper" 1136 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1061 einfo "permissions on it ..."
1062 1137
1063 einfo "Insert a password for the mysql 'root' user" 1138 einfo "Please provide a password for the mysql 'root' user now,"
1139 einfo "or in the MYSQL_ROOT_PASSWORD env var."
1064 ewarn "Avoid [\"'\\_%] characters in the password" 1140 ewarn "Avoid [\"'\\_%] characters in the password"
1065 read -rsp " >" pwd1 ; echo 1141 read -rsp " >" pwd1 ; echo
1066 1142
1067 einfo "Retype the password" 1143 einfo "Retype the password"
1068 read -rsp " >" pwd2 ; echo 1144 read -rsp " >" pwd2 ; echo
1069 1145
1070 if [[ "x$pwd1" != "x$pwd2" ]] ; then 1146 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1071 die "Passwords are not the same" 1147 die "Passwords are not the same"
1148 fi
1149 MYSQL_ROOT_PASSWORD="${pwd1}"
1150 unset pwd1 pwd2
1072 fi 1151 fi
1073 1152
1074 local options="" 1153 local options=""
1075 local sqltmp="$(emktemp)" 1154 local sqltmp="$(emktemp)"
1076 1155
1090 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \ 1169 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1091 || die "MySQL databases not installed" 1170 || die "MySQL databases not installed"
1092 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null 1171 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1093 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null 1172 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1094 1173
1174 # Figure out which options we need to disable to do the setup
1175 helpfile="${TMPDIR}/mysqld-help"
1176 ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1177 for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1178 federated innodb ssl log-bin relay-log slow-query-log external-locking \
1179 ; do
1180 optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1181 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1182 done
1183 # But some options changed names
1184 egrep -sq external-locking "${helpfile}" && \
1185 options="${options/skip-locking/skip-external-locking}"
1186
1095 if mysql_version_is_at_least "4.1.3" ; then 1187 if mysql_version_is_at_least "4.1.3" ; then
1096 options="--skip-ndbcluster"
1097
1098 # Filling timezones, see 1188 # Filling timezones, see
1099 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 1189 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1100 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null 1190 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1101 1191
1102 if [[ -r "${help_tables}" ]] ; then 1192 if [[ -r "${help_tables}" ]] ; then
1103 cat "${help_tables}" >> "${sqltmp}" 1193 cat "${help_tables}" >> "${sqltmp}"
1104 fi 1194 fi
1105 fi 1195 fi
1196
1197 einfo "Creating the mysql database and setting proper"
1198 einfo "permissions on it ..."
1106 1199
1107 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock" 1200 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1108 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid" 1201 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1109 local mysqld="${ROOT}/usr/sbin/mysqld \ 1202 local mysqld="${ROOT}/usr/sbin/mysqld \
1110 ${options} \ 1203 ${options} \
1111 --user=mysql \ 1204 --user=mysql \
1112 --skip-grant-tables \
1113 --basedir=${ROOT}/usr \ 1205 --basedir=${ROOT}/usr \
1114 --datadir=${ROOT}/${MY_DATADIR} \ 1206 --datadir=${ROOT}/${MY_DATADIR} \
1115 --skip-innodb \
1116 --skip-bdb \
1117 --skip-networking \
1118 --max_allowed_packet=8M \ 1207 --max_allowed_packet=8M \
1119 --net_buffer_length=16K \ 1208 --net_buffer_length=16K \
1209 --default-storage-engine=MyISAM \
1120 --socket=${socket} \ 1210 --socket=${socket} \
1121 --pid-file=${pidfile}" 1211 --pid-file=${pidfile}"
1212 #einfo "About to start mysqld: ${mysqld}"
1213 ebegin "Starting mysqld"
1122 ${mysqld} & 1214 ${mysqld} &
1215 rc=$?
1123 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do 1216 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1124 maxtry=$((${maxtry}-1)) 1217 maxtry=$((${maxtry}-1))
1125 echo -n "." 1218 echo -n "."
1126 sleep 1 1219 sleep 1
1127 done 1220 done
1221 eend $rc
1128 1222
1223 if ! [[ -S "${socket}" ]]; then
1224 die "Completely failed to start up mysqld with: ${mysqld}"
1225 fi
1226
1227 ebegin "Setting root password"
1129 # Do this from memory, as we don't want clear text passwords in temp files 1228 # Do this from memory, as we don't want clear text passwords in temp files
1130 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'" 1229 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1131 "${ROOT}/usr/bin/mysql" \ 1230 "${ROOT}/usr/bin/mysql" \
1132 --socket=${socket} \ 1231 --socket=${socket} \
1133 -hlocalhost \ 1232 -hlocalhost \
1134 -e "${sql}" 1233 -e "${sql}"
1234 eend $?
1135 1235
1136 einfo "Loading \"zoneinfo\", this step may require a few seconds ..." 1236 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1137
1138 "${ROOT}/usr/bin/mysql" \ 1237 "${ROOT}/usr/bin/mysql" \
1139 --socket=${socket} \ 1238 --socket=${socket} \
1140 -hlocalhost \ 1239 -hlocalhost \
1141 -uroot \ 1240 -uroot \
1142 -p"${pwd1}" \ 1241 -p"${MYSQL_ROOT_PASSWORD}" \
1143 mysql < "${sqltmp}" 1242 mysql < "${sqltmp}"
1243 rc=$?
1244 eend $?
1245 [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1144 1246
1145 # Stop the server and cleanup 1247 # Stop the server and cleanup
1248 einfo "Stopping the server ..."
1146 kill $(< "${pidfile}" ) 1249 kill $(< "${pidfile}" )
1147 rm -f "${sqltmp}" 1250 rm -f "${sqltmp}"
1148 einfo "Stopping the server ..."
1149 wait %1 1251 wait %1
1150 einfo "Done" 1252 einfo "Done"
1151} 1253}
1152 1254
1153# @FUNCTION: mysql_pkg_postrm 1255# @FUNCTION: mysql_pkg_postrm

Legend:
Removed from v.1.135  
changed lines
  Added in v.1.144

  ViewVC Help
Powered by ViewVC 1.1.20