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

Contents of /eclass/mysql-v2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.20 - (show annotations) (download)
Thu Nov 1 20:22:57 2012 UTC (2 years, 1 month ago) by robbat2
Branch: MAIN
Changes since 1.19: +74 -22 lines
Bug #392361: Fix mysql_install_db cases to work between all versions & variations of MySQL. Also add in checks for tmpdir/log-bin/relay-log directories that must exist otherwise the install_db will fail.

1 # Copyright 1999-2012 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql-v2.eclass,v 1.19 2012/09/27 16:35:41 axs Exp $
4
5 # @ECLASS: mysql-v2.eclass
6 # @MAINTAINER:
7 # Maintainers:
8 # - MySQL Team <mysql-bugs@gentoo.org>
9 # - Robin H. Johnson <robbat2@gentoo.org>
10 # - Jorge Manuel B. S. Vicetto <jmbsvicetto@gentoo.org>
11 # @BLURB: This eclass provides most of the functions for mysql ebuilds
12 # @DESCRIPTION:
13 # The mysql-v2.eclass is the base eclass to build the mysql and
14 # alternative projects (mariadb) ebuilds.
15 # This eclass uses the mysql-autotools and mysql-cmake eclasses for the
16 # specific bits related to the build system.
17 # It provides the src_unpack, src_prepare, src_configure, src_compile,
18 # src_install, pkg_preinst, pkg_postinst, pkg_config and pkg_postrm
19 # phase hooks.
20
21 # @ECLASS-VARIABLE: BUILD
22 # @DESCRIPTION:
23 # Build type of the mysql version
24 : ${BUILD:=autotools}
25
26 case ${BUILD} in
27 "cmake")
28 BUILD_INHERIT="mysql-cmake"
29 ;;
30 "autotools")
31 BUILD_INHERIT="mysql-autotools"
32
33 WANT_AUTOCONF="latest"
34 WANT_AUTOMAKE="latest"
35 ;;
36 *)
37 die "${BUILD} is not a valid build system for mysql"
38 ;;
39 esac
40
41 MYSQL_EXTRAS=""
42
43 # @ECLASS-VARIABLE: MYSQL_EXTRAS_VER
44 # @DESCRIPTION:
45 # The version of the MYSQL_EXTRAS repo to use to build mysql
46 # Use "none" to disable it's use
47 [[ "${MY_EXTRAS_VER}" == "live" ]] && MYSQL_EXTRAS="git-2"
48
49 inherit eutils flag-o-matic gnuconfig ${MYSQL_EXTRAS} ${BUILD_INHERIT} mysql_fx versionator toolchain-funcs
50
51 #
52 # Supported EAPI versions and export functions
53 #
54
55 case "${EAPI:-0}" in
56 3|4|5) ;;
57 *) die "Unsupported EAPI: ${EAPI}" ;;
58 esac
59
60 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_preinst pkg_postinst pkg_config pkg_postrm
61
62 #
63 # VARIABLES:
64 #
65
66 # Shorten the path because the socket path length must be shorter than 107 chars
67 # and we will run a mysql server during test phase
68 S="${WORKDIR}/mysql"
69
70 [[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z"
71 if [[ "${MY_EXTRAS_VER}" == "live" ]]; then
72 EGIT_PROJECT=mysql-extras
73 EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
74 fi
75
76 # @ECLASS-VARIABLE: MYSQL_PV_MAJOR
77 # @DESCRIPTION:
78 # Upstream MySQL considers the first two parts of the version number to be the
79 # major version. Upgrades that change major version should always run
80 # mysql_upgrade.
81 MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})"
82
83 # @ECLASS-VARIABLE: MYSQL_VERSION_ID
84 # @DESCRIPTION:
85 # MYSQL_VERSION_ID will be:
86 # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
87 # This is an important part, because many of the choices the MySQL ebuild will do
88 # depend on this variable.
89 # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
90 # We also strip off upstream's trailing letter that they use to respin tarballs
91 MYSQL_VERSION_ID=""
92 tpv="${PV%[a-z]}"
93 tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
94 for vatom in 0 1 2 3 ; do
95 # pad to length 2
96 tpv[${vatom}]="00${tpv[${vatom}]}"
97 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
98 done
99 # strip leading "0" (otherwise it's considered an octal number by BASH)
100 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
101
102 # This eclass should only be used with at least mysql-5.1.50
103 mysql_version_is_at_least "5.1.50" || die "This eclass should only be used with >=mysql-5.1.50"
104
105 # @ECLASS-VARIABLE: XTRADB_VER
106 # @DEFAULT_UNSET
107 # @DESCRIPTION:
108 # Version of the XTRADB storage engine
109
110 # @ECLASS-VARIABLE: PERCONA_VER
111 # @DEFAULT_UNSET
112 # @DESCRIPTION:
113 # Designation by PERCONA for a MySQL version to apply an XTRADB release
114
115 # Work out the default SERVER_URI correctly
116 if [ -z "${SERVER_URI}" ]; then
117 [ -z "${MY_PV}" ] && MY_PV="${PV//_/-}"
118 if [ "${PN}" == "mariadb" ]; then
119 MARIA_FULL_PV="$(replace_version_separator 3 '-' ${MY_PV})"
120 MARIA_FULL_P="${PN}-${MARIA_FULL_PV}"
121 SERVER_URI="
122 http://ftp.osuosl.org/pub/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
123 http://ftp.rediris.es/mirror/MariaDB/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
124 http://maria.llarian.net/download/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
125 http://launchpad.net/maria/${MYSQL_PV_MAJOR}/ongoing/+download/${MARIA_FULL_P}.tar.gz
126 http://mirrors.fe.up.pt/pub/${PN}/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
127 http://ftp-stud.hs-esslingen.de/pub/Mirrors/${PN}/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
128 "
129 else
130 URI_DIR="MySQL"
131 URI_FILE="mysql"
132 URI_A="${URI_FILE}-${MY_PV}.tar.gz"
133 MIRROR_PV=$(get_version_component_range 1-2 ${PV})
134 # Recently upstream switched to an archive site, and not on mirrors
135 SERVER_URI="http://downloads.mysql.com/archives/${URI_FILE}-${MIRROR_PV}/${URI_A}
136 mirror://mysql/Downloads/${URI_DIR}-${PV%.*}/${URI_A}"
137 fi
138 fi
139
140 # Define correct SRC_URIs
141 SRC_URI="${SERVER_URI}"
142
143 # Gentoo patches to MySQL
144 [[ ${MY_EXTRAS_VER} != live ]] && [[ ${MY_EXTRAS_VER} != none ]] \
145 && SRC_URI="${SRC_URI}
146 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
147 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
148 http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
149 http://dev.gentoo.org/~jmbsvicetto/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
150
151 DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
152 HOMEPAGE="http://www.mysql.com/"
153 if [[ "${PN}" == "mariadb" ]]; then
154 HOMEPAGE="http://mariadb.org/"
155 DESCRIPTION="MariaDB is a MySQL fork with 3rd-party patches and additional storage engines merged."
156 fi
157 LICENSE="GPL-2"
158 SLOT="0"
159
160 case "${BUILD}" in
161 "autotools")
162 IUSE="big-tables debug embedded minimal +perl selinux ssl static test"
163 ;;
164 "cmake")
165 IUSE="debug embedded minimal +perl selinux ssl static test"
166 ;;
167 esac
168
169 IUSE="${IUSE} latin1"
170
171 IUSE="${IUSE} extraengine"
172 IUSE="${IUSE} cluster"
173
174 IUSE="${IUSE} max-idx-128"
175 IUSE="${IUSE} berkdb"
176 IUSE="${IUSE} +community profiling"
177
178 [[ ${PN} == "mariadb" ]] \
179 && IUSE="${IUSE} libevent"
180
181 [[ ${PN} == "mariadb" ]] \
182 && mysql_version_is_at_least "5.2" \
183 && IUSE="${IUSE} oqgraph"
184
185 [[ ${PN} == "mariadb" ]] \
186 && mysql_version_is_at_least "5.2.5" \
187 && IUSE="${IUSE} sphinx"
188
189 mysql_version_is_at_least "5.5.7" \
190 && IUSE="${IUSE} systemtap"
191
192 #
193 # DEPENDENCIES:
194 #
195
196 # Be warned, *DEPEND are version-dependant
197 # These are used for both runtime and compiletime
198 DEPEND="
199 ssl? ( >=dev-libs/openssl-0.9.6d )
200 kernel_linux? ( sys-process/procps )
201 >=sys-apps/sed-4
202 >=sys-apps/texinfo-4.7-r1
203 >=sys-libs/readline-4.1
204 >=sys-libs/zlib-1.2.3
205 "
206
207 [[ ${PN} == mariadb ]] \
208 && DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )"
209
210 # Having different flavours at the same time is not a good idea
211 for i in "mysql" "mariadb" ; do
212 [[ ${i} == ${PN} ]] ||
213 DEPEND="${DEPEND} !dev-db/${i}"
214 done
215
216 # prefix: first need to implement something for #196294
217 RDEPEND="${DEPEND}
218 !minimal? ( !prefix? ( dev-db/mysql-init-scripts ) )
219 selinux? ( sec-policy/selinux-mysql )
220 "
221
222 DEPEND="${DEPEND}
223 virtual/yacc
224 "
225
226 DEPEND="${DEPEND} static? ( sys-libs/ncurses[static-libs] )"
227
228 # compile-time-only
229 DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
230
231 # compile-time-only
232 mysql_version_is_at_least "5.5.8" \
233 && DEPEND="${DEPEND} >=dev-util/cmake-2.6.3"
234
235 [[ "${PN}" == "mariadb" ]] \
236 && mysql_version_is_at_least "5.2" \
237 && DEPEND="${DEPEND} oqgraph? ( >=dev-libs/boost-1.40.0 )"
238
239 [[ "${PN}" == "mariadb" ]] \
240 && mysql_version_is_at_least "5.2.5" \
241 && DEPEND="${DEPEND} sphinx? ( app-misc/sphinx )"
242
243 mysql_version_is_at_least "5.5.7" \
244 && DEPEND="${DEPEND} systemtap? ( >=dev-util/systemtap-1.3 )"
245
246 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
247 PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
248
249 # For other stuff to bring us in
250 PDEPEND="${PDEPEND} =virtual/mysql-${MYSQL_PV_MAJOR}"
251
252 #
253 # External patches
254 #
255
256 # MariaDB has integrated PBXT
257 # PBXT_VERSION means that we have a PBXT patch for this PV
258 # PBXT was only introduced after 5.1.12
259 pbxt_patch_available() {
260 [[ ${PN} != "mariadb" ]] \
261 && [[ -n "${PBXT_VERSION}" ]]
262 return $?
263 }
264
265 pbxt_available() {
266 pbxt_patch_available || [[ ${PN} == "mariadb" ]]
267 return $?
268 }
269
270 # Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
271 # MariaDB has integrated XtraDB
272 # XTRADB_VERS means that we have a XTRADB patch for this PV
273 # XTRADB was only introduced after 5.1.26
274 xtradb_patch_available() {
275 [[ ${PN} != "mariadb" ]] \
276 && [[ -n "${XTRADB_VER}" && -n "${PERCONA_VER}" ]]
277 return $?
278 }
279
280
281 if pbxt_patch_available; then
282
283 PBXT_P="pbxt-${PBXT_VERSION}"
284 PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz"
285 SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )"
286
287 fi
288
289 # PBXT_NEWSTYLE means pbxt is in storage/ and gets enabled as other plugins
290 # vs. built outside the dir
291 if pbxt_available; then
292
293 IUSE="${IUSE} pbxt"
294 PBXT_NEWSTYLE=1
295 fi
296
297 if xtradb_patch_available; then
298 XTRADB_P="percona-xtradb-${XTRADB_VER}"
299 XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz"
300 XTRADB_SRC_B1="http://www.percona.com/"
301 XTRADB_SRC_B2="${XTRADB_SRC_B1}/percona-builds/"
302 XTRADB_SRC_URI1="${XTRADB_SRC_B2}/Percona-Server/Percona-Server-${XTRADB_SRC_URI_COMMON}"
303 XTRADB_SRC_URI2="${XTRADB_SRC_B2}/xtradb/${XTRADB_SRC_URI_COMMON}"
304 XTRADB_SRC_URI3="${XTRADB_SRC_B1}/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}"
305 SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} ${XTRADB_SRC_URI3} )"
306 IUSE="${IUSE} xtradb"
307 fi
308
309 #
310 # HELPER FUNCTIONS:
311 #
312
313 # @FUNCTION: mysql-v2_disable_test
314 # @DESCRIPTION:
315 # Helper function to disable specific tests.
316 mysql-v2_disable_test() {
317 ${BUILD_INHERIT}_disable_test "$@"
318 }
319
320 # @FUNCTION: mysql-v2_configure_minimal
321 # @DESCRIPTION:
322 # Helper function to configure minimal build
323 configure_minimal() {
324 ${BUILD_INHERIT}_configure_minimal "$@"
325 }
326
327 # @FUNCTION: mysql-v2_configure_common
328 # @DESCRIPTION:
329 # Helper function to configure common builds
330 configure_common() {
331 ${BUILD_INHERIT}_configure_common "$@"
332 }
333
334 #
335 # EBUILD FUNCTIONS
336 #
337
338 # @FUNCTION: mysql-v2_pkg_setup
339 # @DESCRIPTION:
340 # Perform some basic tests and tasks during pkg_setup phase:
341 # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
342 # check for conflicting use flags
343 # create new user and group for mysql
344 # warn about deprecated features
345 mysql-v2_pkg_setup() {
346
347 if has test ${FEATURES} ; then
348 if ! use minimal ; then
349 if ! has userpriv ${FEATURES} ; then
350 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
351 fi
352 fi
353 fi
354
355 # Check for USE flag problems in pkg_setup
356 if use static && use ssl ; then
357 M="MySQL does not support being built statically with SSL support enabled!"
358 eerror "${M}"
359 die "${M}"
360 fi
361
362 if ! mysql_version_is_at_least "5.2" \
363 && use debug ; then
364 # Also in package.use.mask
365 die "Bug #344885: Upstream has broken USE=debug for 5.1 series >=5.1.51"
366 fi
367
368 if ( use cluster || use extraengine || use embedded ) \
369 && use minimal ; then
370 M="USE flags 'cluster', 'extraengine', 'embedded' conflict with 'minimal' USE flag!"
371 eerror "${M}"
372 die "${M}"
373 fi
374
375 if xtradb_patch_available \
376 && use xtradb \
377 && use embedded ; then
378 M="USE flags 'xtradb' and 'embedded' conflict and cause build failures"
379 eerror "${M}"
380 die "${M}"
381 fi
382
383 # This should come after all of the die statements
384 enewgroup mysql 60 || die "problem adding 'mysql' group"
385 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
386
387 if use cluster; then
388 ewarn "Upstream has noted that the NDB cluster support in the 5.0 and"
389 ewarn "5.1 series should NOT be put into production. In the near"
390 ewarn "future, it will be disabled from building."
391 fi
392 }
393
394 # @FUNCTION: mysql-v2_src_unpack
395 # @DESCRIPTION:
396 # Unpack the source code
397 mysql-v2_src_unpack() {
398
399 # Initialize the proper variables first
400 mysql_init_vars
401
402 unpack ${A}
403 # Grab the patches
404 [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git-2_src_unpack
405
406 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
407 }
408
409 # @FUNCTION: mysql-v2_src_prepare
410 # @DESCRIPTION:
411 # Apply patches to the source code and remove unneeded bundled libs.
412 mysql-v2_src_prepare() {
413 ${BUILD_INHERIT}_src_prepare "$@"
414 }
415
416 # @FUNCTION: mysql-v2_src_configure
417 # @DESCRIPTION:
418 # Configure mysql to build the code for Gentoo respecting the use flags.
419 mysql-v2_src_configure() {
420 ${BUILD_INHERIT}_src_configure "$@"
421 }
422
423 # @FUNCTION: mysql-v2_src_compile
424 # @DESCRIPTION:
425 # Compile the mysql code.
426 mysql-v2_src_compile() {
427 ${BUILD_INHERIT}_src_compile "$@"
428 }
429
430 # @FUNCTION: mysql-v2_src_install
431 # @DESCRIPTION:
432 # Install mysql.
433 mysql-v2_src_install() {
434 ${BUILD_INHERIT}_src_install "$@"
435 }
436
437 # @FUNCTION: mysql-v2_pkg_preinst
438 # @DESCRIPTION:
439 # Create the user and groups for mysql - die if that fails.
440 mysql-v2_pkg_preinst() {
441 enewgroup mysql 60 || die "problem adding 'mysql' group"
442 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
443 }
444
445 # @FUNCTION: mysql-v2_pkg_postinst
446 # @DESCRIPTION:
447 # Run post-installation tasks:
448 # create the dir for logfiles if non-existant
449 # touch the logfiles and secure them
450 # install scripts
451 # issue required steps for optional features
452 # issue deprecation warnings
453 mysql-v2_pkg_postinst() {
454
455 # Make sure the vars are correctly initialized
456 mysql_init_vars
457
458 # Check FEATURES="collision-protect" before removing this
459 [[ -d "${ROOT}${MY_LOGDIR}" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
460
461 # Secure the logfiles
462 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
463 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
464 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
465
466 # Minimal builds don't have the MySQL server
467 if ! use minimal ; then
468 docinto "support-files"
469 for script in \
470 support-files/my-*.cnf \
471 support-files/magic \
472 support-files/ndb-config-2-node.ini
473 do
474 [[ -f "${script}" ]] \
475 && dodoc "${script}"
476 done
477
478 docinto "scripts"
479 for script in scripts/mysql* ; do
480 [[ -f "${script}" ]] \
481 && [[ "${script%.sh}" == "${script}" ]] \
482 && dodoc "${script}"
483 done
484
485 einfo
486 elog "You might want to run:"
487 elog "\"emerge --config =${CATEGORY}/${PF}\""
488 elog "if this is a new install."
489 einfo
490
491 einfo
492 elog "If you are upgrading major versions, you should run the"
493 elog "mysql_upgrade tool."
494 einfo
495 fi
496
497 if pbxt_available && use pbxt ; then
498 # TODO: explain it better
499 elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
500 elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
501 elog "if, after that, you cannot start the MySQL server,"
502 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
503 elog "use the MySQL upgrade script to restore the table"
504 elog "or execute the following SQL command:"
505 elog " CREATE TABLE IF NOT EXISTS plugin ("
506 elog " name char(64) binary DEFAULT '' NOT NULL,"
507 elog " dl char(128) DEFAULT '' NOT NULL,"
508 elog " PRIMARY KEY (name)"
509 elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
510 fi
511
512 mysql_check_version_range "4.0 to 5.0.99.99" \
513 && use berkdb \
514 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
515 }
516
517 # @FUNCTION: mysql-v2_getopt
518 # @DESCRIPTION:
519 # Use my_print_defaults to extract specific config options
520 mysql-v2_getopt() {
521 local mypd="${EROOT}"/usr/bin/my_print_defaults
522 section="$1"
523 flag="--${2}="
524 "${mypd}" $section | sed -n "/^${flag}/p"
525 }
526
527 # @FUNCTION: mysql-v2_getoptval
528 # @DESCRIPTION:
529 # Use my_print_defaults to extract specific config options
530 mysql-v2_getoptval() {
531 local mypd="${EROOT}"/usr/bin/my_print_defaults
532 section="$1"
533 flag="--${2}="
534 "${mypd}" $section | sed -n "/^${flag}/s,${flag},,gp"
535 }
536
537 # @FUNCTION: mysql-v2_pkg_config
538 # @DESCRIPTION:
539 # Configure mysql environment.
540 mysql-v2_pkg_config() {
541
542 local old_MY_DATADIR="${MY_DATADIR}"
543 local old_HOME="${HOME}"
544 # my_print_defaults needs to read stuff in $HOME/.my.cnf
545 export HOME=/root
546
547 # Make sure the vars are correctly initialized
548 mysql_init_vars
549
550 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
551
552 if built_with_use ${CATEGORY}/${PN} minimal ; then
553 die "Minimal builds do NOT include the MySQL server"
554 fi
555
556 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
557 local MY_DATADIR_s="${ROOT}/${MY_DATADIR}"
558 MY_DATADIR_s="${MY_DATADIR_s%%/}"
559 local old_MY_DATADIR_s="${ROOT}/${old_MY_DATADIR}"
560 old_MY_DATADIR_s="${old_MY_DATADIR_s%%/}"
561
562 if [[ -d "${old_MY_DATADIR_s}" ]] && [[ "${old_MY_DATADIR_s}" != / ]]; then
563 if [[ -d "${MY_DATADIR_s}" ]]; then
564 ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
565 ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
566 else
567 elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
568 mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
569 || die "Moving MY_DATADIR failed"
570 fi
571 else
572 ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
573 if [[ -d "${MY_DATADIR_s}" ]]; then
574 ewarn "Attempting to use ${MY_DATADIR_s}"
575 else
576 eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
577 die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
578 fi
579 fi
580 fi
581
582 local pwd1="a"
583 local pwd2="b"
584 local maxtry=15
585
586 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
587 MYSQL_ROOT_PASSWORD="$(mysql-v2_getoptval 'client mysql' password)"
588 fi
589 MYSQL_TMPDIR="$(mysql-v2_getoptval mysqld tmpdir)"
590 # These are dir+prefix
591 MYSQL_RELAY_LOG="$(mysql-v2_getoptval mysqld relay-log)"
592 MYSQL_RELAY_LOG=${MYSQL_RELAY_LOG%/*}
593 MYSQL_LOG_BIN="$(mysql-v2_getoptval mysqld log-bin)"
594 MYSQL_LOG_BIN=${MYSQL_LOG_BIN%/*}
595
596 if [[ ! -d "${EROOT}"/$MYSQL_TMPDIR ]]; then
597 einfo "Creating MySQL tmpdir $MYSQL_TMPDIR"
598 install -d -m 770 -o mysql -g mysql "${EROOT}"/$MYSQL_TMPDIR
599 fi
600 if [[ ! -d "${EROOT}"/$MYSQL_LOG_BIN ]]; then
601 einfo "Creating MySQL log-bin directory $MYSQL_LOG_BIN"
602 install -d -m 770 -o mysql -g mysql "${EROOT}"/$MYSQL_LOG_BIN
603 fi
604 if [[ ! -d "${EROOT}"/$MYSQL_RELAY_LOG ]]; then
605 einfo "Creating MySQL relay-log directory $MYSQL_RELAY_LOG"
606 install -d -m 770 -o mysql -g mysql "${EROOT}"/$MYSQL_RELAY_LOG
607 fi
608
609 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
610 ewarn "You have already a MySQL database in place."
611 ewarn "(${ROOT}/${MY_DATADIR}/*)"
612 ewarn "Please rename or delete it if you wish to replace it."
613 die "MySQL database already exists!"
614 fi
615
616 # Bug #213475 - MySQL _will_ object strenously if your machine is named
617 # localhost. Also causes weird failures.
618 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
619
620 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
621
622 einfo "Please provide a password for the mysql 'root' user now, in the"
623 einfo "MYSQL_ROOT_PASSWORD env var or through the /root/.my.cnf file."
624 ewarn "Avoid [\"'\\_%] characters in the password"
625 read -rsp " >" pwd1 ; echo
626
627 einfo "Retype the password"
628 read -rsp " >" pwd2 ; echo
629
630 if [[ "x$pwd1" != "x$pwd2" ]] ; then
631 die "Passwords are not the same"
632 fi
633 MYSQL_ROOT_PASSWORD="${pwd1}"
634 unset pwd1 pwd2
635 fi
636
637 local options="--log-warnings=0"
638 local sqltmp="$(emktemp)"
639
640 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
641 [[ -r "${help_tables}" ]] \
642 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
643 || touch "${TMPDIR}/fill_help_tables.sql"
644 help_tables="${TMPDIR}/fill_help_tables.sql"
645
646 # Figure out which options we need to disable to do the setup
647 helpfile="${TMPDIR}/mysqld-help"
648 ${EROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
649 for opt in grant-tables host-cache name-resolve networking slave-start bdb \
650 federated innodb ssl log-bin relay-log slow-query-log external-locking \
651 ndbcluster log-slave-updates \
652 ; do
653 optexp="--(skip-)?${opt}" optfull="--loose-skip-${opt}"
654 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
655 done
656 # But some options changed names
657 egrep -sq external-locking "${helpfile}" && \
658 options="${options/skip-locking/skip-external-locking}"
659
660 use prefix || options="${options} --user=mysql"
661
662 pushd "${TMPDIR}" &>/dev/null
663 #cmd="'${EROOT}/usr/share/mysql/scripts/mysql_install_db' '--basedir=${EPREFIX}/usr' ${options}"
664 cmd=${EROOT}usr/share/mysql/scripts/mysql_install_db
665 [ -f ${cmd} ] || cmd=${EROOT}usr/bin/mysql_install_db
666 cmd="'$cmd' '--basedir=${EPREFIX}/usr' ${options}"
667 einfo "Command: $cmd"
668 eval $cmd \
669 >"${TMPDIR}"/mysql_install_db.log 2>&1
670 if [ $? -ne 0 ]; then
671 grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
672 die "Failed to run mysql_install_db. Please review ${EPREFIX}/var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
673 fi
674 popd &>/dev/null
675 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
676 || die "MySQL databases not installed"
677 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
678 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
679
680 # Filling timezones, see
681 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
682 "${EROOT}/usr/bin/mysql_tzinfo_to_sql" "${EROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
683
684 if [[ -r "${help_tables}" ]] ; then
685 cat "${help_tables}" >> "${sqltmp}"
686 fi
687
688 einfo "Creating the mysql database and setting proper"
689 einfo "permissions on it ..."
690
691 local socket="${EROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
692 local pidfile="${EROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
693 local mysqld="${EROOT}/usr/sbin/mysqld \
694 ${options} \
695 --user=mysql \
696 --log-warnings=0 \
697 --basedir=${EROOT}/usr \
698 --datadir=${ROOT}/${MY_DATADIR} \
699 --max_allowed_packet=8M \
700 --net_buffer_length=16K \
701 --default-storage-engine=MyISAM \
702 --socket=${socket} \
703 --pid-file=${pidfile}"
704 #einfo "About to start mysqld: ${mysqld}"
705 ebegin "Starting mysqld"
706 einfo "Command ${mysqld}"
707 ${mysqld} &
708 rc=$?
709 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
710 maxtry=$((${maxtry}-1))
711 echo -n "."
712 sleep 1
713 done
714 eend $rc
715
716 if ! [[ -S "${socket}" ]]; then
717 die "Completely failed to start up mysqld with: ${mysqld}"
718 fi
719
720 ebegin "Setting root password"
721 # Do this from memory, as we don't want clear text passwords in temp files
722 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
723 "${EROOT}/usr/bin/mysql" \
724 --socket=${socket} \
725 -hlocalhost \
726 -e "${sql}"
727 eend $?
728
729 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
730 "${EROOT}/usr/bin/mysql" \
731 --socket=${socket} \
732 -hlocalhost \
733 -uroot \
734 --password="${MYSQL_ROOT_PASSWORD}" \
735 mysql < "${sqltmp}"
736 rc=$?
737 eend $?
738 [ $rc -ne 0 ] && ewarn "Failed to load zoneinfo!"
739
740 # Stop the server and cleanup
741 einfo "Stopping the server ..."
742 kill $(< "${pidfile}" )
743 rm -f "${sqltmp}"
744 wait %1
745 einfo "Done"
746 }
747
748 # @FUNCTION: mysql-v2_pkg_postrm
749 # @DESCRIPTION:
750 # Remove mysql symlinks.
751 mysql-v2_pkg_postrm() {
752
753 : # mysql_lib_symlinks "${ED}"
754 }

  ViewVC Help
Powered by ViewVC 1.1.20