/[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.145
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.145 2010/04/27 05:45:55 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"
564 myconf="${myconf} --with-ndb-binlog" 618 myconf="${myconf} --with-ndb-binlog"
619 else
620 plugins_dis="${plugins_dis} ndbcluster"
565 fi 621 fi
566 622
567 if [[ "${PN}" == "mariadb" ]] ; then 623 if [[ "${PN}" == "mariadb" ]] ; then
568 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not 624 # In MariaDB, InnoDB is packaged in the xtradb directory, so it's not
569 # caught above. 625 # caught above.
570 plugins="${plugins},maria,innobase" 626 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)" 627 myconf="${myconf} $(use_with libevent)"
577 # This is not optional, without it several upstream testcases fail. 628 # This is not optional, without it several upstream testcases fail.
578 # Also strongly recommended by upstream. 629 # Also strongly recommended by upstream.
579 myconf="${myconf} --with-maria-tmp-tables" 630 myconf="${myconf} --with-maria-tmp-tables"
580 fi 631 fi
632
633 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]]; then
634 use pbxt \
635 && plugins_dyn="${plugins_dyn} pbxt" \
636 || plugins_dis="${plugins_dis} pbxt"
637 fi
581 638
639 use static && \
640 plugins_sta="${plugins_sta} ${plugins_dyn}" && \
641 plugins_dyn=""
642
643 einfo "Available plugins: ${plugins_avail}"
644 einfo "Dynamic plugins: ${plugins_dyn}"
645 einfo "Static plugins: ${plugins_sta}"
646 einfo "Disabled plugins: ${plugins_dis}"
647
648 # These are the static plugins
582 myconf="${myconf} --with-plugins=${plugins}" 649 myconf="${myconf} --with-plugins=${plugins_sta// /,}"
650 # And the disabled ones
651 for i in ${plugins_dis} ; do
652 myconf="${myconf} --without-plugin-${i}"
653 done
583} 654}
584 655
585pbxt_src_configure() { 656pbxt_src_configure() {
586 mysql_init_vars 657 mysql_init_vars
587 658
589 660
590 einfo "Reconfiguring dir '${PWD}'" 661 einfo "Reconfiguring dir '${PWD}'"
591 AT_GNUCONF_UPDATE="yes" eautoreconf 662 AT_GNUCONF_UPDATE="yes" eautoreconf
592 663
593 local myconf="" 664 local myconf=""
594 myconf="${myconf} --with-mysql=${S} --libdir=${MY_LIBDIR}" 665 myconf="${myconf} --with-mysql=${S} --libdir=/usr/$(get_libdir)"
595 use debug && myconf="${myconf} --with-debug=full" 666 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" 667 econf ${myconf} || die "Problem configuring PBXT storage engine"
598} 668}
599 669
600pbxt_src_compile() { 670pbxt_src_compile() {
671
601 # Be backwards compatible for now 672 # Be backwards compatible for now
602 if [[ $EAPI != 2 ]]; then 673 if [[ $EAPI != 2 ]]; then
603 pbxt_src_configure 674 pbxt_src_configure
604 fi 675 fi
605 # TODO: is it safe/needed to use emake here ? 676 # TODO: is it safe/needed to use emake here ?
634 fi 705 fi
635 fi 706 fi
636 707
637 # Check for USE flag problems in pkg_setup 708 # Check for USE flag problems in pkg_setup
638 if use static && use ssl ; then 709 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!" 710 M="MySQL does not support being built statically with SSL support enabled!"
711 eerror "${M}"
712 die "${M}"
641 fi 713 fi
642 714
643 if ! mysql_version_is_at_least "5.0" \ 715 if ! mysql_version_is_at_least "5.0" \
644 && use raid \ 716 && use raid \
645 && use static ; then 717 && use static ; then
647 eerror "with RAID support enabled." 719 eerror "with RAID support enabled."
648 die "USE flags 'raid' and 'static' conflict!" 720 die "USE flags 'raid' and 'static' conflict!"
649 fi 721 fi
650 722
651 if mysql_version_is_at_least "4.1.3" \ 723 if mysql_version_is_at_least "4.1.3" \
652 && ( use cluster || use extraengine ) \ 724 && ( use cluster || use extraengine || use embedded ) \
653 && use minimal ; then 725 && 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!" 726 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
727 eerror "${M}"
728 die "${M}"
656 fi 729 fi
657 730
658 # Bug #290570 fun. Upstream made us need a fairly new GCC4.
659 if mysql_version_is_at_least "5.0.83" ; then 731 if mysql_version_is_at_least "5.1" \
732 && xtradb_patch_available \
733 && use xtradb \
734 && use embedded ; then
735 M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
736 eerror "${M}"
737 die "${M}"
738 fi
739
740 # Bug #290570, 284946, 307251
741 # Upstream changes made us need a fairly new GCC4.
742 # But only for 5.0.8[3-6]!
743 if mysql_version_is_at_least "5.0.83" && ! mysql_version_is_at_least 5.0.87 ; then
660 GCC_VER=$(gcc-version) 744 GCC_VER=$(gcc-version)
661 case ${GCC_VER} in 745 case ${GCC_VER} in
662 2*|3*|4.0|4.1|4.2) die "Active GCC too old! Must have at least GCC4.3" ;; 746 2*|3*|4.0|4.1|4.2)
747 eerror "Some releases of MySQL required a very new GCC, and then"
748 eerror "later release relaxed that requirement again. Either pick a"
749 eerror "MySQL >=5.0.87, or use a newer GCC."
750 die "Active GCC too old!" ;;
663 esac 751 esac
664 fi 752 fi
665 753
666 # This should come after all of the die statements 754 # This should come after all of the die statements
667 enewgroup mysql 60 || die "problem adding 'mysql' group" 755 enewgroup mysql 60 || die "problem adding 'mysql' group"
743 fi 831 fi
744 832
745 local rebuilddirlist d 833 local rebuilddirlist d
746 834
747 if xtradb_patch_available && use xtradb ; then 835 if xtradb_patch_available && use xtradb ; then
748 einfo "Replacing InnoDB with Percona XtraDB" 836 einfo "Adding storage engine: Percona XtraDB (replacing InnoDB)"
749 pushd "${S}"/storage 837 pushd "${S}"/storage >/dev/null
750 i="innobase" 838 i="innobase"
751 o="${WORKDIR}/storage-${i}.mysql-upstream" 839 o="${WORKDIR}/storage-${i}.mysql-upstream"
752 # Have we been here already? 840 # Have we been here already?
753 [ -d "${o}" ] && rm -f "${i}" 841 [ -d "${o}" ] && rm -f "${i}"
754 # Or maybe we haven't 842 # Or maybe we haven't
755 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}" 843 [ -d "${i}" -a ! -d "${o}" ] && mv "${i}" "${o}"
756 cp -ra "${WORKDIR}/${XTRADB_P}" "${i}" 844 cp -ral "${WORKDIR}/${XTRADB_P}" "${i}"
757 popd 845 popd >/dev/null
846 fi
847
848 if pbxt_available && [[ "${PBXT_NEWSTYLE}" == "1" ]] && use pbxt ; then
849 einfo "Adding storage engine: PBXT"
850 pushd "${S}"/storage >/dev/null
851 i='pbxt'
852 [ -d "${i}" ] && rm -rf "${i}"
853 cp -ral "${WORKDIR}/${PBXT_P}" "${i}"
854 popd >/dev/null
758 fi 855 fi
759 856
760 if mysql_version_is_at_least "5.1.12" ; then 857 if mysql_version_is_at_least "5.1.12" ; then
761 rebuilddirlist="." 858 rebuilddirlist="."
762 # This does not seem to be needed presently. robbat2 2010/02/23 859 # This does not seem to be needed presently. robbat2 2010/02/23
856 # TODO: Move this before autoreconf !!! 953 # TODO: Move this before autoreconf !!!
857 find . -type f -name Makefile -print0 \ 954 find . -type f -name Makefile -print0 \
858 | xargs -0 -n100 sed -i \ 955 | xargs -0 -n100 sed -i \
859 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|' 956 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
860 957
861 if [[ $EAPI == 2 ]]; then 958 if [[ $EAPI == 2 ]] && [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
862 pbxt_patch_available && use pbxt && pbxt_src_configure 959 pbxt_patch_available && use pbxt && pbxt_src_configure
863 fi 960 fi
864} 961}
865 962
866# @FUNCTION: mysql_src_compile 963# @FUNCTION: mysql_src_compile
873 0 | 1) mysql_src_configure ;; 970 0 | 1) mysql_src_configure ;;
874 esac 971 esac
875 972
876 emake || die "emake failed" 973 emake || die "emake failed"
877 974
975 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
878 pbxt_patch_available && use pbxt && pbxt_src_compile 976 pbxt_patch_available && use pbxt && pbxt_src_compile
977 fi
879} 978}
880 979
881# @FUNCTION: mysql_src_install 980# @FUNCTION: mysql_src_install
882# @DESCRIPTION: 981# @DESCRIPTION:
883# Install mysql. 982# Install mysql.
889 DESTDIR="${D}" \ 988 DESTDIR="${D}" \
890 benchdir_root="${MY_SHAREDSTATEDIR}" \ 989 benchdir_root="${MY_SHAREDSTATEDIR}" \
891 testroot="${MY_SHAREDSTATEDIR}" \ 990 testroot="${MY_SHAREDSTATEDIR}" \
892 || die "emake install failed" 991 || die "emake install failed"
893 992
993 if [[ "${PBXT_NEWSTYLE}" != "1" ]]; then
894 pbxt_patch_available && use pbxt && pbxt_src_install 994 pbxt_patch_available && use pbxt && pbxt_src_install
995 fi
895 996
896 # Convenience links 997 # Convenience links
897 einfo "Making Convenience links for mysqlcheck multi-call binary" 998 einfo "Making Convenience links for mysqlcheck multi-call binary"
898 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze" 999 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
899 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair" 1000 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
923 if use !test ; then 1024 if use !test ; then
924 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test 1025 rm -rf "${D}"/${MY_SHAREDSTATEDIR}/mysql-test
925 fi 1026 fi
926 1027
927 # Configuration stuff 1028 # Configuration stuff
1029 if mysql_version_is_at_least "5.1" ; then
1030 mysql_mycnf_version="5.1"
928 if mysql_version_is_at_least "4.1" ; then 1031 elif mysql_version_is_at_least "4.1" ; then
929 mysql_mycnf_version="4.1" 1032 mysql_mycnf_version="4.1"
930 else 1033 else
931 mysql_mycnf_version="4.0" 1034 mysql_mycnf_version="4.0"
932 fi 1035 fi
933 einfo "Building default my.cnf" 1036 einfo "Building default my.cnf"
935 doins scripts/mysqlaccess.conf 1038 doins scripts/mysqlaccess.conf
936 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \ 1039 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
937 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \ 1040 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
938 > "${TMPDIR}/my.cnf.ok" 1041 > "${TMPDIR}/my.cnf.ok"
939 if mysql_version_is_at_least "4.1" && use latin1 ; then 1042 if mysql_version_is_at_least "4.1" && use latin1 ; then
940 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok" 1043 sed -i \
1044 -e "/character-set/s|utf8|latin1|g" \
1045 "${TMPDIR}/my.cnf.ok"
941 fi 1046 fi
942 newins "${TMPDIR}/my.cnf.ok" my.cnf 1047 newins "${TMPDIR}/my.cnf.ok" my.cnf
943 1048
944 # Minimal builds don't have the MySQL server 1049 # Minimal builds don't have the MySQL server
945 if ! use minimal ; then 1050 if ! use minimal ; then
1100 fi 1205 fi
1101 fi 1206 fi
1102 1207
1103 local pwd1="a" 1208 local pwd1="a"
1104 local pwd2="b" 1209 local pwd2="b"
1210 local MYSQL_ROOT_PASSWORD=''
1105 local maxtry=5 1211 local maxtry=15
1212
1213 if [ -z "${MYSQL_ROOT_PASSWORD}" -a -f "${ROOT}/root/.my.cnf" ]; then
1214 MYSQL_ROOT_PASSWORD="$(sed -n -e '/^password=/s,^password=,,gp' "${ROOT}/root/.my.cnf")"
1215 fi
1106 1216
1107 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then 1217 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
1108 ewarn "You have already a MySQL database in place." 1218 ewarn "You have already a MySQL database in place."
1109 ewarn "(${ROOT}/${MY_DATADIR}/*)" 1219 ewarn "(${ROOT}/${MY_DATADIR}/*)"
1110 ewarn "Please rename or delete it if you wish to replace it." 1220 ewarn "Please rename or delete it if you wish to replace it."
1113 1223
1114 # Bug #213475 - MySQL _will_ object strenously if your machine is named 1224 # Bug #213475 - MySQL _will_ object strenously if your machine is named
1115 # localhost. Also causes weird failures. 1225 # localhost. Also causes weird failures.
1116 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost" 1226 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
1117 1227
1118 einfo "Creating the mysql database and setting proper" 1228 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
1119 einfo "permissions on it ..."
1120 1229
1121 einfo "Insert a password for the mysql 'root' user" 1230 einfo "Please provide a password for the mysql 'root' user now,"
1231 einfo "or in the MYSQL_ROOT_PASSWORD env var."
1122 ewarn "Avoid [\"'\\_%] characters in the password" 1232 ewarn "Avoid [\"'\\_%] characters in the password"
1123 read -rsp " >" pwd1 ; echo 1233 read -rsp " >" pwd1 ; echo
1124 1234
1125 einfo "Retype the password" 1235 einfo "Retype the password"
1126 read -rsp " >" pwd2 ; echo 1236 read -rsp " >" pwd2 ; echo
1127 1237
1128 if [[ "x$pwd1" != "x$pwd2" ]] ; then 1238 if [[ "x$pwd1" != "x$pwd2" ]] ; then
1129 die "Passwords are not the same" 1239 die "Passwords are not the same"
1240 fi
1241 MYSQL_ROOT_PASSWORD="${pwd1}"
1242 unset pwd1 pwd2
1130 fi 1243 fi
1131 1244
1132 local options="" 1245 local options=""
1133 local sqltmp="$(emktemp)" 1246 local sqltmp="$(emktemp)"
1134 1247
1148 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \ 1261 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
1149 || die "MySQL databases not installed" 1262 || die "MySQL databases not installed"
1150 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null 1263 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
1151 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null 1264 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
1152 1265
1266 # Figure out which options we need to disable to do the setup
1267 helpfile="${TMPDIR}/mysqld-help"
1268 ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
1269 for opt in grant-tables host-cache name-resolve networking slave-start bdb \
1270 federated innodb ssl log-bin relay-log slow-query-log external-locking \
1271 ; do
1272 optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
1273 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
1274 done
1275 # But some options changed names
1276 egrep -sq external-locking "${helpfile}" && \
1277 options="${options/skip-locking/skip-external-locking}"
1278
1153 if mysql_version_is_at_least "4.1.3" ; then 1279 if mysql_version_is_at_least "4.1.3" ; then
1154 options="--skip-ndbcluster"
1155
1156 # Filling timezones, see 1280 # Filling timezones, see
1157 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html 1281 # 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 1282 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
1159 1283
1160 if [[ -r "${help_tables}" ]] ; then 1284 if [[ -r "${help_tables}" ]] ; then
1161 cat "${help_tables}" >> "${sqltmp}" 1285 cat "${help_tables}" >> "${sqltmp}"
1162 fi 1286 fi
1163 fi 1287 fi
1288
1289 einfo "Creating the mysql database and setting proper"
1290 einfo "permissions on it ..."
1164 1291
1165 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock" 1292 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
1166 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid" 1293 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
1167 local mysqld="${ROOT}/usr/sbin/mysqld \ 1294 local mysqld="${ROOT}/usr/sbin/mysqld \
1168 ${options} \ 1295 ${options} \
1169 --user=mysql \ 1296 --user=mysql \
1170 --skip-grant-tables \
1171 --basedir=${ROOT}/usr \ 1297 --basedir=${ROOT}/usr \
1172 --datadir=${ROOT}/${MY_DATADIR} \ 1298 --datadir=${ROOT}/${MY_DATADIR} \
1173 --skip-innodb \
1174 --skip-bdb \
1175 --skip-networking \
1176 --max_allowed_packet=8M \ 1299 --max_allowed_packet=8M \
1177 --net_buffer_length=16K \ 1300 --net_buffer_length=16K \
1301 --default-storage-engine=MyISAM \
1178 --socket=${socket} \ 1302 --socket=${socket} \
1179 --pid-file=${pidfile}" 1303 --pid-file=${pidfile}"
1304 #einfo "About to start mysqld: ${mysqld}"
1305 ebegin "Starting mysqld"
1180 ${mysqld} & 1306 ${mysqld} &
1307 rc=$?
1181 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do 1308 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
1182 maxtry=$((${maxtry}-1)) 1309 maxtry=$((${maxtry}-1))
1183 echo -n "." 1310 echo -n "."
1184 sleep 1 1311 sleep 1
1185 done 1312 done
1313 eend $rc
1186 1314
1315 if ! [[ -S "${socket}" ]]; then
1316 die "Completely failed to start up mysqld with: ${mysqld}"
1317 fi
1318
1319 ebegin "Setting root password"
1187 # Do this from memory, as we don't want clear text passwords in temp files 1320 # 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'" 1321 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
1189 "${ROOT}/usr/bin/mysql" \ 1322 "${ROOT}/usr/bin/mysql" \
1190 --socket=${socket} \ 1323 --socket=${socket} \
1191 -hlocalhost \ 1324 -hlocalhost \
1192 -e "${sql}" 1325 -e "${sql}"
1326 eend $?
1193 1327
1194 einfo "Loading \"zoneinfo\", this step may require a few seconds ..." 1328 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
1195
1196 "${ROOT}/usr/bin/mysql" \ 1329 "${ROOT}/usr/bin/mysql" \
1197 --socket=${socket} \ 1330 --socket=${socket} \
1198 -hlocalhost \ 1331 -hlocalhost \
1199 -uroot \ 1332 -uroot \
1200 -p"${pwd1}" \ 1333 -p"${MYSQL_ROOT_PASSWORD}" \
1201 mysql < "${sqltmp}" 1334 mysql < "${sqltmp}"
1335 rc=$?
1336 eend $?
1337 [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
1202 1338
1203 # Stop the server and cleanup 1339 # Stop the server and cleanup
1340 einfo "Stopping the server ..."
1204 kill $(< "${pidfile}" ) 1341 kill $(< "${pidfile}" )
1205 rm -f "${sqltmp}" 1342 rm -f "${sqltmp}"
1206 einfo "Stopping the server ..."
1207 wait %1 1343 wait %1
1208 einfo "Done" 1344 einfo "Done"
1209} 1345}
1210 1346
1211# @FUNCTION: mysql_pkg_postrm 1347# @FUNCTION: mysql_pkg_postrm

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

  ViewVC Help
Powered by ViewVC 1.1.20