/[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.141
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.141 2010/03/24 03:45:56 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
165LICENSE="GPL-2" 183LICENSE="GPL-2"
166SLOT="0" 184SLOT="0"
167IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test" 185IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test"
168 186
169mysql_version_is_at_least "4.1" \ 187mysql_version_is_at_least "4.1" \
182|| IUSE="${IUSE} berkdb" 200|| IUSE="${IUSE} berkdb"
183 201
184[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \ 202[ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
185&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling" 203&& IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
186 204
187# PBXT engine 205[[ "${PN}" == "mariadb" ]] \
206&& IUSE="${IUSE} libevent"
207
208# MariaDB has integrated PBXT
209# PBXT_VERSION means that we have a PBXT patch for this PV
210# PBXT was only introduced after 5.1.12
211pbxt_patch_available() {
212 [[ "${PN}" != "mariadb" ]] \
188mysql_version_is_at_least "5.1.12" \ 213 && mysql_version_is_at_least "5.1.12" \
189&& [[ -n "${PBXT_VERSION}" ]] \ 214 && [[ -n "${PBXT_VERSION}" ]]
215 return $?
216}
217
218pbxt_available() {
219 pbxt_patch_available || [[ "${PN}" == "mariadb" ]]
220 return $?
221}
222
223# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
224# MariaDB has integrated XtraDB
225# XTRADB_VERS means that we have a XTRADB patch for this PV
226# XTRADB was only introduced after 5.1.26
227xtradb_patch_available() {
228 [[ "${PN}" != "mariadb" ]] \
229 && mysql_version_is_at_least "5.1.26" \
230 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
231 return $?
232}
233
234pbxt_patch_available \
190&& PBXT_P="pbxt-${PBXT_VERSION}" \ 235&& 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" \ 236&& 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} )" \ 237&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \
238
239pbxt_available \
193&& IUSE="${IUSE} pbxt" 240&& IUSE="${IUSE} pbxt"
194 241
195# Get the percona tarball if XTRADB_VER and PERCONA_VER are both set 242xtradb_patch_available \
196mysql_version_is_at_least "5.1.26" \
197&& [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] \
198&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \ 243&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \
199&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \ 244&& 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}" \ 245&& 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}" \ 246&& 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} )" \ 247&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} )" \
396 myconf="${myconf} $(use_with perl bench)" 441 myconf="${myconf} $(use_with perl bench)"
397 myconf="${myconf} --enable-assembler" 442 myconf="${myconf} --enable-assembler"
398 myconf="${myconf} --with-extra-tools" 443 myconf="${myconf} --with-extra-tools"
399 myconf="${myconf} --with-innodb" 444 myconf="${myconf} --with-innodb"
400 myconf="${myconf} --without-readline" 445 myconf="${myconf} --without-readline"
446 myconf="${myconf} $(use_with ssl openssl)"
401 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)" 447 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
402 448
403 # --with-vio is not needed anymore, it's on by default and 449 # --with-vio is not needed anymore, it's on by default and
404 # has been removed from configure 450 # has been removed from configure
451 # Apply to 4.x and 5.0.[0-3]
405 if use ssl ; then 452 if use ssl ; then
406 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio" 453 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 454 fi
414 455
415 if mysql_version_is_at_least "5.0.60" ; then 456 if mysql_version_is_at_least "5.0.60" ; then
416 if use berkdb ; then 457 if use berkdb ; then
417 elog "Berkeley DB support was disabled due to build failures" 458 elog "Berkeley DB support was disabled due to build failures"
474 515
475configure_51() { 516configure_51() {
476 # TODO: !!!! readd --without-readline 517 # TODO: !!!! readd --without-readline
477 # the failure depend upon config/ac-macros/readline.m4 checking into 518 # the failure depend upon config/ac-macros/readline.m4 checking into
478 # readline.h instead of history.h 519 # readline.h instead of history.h
479 myconf="${myconf} $(use_with ssl)" 520 myconf="${myconf} $(use_with ssl ssl /usr)"
480 myconf="${myconf} --enable-assembler" 521 myconf="${myconf} --enable-assembler"
481 myconf="${myconf} --with-geometry" 522 myconf="${myconf} --with-geometry"
482 myconf="${myconf} --with-readline" 523 myconf="${myconf} --with-readline"
483 myconf="${myconf} --with-zlib-dir=/usr/" 524 myconf="${myconf} --with-zlib-dir=/usr/"
484 myconf="${myconf} --without-pstack" 525 myconf="${myconf} --without-pstack"
485 use max-idx-128 && myconf="${myconf} --with-max-indexes=128" 526 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
527 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
528 myconf="${myconf} $(use_enable community community-features)"
529 if use community; then
530 myconf="${myconf} $(use_enable profiling)"
531 else
532 myconf="${myconf} --disable-profiling"
533 fi
534 fi
486 535
487 # 5.1 introduces a new way to manage storage engines (plugins) 536 # 5.1 introduces a new way to manage storage engines (plugins)
488 # like configuration=none 537 # like configuration=none
538 # This base set are required, and will always be statically built.
489 local plugins="csv,myisam,myisammrg,heap" 539 local plugins="csv,myisam,myisammrg,heap"
490 if use extraengine ; then 540 if use extraengine ; then
491 # like configuration=max-no-ndb, archive and example removed in 5.1.11 541 # like configuration=max-no-ndb, archive and example removed in 5.1.11
492 # not added yet: ibmdb2i 542 # not added yet: ibmdb2i
493 # Not supporting as examples: example,daemon_example,ftexample 543 # Not supporting as examples: example,daemon_example,ftexample
494 plugins="${plugins},archive,blackhole,federated,partition" 544 plugins="${plugins},archive,blackhole,federated,partition"
495 545
546 if [[ "${PN}" != "mariadb" ]] ; then
496 elog "Before using the Federated storage engine, please be sure to read" 547 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" 548 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
549 else
550 elog "MariaDB includes the FederatedX engine. Be sure to read"
551 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
552 fi
498 fi 553 fi
499 554
500 # Upstream specifically requests that InnoDB always be built: 555 # Upstream specifically requests that InnoDB always be built:
501 # - innobase, innodb_plugin 556 # - innobase, innodb_plugin
502 # Build falcon if available for 6.x series. 557 # Build falcon if available for 6.x series.
508 if use cluster ; then 563 if use cluster ; then
509 plugins="${plugins},ndbcluster" 564 plugins="${plugins},ndbcluster"
510 myconf="${myconf} --with-ndb-binlog" 565 myconf="${myconf} --with-ndb-binlog"
511 fi 566 fi
512 567
568 if [[ "${PN}" == "mariadb" ]] ; then
569 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
570 # caught above.
571 plugins="${plugins},maria,innobase"
572 if use pbxt ; then
573 plugins="${plugins},pbxt"
574 else
575 myconf="${myconf} --without-plugin-pbxt"
576 fi
577 myconf="${myconf} $(use_with libevent)"
578 # This is not optional, without it several upstream testcases fail.
579 # Also strongly recommended by upstream.
580 myconf="${myconf} --with-maria-tmp-tables"
581 fi
582
513 myconf="${myconf} --with-plugins=${plugins}" 583 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} 584}
529 585
530pbxt_src_configure() { 586pbxt_src_configure() {
531 mysql_init_vars 587 mysql_init_vars
532 588
534 590
535 einfo "Reconfiguring dir '${PWD}'" 591 einfo "Reconfiguring dir '${PWD}'"
536 AT_GNUCONF_UPDATE="yes" eautoreconf 592 AT_GNUCONF_UPDATE="yes" eautoreconf
537 593
538 local myconf="" 594 local myconf=""
539 myconf="${myconf} --with-mysql=${S} --libdir=${MY_LIBDIR}" 595 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)"
540 use debug && myconf="${myconf} --with-debug=full" 596 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" 597 econf ${myconf} || die "Problem configuring PBXT storage engine"
543} 598}
544 599
545pbxt_src_compile() { 600pbxt_src_compile() {
546 # Be backwards compatible for now 601 # Be backwards compatible for now
547 if [[ $EAPI != 2 ]]; then 602 if [[ $EAPI != 2 ]]; then
687 rm -f "scripts/mysqlbug" 742 rm -f "scripts/mysqlbug"
688 fi 743 fi
689 744
690 local rebuilddirlist d 745 local rebuilddirlist d
691 746
692 if xtradb_applicable ; then 747 if xtradb_patch_available && use xtradb ; then
693 einfo "Replacing InnoDB with Percona XtraDB" 748 einfo "Replacing InnoDB with Percona XtraDB"
694 pushd "${S}"/storage 749 pushd "${S}"/storage
695 i="innobase" 750 i="innobase"
696 o="${WORKDIR}/storage-${i}.mysql-upstream" 751 o="${WORKDIR}/storage-${i}.mysql-upstream"
697 # Have we been here already? 752 # Have we been here already?
802 find . -type f -name Makefile -print0 \ 857 find . -type f -name Makefile -print0 \
803 | xargs -0 -n100 sed -i \ 858 | xargs -0 -n100 sed -i \
804 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 859 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
805 860
806 if [[ $EAPI == 2 ]]; then 861 if [[ $EAPI == 2 ]]; then
807 pbxt_applicable && pbxt_src_configure 862 pbxt_patch_available && use pbxt && pbxt_src_configure
808 fi 863 fi
809} 864}
810 865
811# @FUNCTION: mysql_src_compile 866# @FUNCTION: mysql_src_compile
812# @DESCRIPTION: 867# @DESCRIPTION:
813# Compile the mysql code. 868# Compile the mysql code.
814mysql_src_compile() { 869mysql_src_compile() {
815 # Be backwards compatible for now 870 # Be backwards compatible for now
816 case ${EAPI:-0} in 871 case ${EAPI:-0} in
817 2) : ;; 872 2) : ;;
818 0 | 1) mysql_src_configure ;; 873 0 | 1) mysql_src_configure ;;
819 esac 874 esac
820 875
821 emake || die "emake failed" 876 emake || die "emake failed"
822 877
823 pbxt_applicable && pbxt_src_compile 878 pbxt_patch_available && use pbxt && pbxt_src_compile
824} 879}
825 880
826# @FUNCTION: mysql_src_install 881# @FUNCTION: mysql_src_install
827# @DESCRIPTION: 882# @DESCRIPTION:
828# Install mysql. 883# Install mysql.
834 DESTDIR="${D}" \ 889 DESTDIR="${D}" \
835 benchdir_root="${MY_SHAREDSTATEDIR}" \ 890 benchdir_root="${MY_SHAREDSTATEDIR}" \
836 testroot="${MY_SHAREDSTATEDIR}" \ 891 testroot="${MY_SHAREDSTATEDIR}" \
837 || die "emake install failed" 892 || die "emake install failed"
838 893
839 pbxt_applicable && pbxt_src_install 894 pbxt_patch_available && use pbxt && pbxt_src_install
840 895
841 # Convenience links 896 # Convenience links
842 einfo "Making Convenience links for mysqlcheck multi-call binary" 897 einfo "Making Convenience links for mysqlcheck multi-call binary"
843 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 898 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
844 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 899 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
868 if use !test ; then 923 if use !test ; then
869 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test 924 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
870 fi 925 fi
871 926
872 # Configuration stuff 927 # Configuration stuff
928 if mysql_version_is_at_least "5.1" ; then
929 mysql_mycnf_version="5.1"
873 if mysql_version_is_at_least "4.1" ; then 930 elif mysql_version_is_at_least "4.1" ; then
874 mysql_mycnf_version="4.1" 931 mysql_mycnf_version="4.1"
875 else 932 else
876 mysql_mycnf_version="4.0" 933 mysql_mycnf_version="4.0"
877 fi 934 fi
878 einfo "Building default my.cnf" 935 einfo "Building default my.cnf"
880 doins scripts/mysqlaccess.conf 937 doins scripts/mysqlaccess.conf
881 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \ 938 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
882 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 939 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
883 > "${TMPDIR}/my.cnf.ok" 940 > "${TMPDIR}/my.cnf.ok"
884 if mysql_version_is_at_least "4.1" && use latin1 ; then 941 if mysql_version_is_at_least "4.1" && use latin1 ; then
885 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok" 942 sed -i \
943 -e "/character-set/s|utf8|latin1|g" \
944 "${TMPDIR}/my.cnf.ok"
886 fi 945 fi
887 newins "${TMPDIR}/my.cnf.ok" my.cnf 946 newins "${TMPDIR}/my.cnf.ok" my.cnf
888 947
889 # Minimal builds don't have the MySQL server 948 # Minimal builds don't have the MySQL server
890 if ! use minimal ; then 949 if ! use minimal ; then
966 for script in \ 1025 for script in \
967 support-files/my-*.cnf \ 1026 support-files/my-*.cnf \
968 support-files/magic \ 1027 support-files/magic \
969 support-files/ndb-config-2-node.ini 1028 support-files/ndb-config-2-node.ini
970 do 1029 do
1030 [[ -f "${script}" ]] \
971 dodoc "${script}" 1031 && dodoc "${script}"
972 done 1032 done
973 1033
974 docinto "scripts" 1034 docinto "scripts"
975 for script in scripts/mysql* ; do 1035 for script in scripts/mysql* ; do
1036 [[ -f "${script}" ]] \
976 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}" 1037 && [[ "${script%.sh}" == "${script}" ]] \
1038 && dodoc "${script}"
977 done 1039 done
978 1040
979 einfo 1041 einfo
980 elog "You might want to run:" 1042 elog "You might want to run:"
981 elog "\"emerge --config =${CATEGORY}/${PF}\"" 1043 elog "\"emerge --config =${CATEGORY}/${PF}\""
982 elog "if this is a new install." 1044 elog "if this is a new install."
983 einfo 1045 einfo
984 fi 1046 fi
985 1047
986 if pbxt_applicable ; then 1048 if pbxt_available && use pbxt ; then
987 # TODO: explain it better 1049 # TODO: explain it better
988 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';" 1050 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
989 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;" 1051 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
990 elog "if, after that, you cannot start the MySQL server," 1052 elog "if, after that, you cannot start the MySQL server,"
991 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then" 1053 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
1042 fi 1104 fi
1043 fi 1105 fi
1044 1106
1045 local pwd1="a" 1107 local pwd1="a"
1046 local pwd2="b" 1108 local pwd2="b"
1109 local MYSQL_ROOT_PASSWORD=''
1047 local maxtry=5 1110 local maxtry=15
1111
1112 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then
1113 MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")"
1114 fi
1048 1115
1049 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then 1116 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1050 ewarn "You have already a MySQL database in place." 1117 ewarn "You have already a MySQL database in place."
1051 ewarn "(${ROOT}/${MY_DATADIR}/*)" 1118 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1052 ewarn "Please rename or delete it if you wish to replace it." 1119 ewarn "Please rename or delete it if you wish to replace it."
1055 1122
1056 # Bug #213475 - MySQL _will_ object strenously if your machine is named 1123 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1057 # localhost. Also causes weird failures. 1124 # localhost. Also causes weird failures.
1058 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost" 1125 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1059 1126
1060 einfo "Creating the mysql database and setting proper" 1127 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1061 einfo "permissions on it ..."
1062 1128
1063 einfo "Insert a password for the mysql 'root' user" 1129 einfo "Please provide a password for the mysql 'root' user now,"
1130 einfo "or in the MYSQL_ROOT_PASSWORD env var."
1064 ewarn "Avoid [\"'\\_%] characters in the password" 1131 ewarn "Avoid [\"'\\_%] characters in the password"
1065 read -rsp " >" pwd1 ; echo 1132 read -rsp " >" pwd1 ; echo
1066 1133
1067 einfo "Retype the password" 1134 einfo "Retype the password"
1068 read -rsp " >" pwd2 ; echo 1135 read -rsp " >" pwd2 ; echo
1069 1136
1070 if [[ "x$pwd1" != "x$pwd2" ]] ; then 1137 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1071 die "Passwords are not the same" 1138 die "Passwords are not the same"
1139 fi
1140 MYSQL_ROOT_PASSWORD="${pwd1}"
1141 unset pwd1 pwd2
1072 fi 1142 fi
1073 1143
1074 local options="" 1144 local options=""
1075 local sqltmp="$(emktemp)" 1145 local sqltmp="$(emktemp)"
1076 1146
1090 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \ 1160 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1091 || die "MySQL databases not installed" 1161 || die "MySQL databases not installed"
1092 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null 1162 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1093 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null 1163 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1094 1164
1165 # Figure out which options we need to disable to do the setup
1166 helpfile="${TMPDIR}/mysqld-help"
1167 ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1168 for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1169 federated innodb ssl log-bin relay-log slow-query-log external-locking \
1170 ; do
1171 optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1172 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1173 done
1174 # But some options changed names
1175 egrep -sq external-locking "${helpfile}" && \
1176 options="${options/skip-locking/skip-external-locking}"
1177
1095 if mysql_version_is_at_least "4.1.3" ; then 1178 if mysql_version_is_at_least "4.1.3" ; then
1096 options="--skip-ndbcluster"
1097
1098 # Filling timezones, see 1179 # Filling timezones, see
1099 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 1180 # 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 1181 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1101 1182
1102 if [[ -r "${help_tables}" ]] ; then 1183 if [[ -r "${help_tables}" ]] ; then
1103 cat "${help_tables}" >> "${sqltmp}" 1184 cat "${help_tables}" >> "${sqltmp}"
1104 fi 1185 fi
1105 fi 1186 fi
1187
1188 einfo "Creating the mysql database and setting proper"
1189 einfo "permissions on it ..."
1106 1190
1107 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock" 1191 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1108 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid" 1192 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1109 local mysqld="${ROOT}/usr/sbin/mysqld \ 1193 local mysqld="${ROOT}/usr/sbin/mysqld \
1110 ${options} \ 1194 ${options} \
1111 --user=mysql \ 1195 --user=mysql \
1112 --skip-grant-tables \
1113 --basedir=${ROOT}/usr \ 1196 --basedir=${ROOT}/usr \
1114 --datadir=${ROOT}/${MY_DATADIR} \ 1197 --datadir=${ROOT}/${MY_DATADIR} \
1115 --skip-innodb \
1116 --skip-bdb \
1117 --skip-networking \
1118 --max_allowed_packet=8M \ 1198 --max_allowed_packet=8M \
1119 --net_buffer_length=16K \ 1199 --net_buffer_length=16K \
1120 --socket=${socket} \ 1200 --socket=${socket} \
1121 --pid-file=${pidfile}" 1201 --pid-file=${pidfile}"
1202 #einfo "About to start mysqld: ${mysqld}"
1203 ebegin "Starting mysqld"
1122 ${mysqld} & 1204 ${mysqld} &
1205 rc=$?
1123 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do 1206 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1124 maxtry=$((${maxtry}-1)) 1207 maxtry=$((${maxtry}-1))
1125 echo -n "." 1208 echo -n "."
1126 sleep 1 1209 sleep 1
1127 done 1210 done
1211 eend $rc
1128 1212
1213 if ! [[ -S "${socket}" ]]; then
1214 die "Completely failed to start up mysqld with: ${mysqld}"
1215 fi
1216
1217 ebegin "Setting root password"
1129 # Do this from memory, as we don't want clear text passwords in temp files 1218 # 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'" 1219 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1131 "${ROOT}/usr/bin/mysql" \ 1220 "${ROOT}/usr/bin/mysql" \
1132 --socket=${socket} \ 1221 --socket=${socket} \
1133 -hlocalhost \ 1222 -hlocalhost \
1134 -e "${sql}" 1223 -e "${sql}"
1224 eend $?
1135 1225
1136 einfo "Loading \"zoneinfo\", this step may require a few seconds ..." 1226 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1137
1138 "${ROOT}/usr/bin/mysql" \ 1227 "${ROOT}/usr/bin/mysql" \
1139 --socket=${socket} \ 1228 --socket=${socket} \
1140 -hlocalhost \ 1229 -hlocalhost \
1141 -uroot \ 1230 -uroot \
1142 -p"${pwd1}" \ 1231 -p"${MYSQL_ROOT_PASSWORD}" \
1143 mysql < "${sqltmp}" 1232 mysql < "${sqltmp}"
1233 rc=$?
1234 eend $?
1235 [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1144 1236
1145 # Stop the server and cleanup 1237 # Stop the server and cleanup
1238 einfo "Stopping the server ..."
1146 kill $(< "${pidfile}" ) 1239 kill $(< "${pidfile}" )
1147 rm -f "${sqltmp}" 1240 rm -f "${sqltmp}"
1148 einfo "Stopping the server ..."
1149 wait %1 1241 wait %1
1150 einfo "Done" 1242 einfo "Done"
1151} 1243}
1152 1244
1153# @FUNCTION: mysql_pkg_postrm 1245# @FUNCTION: mysql_pkg_postrm

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

  ViewVC Help
Powered by ViewVC 1.1.20