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

Contents of /eclass/mysql-v2.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.35 - (show annotations) (download)
Sun Aug 10 05:47:24 2014 UTC (6 weeks, 2 days ago) by robbat2
Branch: MAIN
CVS Tags: HEAD
Changes since 1.34: +2 -1 lines
Error occurred while calculating annotation data.
Add extra download URL from overlay.

1 # Copyright 1999-2014 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.34 2014/07/29 20:24:00 robbat2 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 # - Brian Evans <grknight@gentoo.org>
12 # @BLURB: This eclass provides most of the functions for mysql ebuilds
13 # @DESCRIPTION:
14 # The mysql-v2.eclass is the base eclass to build the mysql and
15 # alternative projects (mariadb and percona) ebuilds.
16 # This eclass uses the mysql-autotools and mysql-cmake eclasses for the
17 # specific bits related to the build system.
18 # It provides the src_unpack, src_prepare, src_configure, src_compile,
19 # src_install, pkg_preinst, pkg_postinst, pkg_config and pkg_postrm
20 # phase hooks.
21
22 # @ECLASS-VARIABLE: BUILD
23 # @DESCRIPTION:
24 # Build type of the mysql version
25 : ${BUILD:=autotools}
26
27 case ${BUILD} in
28 "cmake")
29 BUILD_INHERIT="mysql-cmake"
30 ;;
31 "autotools")
32 BUILD_INHERIT="mysql-autotools"
33
34 WANT_AUTOCONF="latest"
35 WANT_AUTOMAKE="latest"
36 ;;
37 *)
38 die "${BUILD} is not a valid build system for mysql"
39 ;;
40 esac
41
42 MYSQL_EXTRAS=""
43
44 # @ECLASS-VARIABLE: MYSQL_EXTRAS_VER
45 # @DESCRIPTION:
46 # The version of the MYSQL_EXTRAS repo to use to build mysql
47 # Use "none" to disable it's use
48 [[ ${MY_EXTRAS_VER} == "live" ]] && MYSQL_EXTRAS="git-r3"
49
50 inherit eutils flag-o-matic gnuconfig ${MYSQL_EXTRAS} ${BUILD_INHERIT} mysql_fx versionator toolchain-funcs user
51
52 #
53 # Supported EAPI versions and export functions
54 #
55
56 case "${EAPI:-0}" in
57 4|5) ;;
58 *) die "Unsupported EAPI: ${EAPI}" ;;
59 esac
60
61 EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_preinst pkg_postinst pkg_config pkg_postrm
62
63 #
64 # VARIABLES:
65 #
66
67 # Shorten the path because the socket path length must be shorter than 107 chars
68 # and we will run a mysql server during test phase
69 S="${WORKDIR}/mysql"
70
71 [[ ${MY_EXTRAS_VER} == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z"
72 if [[ ${MY_EXTRAS_VER} == "live" ]]; then
73 EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
74 EGIT_CHECKOUT_DIR=${WORKDIR}/mysql-extras
75 EGIT_CLONE_TYPE=shallow
76 fi
77
78 # @ECLASS-VARIABLE: MYSQL_PV_MAJOR
79 # @DESCRIPTION:
80 # Upstream MySQL considers the first two parts of the version number to be the
81 # major version. Upgrades that change major version should always run
82 # mysql_upgrade.
83 MYSQL_PV_MAJOR="$(get_version_component_range 1-2 ${PV})"
84
85 # Cluster is a special case...
86 if [[ ${PN} == "mysql-cluster" ]]; then
87 case ${PV} in
88 6.1*|7.0*|7.1*) MYSQL_PV_MAJOR=5.1 ;;
89 7.2*) MYSQL_PV_MAJOR=5.5 ;;
90 7.3*) MYSQL_PV_MAJOR=5.6 ;;
91 esac
92 fi
93
94 # MariaDB has left the numbering schema but keeping compatibility
95 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]]; then
96 case ${PV} in
97 10.0*|10.1*) MYSQL_PV_MAJOR="5.6" ;;
98 esac
99 fi
100
101 # @ECLASS-VARIABLE: MYSQL_VERSION_ID
102 # @DESCRIPTION:
103 # MYSQL_VERSION_ID will be:
104 # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
105 # This is an important part, because many of the choices the MySQL ebuild will do
106 # depend on this variable.
107 # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
108 # We also strip off upstream's trailing letter that they use to respin tarballs
109 MYSQL_VERSION_ID=""
110 tpv="${PV%[a-z]}"
111 tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
112 for vatom in 0 1 2 3 ; do
113 # pad to length 2
114 tpv[${vatom}]="00${tpv[${vatom}]}"
115 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
116 done
117 # strip leading "0" (otherwise it's considered an octal number by BASH)
118 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
119
120 # This eclass should only be used with at least mysql-5.1.50
121 mysql_version_is_at_least "5.1.50" || die "This eclass should only be used with >=mysql-5.1.50"
122
123 # @ECLASS-VARIABLE: XTRADB_VER
124 # @DEFAULT_UNSET
125 # @DESCRIPTION:
126 # Version of the XTRADB storage engine
127
128 # @ECLASS-VARIABLE: PERCONA_VER
129 # @DEFAULT_UNSET
130 # @DESCRIPTION:
131 # Designation by PERCONA for a MySQL version to apply an XTRADB release
132
133 # Work out the default SERVER_URI correctly
134 if [[ -z ${SERVER_URI} ]]; then
135 [[ -z ${MY_PV} ]] && MY_PV="${PV//_/-}"
136 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]]; then
137 # Beginning with 5.5, MariaDB stopped putting beta, alpha or rc on their tarball names
138 mysql_version_is_at_least "5.5" && MARIA_FULL_PV=$(get_version_component_range 1-3) || \
139 MARIA_FULL_PV=$(replace_version_separator 3 '-' ${MY_PV})
140 MARIA_FULL_P="${PN}-${MARIA_FULL_PV}"
141 SERVER_URI="
142 http://ftp.osuosl.org/pub/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
143 http://ftp.osuosl.org/pub/mariadb/${MARIA_FULL_P}/source/${MARIA_FULL_P}.tar.gz
144 http://mirror.jmu.edu/pub/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
145 http://mirrors.coreix.net/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
146 http://mirrors.syringanetworks.net/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
147 http://mirrors.fe.up.pt/pub/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
148 http://mirror2.hs-esslingen.de/mariadb/${MARIA_FULL_P}/kvm-tarbake-jaunty-x86/${MARIA_FULL_P}.tar.gz
149 "
150 if [[ ${PN} == "mariadb-galera" ]]; then
151 MY_SOURCEDIR="${PN%%-galera}-${MARIA_FULL_PV}"
152 fi
153 elif [[ ${PN} == "percona-server" ]]; then
154 PERCONA_PN="Percona-Server"
155 MIRROR_PV=$(get_version_component_range 1-2 ${PV})
156 MY_PV=$(get_version_component_range 1-3 ${PV})
157 PERCONA_RELEASE=$(get_version_component_range 4-5 ${PV})
158 PERCONA_RC=$(get_version_component_range 6 ${PV})
159 SERVER_URI="http://www.percona.com/redir/downloads/${PERCONA_PN}-${MIRROR_PV}/${PERCONA_PN}-${MY_PV}-${PERCONA_RC}${PERCONA_RELEASE}/source/tarball/${PN}-${MY_PV}-${PERCONA_RC}${PERCONA_RELEASE}.tar.gz"
160 # http://www.percona.com/redir/downloads/Percona-Server-5.5/LATEST/source/tarball/Percona-Server-5.5.30-30.2.tar.gz
161 # http://www.percona.com/redir/downloads/Percona-Server-5.6/Percona-Server-5.6.13-rc60.5/source/tarball/Percona-Server-5.6.13-rc60.5.tar.gz
162 else
163 if [[ "${PN}" == "mysql-cluster" ]] ; then
164 URI_DIR="MySQL-Cluster"
165 URI_FILE="mysql-cluster-gpl"
166 else
167 URI_DIR="MySQL"
168 URI_FILE="mysql"
169 fi
170 URI_A="${URI_FILE}-${MY_PV}.tar.gz"
171 MIRROR_PV=$(get_version_component_range 1-2 ${PV})
172 # Recently upstream switched to an archive site, and not on mirrors
173 SERVER_URI="http://downloads.mysql.com/archives/${URI_FILE}-${MIRROR_PV}/${URI_A}
174 https://downloads.skysql.com/files/${URI_FILE}-${MIRROR_PV}/${URI_A}
175 mirror://mysql/Downloads/${URI_DIR}-${PV%.*}/${URI_A}"
176 fi
177 fi
178
179 # Define correct SRC_URIs
180 SRC_URI="${SERVER_URI}"
181
182 # Gentoo patches to MySQL
183 if [[ ${MY_EXTRAS_VER} != "live" && ${MY_EXTRAS_VER} != "none" ]]; then
184 SRC_URI="${SRC_URI}
185 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
186 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
187 http://dev.gentoo.org/~robbat2/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
188 http://dev.gentoo.org/~jmbsvicetto/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
189 http://dev.gentoo.org/~grknight/distfiles/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
190 fi
191
192 DESCRIPTION="A fast, multi-threaded, multi-user SQL database server"
193 HOMEPAGE="http://www.mysql.com/"
194 if [[ ${PN} == "mariadb" ]]; then
195 HOMEPAGE="http://mariadb.org/"
196 DESCRIPTION="An enhanced, drop-in replacement for MySQL"
197 fi
198 if [[ ${PN} == "mariadb-galera" ]]; then
199 HOMEPAGE="http://mariadb.org/"
200 DESCRIPTION="An enhanced, drop-in replacement for MySQL with Galera Replication"
201 fi
202 if [[ ${PN} == "percona-server" ]]; then
203 HOMEPAGE="http://www.percona.com/software/percona-server"
204 DESCRIPTION="An enhanced, drop-in replacement for MySQL from the Percona team"
205 fi
206 LICENSE="GPL-2"
207 SLOT="0"
208
209 case "${BUILD}" in
210 "autotools")
211 IUSE="big-tables debug embedded minimal +perl selinux ssl static test"
212 ;;
213 "cmake")
214 IUSE="debug embedded minimal +perl selinux ssl static static-libs test"
215 ;;
216 esac
217
218 # Common IUSE
219 IUSE="${IUSE} latin1 extraengine cluster max-idx-128 +community profiling"
220
221 # This probably could be simplified, but the syntax would have to be just right
222 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] && \
223 mysql_version_is_at_least "5.5" ; then
224 IUSE="bindist ${IUSE}"
225 elif [[ ${PN} == "mysql" || ${PN} == "percona-server" ]] && \
226 mysql_check_version_range "5.5.37 to 5.6.11.99" ; then
227 IUSE="bindist ${IUSE}"
228 elif [[ ${PN} == "mysql-cluster" ]] && \
229 mysql_check_version_range "7.2 to 7.2.99.99" ; then
230 IUSE="bindist ${IUSE}"
231 fi
232
233 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]]; then
234 mysql_check_version_range "5.1.38 to 5.3.99" && IUSE="${IUSE} libevent"
235 mysql_version_is_at_least "5.2" && IUSE="${IUSE} oqgraph" && \
236 REQUIRED_USE="${REQUIRED_USE} minimal? ( !oqgraph )"
237 mysql_version_is_at_least "5.2.5" && IUSE="${IUSE} sphinx" && \
238 REQUIRED_USE="${REQUIRED_USE} minimal? ( !sphinx )"
239 mysql_version_is_at_least "5.2.10" && IUSE="${IUSE} pam"
240 # 5.5.33 and 10.0.5 add TokuDB. Authors strongly recommend jemalloc or perfomance suffers
241 mysql_version_is_at_least "10.0.5" && IUSE="${IUSE} tokudb odbc xml" && \
242 REQUIRED_USE="${REQUIRED_USE} odbc? ( extraengine ) xml? ( extraengine ) tokudb? ( jemalloc )"
243 mysql_check_version_range "5.5.33 to 5.5.99" && IUSE="${IUSE} tokudb" && \
244 REQUIRED_USE="${REQUIRED_USE} tokudb? ( jemalloc )"
245 fi
246
247 if mysql_version_is_at_least "5.5"; then
248 REQUIRED_USE="${REQUIRED_USE} tcmalloc? ( !jemalloc ) jemalloc? ( !tcmalloc )"
249 IUSE="${IUSE} jemalloc tcmalloc"
250 fi
251
252 if mysql_version_is_at_least "5.5.7"; then
253 IUSE="${IUSE} systemtap"
254 fi
255
256 if [[ ${PN} == "percona-server" ]]; then
257 mysql_version_is_at_least "5.5.10" && IUSE="${IUSE} pam"
258 fi
259
260 REQUIRED_USE="${REQUIRED_USE} minimal? ( !cluster !extraengine !embedded ) static? ( !ssl )"
261
262 #
263 # DEPENDENCIES:
264 #
265
266 # Be warned, *DEPEND are version-dependant
267 # These are used for both runtime and compiletime
268 DEPEND="
269 ssl? ( >=dev-libs/openssl-0.9.6d )
270 kernel_linux? ( sys-process/procps )
271 >=sys-apps/sed-4
272 >=sys-apps/texinfo-4.7-r1
273 >=sys-libs/zlib-1.2.3
274 "
275 # TODO: add this as a dep if it is moved from the overlay
276 # !dev-db/mariadb-native-client[mysqlcompat]
277
278 # dev-db/mysql-5.6.12+ only works with dev-libs/libedit
279 # This probably could be simplified
280 if [[ ${PN} == "mysql" || ${PN} == "percona-server" ]] && \
281 mysql_version_is_at_least "5.6.12" ; then
282 DEPEND="${DEPEND} dev-libs/libedit"
283 elif [[ ${PN} == "mysql-cluster" ]] && mysql_version_is_at_least "7.3"; then
284 DEPEND="${DEPEND} dev-libs/libedit"
285 else
286 if mysql_version_is_at_least "5.5" ; then
287 DEPEND="${DEPEND} !bindist? ( >=sys-libs/readline-4.1 )"
288 else
289 DEPEND="${DEPEND} >=sys-libs/readline-4.1"
290 fi
291 fi
292
293 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] ; then
294 mysql_check_version_range "5.1.38 to 5.3.99" && DEPEND="${DEPEND} libevent? ( >=dev-libs/libevent-1.4 )"
295 mysql_version_is_at_least "5.2" && DEPEND="${DEPEND} oqgraph? ( >=dev-libs/boost-1.40.0 )"
296 mysql_version_is_at_least "5.2.10" && DEPEND="${DEPEND} !minimal? ( pam? ( virtual/pam ) )"
297 # Bug 441700 MariaDB >=5.3 include custom mytop
298 mysql_version_is_at_least "5.3" && DEPEND="${DEPEND} perl? ( !dev-db/mytop )"
299 if mysql_version_is_at_least "10.0.5" ; then
300 DEPEND="${DEPEND}
301 odbc? ( dev-db/unixODBC )
302 xml? ( dev-libs/libxml2 )
303 "
304 fi
305 mysql_version_is_at_least "10.0.7" && DEPEND="${DEPEND} oqgraph? ( dev-libs/judy )"
306 if mysql_version_is_at_least "10.0.9" ; then
307 DEPEND="${DEPEND} >=dev-libs/libpcre-8.35"
308 fi
309 fi
310
311 # Having different flavours at the same time is not a good idea
312 for i in "mysql" "mariadb" "mariadb-galera" "percona-server" "mysql-cluster" ; do
313 [[ ${i} == ${PN} ]] ||
314 DEPEND="${DEPEND} !dev-db/${i}"
315 done
316
317 if mysql_version_is_at_least "5.5.7" ; then
318 DEPEND="${DEPEND}
319 jemalloc? ( dev-libs/jemalloc[static-libs?] )
320 tcmalloc? ( dev-util/google-perftools )
321 >=sys-libs/zlib-1.2.3[static-libs?]
322 ssl? ( >=dev-libs/openssl-0.9.6d[static-libs?] )
323 systemtap? ( >=dev-util/systemtap-1.3 )
324 kernel_linux? ( dev-libs/libaio )
325 "
326 fi
327
328 if [[ ${PN} == "mysql-cluster" ]] ; then
329 # TODO: This really should include net-misc/memcached
330 # but the package does not install the files it seeks.
331 mysql_version_is_at_least "7.2.3" && \
332 DEPEND="${DEPEND} dev-libs/libevent"
333 fi
334
335 # prefix: first need to implement something for #196294
336 RDEPEND="${DEPEND}
337 !minimal? ( !prefix? ( dev-db/mysql-init-scripts ) )
338 selinux? ( sec-policy/selinux-mysql )
339 "
340
341 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] ; then
342 # Bug 455016 Add dependencies of mytop
343 if mysql_version_is_at_least "5.3" ; then
344 RDEPEND="${RDEPEND}
345 perl? (
346 virtual/perl-Getopt-Long
347 dev-perl/TermReadKey
348 virtual/perl-Term-ANSIColor
349 virtual/perl-Time-HiRes
350 )
351 "
352 fi
353 fi
354
355 if [[ ${PN} == "mariadb-galera" ]] ; then
356 # The wsrep API version must match between the ebuild and sys-cluster/galera.
357 # This will be indicated by WSREP_REVISION in the ebuild and the first number
358 # in the version of sys-cluster/galera
359 RDEPEND="${RDEPEND}
360 =sys-cluster/galera-${WSREP_REVISION}*
361 "
362 fi
363
364 if [[ ${PN} == "mysql-cluster" ]] ; then
365 mysql_version_is_at_least "7.2.9" && RDEPEND="${RDEPEND} java? ( >=virtual/jre-1.6 )" && \
366 DEPEND="${DEPEND} java? ( >=virtual/jdk-1.6 )"
367 fi
368
369 DEPEND="${DEPEND}
370 virtual/yacc
371 "
372
373 DEPEND="${DEPEND} static? ( sys-libs/ncurses[static-libs] )"
374
375 # compile-time-only
376 DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
377
378 # compile-time-only
379 if mysql_version_is_at_least "5.5.8" ; then
380 DEPEND="${DEPEND} >=dev-util/cmake-2.6.3"
381 fi
382
383 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
384 PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
385
386 # For other stuff to bring us in
387 PDEPEND="${PDEPEND} ~virtual/mysql-${MYSQL_PV_MAJOR}"
388
389 #
390 # External patches
391 #
392
393 # MariaDB has integrated PBXT until it was dropped in version 5.5.33
394 # PBXT_VERSION means that we have a PBXT patch for this PV
395 # PBXT was only introduced after 5.1.12
396 pbxt_patch_available() {
397 [[ ${PN} != "mariadb" && ${PN} != "mariadb-galera" && ( -n "${PBXT_VERSION}" ) ]]
398 return $?
399 }
400
401 pbxt_available() {
402 pbxt_patch_available || [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] && mysql_check_version_range "5.1 to 5.5.32"
403 return $?
404 }
405
406 # Get the percona tarball if XTRADB_VER and PERCONA_VER are both set
407 # MariaDB has integrated XtraDB
408 # XTRADB_VERS means that we have a XTRADB patch for this PV
409 # XTRADB was only introduced after 5.1.26
410 xtradb_patch_available() {
411 [[ ${PN} != "mariadb" && ${PN} != "mariadb-galera"
412 && ( -n "${XTRADB_VER}" ) && ( -n "${PERCONA_VER}" ) ]]
413 return $?
414 }
415
416 if pbxt_patch_available; then
417
418 PBXT_P="pbxt-${PBXT_VERSION}"
419 PBXT_SRC_URI="http://www.primebase.org/download/${PBXT_P}.tar.gz mirror://sourceforge/pbxt/${PBXT_P}.tar.gz"
420 SRC_URI="${SRC_URI} pbxt? ( ${PBXT_SRC_URI} )"
421 fi
422
423 # PBXT_NEWSTYLE means pbxt is in storage/ and gets enabled as other plugins
424 # vs. built outside the dir
425 if pbxt_available; then
426
427 IUSE="${IUSE} pbxt"
428 PBXT_NEWSTYLE=1
429 REQUIRED_USE="${REQUIRED_USE} pbxt? ( !embedded ) "
430 fi
431
432 if xtradb_patch_available; then
433 XTRADB_P="percona-xtradb-${XTRADB_VER}"
434 XTRADB_SRC_URI_COMMON="${PERCONA_VER}/source/${XTRADB_P}.tar.gz"
435 XTRADB_SRC_B1="http://www.percona.com/"
436 XTRADB_SRC_B2="${XTRADB_SRC_B1}/percona-builds/"
437 XTRADB_SRC_URI1="${XTRADB_SRC_B2}/Percona-Server/Percona-Server-${XTRADB_SRC_URI_COMMON}"
438 XTRADB_SRC_URI2="${XTRADB_SRC_B2}/xtradb/${XTRADB_SRC_URI_COMMON}"
439 XTRADB_SRC_URI3="${XTRADB_SRC_B1}/${PN}/xtradb/${XTRADB_SRC_URI_COMMON}"
440 SRC_URI="${SRC_URI} xtradb? ( ${XTRADB_SRC_URI1} ${XTRADB_SRC_URI2} ${XTRADB_SRC_URI3} )"
441 IUSE="${IUSE} xtradb"
442 REQUIRED_USE="${REQUIRED_USE} xtradb? ( !embedded ) "
443 fi
444
445 #
446 # HELPER FUNCTIONS:
447 #
448
449 # @FUNCTION: mysql-v2_disable_test
450 # @DESCRIPTION:
451 # Helper function to disable specific tests.
452 mysql-v2_disable_test() {
453 ${BUILD_INHERIT}_disable_test "$@"
454 }
455
456 # @FUNCTION: mysql-v2_configure_minimal
457 # @DESCRIPTION:
458 # Helper function to configure minimal build
459 configure_minimal() {
460 ${BUILD_INHERIT}_configure_minimal "$@"
461 }
462
463 # @FUNCTION: mysql-v2_configure_common
464 # @DESCRIPTION:
465 # Helper function to configure common builds
466 configure_common() {
467 ${BUILD_INHERIT}_configure_common "$@"
468 }
469
470 #
471 # EBUILD FUNCTIONS
472 #
473
474 # @FUNCTION: mysql-v2_pkg_setup
475 # @DESCRIPTION:
476 # Perform some basic tests and tasks during pkg_setup phase:
477 # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
478 # check for conflicting use flags
479 # create new user and group for mysql
480 # warn about deprecated features
481 mysql-v2_pkg_setup() {
482
483 if has test ${FEATURES} ; then
484 if ! use minimal ; then
485 if ! has userpriv ${FEATURES} ; then
486 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
487 fi
488 fi
489 fi
490
491 # Check for USE flag problems in pkg_setup
492 if ! mysql_version_is_at_least "5.2" && use debug ; then
493 # Also in package.use.mask
494 die "Bug #344885: Upstream has broken USE=debug for 5.1 series >=5.1.51"
495 fi
496
497 # This should come after all of the die statements
498 enewgroup mysql 60 || die "problem adding 'mysql' group"
499 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
500
501 if use cluster && [[ "${PN}" != "mysql-cluster" ]]; then
502 ewarn "Upstream has noted that the NDB cluster support in the 5.0 and"
503 ewarn "5.1 series should NOT be put into production. In the near"
504 ewarn "future, it will be disabled from building."
505 fi
506
507 if [[ ${PN} == "mysql-cluster" ]] ; then
508 mysql_version_is_at_least "7.2.9" && java-pkg-opt-2_pkg_setup
509 fi
510
511 if use_if_iuse tokudb && [[ $(gcc-major-version) -lt 4 || $(gcc-major-version) -eq 4 && $(gcc-minor-version) -lt 7 ]] ; then
512 eerror "${PN} with tokudb needs to be built with gcc-4.7 or later."
513 eerror "Please use gcc-config to switch to gcc-4.7 or later version."
514 die
515 fi
516
517 }
518
519 # @FUNCTION: mysql-v2_src_unpack
520 # @DESCRIPTION:
521 # Unpack the source code
522 mysql-v2_src_unpack() {
523
524 # Initialize the proper variables first
525 mysql_init_vars
526
527 unpack ${A}
528 # Grab the patches
529 [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git-r3_src_unpack
530
531 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
532 }
533
534 # @FUNCTION: mysql-v2_src_prepare
535 # @DESCRIPTION:
536 # Apply patches to the source code and remove unneeded bundled libs.
537 mysql-v2_src_prepare() {
538 ${BUILD_INHERIT}_src_prepare "$@"
539 if [[ ${PN} == "mysql-cluster" ]] ; then
540 mysql_version_is_at_least "7.2.9" && java-pkg-opt-2_src_prepare
541 fi
542 }
543
544 # @FUNCTION: mysql-v2_src_configure
545 # @DESCRIPTION:
546 # Configure mysql to build the code for Gentoo respecting the use flags.
547 mysql-v2_src_configure() {
548 ${BUILD_INHERIT}_src_configure "$@"
549 }
550
551 # @FUNCTION: mysql-v2_src_compile
552 # @DESCRIPTION:
553 # Compile the mysql code.
554 mysql-v2_src_compile() {
555 ${BUILD_INHERIT}_src_compile "$@"
556 }
557
558 # @FUNCTION: mysql-v2_src_install
559 # @DESCRIPTION:
560 # Install mysql.
561 mysql-v2_src_install() {
562 ${BUILD_INHERIT}_src_install "$@"
563 }
564
565 # @FUNCTION: mysql-v2_pkg_preinst
566 # @DESCRIPTION:
567 # Create the user and groups for mysql - die if that fails.
568 mysql-v2_pkg_preinst() {
569 if [[ ${PN} == "mysql-cluster" ]] ; then
570 mysql_version_is_at_least "7.2.9" && java-pkg-opt-2_pkg_preinst
571 fi
572 enewgroup mysql 60 || die "problem adding 'mysql' group"
573 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
574 }
575
576 # @FUNCTION: mysql-v2_pkg_postinst
577 # @DESCRIPTION:
578 # Run post-installation tasks:
579 # create the dir for logfiles if non-existant
580 # touch the logfiles and secure them
581 # install scripts
582 # issue required steps for optional features
583 # issue deprecation warnings
584 mysql-v2_pkg_postinst() {
585
586 # Make sure the vars are correctly initialized
587 mysql_init_vars
588
589 # Check FEATURES="collision-protect" before removing this
590 [[ -d "${ROOT}${MY_LOGDIR}" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
591
592 # Secure the logfiles
593 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
594 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
595 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
596
597 # Minimal builds don't have the MySQL server
598 if ! use minimal ; then
599 docinto "support-files"
600 for script in \
601 support-files/my-*.cnf \
602 support-files/magic \
603 support-files/ndb-config-2-node.ini
604 do
605 [[ -f "${script}" ]] \
606 && dodoc "${script}"
607 done
608
609 docinto "scripts"
610 for script in scripts/mysql* ; do
611 if [[ -f "${script}" && "${script%.sh}" == "${script}" ]]; then
612 dodoc "${script}"
613 fi
614 done
615
616 if [[ ${PN} == "mariadb" || ${PN} == "mariadb-galera" ]] ; then
617 if use_if_iuse pam ; then
618 einfo
619 elog "This install includes the PAM authentication plugin."
620 elog "To activate and configure the PAM plugin, please read:"
621 elog "https://kb.askmonty.org/en/pam-authentication-plugin/"
622 einfo
623 fi
624 fi
625
626 einfo
627 elog "You might want to run:"
628 elog "\"emerge --config =${CATEGORY}/${PF}\""
629 elog "if this is a new install."
630 einfo
631
632 einfo
633 elog "If you are upgrading major versions, you should run the"
634 elog "mysql_upgrade tool."
635 einfo
636
637 if [[ ${PN} == "mariadb-galera" ]] ; then
638 einfo
639 elog "Be sure to edit the my.cnf file to activate your cluster settings."
640 elog "This should be done after running \"emerge --config =${CATEGORY}/${PF}\""
641 elog "The first time the cluster is activated, you should add"
642 elog "--wsrep-new-cluster to the options in /etc/conf.d/mysql for one node."
643 elog "This option should then be removed for subsequent starts."
644 einfo
645 fi
646 fi
647
648 if use_if_iuse pbxt ; then
649 elog "Note: PBXT is now statically built when enabled."
650 elog ""
651 elog "If, you previously installed as a plugin and "
652 elog "you cannot start the MySQL server,"
653 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
654 elog "use the MySQL upgrade script to restore the table"
655 elog "or execute the following SQL command:"
656 elog " CREATE TABLE IF NOT EXISTS plugin ("
657 elog " name char(64) binary DEFAULT '' NOT NULL,"
658 elog " dl char(128) DEFAULT '' NOT NULL,"
659 elog " PRIMARY KEY (name)"
660 elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
661 fi
662 }
663
664 # @FUNCTION: mysql-v2_getopt
665 # @DESCRIPTION:
666 # Use my_print_defaults to extract specific config options
667 mysql-v2_getopt() {
668 local mypd="${EROOT}"/usr/bin/my_print_defaults
669 section="$1"
670 flag="--${2}="
671 "${mypd}" $section | sed -n "/^${flag}/p"
672 }
673
674 # @FUNCTION: mysql-v2_getoptval
675 # @DESCRIPTION:
676 # Use my_print_defaults to extract specific config options
677 mysql-v2_getoptval() {
678 local mypd="${EROOT}"/usr/bin/my_print_defaults
679 section="$1"
680 flag="--${2}="
681 "${mypd}" $section | sed -n "/^${flag}/s,${flag},,gp"
682 }
683
684 # @FUNCTION: mysql-v2_pkg_config
685 # @DESCRIPTION:
686 # Configure mysql environment.
687 mysql-v2_pkg_config() {
688
689 local old_MY_DATADIR="${MY_DATADIR}"
690 local old_HOME="${HOME}"
691 # my_print_defaults needs to read stuff in $HOME/.my.cnf
692 export HOME=${EPREFIX}/root
693
694 # Make sure the vars are correctly initialized
695 mysql_init_vars
696
697 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
698
699 if built_with_use ${CATEGORY}/${PN} minimal ; then
700 die "Minimal builds do NOT include the MySQL server"
701 fi
702
703 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
704 local MY_DATADIR_s="${ROOT}/${MY_DATADIR}"
705 MY_DATADIR_s="${MY_DATADIR_s%%/}"
706 local old_MY_DATADIR_s="${ROOT}/${old_MY_DATADIR}"
707 old_MY_DATADIR_s="${old_MY_DATADIR_s%%/}"
708
709 if [[ ( -d "${old_MY_DATADIR_s}" ) && ( "${old_MY_DATADIR_s}" != / ) ]]; then
710 if [[ -d "${MY_DATADIR_s}" ]]; then
711 ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
712 ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
713 else
714 elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
715 mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
716 || die "Moving MY_DATADIR failed"
717 fi
718 else
719 ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
720 if [[ -d "${MY_DATADIR_s}" ]]; then
721 ewarn "Attempting to use ${MY_DATADIR_s}"
722 else
723 eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
724 die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
725 fi
726 fi
727 fi
728
729 local pwd1="a"
730 local pwd2="b"
731 local maxtry=15
732
733 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
734 MYSQL_ROOT_PASSWORD="$(mysql-v2_getoptval 'client mysql' password)"
735 fi
736 MYSQL_TMPDIR="$(mysql-v2_getoptval mysqld tmpdir)"
737 # These are dir+prefix
738 MYSQL_RELAY_LOG="$(mysql-v2_getoptval mysqld relay-log)"
739 MYSQL_RELAY_LOG=${MYSQL_RELAY_LOG%/*}
740 MYSQL_LOG_BIN="$(mysql-v2_getoptval mysqld log-bin)"
741 MYSQL_LOG_BIN=${MYSQL_LOG_BIN%/*}
742
743 if [[ ! -d "${ROOT}"/$MYSQL_TMPDIR ]]; then
744 einfo "Creating MySQL tmpdir $MYSQL_TMPDIR"
745 install -d -m 770 -o mysql -g mysql "${ROOT}"/$MYSQL_TMPDIR
746 fi
747 if [[ ! -d "${ROOT}"/$MYSQL_LOG_BIN ]]; then
748 einfo "Creating MySQL log-bin directory $MYSQL_LOG_BIN"
749 install -d -m 770 -o mysql -g mysql "${ROOT}"/$MYSQL_LOG_BIN
750 fi
751 if [[ ! -d "${EROOT}"/$MYSQL_RELAY_LOG ]]; then
752 einfo "Creating MySQL relay-log directory $MYSQL_RELAY_LOG"
753 install -d -m 770 -o mysql -g mysql "${EROOT}"/$MYSQL_RELAY_LOG
754 fi
755
756 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
757 ewarn "You have already a MySQL database in place."
758 ewarn "(${ROOT}/${MY_DATADIR}/*)"
759 ewarn "Please rename or delete it if you wish to replace it."
760 die "MySQL database already exists!"
761 fi
762
763 # Bug #213475 - MySQL _will_ object strenously if your machine is named
764 # localhost. Also causes weird failures.
765 [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
766
767 if [ -z "${MYSQL_ROOT_PASSWORD}" ]; then
768
769 einfo "Please provide a password for the mysql 'root' user now, in the"
770 einfo "MYSQL_ROOT_PASSWORD env var or through the ${HOME}/.my.cnf file."
771 ewarn "Avoid [\"'\\_%] characters in the password"
772 read -rsp " >" pwd1 ; echo
773
774 einfo "Retype the password"
775 read -rsp " >" pwd2 ; echo
776
777 if [[ "x$pwd1" != "x$pwd2" ]] ; then
778 die "Passwords are not the same"
779 fi
780 MYSQL_ROOT_PASSWORD="${pwd1}"
781 unset pwd1 pwd2
782 fi
783
784 local options
785 local sqltmp="$(emktemp)"
786
787 # Fix bug 446200. Don't reference host my.cnf, needs to come first,
788 # see http://bugs.mysql.com/bug.php?id=31312
789 use prefix && options="${options} --defaults-file=${MY_SYSCONFDIR}/my.cnf"
790
791 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
792 [[ -r "${help_tables}" ]] \
793 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
794 || touch "${TMPDIR}/fill_help_tables.sql"
795 help_tables="${TMPDIR}/fill_help_tables.sql"
796
797 # Figure out which options we need to disable to do the setup
798 helpfile="${TMPDIR}/mysqld-help"
799 ${EROOT}/usr/sbin/mysqld --verbose --help >"${helpfile}" 2>/dev/null
800 for opt in grant-tables host-cache name-resolve networking slave-start \
801 federated ssl log-bin relay-log slow-query-log external-locking \
802 ndbcluster log-slave-updates \
803 ; do
804 optexp="--(skip-)?${opt}" optfull="--loose-skip-${opt}"
805 egrep -sq -- "${optexp}" "${helpfile}" && options="${options} ${optfull}"
806 done
807 # But some options changed names
808 egrep -sq external-locking "${helpfile}" && \
809 options="${options/skip-locking/skip-external-locking}"
810
811 use prefix || options="${options} --user=mysql"
812
813 # MySQL 5.6+ needs InnoDB
814 if [[ ${PN} == "mysql" || ${PN} == "percona-server" ]] ; then
815 mysql_version_is_at_least "5.6" || options="${options} --loose-skip-innodb"
816 fi
817
818 einfo "Creating the mysql database and setting proper"
819 einfo "permissions on it ..."
820
821 # Now that /var/run is a tmpfs mount point, we need to ensure it exists before using it
822 PID_DIR="${EROOT}/var/run/mysqld"
823 if [[ ! -d "${PID_DIR}" ]]; then
824 mkdir -p "${PID_DIR}" || die "Could not create pid directory"
825 chown mysql:mysql "${PID_DIR}" || die "Could not set ownership on pid directory"
826 chmod 755 "${PID_DIR}" || die "Could not set permissions on pid directory"
827 fi
828
829 pushd "${TMPDIR}" &>/dev/null
830 #cmd="'${EROOT}/usr/share/mysql/scripts/mysql_install_db' '--basedir=${EPREFIX}/usr' ${options}"
831 cmd=${EROOT}usr/share/mysql/scripts/mysql_install_db
832 [[ -f ${cmd} ]] || cmd=${EROOT}usr/bin/mysql_install_db
833 cmd="'$cmd' '--basedir=${EPREFIX}/usr' ${options} '--datadir=${ROOT}/${MY_DATADIR}' '--tmpdir=${ROOT}/${MYSQL_TMPDIR}'"
834 einfo "Command: $cmd"
835 eval $cmd \
836 >"${TMPDIR}"/mysql_install_db.log 2>&1
837 if [ $? -ne 0 ]; then
838 grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
839 die "Failed to run mysql_install_db. Please review ${EPREFIX}/var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
840 fi
841 popd &>/dev/null
842 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
843 || die "MySQL databases not installed"
844 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
845 chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
846
847 # Filling timezones, see
848 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
849 "${EROOT}/usr/bin/mysql_tzinfo_to_sql" "${EROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
850
851 if [[ -r "${help_tables}" ]] ; then
852 cat "${help_tables}" >> "${sqltmp}"
853 fi
854
855 local socket="${EROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
856 local pidfile="${EROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
857 local mysqld="${EROOT}/usr/sbin/mysqld \
858 ${options} \
859 $(use prefix || echo --user=mysql) \
860 --log-warnings=0 \
861 --basedir=${EROOT}/usr \
862 --datadir=${ROOT}/${MY_DATADIR} \
863 --max_allowed_packet=8M \
864 --net_buffer_length=16K \
865 --default-storage-engine=MyISAM \
866 --socket=${socket} \
867 --pid-file=${pidfile}
868 --tmpdir=${ROOT}/${MYSQL_TMPDIR}"
869 #einfo "About to start mysqld: ${mysqld}"
870 ebegin "Starting mysqld"
871 einfo "Command ${mysqld}"
872 ${mysqld} &
873 rc=$?
874 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
875 maxtry=$((${maxtry}-1))
876 echo -n "."
877 sleep 1
878 done
879 eend $rc
880
881 if ! [[ -S "${socket}" ]]; then
882 die "Completely failed to start up mysqld with: ${mysqld}"
883 fi
884
885 ebegin "Setting root password"
886 # Do this from memory, as we don't want clear text passwords in temp files
887 local sql="UPDATE mysql.user SET Password = PASSWORD('${MYSQL_ROOT_PASSWORD}') WHERE USER='root'"
888 "${EROOT}/usr/bin/mysql" \
889 --socket=${socket} \
890 -hlocalhost \
891 -e "${sql}"
892 eend $?
893
894 ebegin "Loading \"zoneinfo\", this step may require a few seconds ..."
895 "${EROOT}/usr/bin/mysql" \
896 --socket=${socket} \
897 -hlocalhost \
898 -uroot \
899 --password="${MYSQL_ROOT_PASSWORD}" \
900 mysql < "${sqltmp}"
901 rc=$?
902 eend $?
903 [[ $rc -ne 0 ]] && ewarn "Failed to load zoneinfo!"
904
905 # Stop the server and cleanup
906 einfo "Stopping the server ..."
907 kill $(< "${pidfile}" )
908 rm -f "${sqltmp}"
909 wait %1
910 einfo "Done"
911 }
912
913 # @FUNCTION: mysql-v2_pkg_postrm
914 # @DESCRIPTION:
915 # Remove mysql symlinks.
916 mysql-v2_pkg_postrm() {
917
918 : # mysql_lib_symlinks "${ED}"
919 }

  ViewVC Help
Powered by ViewVC 1.1.20