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

Contents of /eclass/mysql-v2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (show annotations) (download)
Tue Dec 27 07:37:20 2011 UTC (2 years, 8 months ago) by robbat2
Branch: MAIN
Changes since 1.10: +7 -1 lines
Bug #396089: Avoid automagic systemtap/dtrace in MySQL 5.5.

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

  ViewVC Help
Powered by ViewVC 1.1.20