summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2010-03-24 03:09:08 +0000
committerRobin H. Johnson <robbat2@gentoo.org>2010-03-24 03:09:08 +0000
commit63a92bd85f7ac0e6a43709828b98b3ce0c41c112 (patch)
tree93a8e710de876dd8bee7be2343f5806b99f2d6ff /eclass
parentBug #310131: fix lineendings in mariadb specific patch that broke compile on ... (diff)
downloadgentoo-2-63a92bd85f7ac0e6a43709828b98b3ce0c41c112.tar.gz
gentoo-2-63a92bd85f7ac0e6a43709828b98b3ce0c41c112.tar.bz2
gentoo-2-63a92bd85f7ac0e6a43709828b98b3ce0c41c112.zip
Last commit in the latest round of mysql changes: pkg_config now checks for options before disabling them during setup to avoid more zealous error checking from upstream.
Diffstat (limited to 'eclass')
-rw-r--r--eclass/mysql.eclass78
1 files changed, 54 insertions, 24 deletions
diff --git a/eclass/mysql.eclass b/eclass/mysql.eclass
index 44e3d050307a..71613663bd47 100644
--- a/eclass/mysql.eclass
+++ b/eclass/mysql.eclass
@@ -1,6 +1,6 @@
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.139 2010/03/15 19:27:04 robbat2 Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.140 2010/03/24 03:09:08 robbat2 Exp $
# @ECLASS: mysql.eclass
# @MAINTAINER:
@@ -925,7 +925,9 @@ mysql_src_install() {
fi
# Configuration stuff
- if mysql_version_is_at_least "4.1" ; then
+ if mysql_version_is_at_least "5.1" ; then
+ mysql_mycnf_version="5.1"
+ elif mysql_version_is_at_least "4.1" ; then
mysql_mycnf_version="4.1"
else
mysql_mycnf_version="4.0"
@@ -937,7 +939,9 @@ mysql_src_install() {
"${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
> "${TMPDIR}/my.cnf.ok"
if mysql_version_is_at_least "4.1" && use latin1 ; then
- sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
+ sed -i \
+ -e "/character-set/s|utf8|latin1|g" \
+ "${TMPDIR}/my.cnf.ok"
fi
newins "${TMPDIR}/my.cnf.ok" my.cnf
@@ -1102,7 +1106,8 @@ mysql_pkg_config() {
local pwd1="a"
local pwd2="b"
- local maxtry=5
+ local MYSQL_ROOT_PASSWORD=''
+ local maxtry=15
if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
ewarn "You have already a MySQL database in place."
@@ -1115,18 +1120,21 @@ mysql_pkg_config() {
# localhost. Also causes weird failures.
[[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
- einfo "Creating the mysql database and setting proper"
- einfo "permissions on it ..."
+ if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
- einfo "Insert a password for the mysql 'root' user"
- ewarn "Avoid [\"'\\_%] characters in the password"
- read -rsp " >" pwd1 ; echo
+ einfo "Please provide a password for the mysql 'root' user now,"
+ einfo "or in the MYSQL_ROOT_PASSWORD env var."
+ ewarn "Avoid [\"'\\_%] characters in the password"
+ read -rsp " >" pwd1 ; echo
- einfo "Retype the password"
- read -rsp " >" pwd2 ; echo
+ einfo "Retype the password"
+ read -rsp " >" pwd2 ; echo
- if [[ "x$pwd1" != "x$pwd2" ]] ; then
- die "Passwords are not the same"
+ if [[ "x$pwd1" != "x$pwd2" ]] ; then
+ die "Passwords are not the same"
+ fi
+ MYSQL_ROOT_PASSWORD="${pwd1}"
+ unset pwd1 pwd2
fi
local options=""
@@ -1150,9 +1158,20 @@ mysql_pkg_config() {
chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
- if mysql_version_is_at_least "4.1.3" ; then
- options="--skip-ndbcluster"
+ # Figure out which options we need to disable to do the setup
+ helpfile="${TMPDIR}/mysqld-help"
+ ${ROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
+ for opt in grant-tables host-cache name-resolve networking slave-start bdb \
+ federated innodb ssl log-bin relay-log slow-query-log external-locking \
+ ; do
+ optexp="--(skip-)?${opt}" optfull="--skip-${opt}"
+ egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
+ done
+ # But some options changed names
+ egrep -sq external-locking "${helpfile}" && \
+ options="${options/skip-locking/skip-external-locking}"
+ if mysql_version_is_at_least "4.1.3" ; then
# Filling timezones, see
# http://dev.mysql.com/doc/mysql/en/time-zone-support.html
"${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
@@ -1161,49 +1180,60 @@ mysql_pkg_config() {
cat "${help_tables}" >> "${sqltmp}"
fi
fi
+
+ einfo "Creating the mysql database and setting proper"
+ einfo "permissions on it ..."
local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
local mysqld="${ROOT}/usr/sbin/mysqld \
${options} \
--user=mysql \
- --skip-grant-tables \
--basedir=${ROOT}/usr \
--datadir=${ROOT}/${MY_DATADIR} \
- --skip-innodb \
- --skip-bdb \
- --skip-networking \
--max_allowed_packet=8M \
--net_buffer_length=16K \
--socket=${socket} \
--pid-file=${pidfile}"
+ #einfo "About to start mysqld: ${mysqld}"
+ ebegin "Starting mysqld"
${mysqld} &
+ rc=$?
while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
maxtry=$((${maxtry}-1))
echo -n "."
sleep 1
done
+ eend $rc
+
+ if ! [[ -S "${socket}" ]]; then
+ die "Completely failed to start up mysqld with: ${mysqld}"
+ fi
+ ebegin "Setting root password"
# Do this from memory, as we don't want clear text passwords in temp files
- local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
+ local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
"${ROOT}/usr/bin/mysql" \
--socket=${socket} \
-hlocalhost \
-e "${sql}"
+ eend $?
- einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
-
+ ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
"${ROOT}/usr/bin/mysql" \
--socket=${socket} \
-hlocalhost \
-uroot \
- -p"${pwd1}" \
+ -p"${MYSQL_ROOT_PASSWORD}" \
mysql < "${sqltmp}"
+ rc=$?
+ eend $?
+ [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
# Stop the server and cleanup
+ einfo "Stopping the server ..."
kill $(< "${pidfile}" )
rm -f "${sqltmp}"
- einfo "Stopping the server ..."
wait %1
einfo "Done"
}