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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.119 - (hide annotations) (download)
Wed Dec 9 18:45:46 2009 UTC (4 years, 10 months ago) by robbat2
Branch: MAIN
Changes since 1.118: +73 -12 lines
Add eclass documentation and clean up EAPI version checks, thanks to jmbsvicetto for the work.

1 robbat2 1.119 # Copyright 1999-2009 Gentoo Foundation
2 vivo 1.1 # Distributed under the terms of the GNU General Public License v2
3 robbat2 1.119 # $Header: $
4 vivo 1.1
5 robbat2 1.119 # @ECLASS: mysql.eclass
6     # @MAINTAINER:
7 vivo 1.54 # Author: Francesco Riosa (Retired) <vivo@gentoo.org>
8 robbat2 1.119 # Maintainers: MySQL Team <mysql-bugs@gentoo.org>
9 robbat2 1.86 # - Luca Longinotti <chtekk@gentoo.org>
10     # - Robin H. Johnson <robbat2@gentoo.org>
11 robbat2 1.119 # @BLURB: This eclass provides most of the functions for mysql ebuilds
12     # @DESCRIPTION:
13     # The mysql.eclass provides almost all the code to build the mysql ebuilds
14     # including the src_unpack, src_prepare, src_configure, src_compile,
15     # scr_install, pkg_preinst, pkg_postinst, pkg_config and pkg_postrm
16     # phase hooks.
17 chtekk 1.30
18 vivo 1.59 WANT_AUTOCONF="latest"
19     WANT_AUTOMAKE="latest"
20 chtekk 1.69
21 robbat2 1.114 inherit eutils flag-o-matic gnuconfig autotools mysql_fx versionator
22    
23 robbat2 1.113 case "${EAPI:-0}" in
24     2)
25     EXPORT_FUNCTIONS pkg_setup \
26     src_unpack src_prepare \
27     src_configure src_compile \
28     src_install \
29     pkg_preinst pkg_postinst \
30     pkg_config pkg_postrm
31     IUSE_DEFAULT_ON='+'
32     ;;
33 robbat2 1.119 0 | 1)
34 robbat2 1.113 EXPORT_FUNCTIONS pkg_setup \
35     src_unpack \
36     src_compile \
37     src_install \
38     pkg_preinst pkg_postinst \
39     pkg_config pkg_postrm
40     ;;
41 robbat2 1.119 *)
42     die "Unsupported EAPI: ${EAPI}" ;;
43 robbat2 1.113 esac
44    
45 vivo 1.59 # Shorten the path because the socket path length must be shorter than 107 chars
46     # and we will run a mysql server during test phase
47     S="${WORKDIR}/mysql"
48    
49 robbat2 1.108 [[ "${MY_EXTRAS_VER}" == "latest" ]] && MY_EXTRAS_VER="20090228-0714Z"
50 robbat2 1.86 if [[ "${MY_EXTRAS_VER}" == "live" ]]; then
51 robbat2 1.87 EGIT_PROJECT=mysql-extras
52 robbat2 1.86 EGIT_REPO_URI="git://git.overlays.gentoo.org/proj/mysql-extras.git"
53     inherit git
54     fi
55 vivo 1.54
56 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_VERSION_ID
57     # @DESCRIPTION:
58 vivo 1.60 # MYSQL_VERSION_ID will be:
59     # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
60     # This is an important part, because many of the choices the MySQL ebuild will do
61     # depend on this variable.
62     # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
63 robbat2 1.88 # We also strip off upstream's trailing letter that they use to respin tarballs
64 chtekk 1.69
65 vivo 1.60 MYSQL_VERSION_ID=""
66 robbat2 1.88 tpv="${PV%[a-z]}"
67     tpv=( ${tpv//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
68 vivo 1.60 for vatom in 0 1 2 3 ; do
69     # pad to length 2
70     tpv[${vatom}]="00${tpv[${vatom}]}"
71     MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
72     done
73     # strip leading "0" (otherwise it's considered an octal number by BASH)
74     MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
75    
76 robbat2 1.119 # @ECLASS-VARIABLE: MYSQL_COMMUNITY_FEATURES
77     # @DESCRIPTION:
78     # Specifiy if community features are available. Possible values are 1 (yes)
79     # and 0 (no).
80 robbat2 1.110 # Community features are available in mysql-community
81     # AND in the re-merged mysql-5.0.82 and newer
82     if [ "${PN}" == "mysql-community" ]; then
83     MYSQL_COMMUNITY_FEATURES=1
84     elif [ "${PV#5.0}" != "${PV}" ] && mysql_version_is_at_least "5.0.82"; then
85     MYSQL_COMMUNITY_FEATURES=1
86 robbat2 1.117 elif [ "${PV#5.1}" != "${PV}" ] && mysql_version_is_at_least "5.1.28"; then
87     MYSQL_COMMUNITY_FEATURES=1
88 hanno 1.118 elif [ "${PV#5.4}" != "${PV}" ]; then
89     MYSQL_COMMUNITY_FEATURES=1
90 robbat2 1.110 else
91     MYSQL_COMMUNITY_FEATURES=0
92     fi
93    
94 vivo 1.60 # Be warned, *DEPEND are version-dependant
95 robbat2 1.90 # These are used for both runtime and compiletime
96 vivo 1.60 DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
97     userland_GNU? ( sys-process/procps )
98     >=sys-apps/sed-4
99     >=sys-apps/texinfo-4.7-r1
100     >=sys-libs/readline-4.1
101 chtekk 1.69 >=sys-libs/zlib-1.2.3"
102 vivo 1.60
103 chtekk 1.69 # Having different flavours at the same time is not a good idea
104     for i in "" "-community" ; do
105 vivo 1.60 [[ "${i}" == ${PN#mysql} ]] ||
106     DEPEND="${DEPEND} !dev-db/mysql${i}"
107     done
108    
109 robbat2 1.90 RDEPEND="${DEPEND}
110     !minimal? ( dev-db/mysql-init-scripts )
111     selinux? ( sec-policy/selinux-mysql )"
112    
113     # compile-time-only
114 vivo 1.60 mysql_version_is_at_least "5.1" \
115     || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
116    
117 robbat2 1.90 # compile-time-only
118 chtekk 1.69 mysql_version_is_at_least "5.1.12" \
119 robbat2 1.107 && DEPEND="${DEPEND} >=dev-util/cmake-2.4.3"
120 chtekk 1.69
121 vivo 1.60 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
122     PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
123    
124 robbat2 1.104 # For other stuff to bring us in
125     PDEPEND="${PDEPEND} =virtual/mysql-$(get_version_component_range 1-2 ${PV})"
126    
127 robbat2 1.81 # Work out the default SERVER_URI correctly
128     if [ -z "${SERVER_URI}" ]; then
129     # The community build is on the mirrors
130 robbat2 1.110 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
131 robbat2 1.81 SERVER_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/mysql-${PV//_/-}.tar.gz"
132 robbat2 1.110 # The (old) enterprise source is on the primary site only
133 robbat2 1.81 elif [ "${PN}" == "mysql" ]; then
134     SERVER_URI="ftp://ftp.mysql.com/pub/mysql/src/mysql-${PV//_/-}.tar.gz"
135     fi
136     fi
137    
138 vivo 1.60 # Define correct SRC_URIs
139 robbat2 1.86 SRC_URI="${SERVER_URI}"
140    
141     [[ ${MY_EXTRAS_VER} != live ]] && SRC_URI="${SRC_URI}
142 robbat2 1.73 mirror://gentoo/mysql-extras-${MY_EXTRAS_VER}.tar.bz2
143 chtekk 1.69 http://g3nt8.org/patches/mysql-extras-${MY_EXTRAS_VER}.tar.bz2"
144 vivo 1.60 mysql_version_is_at_least "5.1.12" \
145     && [[ -n "${PBXT_VERSION}" ]] \
146     && SRC_URI="${SRC_URI} pbxt? ( mirror://sourceforge/pbxt/pbxt-${PBXT_VERSION}.tar.gz )"
147    
148     DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
149     HOMEPAGE="http://www.mysql.com/"
150     LICENSE="GPL-2"
151 chtekk 1.69 SLOT="0"
152 robbat2 1.113 IUSE="big-tables debug embedded minimal ${IUSE_DEFAULT_ON}perl selinux ssl static"
153 vivo 1.60
154     mysql_version_is_at_least "4.1" \
155     && IUSE="${IUSE} latin1"
156    
157     mysql_version_is_at_least "4.1.3" \
158     && IUSE="${IUSE} cluster extraengine"
159    
160     mysql_version_is_at_least "5.0" \
161     || IUSE="${IUSE} raid"
162    
163     mysql_version_is_at_least "5.0.18" \
164     && IUSE="${IUSE} max-idx-128"
165    
166     mysql_version_is_at_least "5.1" \
167     || IUSE="${IUSE} berkdb"
168    
169     mysql_version_is_at_least "5.1.12" \
170     && IUSE="${IUSE} pbxt"
171    
172 robbat2 1.110 [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ] \
173 robbat2 1.113 && IUSE="${IUSE} ${IUSE_DEFAULT_ON}community profiling"
174 vivo 1.1
175 robbat2 1.119
176 vivo 1.37 #
177     # HELPER FUNCTIONS:
178     #
179    
180 robbat2 1.119 # @FUNCTION: mysql_disable_test
181     # @DESCRIPTION:
182     # Helper function to disable specific tests.
183 vivo 1.51 mysql_disable_test() {
184     local testname="${1}" ; shift
185     local reason="${@}"
186     local mysql_disable_file="${S}/mysql-test/t/disabled.def"
187     echo ${testname} : ${reason} >> "${mysql_disable_file}"
188 chtekk 1.69 ewarn "test '${testname}' disabled: '${reason}'"
189 vivo 1.51 }
190    
191 robbat2 1.119 # @FUNCTION: mysql_init_vars
192     # @DESCRIPTION:
193 vivo 1.8 # void mysql_init_vars()
194 chtekk 1.30 # Initialize global variables
195     # 2005-11-19 <vivo@gentoo.org>
196 vivo 1.8 mysql_init_vars() {
197 chtekk 1.69 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
198     MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
199     MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
200     MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
201     MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
202     MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
203 vivo 1.8
204 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
205     MY_DATADIR=""
206 chtekk 1.30 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
207 robbat2 1.75 MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
208 vivo 1.26 | sed -ne '/datadir/s|^--datadir=||p' \
209     | tail -n1`
210 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
211     MY_DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
212 robbat2 1.89 | sed -e 's/.*=\s*//' \
213     | tail -n1`
214 vivo 1.8 fi
215     fi
216 robbat2 1.75 if [[ -z "${MY_DATADIR}" ]] ; then
217     MY_DATADIR="${MY_LOCALSTATEDIR}"
218     einfo "Using default MY_DATADIR"
219 vivo 1.8 fi
220 robbat2 1.75 elog "MySQL MY_DATADIR is ${MY_DATADIR}"
221 vivo 1.8
222 chtekk 1.30 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
223 robbat2 1.75 if [[ -e "${MY_DATADIR}" ]] ; then
224 robbat2 1.95 # If you get this and you're wondering about it, see bug #207636
225     elog "MySQL datadir found in ${MY_DATADIR}"
226     elog "A new one will not be created."
227 vivo 1.8 PREVIOUS_DATADIR="yes"
228     else
229     PREVIOUS_DATADIR="no"
230     fi
231 chtekk 1.30 export PREVIOUS_DATADIR
232 vivo 1.8 fi
233 robbat2 1.111 else
234     if [[ ${EBUILD_PHASE} == "config" ]]; then
235     local new_MY_DATADIR
236     new_MY_DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
237     | sed -ne '/datadir/s|^--datadir=||p' \
238     | tail -n1`
239    
240     if [[ ( -n "${new_MY_DATADIR}" ) && ( "${new_MY_DATADIR}" != "${MY_DATADIR}" ) ]]; then
241     ewarn "MySQL MY_DATADIR has changed"
242     ewarn "from ${MY_DATADIR}"
243     ewarn "to ${new_MY_DATADIR}"
244     MY_DATADIR="${new_MY_DATADIR}"
245     fi
246     fi
247 vivo 1.8 fi
248    
249 vivo 1.55 MY_SOURCEDIR=${SERVER_URI##*/}
250     MY_SOURCEDIR=${MY_SOURCEDIR%.tar*}
251    
252 chtekk 1.69 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
253 vivo 1.8 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
254 robbat2 1.75 export MY_INCLUDEDIR MY_DATADIR MY_SOURCEDIR
255 vivo 1.8 }
256    
257 vivo 1.37 configure_minimal() {
258 vivo 1.46 # These are things we exclude from a minimal build, please
259     # note that the server actually does get built and installed,
260     # but we then delete it before packaging.
261 robbat2 1.84 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication readline"
262 vivo 1.37
263 vivo 1.46 for i in ${minimal_exclude_list} ; do
264     myconf="${myconf} --without-${i}"
265     done
266     myconf="${myconf} --with-extra-charsets=none"
267     myconf="${myconf} --enable-local-infile"
268 vivo 1.47
269 cardoe 1.67 if use static ; then
270 vivo 1.47 myconf="${myconf} --with-client-ldflags=-all-static"
271 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
272 vivo 1.47 else
273     myconf="${myconf} --enable-shared --enable-static"
274     fi
275 chtekk 1.50
276 chtekk 1.69 if mysql_version_is_at_least "4.1" && ! use latin1 ; then
277 chtekk 1.50 myconf="${myconf} --with-charset=utf8"
278     myconf="${myconf} --with-collation=utf8_general_ci"
279     else
280     myconf="${myconf} --with-charset=latin1"
281     myconf="${myconf} --with-collation=latin1_swedish_ci"
282     fi
283 vivo 1.37 }
284    
285     configure_common() {
286 chtekk 1.39 myconf="${myconf} $(use_with big-tables)"
287 vivo 1.37 myconf="${myconf} --enable-local-infile"
288     myconf="${myconf} --with-extra-charsets=all"
289     myconf="${myconf} --with-mysqld-user=mysql"
290 chtekk 1.39 myconf="${myconf} --with-server"
291 vivo 1.43 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
292 vivo 1.37 myconf="${myconf} --without-libwrap"
293 chtekk 1.39
294 cardoe 1.67 if use static ; then
295 vivo 1.37 myconf="${myconf} --with-mysqld-ldflags=-all-static"
296     myconf="${myconf} --with-client-ldflags=-all-static"
297 robbat2 1.80 myconf="${myconf} --disable-shared --with-pic"
298 vivo 1.37 else
299     myconf="${myconf} --enable-shared --enable-static"
300     fi
301    
302 cardoe 1.67 if use debug ; then
303 vivo 1.37 myconf="${myconf} --with-debug=full"
304     else
305     myconf="${myconf} --without-debug"
306 vivo 1.51 mysql_version_is_at_least "4.1.3" \
307 cardoe 1.67 && use cluster \
308 vivo 1.37 && myconf="${myconf} --without-ndb-debug"
309     fi
310 chtekk 1.39
311 robbat2 1.100 if [ -n "${MYSQL_DEFAULT_CHARSET}" -a -n "${MYSQL_DEFAULT_COLLATION}" ]; then
312     ewarn "You are using a custom charset of ${MYSQL_DEFAULT_CHARSET}"
313     ewarn "and a collation of ${MYSQL_DEFAULT_COLLATION}."
314     ewarn "You MUST file bugs without these variables set."
315     myconf="${myconf} --with-charset=${MYSQL_DEFAULT_CHARSET}"
316     myconf="${myconf} --with-collation=${MYSQL_DEFAULT_COLLATION}"
317     elif mysql_version_is_at_least "4.1" && ! use latin1 ; then
318     myconf="${myconf} --with-charset=utf8"
319     myconf="${myconf} --with-collation=utf8_general_ci"
320     else
321     myconf="${myconf} --with-charset=latin1"
322     myconf="${myconf} --with-collation=latin1_swedish_ci"
323 vivo 1.37 fi
324 chtekk 1.39
325 cardoe 1.67 if use embedded ; then
326 vivo 1.37 myconf="${myconf} --with-embedded-privilege-control"
327     myconf="${myconf} --with-embedded-server"
328     else
329     myconf="${myconf} --without-embedded-privilege-control"
330     myconf="${myconf} --without-embedded-server"
331     fi
332    
333     }
334    
335     configure_40_41_50() {
336     myconf="${myconf} $(use_with perl bench)"
337     myconf="${myconf} --enable-assembler"
338     myconf="${myconf} --with-extra-tools"
339     myconf="${myconf} --with-innodb"
340     myconf="${myconf} --without-readline"
341 vivo 1.51 mysql_version_is_at_least "5.0" || myconf="${myconf} $(use_with raid)"
342 vivo 1.37
343 chtekk 1.69 # --with-vio is not needed anymore, it's on by default and
344     # has been removed from configure
345 cardoe 1.67 if use ssl ; then
346 chtekk 1.69 mysql_version_is_at_least "5.0.4" || myconf="${myconf} --with-vio"
347 vivo 1.62 fi
348    
349     if mysql_version_is_at_least "5.1.11" ; then
350     myconf="${myconf} $(use_with ssl)"
351 vivo 1.37 else
352 vivo 1.62 myconf="${myconf} $(use_with ssl openssl)"
353 vivo 1.37 fi
354 maekke 1.103
355 robbat2 1.98 if mysql_version_is_at_least "5.0.60" ; then
356     if use berkdb ; then
357     elog "Berkeley DB support was disabled due to build failures"
358     elog "on multiple arches, go to a version earlier than 5.0.60"
359     elog "if you want it again. Gentoo bug #224067."
360     fi
361     myconf="${myconf} --without-berkeley-db"
362     elif use berkdb ; then
363 chtekk 1.77 # The following fix is due to a bug with bdb on SPARC's. See:
364     # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
365     # It comes down to non-64-bit safety problems.
366 cardoe 1.76 if use alpha || use amd64 || use hppa || use mips || use sparc ; then
367 chtekk 1.77 elog "Berkeley DB support was disabled due to compatibility issues on this arch"
368 cardoe 1.76 myconf="${myconf} --without-berkeley-db"
369     else
370 chtekk 1.39 myconf="${myconf} --with-berkeley-db=./bdb"
371     fi
372 cardoe 1.76 else
373     myconf="${myconf} --without-berkeley-db"
374 vivo 1.37 fi
375    
376 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
377 vivo 1.37 myconf="${myconf} --with-geometry"
378     myconf="${myconf} $(use_with cluster ndbcluster)"
379     fi
380    
381 cardoe 1.67 if mysql_version_is_at_least "4.1.3" && use extraengine ; then
382 vivo 1.37 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
383     myconf="${myconf} --with-archive-storage-engine"
384    
385     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
386     myconf="${myconf} --with-csv-storage-engine"
387    
388     # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
389     myconf="${myconf} --with-blackhole-storage-engine"
390    
391     # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
392     # http://dev.mysql.com/doc/mysql/en/federated-description.html
393     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
394 vivo 1.51 if mysql_version_is_at_least "5.0.3" ; then
395 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
396     elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
397 vivo 1.37 myconf="${myconf} --with-federated-storage-engine"
398     fi
399     fi
400    
401 robbat2 1.110 if [ "${MYSQL_COMMUNITY_FEATURES}" == "1" ]; then
402     myconf="${myconf} `use_enable community community-features`"
403     if use community; then
404     myconf="${myconf} `use_enable profiling`"
405     else
406     myconf="${myconf} --disable-profiling"
407     fi
408 robbat2 1.99 fi
409    
410 vivo 1.51 mysql_version_is_at_least "5.0.18" \
411 cardoe 1.67 && use max-idx-128 \
412 vivo 1.37 && myconf="${myconf} --with-max-indexes=128"
413     }
414    
415 chtekk 1.39 configure_51() {
416 chtekk 1.40 # TODO: !!!! readd --without-readline
417 chtekk 1.39 # the failure depend upon config/ac-macros/readline.m4 checking into
418 vivo 1.37 # readline.h instead of history.h
419     myconf="${myconf} $(use_with ssl)"
420     myconf="${myconf} --enable-assembler"
421     myconf="${myconf} --with-geometry"
422     myconf="${myconf} --with-readline"
423     myconf="${myconf} --with-row-based-replication"
424     myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
425     myconf="${myconf} --without-pstack"
426 cardoe 1.67 use max-idx-128 && myconf="${myconf} --with-max-indexes=128"
427 chtekk 1.39
428 vivo 1.37 # 5.1 introduces a new way to manage storage engines (plugins)
429     # like configuration=none
430     local plugins="csv,myisam,myisammrg,heap"
431 cardoe 1.67 if use extraengine ; then
432 vivo 1.37 # like configuration=max-no-ndb, archive and example removed in 5.1.11
433 vivo 1.52 plugins="${plugins},archive,blackhole,example,federated,partition"
434 vivo 1.37
435 chtekk 1.39 elog "Before using the Federated storage engine, please be sure to read"
436     elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
437 vivo 1.37 fi
438    
439 robbat2 1.107 # Upstream specifically requests that InnoDB always be built.
440     plugins="${plugins},innobase"
441 vivo 1.37
442     # like configuration=max-no-ndb
443 cardoe 1.67 if use cluster ; then
444 vivo 1.37 plugins="${plugins},ndbcluster"
445     myconf="${myconf} --with-ndb-binlog"
446     fi
447    
448 vivo 1.58 if mysql_version_is_at_least "5.2" ; then
449     plugins="${plugins},falcon"
450     fi
451    
452 vivo 1.37 myconf="${myconf} --with-plugins=${plugins}"
453     }
454    
455 robbat2 1.112 pbxt_src_configure() {
456 vivo 1.51 mysql_init_vars
457    
458     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
459    
460     einfo "Reconfiguring dir '${PWD}'"
461     AT_GNUCONF_UPDATE="yes" eautoreconf
462    
463 chtekk 1.69 local myconf=""
464     myconf="${myconf} --with-mysql=${S} --libdir=${D}/${MY_LIBDIR}"
465 cardoe 1.67 use debug && myconf="${myconf} --with-debug=full"
466 chtekk 1.69 # TODO: is it safe/needed to use econf here ?
467     ./configure ${myconf} || die "Problem configuring PBXT storage engine"
468 robbat2 1.112 }
469    
470     pbxt_src_compile() {
471     # Be backwards compatible for now
472     if [[ $EAPI != 2 ]]; then
473     pbxt_src_configure
474     fi
475 chtekk 1.69 # TODO: is it safe/needed to use emake here ?
476     make || die "Problem making PBXT storage engine (${myconf})"
477 vivo 1.51
478     popd
479 chtekk 1.69 # TODO: modify test suite for PBXT
480 vivo 1.51 }
481    
482     pbxt_src_install() {
483     pushd "${WORKDIR}/pbxt-${PBXT_VERSION}" &>/dev/null
484 chtekk 1.69 make install || die "Failed to install PBXT"
485 vivo 1.51 popd
486     }
487    
488 vivo 1.37 #
489     # EBUILD FUNCTIONS
490     #
491 robbat2 1.119 # @FUNCTION: mysql_pkg_setup
492     # @DESCRIPTION:
493     # Perform some basic tests and tasks during pkg_setup phase:
494     # die if FEATURES="test", USE="-minimal" and not using FEATURES="userpriv"
495     # check for conflicting use flags
496     # create new user and group for mysql
497     # warn about deprecated features
498 vivo 1.1 mysql_pkg_setup() {
499 robbat2 1.83 if hasq test ${FEATURES} ; then
500     if ! use minimal ; then
501 robbat2 1.91 if [[ $UID -eq 0 ]]; then
502 robbat2 1.96 eerror "Testing with FEATURES=-userpriv is no longer supported by upstream. Tests MUST be run as non-root."
503 robbat2 1.83 fi
504     fi
505     fi
506 swegener 1.53
507 chtekk 1.30 # Check for USE flag problems in pkg_setup
508 cardoe 1.67 if use static && use ssl ; then
509 chtekk 1.30 eerror "MySQL does not support being built statically with SSL support enabled!"
510     die "MySQL does not support being built statically with SSL support enabled!"
511     fi
512 vivo 1.1
513 vivo 1.51 if ! mysql_version_is_at_least "5.0" \
514 cardoe 1.67 && use raid \
515     && use static ; then
516 chtekk 1.30 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
517     eerror "with RAID support enabled."
518     die "USE flags 'raid' and 'static' conflict!"
519 vivo 1.1 fi
520    
521 vivo 1.51 if mysql_version_is_at_least "4.1.3" \
522 cardoe 1.67 && ( use cluster || use extraengine ) \
523     && use minimal ; then
524 chtekk 1.30 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
525     die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
526 vivo 1.1 fi
527 maekke 1.103
528 robbat2 1.83 # This should come after all of the die statements
529     enewgroup mysql 60 || die "problem adding 'mysql' group"
530     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
531 chtekk 1.39
532 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
533 cardoe 1.67 && use berkdb \
534 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
535 chtekk 1.30 }
536    
537 robbat2 1.119 # @FUNCTION: mysql_src_unpack
538     # @DESCRIPTION:
539     # Unpack the source code and call mysql_src_prepare for EAPI < 2.
540 chtekk 1.30 mysql_src_unpack() {
541     # Initialize the proper variables first
542     mysql_init_vars
543 vivo 1.1
544 chtekk 1.30 unpack ${A}
545 robbat2 1.86 # Grab the patches
546     [[ "${MY_EXTRAS_VER}" == "live" ]] && S="${WORKDIR}/mysql-extras" git_src_unpack
547 maekke 1.116
548 robbat2 1.109 mv -f "${WORKDIR}/${MY_SOURCEDIR}" "${S}"
549 robbat2 1.112
550     # Be backwards compatible for now
551 robbat2 1.119 case ${EAPI:-0} in
552     2) : ;;
553     0 | 1) mysql_src_prepare ;;
554     esac
555 robbat2 1.112 }
556    
557 robbat2 1.119 # @FUNCTION: mysql_src_prepare
558     # @DESCRIPTION:
559     # Apply patches to the source code and remove unneeded bundled libs.
560 robbat2 1.112 mysql_src_prepare() {
561 robbat2 1.109 cd "${S}"
562 vivo 1.1
563 chtekk 1.30 # Apply the patches for this MySQL version
564 vivo 1.55 EPATCH_SUFFIX="patch"
565 chtekk 1.69 mkdir -p "${EPATCH_SOURCE}" || die "Unable to create epatch directory"
566 robbat2 1.86 # Clean out old items
567     rm -f "${EPATCH_SOURCE}"/*
568     # Now link in right patches
569 vivo 1.55 mysql_mv_patches
570 robbat2 1.86 # And apply
571 chtekk 1.69 epatch
572 vivo 1.1
573 chtekk 1.30 # Additional checks, remove bundled zlib
574 vivo 1.1 rm -f "${S}/zlib/"*.[ch]
575     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
576 chtekk 1.30 rm -f "scripts/mysqlbug"
577 vivo 1.1
578     # Make charsets install in the right place
579 vivo 1.37 find . -name 'Makefile.am' \
580     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
581 vivo 1.1
582 vivo 1.55 if mysql_version_is_at_least "4.1" ; then
583 chtekk 1.30 # Remove what needs to be recreated, so we're sure it's actually done
584     find . -name Makefile \
585     -o -name Makefile.in \
586     -o -name configure \
587     -exec rm -f {} \;
588     rm -f "ltmain.sh"
589 vivo 1.37 rm -f "scripts/mysqlbug"
590 chtekk 1.30 fi
591 vivo 1.1
592 vivo 1.51 local rebuilddirlist d
593 vivo 1.1
594 vivo 1.51 if mysql_version_is_at_least "5.1.12" ; then
595 chtekk 1.42 rebuilddirlist="."
596 swegener 1.74 # TODO: check this with a cmake expert
597 robbat2 1.107 cmake \
598 chtekk 1.72 -DCMAKE_C_COMPILER=$(type -P $(tc-getCC)) \
599 robbat2 1.82 -DCMAKE_CXX_COMPILER=$(type -P $(tc-getCXX)) \
600 vivo 1.51 "storage/innobase"
601 vivo 1.1 else
602     rebuilddirlist=". innobase"
603     fi
604    
605 chtekk 1.30 for d in ${rebuilddirlist} ; do
606     einfo "Reconfiguring dir '${d}'"
607 vivo 1.4 pushd "${d}" &>/dev/null
608 vivo 1.21 AT_GNUCONF_UPDATE="yes" eautoreconf
609 vivo 1.4 popd &>/dev/null
610 vivo 1.1 done
611    
612 vivo 1.51 if mysql_check_version_range "4.1 to 5.0.99.99" \
613 cardoe 1.67 && use berkdb ; then
614 vivo 1.51 [[ -w "bdb/dist/ltmain.sh" ]] && cp -f "ltmain.sh" "bdb/dist/ltmain.sh"
615 chtekk 1.71 cp -f "/usr/share/aclocal/libtool.m4" "bdb/dist/aclocal/libtool.ac" \
616     || die "Could not copy libtool.m4 to bdb/dist/"
617 betelgeuse 1.97 #These files exist only with libtool-2*, and need to be included.
618     if [ -f '/usr/share/aclocal/ltsugar.m4' ]; then
619     cat "/usr/share/aclocal/ltsugar.m4" >> "bdb/dist/aclocal/libtool.ac"
620     cat "/usr/share/aclocal/ltversion.m4" >> "bdb/dist/aclocal/libtool.ac"
621     cat "/usr/share/aclocal/lt~obsolete.m4" >> "bdb/dist/aclocal/libtool.ac"
622     cat "/usr/share/aclocal/ltoptions.m4" >> "bdb/dist/aclocal/libtool.ac"
623     fi
624 chtekk 1.71 pushd "bdb/dist" &>/dev/null
625     sh s_all \
626     || die "Failed bdb reconfigure"
627 vivo 1.4 popd &>/dev/null
628 vivo 1.1 fi
629     }
630    
631 robbat2 1.119 # @FUNCTION: mysql_src_configure
632     # @DESCRIPTION:
633     # Configure mysql to build the code for Gentoo respecting the use flags.
634 robbat2 1.112 mysql_src_configure() {
635 chtekk 1.30 # Make sure the vars are correctly initialized
636     mysql_init_vars
637 vivo 1.1
638 chtekk 1.42 # $myconf is modified by the configure_* functions
639     local myconf=""
640 vivo 1.1
641 cardoe 1.67 if use minimal ; then
642 chtekk 1.42 configure_minimal
643 vivo 1.1 else
644 chtekk 1.42 configure_common
645 vivo 1.51 if mysql_version_is_at_least "5.1.10" ; then
646 chtekk 1.42 configure_51
647 vivo 1.1 else
648 chtekk 1.42 configure_40_41_50
649 vivo 1.1 fi
650 vivo 1.23 fi
651    
652 chtekk 1.30 # Bug #114895, bug #110149
653 vivo 1.1 filter-flags "-O" "-O[01]"
654 chtekk 1.30
655     # glib-2.3.2_pre fix, bug #16496
656 vivo 1.1 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
657    
658 robbat2 1.101 # As discovered by bug #246652, doing a double-level of SSP causes NDB to
659     # fail badly during cluster startup.
660     if [[ $(gcc-major-version) -lt 4 ]]; then
661     filter-flags "-fstack-protector-all"
662     fi
663    
664 vivo 1.48 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
665 chtekk 1.34 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
666 vivo 1.51 mysql_version_is_at_least "5.0" \
667 chtekk 1.34 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
668 chtekk 1.39 export CXXFLAGS
669 vivo 1.1
670 robbat2 1.115 # bug #283926, with GCC4.4, this is required to get correct behavior.
671     append-flags -fno-strict-aliasing
672    
673 vivo 1.1 econf \
674     --libexecdir="/usr/sbin" \
675     --sysconfdir="${MY_SYSCONFDIR}" \
676     --localstatedir="${MY_LOCALSTATEDIR}" \
677     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
678     --libdir="${MY_LIBDIR}" \
679     --includedir="${MY_INCLUDEDIR}" \
680     --with-low-memory \
681     --with-client-ldflags=-lstdc++ \
682     --enable-thread-safe-client \
683     --with-comment="Gentoo Linux ${PF}" \
684     --without-docs \
685 chtekk 1.39 ${myconf} || die "econf failed"
686 vivo 1.1
687 chtekk 1.30 # TODO: Move this before autoreconf !!!
688 vivo 1.21 find . -type f -name Makefile -print0 \
689     | xargs -0 -n100 sed -i \
690     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
691 vivo 1.1
692 robbat2 1.112 if [[ $EAPI == 2 ]]; then
693     mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_configure
694     fi
695     }
696    
697 robbat2 1.119 # @FUNCTION: mysql_src_compile
698     # @DESCRIPTION:
699     # Compile the mysql code.
700 robbat2 1.112 mysql_src_compile() {
701     # Be backwards compatible for now
702 robbat2 1.119 case ${EAPI:-0} in
703     2) : ;;
704     0 | 1) mysql_src_configure ;;
705     esac
706 robbat2 1.112
707 chtekk 1.39 emake || die "emake failed"
708 vivo 1.55
709 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_compile
710 vivo 1.1 }
711    
712 robbat2 1.119 # @FUNCTION: mysql_src_install
713     # @DESCRIPTION:
714     # Install mysql.
715 vivo 1.1 mysql_src_install() {
716 chtekk 1.30 # Make sure the vars are correctly initialized
717     mysql_init_vars
718 vivo 1.1
719 chtekk 1.69 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
720 vivo 1.55
721 cardoe 1.67 mysql_version_is_at_least "5.1.12" && use pbxt && pbxt_src_install
722 vivo 1.1
723 chtekk 1.30 # Convenience links
724 robbat2 1.105 einfo "Making Convenience links for mysqlcheck multi-call binary"
725 chtekk 1.69 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
726     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
727     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
728 vivo 1.1
729 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
730 robbat2 1.105 einfo "Removing duplicate /usr/share/mysql files"
731 chtekk 1.30 rm -Rf "${D}/usr/share/info"
732 vivo 1.37 for removeme in "mysql-log-rotate" mysql.server* \
733     binary-configure* my-*.cnf mi_test_all*
734     do
735 chtekk 1.30 rm -f "${D}"/usr/share/mysql/${removeme}
736 vivo 1.1 done
737    
738 chtekk 1.69 # Clean up stuff for a minimal build
739 cardoe 1.67 if use minimal ; then
740 robbat2 1.105 einfo "Remove all extra content for minimal build"
741 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
742     rm -f "${D}"/usr/bin/{mysql{_install_db,manager*,_secure_installation,_fix_privilege_tables,hotcopy,_convert_table_format,d_multi,_fix_extensions,_zap,_explain_log,_tableinfo,d_safe,_install,_waitpid,binlog,test},myisam*,isam*,pack_isam}
743 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
744 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
745 vivo 1.1 fi
746    
747 chtekk 1.30 # Configuration stuff
748 vivo 1.51 if mysql_version_is_at_least "4.1" ; then
749 chtekk 1.30 mysql_mycnf_version="4.1"
750     else
751     mysql_mycnf_version="4.0"
752     fi
753 robbat2 1.105 einfo "Building default my.cnf"
754 vivo 1.1 insinto "${MY_SYSCONFDIR}"
755 vivo 1.55 doins scripts/mysqlaccess.conf
756 robbat2 1.75 sed -e "s!@DATADIR@!${MY_DATADIR}!g" \
757 chtekk 1.30 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
758 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
759 cardoe 1.67 if mysql_version_is_at_least "4.1" && use latin1 ; then
760 chtekk 1.30 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
761     fi
762 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
763    
764 chtekk 1.30 # Minimal builds don't have the MySQL server
765 cardoe 1.67 if ! use minimal ; then
766 robbat2 1.105 einfo "Creating initial directories"
767 chtekk 1.30 # Empty directories ...
768 vivo 1.1 diropts "-m0750"
769     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
770 robbat2 1.75 dodir "${MY_DATADIR}"
771     keepdir "${MY_DATADIR}"
772     chown -R mysql:mysql "${D}/${MY_DATADIR}"
773 vivo 1.1 fi
774    
775     diropts "-m0755"
776     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
777     dodir "${folder}"
778     keepdir "${folder}"
779     chown -R mysql:mysql "${D}/${folder}"
780     done
781     fi
782    
783 chtekk 1.30 # Docs
784 robbat2 1.105 einfo "Installing docs"
785 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
786 robbat2 1.92 doinfo "${S}"/Docs/mysql.info
787 chtekk 1.30
788     # Minimal builds don't have the MySQL server
789 cardoe 1.67 if ! use minimal ; then
790 robbat2 1.105 einfo "Including support files and sample configurations"
791 vivo 1.1 docinto "support-files"
792     for script in \
793 robbat2 1.92 "${S}"/support-files/my-*.cnf \
794     "${S}"/support-files/magic \
795     "${S}"/support-files/ndb-config-2-node.ini
796 vivo 1.1 do
797     dodoc "${script}"
798     done
799    
800     docinto "scripts"
801 robbat2 1.92 for script in "${S}"/scripts/mysql* ; do
802 vivo 1.4 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
803 vivo 1.1 done
804 robbat2 1.78
805 vivo 1.1 fi
806 vivo 1.4
807 vivo 1.58 mysql_lib_symlinks "${D}"
808 vivo 1.15 }
809    
810 robbat2 1.119 # @FUNCTION: mysql_pkg_preinst
811     # @DESCRIPTION:
812     # Create the user and groups for mysql - die if that fails.
813 vivo 1.15 mysql_pkg_preinst() {
814 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
815     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
816 vivo 1.1 }
817    
818 robbat2 1.119 # @FUNCTION: mysql_pkg_postinst
819     # @DESCRIPTION:
820     # Run post-installation tasks:
821     # create the dir for logfiles if non-existant
822     # touch the logfiles and secure them
823     # install scripts
824     # issue required steps for optional features
825     # issue deprecation warnings
826 vivo 1.1 mysql_pkg_postinst() {
827 chtekk 1.30 # Make sure the vars are correctly initialized
828 vivo 1.1 mysql_init_vars
829    
830 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
831 chtekk 1.69 [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
832 vivo 1.1
833 chtekk 1.30 # Secure the logfiles
834 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
835     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
836     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
837    
838 vivo 1.55 # Minimal builds don't have the MySQL server
839 cardoe 1.67 if ! use minimal ; then
840 vivo 1.55 docinto "support-files"
841     for script in \
842     support-files/my-*.cnf \
843     support-files/magic \
844     support-files/ndb-config-2-node.ini
845     do
846     dodoc "${script}"
847     done
848    
849     docinto "scripts"
850     for script in scripts/mysql* ; do
851     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
852     done
853 chtekk 1.69
854     einfo
855     elog "You might want to run:"
856     elog "\"emerge --config =${CATEGORY}/${PF}\""
857     elog "if this is a new install."
858     einfo
859 vivo 1.55 fi
860    
861 cardoe 1.67 if mysql_version_is_at_least "5.1.12" && use pbxt ; then
862 chtekk 1.69 # TODO: explain it better
863     elog " mysql> INSTALL PLUGIN pbxt SONAME 'libpbxt.so';"
864     elog " mysql> CREATE TABLE t1 (c1 int, c2 text) ENGINE=pbxt;"
865     elog "if, after that, you cannot start the MySQL server,"
866 vivo 1.63 elog "remove the ${MY_DATADIR}/mysql/plugin.* files, then"
867 chtekk 1.69 elog "use the MySQL upgrade script to restore the table"
868     elog "or execute the following SQL command:"
869     elog " CREATE TABLE IF NOT EXISTS plugin ("
870     elog " name char(64) binary DEFAULT '' NOT NULL,"
871     elog " dl char(128) DEFAULT '' NOT NULL,"
872     elog " PRIMARY KEY (name)"
873     elog " ) CHARACTER SET utf8 COLLATE utf8_bin;"
874 vivo 1.4 fi
875 chtekk 1.69
876 vivo 1.51 mysql_check_version_range "4.0 to 5.0.99.99" \
877 cardoe 1.67 && use berkdb \
878 chtekk 1.41 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
879 vivo 1.1 }
880    
881 robbat2 1.119 # @FUNCTION: mysql_pkg_config
882     # @DESCRIPTION:
883     # Configure mysql environment.
884 vivo 1.1 mysql_pkg_config() {
885 robbat2 1.111 local old_MY_DATADIR="${MY_DATADIR}"
886    
887 chtekk 1.30 # Make sure the vars are correctly initialized
888 vivo 1.1 mysql_init_vars
889    
890 robbat2 1.75 [[ -z "${MY_DATADIR}" ]] && die "Sorry, unable to find MY_DATADIR"
891 chtekk 1.30
892 vivo 1.49 if built_with_use ${CATEGORY}/${PN} minimal ; then
893 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
894     fi
895    
896 robbat2 1.111 if [[ ( -n "${MY_DATADIR}" ) && ( "${MY_DATADIR}" != "${old_MY_DATADIR}" ) ]]; then
897     local MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${MY_DATADIR})"
898     local old_MY_DATADIR_s="$(strip_duplicate_slashes ${ROOT}/${old_MY_DATADIR})"
899    
900     if [[ -d "${old_MY_DATADIR_s}" ]]; then
901     if [[ -d "${MY_DATADIR_s}" ]]; then
902     ewarn "Both ${old_MY_DATADIR_s} and ${MY_DATADIR_s} exist"
903     ewarn "Attempting to use ${MY_DATADIR_s} and preserving ${old_MY_DATADIR_s}"
904     else
905     elog "Moving MY_DATADIR from ${old_MY_DATADIR_s} to ${MY_DATADIR_s}"
906     mv --strip-trailing-slashes -T "${old_MY_DATADIR_s}" "${MY_DATADIR_s}" \
907     || die "Moving MY_DATADIR failed"
908     fi
909     else
910     ewarn "Previous MY_DATADIR (${old_MY_DATADIR_s}) does not exist"
911     if [[ -d "${MY_DATADIR_s}" ]]; then
912     ewarn "Attempting to use ${MY_DATADIR_s}"
913     else
914     eerror "New MY_DATADIR (${MY_DATADIR_s}) does not exist"
915     die "Configuration Failed! Please reinstall ${CATEGORY}/${PN}"
916 maekke 1.116 fi
917 robbat2 1.111 fi
918     fi
919    
920 vivo 1.1 local pwd1="a"
921     local pwd2="b"
922     local maxtry=5
923    
924 robbat2 1.75 if [[ -d "${ROOT}/${MY_DATADIR}/mysql" ]] ; then
925 vivo 1.1 ewarn "You have already a MySQL database in place."
926 robbat2 1.75 ewarn "(${ROOT}/${MY_DATADIR}/*)"
927 vivo 1.1 ewarn "Please rename or delete it if you wish to replace it."
928     die "MySQL database already exists!"
929     fi
930    
931 robbat2 1.102 # Bug #213475 - MySQL _will_ object strenously if your machine is named
932     # localhost. Also causes weird failures.
933     [[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost"
934    
935 vivo 1.1 einfo "Creating the mysql database and setting proper"
936 chtekk 1.30 einfo "permissions on it ..."
937 vivo 1.1
938     einfo "Insert a password for the mysql 'root' user"
939     ewarn "Avoid [\"'\\_%] characters in the password"
940 chtekk 1.30 read -rsp " >" pwd1 ; echo
941 vivo 1.1
942 chtekk 1.30 einfo "Retype the password"
943 vivo 1.1 read -rsp " >" pwd2 ; echo
944    
945     if [[ "x$pwd1" != "x$pwd2" ]] ; then
946     die "Passwords are not the same"
947     fi
948    
949     local options=""
950     local sqltmp="$(emktemp)"
951    
952 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
953 vivo 1.1 [[ -r "${help_tables}" ]] \
954 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
955 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
956     help_tables="${TMPDIR}/fill_help_tables.sql"
957    
958 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
959 robbat2 1.85 "${ROOT}/usr/bin/mysql_install_db" >"${TMPDIR}"/mysql_install_db.log 2>&1
960     if [ $? -ne 0 ]; then
961     grep -B5 -A999 -i "ERROR" "${TMPDIR}"/mysql_install_db.log 1>&2
962     die "Failed to run mysql_install_db. Please review /var/log/mysql/mysqld.err AND ${TMPDIR}/mysql_install_db.log"
963     fi
964 vivo 1.4 popd &>/dev/null
965 robbat2 1.75 [[ -f "${ROOT}/${MY_DATADIR}/mysql/user.frm" ]] \
966 vivo 1.26 || die "MySQL databases not installed"
967 robbat2 1.94 chown -R mysql:mysql "${ROOT}/${MY_DATADIR}" 2>/dev/null
968     chmod 0750 "${ROOT}/${MY_DATADIR}" 2>/dev/null
969 vivo 1.1
970 vivo 1.51 if mysql_version_is_at_least "4.1.3" ; then
971 vivo 1.1 options="--skip-ndbcluster"
972    
973     # Filling timezones, see
974     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
975 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
976 vivo 1.1
977     if [[ -r "${help_tables}" ]] ; then
978     cat "${help_tables}" >> "${sqltmp}"
979     fi
980     fi
981    
982 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
983     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
984 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
985 vivo 1.1 ${options} \
986     --user=mysql \
987     --skip-grant-tables \
988     --basedir=${ROOT}/usr \
989 robbat2 1.75 --datadir=${ROOT}/${MY_DATADIR} \
990 vivo 1.1 --skip-innodb \
991     --skip-bdb \
992     --skip-networking \
993     --max_allowed_packet=8M \
994     --net_buffer_length=16K \
995     --socket=${socket} \
996     --pid-file=${pidfile}"
997 chtekk 1.30 ${mysqld} &
998 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
999 chtekk 1.30 maxtry=$((${maxtry}-1))
1000 vivo 1.1 echo -n "."
1001     sleep 1
1002     done
1003    
1004 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
1005 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
1006 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1007 vivo 1.1 --socket=${socket} \
1008     -hlocalhost \
1009     -e "${sql}"
1010    
1011 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
1012 vivo 1.1
1013 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
1014 vivo 1.1 --socket=${socket} \
1015     -hlocalhost \
1016     -uroot \
1017     -p"${pwd1}" \
1018     mysql < "${sqltmp}"
1019    
1020 chtekk 1.30 # Stop the server and cleanup
1021 vivo 1.1 kill $(< "${pidfile}" )
1022 chtekk 1.30 rm -f "${sqltmp}"
1023     einfo "Stopping the server ..."
1024 vivo 1.1 wait %1
1025 chtekk 1.30 einfo "Done"
1026 vivo 1.1 }
1027    
1028 robbat2 1.119 # @FUNCTION: mysql_pkg_postrm
1029     # @DESCRIPTION:
1030     # Remove mysql symlinks.
1031 vivo 1.1 mysql_pkg_postrm() {
1032 chtekk 1.70 : # mysql_lib_symlinks "${D}"
1033 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20