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

Diff of /eclass/mysql.eclass

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

Revision 1.137 Revision 1.146
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/Attic/mysql.eclass,v 1.137 2010/03/15 18:50:43 robbat2 Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/Attic/mysql.eclass,v 1.146 2010/05/13 19:45:47 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>
152# Work out the default SERVER_URI correctly 152# Work out the default SERVER_URI correctly
153if [ -z "${SERVER_URI}" ]; then 153if [ -z "${SERVER_URI}" ]; then
154 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}" 154 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}"
155 if [ "${PN}" == "mariadb" ]; then 155 if [ "${PN}" == "mariadb" ]; then
156 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})" 156 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${PV})"
157 MARIA_FULL_P="${PN}-${MARIA_FULL_PV}"
158 SERVER_URI="
159 http://ftp.rediris.es/mirror/MariaDB/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
160 http://maria.llarian.net/download/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
157 SERVER_URI="http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/mariadb-${MARIA_FULL_PV}.tar.gz" 161 http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/${MARIA_FULL_P}.tar.gz
162 "
158 # The community build is on the mirrors 163 # The community build is on the mirrors
159 elif [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 164 elif [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
160 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz" 165 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${MY_PV}.tar.gz"
161 # The (old) enterprise source is on the primary site only 166 # The (old) enterprise source is on the primary site only
162 elif [ "${PN}" == "mysql" ]; then 167 elif [ "${PN}" == "mysql" ]; then
177DESCRIPTION="A fast, multi-threaded, multi-user SQL database server." 182DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
178HOMEPAGE="http://www.mysql.com/" 183HOMEPAGE="http://www.mysql.com/"
179if [[ "${PN}" == "mariadb" ]]; then 184if [[ "${PN}" == "mariadb" ]]; then
180 HOMEPAGE="http://askmonty.org/" 185 HOMEPAGE="http://askmonty.org/"
181 DESCRIPTION="MariaDB is a MySQL fork with 3rd-party patches and additional storage engines merged." 186 DESCRIPTION="MariaDB is a MySQL fork with 3rd-party patches and additional storage engines merged."
187fi
188if [[ "${PN}" == "mysql-community" ]]; then
189 DESCRIPTION="${DESCRIPTION} (obsolete, move to dev-db/mysql)"
182fi 190fi
183LICENSE="GPL-2" 191LICENSE="GPL-2"
184SLOT="0" 192SLOT="0"
185IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test" 193IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static test"
186 194
229 && mysql_version_is_at_least "5.1.26" \ 237 && mysql_version_is_at_least "5.1.26" \
230 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]] 238 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
231 return $? 239 return $?
232} 240}
233 241
242
234pbxt_patch_available \ 243pbxt_patch_available \
235&& PBXT_P="pbxt-${PBXT_VERSION}" \ 244&& PBXT_P="pbxt-${PBXT_VERSION}" \
236&& PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \ 245&& PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz" \
237&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \ 246&& SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )" \
238 247
248# PBXT_NEWSTYLE means pbxt is in storage/ and gets enabled as other plugins
249# vs. built outside the dir
239pbxt_available \ 250pbxt_available \
240&& IUSE="${IUSE} pbxt" 251&& IUSE="${IUSE} pbxt" \
252&& mysql_version_is_at_least "5.1.40" \
253&& PBXT_NEWSTYLE=1
241 254
242xtradb_patch_available \ 255xtradb_patch_available \
243&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \ 256&& XTRADB_P="percona-xtradb-${XTRADB_VER}" \
244&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \ 257&& XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz" \
245&& XTRADB_SRC_URI1="http://www.percona.com/percona-builds/xtradb/${XTRADB_SRC_URI_COMMON}" \ 258&& XTRADB_SRC_B1="http://www.percona.com/" \
259&& XTRADB_SRC_B2="${XTRADB_SRC_B1}/percona-builds/" \
260&& XTRADB_SRC_URI1="${XTRADB_SRC_B2}/Percona-Server/Percona-Server-${XTRADB_SRC_URI_COMMON}" \
246&& XTRADB_SRC_URI2="http://www.percona.com/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \ 261&& XTRADB_SRC_URI2="${XTRADB_SRC_B2}/xtradb/${XTRADB_SRC_URI_COMMON}" \
262&& XTRADB_SRC_URI3="${XTRADB_SRC_B1}/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}" \
247&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} )" \ 263&& SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} ${XTRADB_SRC_URI3} )" \
248&& IUSE="${IUSE} xtradb" 264&& IUSE="${IUSE} xtradb"
249 265
250# 266#
251# HELPER FUNCTIONS: 267# HELPER FUNCTIONS:
252# 268#
521 myconf="${myconf} --enable-assembler" 537 myconf="${myconf} --enable-assembler"
522 myconf="${myconf} --with-geometry" 538 myconf="${myconf} --with-geometry"
523 myconf="${myconf} --with-readline" 539 myconf="${myconf} --with-readline"
524 myconf="${myconf} --with-zlib-dir=/usr/" 540 myconf="${myconf} --with-zlib-dir=/usr/"
525 myconf="${myconf} --without-pstack" 541 myconf="${myconf} --without-pstack"
542 myconf="${myconf} --with-plugindir=/usr/$(get_libdir)/mysql/plugin"
543
526 use max-idx-128 && myconf="${myconf} --with-max-indexes=128" 544 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
527 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then 545 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
528 myconf="${myconf} $(use_enable community community-features)" 546 myconf="${myconf} $(use_enable community community-features)"
529 if use community; then 547 if use community; then
530 myconf="${myconf} $(use_enable profiling)" 548 myconf="${myconf} $(use_enable profiling)"
531 else 549 else
532 myconf="${myconf} --disable-profiling" 550 myconf="${myconf} --disable-profiling"
533 fi 551 fi
534 fi 552 fi
535 553
554 # Scan for all available plugins
555 local plugins_avail="$(
556 LANG=C \
557 find "${S}" \
558 \( \
559 -name 'plug.in' \
560 -o -iname 'configure.in' \
561 -o -iname 'configure.ac' \
562 \) \
563 -print0 \
564 | xargs -0 sed -r -n \
565 -e '/^MYSQL_STORAGE_ENGINE/{
566 s~MYSQL_STORAGE_ENGINE\([[:space:]]*\[?([-_a-z0-9]+)\]?.*,~\1 ~g ;
567 s~^([^ ]+).*~\1~gp;
568 }' \
569 | tr -s '\n' ' '
570 )"
571
536 # 5.1 introduces a new way to manage storage engines (plugins) 572 # 5.1 introduces a new way to manage storage engines (plugins)
537 # like configuration=none 573 # like configuration=none
574 # This base set are required, and will always be statically built.
538 local plugins="csv,myisam,myisammrg,heap" 575 local plugins_sta="csv myisam myisammrg heap"
576 local plugins_dyn=""
577 local plugins_dis="example ibmdb2i"
578
579 # These aren't actually required by the base set, but are really useful:
580 plugins_sta="${plugins_sta} archive blackhole"
581
582 # default in 5.5.4
583 if mysql_version_is_at_least "5.5.4" ; then
584 plugins_sta="${plugins_sta} partition"
585 fi
586 # Now the extras
539 if use extraengine ; then 587 if use extraengine ; then
540 # like configuration=max-no-ndb, archive and example removed in 5.1.11 588 # like configuration=max-no-ndb, archive and example removed in 5.1.11
541 # not added yet: ibmdb2i 589 # not added yet: ibmdb2i
542 # Not supporting as examples: example,daemon_example,ftexample 590 # Not supporting as examples: example,daemon_example,ftexample
543 plugins="${plugins},archive,blackhole,federated,partition" 591 plugins_sta="${plugins_sta} partition"
592 plugins_dyn="${plugins_sta} federated"
544 593
545 if [[ "${PN}" != "mariadb" ]] ; then 594 if [[ "${PN}" != "mariadb" ]] ; then
546 elog "Before using the Federated storage engine, please be sure to read" 595 elog "Before using the Federated storage engine, please be sure to read"
547 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html" 596 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
548 else 597 else
549 elog "MariaDB includes the FederatedX engine. Be sure to read" 598 elog "MariaDB includes the FederatedX engine. Be sure to read"
550 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine" 599 elog "http://askmonty.org/wiki/index.php/Manual:FederatedX_storage_engine"
551 fi 600 fi
601 else
602 plugins_dis="${plugins_dis} partition federated"
552 fi 603 fi
553 604
554 # Upstream specifically requests that InnoDB always be built: 605 # Upstream specifically requests that InnoDB always be built:
555 # - innobase, innodb_plugin 606 # - innobase, innodb_plugin
556 # Build falcon if available for 6.x series. 607 # Build falcon if available for 6.x series.
557 for i in innobase innodb_plugin falcon ; do 608 for i in innobase falcon ; do
558 [ -e "${S}"/storage/${i} ] && plugins="${plugins},${i}" 609 [ -e "${S}"/storage/${i} ] && plugins_sta="${plugins_sta} ${i}"
610 done
611 for i in innodb_plugin ; do
612 [ -e "${S}"/storage/${i} ] && plugins_dyn="${plugins_dyn} ${i}"
559 done 613 done
560 614
561 # like configuration=max-no-ndb 615 # like configuration=max-no-ndb
562 if use cluster ; then 616 if use cluster ; then
563 plugins="${plugins},ndbcluster" 617 plugins_sta="${plugins_sta} ndbcluster partition"
618 plugins_dis="${plugins_dis//partition}"
564 myconf="${myconf} --with-ndb-binlog" 619 myconf="${myconf} --with-ndb-binlog"
620 else
621 plugins_dis="${plugins_dis} ndbcluster"
565 fi 622 fi
566 623
567 if [[ "${PN}" == "mariadb" ]] ; then 624 if [[ "${PN}" == "mariadb" ]] ; then
568 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not 625 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
569 # caught above. 626 # caught above.
570 plugins="${plugins},maria,innobase" 627 plugins_sta="${plugins_sta} maria innobase"
571 if use pbxt ; then
572 plugins="${plugins},pbxt"
573 else
574 myconf="${myconf} --without-plugin-pbxt"
575 fi
576 myconf="${myconf} $(use_with libevent)" 628 myconf="${myconf} $(use_with libevent)"
577 # This is not optional, without it several upstream testcases fail. 629 # This is not optional, without it several upstream testcases fail.
578 # Also strongly recommended by upstream. 630 # Also strongly recommended by upstream.
579 myconf="${myconf} --with-maria-tmp-tables" 631 myconf="${myconf} --with-maria-tmp-tables"
580 fi 632 fi
633
634 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
635 use pbxt \
636 && plugins_dyn="${plugins_dyn} pbxt" \
637 || plugins_dis="${plugins_dis} pbxt"
638 fi
581 639
640 use static && \
641 plugins_sta="${plugins_sta} ${plugins_dyn}" && \
642 plugins_dyn=""
643
644 einfo "Available plugins: ${plugins_avail}"
645 einfo "Dynamic plugins: ${plugins_dyn}"
646 einfo "Static plugins: ${plugins_sta}"
647 einfo "Disabled plugins: ${plugins_dis}"
648
649 # These are the static plugins
582 myconf="${myconf} --with-plugins=${plugins}" 650 myconf="${myconf} --with-plugins=${plugins_sta// /,}"
651 # And the disabled ones
652 for i in ${plugins_dis} ; do
653 myconf="${myconf} --without-plugin-${i}"
654 done
583} 655}
584 656
585pbxt_src_configure() { 657pbxt_src_configure() {
586 mysql_init_vars 658 mysql_init_vars
587 659
589 661
590 einfo "Reconfiguring dir '${PWD}'" 662 einfo "Reconfiguring dir '${PWD}'"
591 AT_GNUCONF_UPDATE="yes" eautoreconf 663 AT_GNUCONF_UPDATE="yes" eautoreconf
592 664
593 local myconf="" 665 local myconf=""
594 myconf="${myconf} --with-mysql=${S} --libdir=${MY_LIBDIR}" 666 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)"
595 use debug && myconf="${myconf} --with-debug=full" 667 use debug && myconf="${myconf} --with-debug=full"
596 # TODO: is it safe/needed to use econf here ?
597 ./configure ${myconf} || die "Problem configuring PBXT storage engine" 668 econf ${myconf} || die "Problem configuring PBXT storage engine"
598} 669}
599 670
600pbxt_src_compile() { 671pbxt_src_compile() {
672
601 # Be backwards compatible for now 673 # Be backwards compatible for now
602 if [[ $EAPI != 2 ]]; then 674 if [[ $EAPI != 2 ]]; then
603 pbxt_src_configure 675 pbxt_src_configure
604 fi 676 fi
605 # TODO: is it safe/needed to use emake here ? 677 # TODO: is it safe/needed to use emake here ?
634 fi 706 fi
635 fi 707 fi
636 708
637 # Check for USE flag problems in pkg_setup 709 # Check for USE flag problems in pkg_setup
638 if use static && use ssl ; then 710 if use static && use ssl ; then
639 eerror "MySQL does not support being built statically with SSL support enabled!"
640 die "MySQL does not support being built statically with SSL support enabled!" 711 M="MySQL does not support being built statically with SSL support enabled!"
712 eerror "${M}"
713 die "${M}"
641 fi 714 fi
642 715
643 if ! mysql_version_is_at_least "5.0" \ 716 if ! mysql_version_is_at_least "5.0" \
644 && use raid \ 717 && use raid \
645 && use static ; then 718 && use static ; then
647 eerror "with RAID support enabled." 720 eerror "with RAID support enabled."
648 die "USE flags 'raid' and 'static' conflict!" 721 die "USE flags 'raid' and 'static' conflict!"
649 fi 722 fi
650 723
651 if mysql_version_is_at_least "4.1.3" \ 724 if mysql_version_is_at_least "4.1.3" \
652 && ( use cluster || use extraengine ) \ 725 && ( use cluster || use extraengine || use embedded ) \
653 && use minimal ; then 726 && use minimal ; then
654 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
655 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!" 727 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
728 eerror "${M}"
729 die "${M}"
656 fi 730 fi
657 731
658 # Bug #290570 fun. Upstream made us need a fairly new GCC4.
659 if mysql_version_is_at_least "5.0.83" ; then 732 if mysql_version_is_at_least "5.1" \
733 && xtradb_patch_available \
734 && use xtradb \
735 && use embedded ; then
736 M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
737 eerror "${M}"
738 die "${M}"
739 fi
740
741 # Bug #290570, 284946, 307251
742 # Upstream changes made us need a fairly new GCC4.
743 # But only for 5.0.8[3-6]!
744 if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
660 GCC_VER=$(gcc-version) 745 GCC_VER=$(gcc-version)
661 case ${GCC_VER} in 746 case ${GCC_VER} in
662 2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;; 747 2*|3*|4.0|4.1|4.2)
748 eerror "Some releases of MySQL required a very new GCC, and then"
749 eerror "later release relaxed that requirement again. Either pick a"
750 eerror "MySQL >=5.0.87, or use a newer GCC."
751 die "Active GCC too old!" ;;
663 esac 752 esac
664 fi 753 fi
665 754
666 # This should come after all of the die statements 755 # This should come after all of the die statements
667 enewgroup mysql 60 || die "problem adding 'mysql' group" 756 enewgroup mysql 60 || die "problem adding 'mysql' group"
743 fi 832 fi
744 833
745 local rebuilddirlist d 834 local rebuilddirlist d
746 835
747 if xtradb_patch_available && use xtradb ; then 836 if xtradb_patch_available && use xtradb ; then
748 einfo "Replacing InnoDB with Percona XtraDB" 837 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
749 pushd "${S}"/storage 838 pushd "${S}"/storage >/dev/null
750 i="innobase" 839 i="innobase"
751 o="${WORKDIR}/storage-${i}.mysql-upstream" 840 o="${WORKDIR}/storage-${i}.mysql-upstream"
752 # Have we been here already? 841 # Have we been here already?
753 [ -d "${o}" ] && rm -f "${i}" 842 [ -d "${o}" ] && rm -f "${i}"
754 # Or maybe we haven't 843 # Or maybe we haven't
755 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" 844 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
756 cp -ra "${WORKDIR}/${XTRADB_P}" "${i}" 845 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
757 popd 846 popd >/dev/null
847 fi
848
849 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
850 einfo "Adding storage engine: PBXT"
851 pushd "${S}"/storage >/dev/null
852 i='pbxt'
853 [ -d "${i}" ] && rm -rf "${i}"
854 cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
855 popd >/dev/null
758 fi 856 fi
759 857
760 if mysql_version_is_at_least "5.1.12" ; then 858 if mysql_version_is_at_least "5.1.12" ; then
761 rebuilddirlist="." 859 rebuilddirlist="."
762 # This does not seem to be needed presently. robbat2 2010/02/23 860 # This does not seem to be needed presently. robbat2 2010/02/23
856 # TODO: Move this before autoreconf !!! 954 # TODO: Move this before autoreconf !!!
857 find . -type f -name Makefile -print0 \ 955 find . -type f -name Makefile -print0 \
858 | xargs -0 -n100 sed -i \ 956 | xargs -0 -n100 sed -i \
859 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 957 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
860 958
861 if [[ $EAPI == 2 ]]; then 959 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
862 pbxt_patch_available && use pbxt && pbxt_src_configure 960 pbxt_patch_available && use pbxt && pbxt_src_configure
863 fi 961 fi
864} 962}
865 963
866# @FUNCTION: mysql_src_compile 964# @FUNCTION: mysql_src_compile
873 0 | 1) mysql_src_configure ;; 971 0 | 1) mysql_src_configure ;;
874 esac 972 esac
875 973
876 emake || die "emake failed" 974 emake || die "emake failed"
877 975
976 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
878 pbxt_patch_available && use pbxt && pbxt_src_compile 977 pbxt_patch_available && use pbxt && pbxt_src_compile
978 fi
879} 979}
880 980
881# @FUNCTION: mysql_src_install 981# @FUNCTION: mysql_src_install
882# @DESCRIPTION: 982# @DESCRIPTION:
883# Install mysql. 983# Install mysql.
889 DESTDIR="${D}" \ 989 DESTDIR="${D}" \
890 benchdir_root="${MY_SHAREDSTATEDIR}" \ 990 benchdir_root="${MY_SHAREDSTATEDIR}" \
891 testroot="${MY_SHAREDSTATEDIR}" \ 991 testroot="${MY_SHAREDSTATEDIR}" \
892 || die "emake install failed" 992 || die "emake install failed"
893 993
994 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
894 pbxt_patch_available && use pbxt && pbxt_src_install 995 pbxt_patch_available && use pbxt && pbxt_src_install
996 fi
895 997
896 # Convenience links 998 # Convenience links
897 einfo "Making Convenience links for mysqlcheck multi-call binary" 999 einfo "Making Convenience links for mysqlcheck multi-call binary"
898 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 1000 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
899 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 1001 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
923 if use !test ; then 1025 if use !test ; then
924 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test 1026 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
925 fi 1027 fi
926 1028
927 # Configuration stuff 1029 # Configuration stuff
1030 if mysql_version_is_at_least "5.1" ; then
1031 mysql_mycnf_version="5.1"
928 if mysql_version_is_at_least "4.1" ; then 1032 elif mysql_version_is_at_least "4.1" ; then
929 mysql_mycnf_version="4.1" 1033 mysql_mycnf_version="4.1"
930 else 1034 else
931 mysql_mycnf_version="4.0" 1035 mysql_mycnf_version="4.0"
932 fi 1036 fi
933 einfo "Building default my.cnf" 1037 einfo "Building default my.cnf"
935 doins scripts/mysqlaccess.conf 1039 doins scripts/mysqlaccess.conf
936 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \ 1040 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
937 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 1041 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
938 > "${TMPDIR}/my.cnf.ok" 1042 > "${TMPDIR}/my.cnf.ok"
939 if mysql_version_is_at_least "4.1" && use latin1 ; then 1043 if mysql_version_is_at_least "4.1" && use latin1 ; then
940 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok" 1044 sed -i \
1045 -e "/character-set/s|utf8|latin1|g" \
1046 "${TMPDIR}/my.cnf.ok"
941 fi 1047 fi
942 newins "${TMPDIR}/my.cnf.ok" my.cnf 1048 newins "${TMPDIR}/my.cnf.ok" my.cnf
943 1049
944 # Minimal builds don't have the MySQL server 1050 # Minimal builds don't have the MySQL server
945 if ! use minimal ; then 1051 if ! use minimal ; then
1100 fi 1206 fi
1101 fi 1207 fi
1102 1208
1103 local pwd1="a" 1209 local pwd1="a"
1104 local pwd2="b" 1210 local pwd2="b"
1211 local MYSQL_ROOT_PASSWORD=''
1105 local maxtry=5 1212 local maxtry=15
1213
1214 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then
1215 MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")"
1216 fi
1106 1217
1107 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then 1218 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1108 ewarn "You have already a MySQL database in place." 1219 ewarn "You have already a MySQL database in place."
1109 ewarn "(${ROOT}/${MY_DATADIR}/*)" 1220 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1110 ewarn "Please rename or delete it if you wish to replace it." 1221 ewarn "Please rename or delete it if you wish to replace it."
1113 1224
1114 # Bug #213475 - MySQL _will_ object strenously if your machine is named 1225 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1115 # localhost. Also causes weird failures. 1226 # localhost. Also causes weird failures.
1116 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost" 1227 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1117 1228
1118 einfo "Creating the mysql database and setting proper" 1229 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1119 einfo "permissions on it ..."
1120 1230
1121 einfo "Insert a password for the mysql 'root' user" 1231 einfo "Please provide a password for the mysql 'root' user now,"
1232 einfo "or in the MYSQL_ROOT_PASSWORD env var."
1122 ewarn "Avoid [\"'\\_%] characters in the password" 1233 ewarn "Avoid [\"'\\_%] characters in the password"
1123 read -rsp " >" pwd1 ; echo 1234 read -rsp " >" pwd1 ; echo
1124 1235
1125 einfo "Retype the password" 1236 einfo "Retype the password"
1126 read -rsp " >" pwd2 ; echo 1237 read -rsp " >" pwd2 ; echo
1127 1238
1128 if [[ "x$pwd1" != "x$pwd2" ]] ; then 1239 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1129 die "Passwords are not the same" 1240 die "Passwords are not the same"
1241 fi
1242 MYSQL_ROOT_PASSWORD="${pwd1}"
1243 unset pwd1 pwd2
1130 fi 1244 fi
1131 1245
1132 local options="" 1246 local options=""
1133 local sqltmp="$(emktemp)" 1247 local sqltmp="$(emktemp)"
1134 1248
1148 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \ 1262 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1149 || die "MySQL databases not installed" 1263 || die "MySQL databases not installed"
1150 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null 1264 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1151 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null 1265 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1152 1266
1267 # Figure out which options we need to disable to do the setup
1268 helpfile="${TMPDIR}/mysqld-help"
1269 ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1270 for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1271 federated innodb ssl log-bin relay-log slow-query-log external-locking \
1272 ; do
1273 optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1274 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1275 done
1276 # But some options changed names
1277 egrep -sq external-locking "${helpfile}" && \
1278 options="${options/skip-locking/skip-external-locking}"
1279
1153 if mysql_version_is_at_least "4.1.3" ; then 1280 if mysql_version_is_at_least "4.1.3" ; then
1154 options="--skip-ndbcluster"
1155
1156 # Filling timezones, see 1281 # Filling timezones, see
1157 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 1282 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
1158 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null 1283 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1159 1284
1160 if [[ -r "${help_tables}" ]] ; then 1285 if [[ -r "${help_tables}" ]] ; then
1161 cat "${help_tables}" >> "${sqltmp}" 1286 cat "${help_tables}" >> "${sqltmp}"
1162 fi 1287 fi
1163 fi 1288 fi
1289
1290 einfo "Creating the mysql database and setting proper"
1291 einfo "permissions on it ..."
1164 1292
1165 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock" 1293 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1166 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid" 1294 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1167 local mysqld="${ROOT}/usr/sbin/mysqld \ 1295 local mysqld="${ROOT}/usr/sbin/mysqld \
1168 ${options} \ 1296 ${options} \
1169 --user=mysql \ 1297 --user=mysql \
1170 --skip-grant-tables \
1171 --basedir=${ROOT}/usr \ 1298 --basedir=${ROOT}/usr \
1172 --datadir=${ROOT}/${MY_DATADIR} \ 1299 --datadir=${ROOT}/${MY_DATADIR} \
1173 --skip-innodb \
1174 --skip-bdb \
1175 --skip-networking \
1176 --max_allowed_packet=8M \ 1300 --max_allowed_packet=8M \
1177 --net_buffer_length=16K \ 1301 --net_buffer_length=16K \
1302 --default-storage-engine=MyISAM \
1178 --socket=${socket} \ 1303 --socket=${socket} \
1179 --pid-file=${pidfile}" 1304 --pid-file=${pidfile}"
1305 #einfo "About to start mysqld: ${mysqld}"
1306 ebegin "Starting mysqld"
1180 ${mysqld} & 1307 ${mysqld} &
1308 rc=$?
1181 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do 1309 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1182 maxtry=$((${maxtry}-1)) 1310 maxtry=$((${maxtry}-1))
1183 echo -n "." 1311 echo -n "."
1184 sleep 1 1312 sleep 1
1185 done 1313 done
1314 eend $rc
1186 1315
1316 if ! [[ -S "${socket}" ]]; then
1317 die "Completely failed to start up mysqld with: ${mysqld}"
1318 fi
1319
1320 ebegin "Setting root password"
1187 # Do this from memory, as we don't want clear text passwords in temp files 1321 # Do this from memory, as we don't want clear text passwords in temp files
1188 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'" 1322 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1189 "${ROOT}/usr/bin/mysql" \ 1323 "${ROOT}/usr/bin/mysql" \
1190 --socket=${socket} \ 1324 --socket=${socket} \
1191 -hlocalhost \ 1325 -hlocalhost \
1192 -e "${sql}" 1326 -e "${sql}"
1327 eend $?
1193 1328
1194 einfo "Loading \"zoneinfo\", this step may require a few seconds ..." 1329 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1195
1196 "${ROOT}/usr/bin/mysql" \ 1330 "${ROOT}/usr/bin/mysql" \
1197 --socket=${socket} \ 1331 --socket=${socket} \
1198 -hlocalhost \ 1332 -hlocalhost \
1199 -uroot \ 1333 -uroot \
1200 -p"${pwd1}" \ 1334 -p"${MYSQL_ROOT_PASSWORD}" \
1201 mysql < "${sqltmp}" 1335 mysql < "${sqltmp}"
1336 rc=$?
1337 eend $?
1338 [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1202 1339
1203 # Stop the server and cleanup 1340 # Stop the server and cleanup
1341 einfo "Stopping the server ..."
1204 kill $(< "${pidfile}" ) 1342 kill $(< "${pidfile}" )
1205 rm -f "${sqltmp}" 1343 rm -f "${sqltmp}"
1206 einfo "Stopping the server ..."
1207 wait %1 1344 wait %1
1208 einfo "Done" 1345 einfo "Done"
1209} 1346}
1210 1347
1211# @FUNCTION: mysql_pkg_postrm 1348# @FUNCTION: mysql_pkg_postrm

Legend:
Removed from v.1.137  
changed lines
  Added in v.1.146

  ViewVC Help
Powered by ViewVC 1.1.20