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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.49 - (show annotations) (download)
Wed Dec 13 11:11:26 2006 UTC (8 years ago) by vivo
Branch: MAIN
Changes since 1.48: +3 -3 lines
fix built_with_use, fix bug #157983

1 # Copyright 1999-2006 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.48 2006/12/10 18:32:03 vivo Exp $
4
5 # Author: Francesco Riosa <vivo@gentoo.org>
6 # Maintainer: Luca Longinotti <chtekk@gentoo.org>
7
8 # Both MYSQL_VERSION_ID and MYSQL_PATCHSET_REV must be set in the ebuild too
9 # Note that MYSQL_VERSION_ID must be empty !!!
10
11 # MYSQL_VERSION_ID will be:
12 # major * 10e6 + minor * 10e4 + micro * 10e2 + gentoo revision number, all [0..99]
13 # This is an important part, because many of the choices the MySQL ebuild will do
14 # depend on this variable.
15 # In particular, the code below transforms a $PVR like "5.0.18-r3" in "5001803"
16
17 if [[ -z "${MYSQL_VERSION_ID}" ]] ; then
18 tpv=( ${PV//[-._]/ } ) ; tpv[3]="${PVR:${#PV}}" ; tpv[3]="${tpv[3]##*-r}"
19 for vatom in 0 1 2 3 ; do
20 # pad to length 2
21 tpv[${vatom}]="00${tpv[${vatom}]}"
22 MYSQL_VERSION_ID="${MYSQL_VERSION_ID}${tpv[${vatom}]:0-2}"
23 done
24 # strip leading "0" (otherwise it's considered an octal number by BASH)
25 MYSQL_VERSION_ID=${MYSQL_VERSION_ID##"0"}
26 fi
27
28 inherit eutils flag-o-matic gnuconfig autotools mysql_fx
29
30 # Be warned, *DEPEND are version-dependant
31 DEPEND="ssl? ( >=dev-libs/openssl-0.9.6d )
32 userland_GNU? ( sys-process/procps )
33 >=sys-apps/sed-4
34 >=sys-apps/texinfo-4.7-r1
35 >=sys-libs/readline-4.1
36 >=sys-libs/zlib-1.2.3"
37
38 # LEAVE THE SURROUNDING SPACES THERE
39 MYSQL_MUTUALLY_EXCLUSIVE=" !dev-db/mysql !dev-db/mysql-community "
40 DEPEND="${DEPEND} ${MYSQL_MUTUALLY_EXCLUSIVE/ !${CATEGORY}\/${PN} /}"
41
42 mysql_version_is_at_least "5.01.00.00" \
43 || DEPEND="${DEPEND} berkdb? ( sys-apps/ed )"
44
45 RDEPEND="${DEPEND} selinux? ( sec-policy/selinux-mysql )"
46
47 # dev-perl/DBD-mysql is needed by some scripts installed by MySQL
48 PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )"
49
50 # Shorten the path because the socket path length must be shorter than 107 chars
51 # and we will run a mysql server during test phase
52 S="${WORKDIR}/mysql" # BitKeeper ebuilds
53
54 # Define $MY_FIXED_PV for MySQL patchsets
55 MY_FIXED_PV="${PV/_alpha/}"
56 #MY_FIXED_PV="${MY_FIXED_PV/_beta/}"
57 #MY_FIXED_PV="${MY_FIXED_PV/_rc/}"
58
59 MY_P="${P/_/-}"
60 MY_P="${MY_P/-alpha/-bk-}" # BitKeeper ebuilds
61 MY_P="${MY_P/-community/}"
62
63 # Define correct SRC_URIs
64 SRC_URI="${BASE_URI}/${MY_P}${MYSQL_RERELEASE}.tar.gz"
65 if [[ -n "${MYSQL_PATCHSET_REV}" ]] ; then
66 MYSQL_PATCHSET_FILENAME="${PN}-patchset-${MY_FIXED_PV}-r${MYSQL_PATCHSET_REV}.tar.bz2"
67 # We add the Gentoo mirror here, as we only use primaryuri for the MySQL tarball
68 SRC_URI="${SRC_URI} http://g3nt8.org/patches/${MYSQL_PATCHSET_FILENAME}"
69 fi
70
71 DESCRIPTION="A fast, multi-threaded, multi-user SQL database server."
72 HOMEPAGE="http://www.mysql.com/"
73 SLOT="0"
74 LICENSE="GPL-2"
75 IUSE="big-tables debug embedded minimal perl selinux srvdir ssl static"
76 RESTRICT="confcache"
77
78 mysql_version_is_at_least "4.01.00.00" \
79 && IUSE="${IUSE} latin1"
80
81 mysql_version_is_at_least "4.01.03.00" \
82 && IUSE="${IUSE} cluster extraengine"
83
84 mysql_version_is_at_least "5.00.00.00" \
85 || IUSE="${IUSE} raid"
86
87 mysql_version_is_at_least "5.00.18.00" \
88 && IUSE="${IUSE} max-idx-128"
89
90 mysql_version_is_at_least "5.01.00.00" \
91 && IUSE="${IUSE} innodb"
92
93 mysql_version_is_at_least "5.01.00.00" \
94 || IUSE="${IUSE} berkdb"
95
96 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst \
97 pkg_postinst pkg_config pkg_postrm
98
99 #
100 # HELPER FUNCTIONS:
101 #
102
103 # void mysql_init_vars()
104 #
105 # Initialize global variables
106 # 2005-11-19 <vivo@gentoo.org>
107
108 mysql_init_vars() {
109 MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="/usr/share/mysql"}
110 MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql"}
111 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
112 MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql"}
113 MY_LOGDIR=${MY_LOGDIR="/var/log/mysql"}
114 MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql"}
115
116 if [[ -z "${DATADIR}" ]] ; then
117 DATADIR=""
118 if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then
119 DATADIR=`"my_print_defaults" mysqld 2>/dev/null \
120 | sed -ne '/datadir/s|^--datadir=||p' \
121 | tail -n1`
122 if [[ -z "${DATADIR}" ]] ; then
123 if useq "srvdir" ; then
124 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
125 else
126 DATADIR=`grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \
127 | sed -e 's/.*=\s*//'`
128 fi
129 fi
130 fi
131 if [[ -z "${DATADIR}" ]] ; then
132 if useq "srvdir" ; then
133 DATADIR="${ROOT}/srv/localhost/mysql/datadir"
134 else
135 DATADIR="${MY_LOCALSTATEDIR}"
136 fi
137 einfo "Using default DATADIR"
138 fi
139 elog "MySQL DATADIR is ${DATADIR}"
140
141 if [[ -z "${PREVIOUS_DATADIR}" ]] ; then
142 if [[ -e "${DATADIR}" ]] ; then
143 elog "Previous datadir found, it's YOUR job to change"
144 elog "ownership and take care of it"
145 PREVIOUS_DATADIR="yes"
146 else
147 PREVIOUS_DATADIR="no"
148 fi
149 export PREVIOUS_DATADIR
150 fi
151 fi
152
153 export MY_SHAREDSTATEDIR MY_SYSCONFDIR
154 export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
155 export MY_INCLUDEDIR
156 export DATADIR
157 }
158
159 configure_minimal() {
160 # These are things we exclude from a minimal build, please
161 # note that the server actually does get built and installed,
162 # but we then delete it before packaging.
163 local minimal_exclude_list="server embedded-server extra-tools innodb bench berkeley-db row-based-replication"
164
165 for i in ${minimal_exclude_list} ; do
166 myconf="${myconf} --without-${i}"
167 done
168 myconf="${myconf} --with-extra-charsets=none"
169 myconf="${myconf} --enable-local-infile"
170
171 if useq "static" ; then
172 myconf="${myconf} --with-client-ldflags=-all-static"
173 myconf="${myconf} --disable-shared"
174 else
175 myconf="${myconf} --enable-shared --enable-static"
176 fi
177 }
178
179 configure_common() {
180 myconf="${myconf} $(use_with big-tables)"
181 myconf="${myconf} --enable-local-infile"
182 myconf="${myconf} --with-extra-charsets=all"
183 myconf="${myconf} --with-mysqld-user=mysql"
184 myconf="${myconf} --with-server"
185 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
186 myconf="${myconf} --without-libwrap"
187
188 if useq "static" ; then
189 myconf="${myconf} --with-mysqld-ldflags=-all-static"
190 myconf="${myconf} --with-client-ldflags=-all-static"
191 myconf="${myconf} --disable-shared"
192 else
193 myconf="${myconf} --enable-shared --enable-static"
194 fi
195
196 if useq "debug" ; then
197 myconf="${myconf} --with-debug=full"
198 else
199 myconf="${myconf} --without-debug"
200 mysql_version_is_at_least "4.01.03.00" \
201 && useq "cluster" \
202 && myconf="${myconf} --without-ndb-debug"
203 fi
204
205 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
206 myconf="${myconf} --with-charset=utf8"
207 myconf="${myconf} --with-collation=utf8_general_ci"
208 else
209 myconf="${myconf} --with-charset=latin1"
210 myconf="${myconf} --with-collation=latin1_swedish_ci"
211 fi
212
213 if useq "embedded" ; then
214 myconf="${myconf} --with-embedded-privilege-control"
215 myconf="${myconf} --with-embedded-server"
216 else
217 myconf="${myconf} --without-embedded-privilege-control"
218 myconf="${myconf} --without-embedded-server"
219 fi
220
221 }
222
223 configure_40_41_50() {
224 myconf="${myconf} $(use_with perl bench)"
225 myconf="${myconf} --enable-assembler"
226 myconf="${myconf} --with-extra-tools"
227 myconf="${myconf} --with-innodb"
228 myconf="${myconf} --without-readline"
229 mysql_version_is_at_least "5.00.00.00" || myconf="${myconf} $(use_with raid)"
230
231 if useq "ssl" ; then
232 # --with-vio is not needed anymore, it's on by default and
233 # has been removed from configure
234 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio"
235 if mysql_version_is_at_least "5.00.06.00" ; then
236 # myconf="${myconf} --with-yassl"
237 myconf="${myconf} --with-openssl"
238 else
239 myconf="${myconf} --with-openssl"
240 fi
241 else
242 myconf="${myconf} --without-openssl"
243 fi
244
245 # The following fix is due to a bug with bdb on SPARC's. See:
246 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
247 # It comes down to non-64-bit safety problems.
248 if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
249 elog "Berkeley DB support was disabled due to incompatible arch"
250 myconf="${myconf} --without-berkeley-db"
251 else
252 if useq "berkdb" ; then
253 myconf="${myconf} --with-berkeley-db=./bdb"
254 else
255 myconf="${myconf} --without-berkeley-db"
256 fi
257 fi
258
259 if mysql_version_is_at_least "4.01.03.00" ; then
260 myconf="${myconf} --with-geometry"
261 myconf="${myconf} $(use_with cluster ndbcluster)"
262 fi
263
264 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then
265 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
266 myconf="${myconf} --with-archive-storage-engine"
267
268 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
269 myconf="${myconf} --with-csv-storage-engine"
270
271 # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
272 myconf="${myconf} --with-blackhole-storage-engine"
273
274 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
275 # http://dev.mysql.com/doc/mysql/en/federated-description.html
276 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
277 if mysql_version_is_at_least "5.00.03.00" ; then
278 elog "Before using the Federated storage engine, please be sure to read"
279 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
280 myconf="${myconf} --with-federated-storage-engine"
281 fi
282 fi
283
284 mysql_version_is_at_least "5.00.18.00" \
285 && useq "max-idx-128" \
286 && myconf="${myconf} --with-max-indexes=128"
287 }
288
289 configure_51() {
290 # TODO: !!!! readd --without-readline
291 # the failure depend upon config/ac-macros/readline.m4 checking into
292 # readline.h instead of history.h
293 myconf="${myconf} $(use_with ssl)"
294 myconf="${myconf} --enable-assembler"
295 myconf="${myconf} --with-geometry"
296 myconf="${myconf} --with-readline"
297 myconf="${myconf} --with-row-based-replication"
298 myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
299 myconf="${myconf} --without-pstack"
300 useq "max-idx-128" && myconf="${myconf} --with-max-indexes=128"
301
302 # 5.1 introduces a new way to manage storage engines (plugins)
303 # like configuration=none
304 local plugins="csv,myisam,myisammrg,heap"
305 if useq "extraengine" ; then
306 # like configuration=max-no-ndb, archive and example removed in 5.1.11
307 plugins="${plugins},archive,blackhole,example,federated,ftexample,partition"
308
309 elog "Before using the Federated storage engine, please be sure to read"
310 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
311 fi
312
313 if useq "innodb" ; then
314 plugins="${plugins},innobase"
315 fi
316
317 # like configuration=max-no-ndb
318 if useq "cluster" ; then
319 plugins="${plugins},ndbcluster"
320 myconf="${myconf} --with-ndb-binlog"
321 fi
322
323 myconf="${myconf} --with-plugins=${plugins}"
324 }
325
326 #
327 # EBUILD FUNCTIONS
328 #
329
330 mysql_pkg_setup() {
331 enewgroup mysql 60 || die "problem adding 'mysql' group"
332 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
333
334 if mysql_version_is_at_least "5.01.12.00" && useq "innodb" ; then
335 eerror "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
336 die "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
337 fi
338
339 # Check for USE flag problems in pkg_setup
340 if useq "static" && useq "ssl" ; then
341 eerror "MySQL does not support being built statically with SSL support enabled!"
342 die "MySQL does not support being built statically with SSL support enabled!"
343 fi
344
345 if ! mysql_version_is_at_least "5.00.00.00" \
346 && useq "raid" \
347 && useq "static" ; then
348 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
349 eerror "with RAID support enabled."
350 die "USE flags 'raid' and 'static' conflict!"
351 fi
352
353 if mysql_version_is_at_least "4.01.03.00" \
354 && ( useq "cluster" || useq "extraengine" ) \
355 && useq "minimal" ; then
356 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
357 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
358 fi
359
360 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
361 && useq "berkdb" \
362 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
363 }
364
365 mysql_src_unpack() {
366 # Initialize the proper variables first
367 mysql_init_vars
368
369 unpack ${A}
370
371 mv -f "${WORKDIR}/${MY_P}${MYSQL_RERELEASE}" "${S}"
372 cd "${S}"
373
374 # Apply the patches for this MySQL version
375 if [[ -d "${WORKDIR}/${MY_FIXED_PV}" ]] ; then
376 EPATCH_SOURCE="${WORKDIR}/${MY_FIXED_PV}" EPATCH_SUFFIX="patch" epatch
377 fi
378
379 # Additional checks, remove bundled zlib
380 rm -f "${S}/zlib/"*.[ch]
381 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
382 rm -f "scripts/mysqlbug"
383
384 # Make charsets install in the right place
385 find . -name 'Makefile.am' \
386 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
387
388 # Manage mysqlmanager
389 mysql_version_is_at_least "5.00.15.00" \
390 && sed -i -e "s!@GENTOO_EXT@!!g" \
391 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
392 "${S}/server-tools/instance-manager/Makefile.am"
393
394 if mysql_version_is_at_least "4.01.00.00" ; then
395 # Remove what needs to be recreated, so we're sure it's actually done
396 find . -name Makefile \
397 -o -name Makefile.in \
398 -o -name configure \
399 -exec rm -f {} \;
400 rm -f "ltmain.sh"
401 rm -f "scripts/mysqlbug"
402 fi
403
404 local rebuilddirlist bdbdir d
405
406 if mysql_version_is_at_least "5.01.12.00" ; then
407 # TODO: innodb is using cmake now?
408 rebuilddirlist="."
409 bdbdir=''
410 else
411 rebuilddirlist=". innobase"
412 bdbdir='bdb/dist'
413 fi
414
415 for d in ${rebuilddirlist} ; do
416 einfo "Reconfiguring dir '${d}'"
417 pushd "${d}" &>/dev/null
418 AT_GNUCONF_UPDATE="yes" eautoreconf
419 popd &>/dev/null
420 done
421
422 if mysql_check_version_range "4.01.00.00 to 5.00.99.99" \
423 && useq "berkdb" ; then
424 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f "ltmain.sh" "${bdbdir}/ltmain.sh"
425 pushd "${bdbdir}" \
426 && sh s_all \
427 || die "Failed bdb reconfigure" \
428 &>/dev/null
429 popd &>/dev/null
430 fi
431 }
432
433 mysql_src_compile() {
434 # Make sure the vars are correctly initialized
435 mysql_init_vars
436
437 # $myconf is modified by the configure_* functions
438 local myconf=""
439
440 if useq "minimal" ; then
441 configure_minimal
442 else
443 configure_common
444 if mysql_version_is_at_least "5.01.10.00" ; then
445 configure_51
446 else
447 configure_40_41_50
448 fi
449 fi
450
451 # Bug #114895, bug #110149
452 filter-flags "-O" "-O[01]"
453
454 # glib-2.3.2_pre fix, bug #16496
455 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
456
457 CXXFLAGS="${CXXFLAGS} -fno-exceptions -fno-strict-aliasing"
458 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
459 mysql_version_is_at_least "5.00.00.00" \
460 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
461 export CXXFLAGS
462
463 econf \
464 --libexecdir="/usr/sbin" \
465 --sysconfdir="${MY_SYSCONFDIR}" \
466 --localstatedir="${MY_LOCALSTATEDIR}" \
467 --sharedstatedir="${MY_SHAREDSTATEDIR}" \
468 --libdir="${MY_LIBDIR}" \
469 --includedir="${MY_INCLUDEDIR}" \
470 --with-low-memory \
471 --with-client-ldflags=-lstdc++ \
472 --enable-thread-safe-client \
473 --with-comment="Gentoo Linux ${PF}" \
474 --without-docs \
475 ${myconf} || die "econf failed"
476
477 # TODO: Move this before autoreconf !!!
478 find . -type f -name Makefile -print0 \
479 | xargs -0 -n100 sed -i \
480 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
481
482 emake || die "emake failed"
483 }
484
485 mysql_src_install() {
486 # Make sure the vars are correctly initialized
487 mysql_init_vars
488
489 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
490
491 insinto "${MY_INCLUDEDIR}"
492 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
493
494 # Convenience links
495 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
496 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
497 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
498
499 # Various junk (my-*.cnf moved elsewhere)
500 rm -Rf "${D}/usr/share/info"
501 for removeme in "mysql-log-rotate" mysql.server* \
502 binary-configure* my-*.cnf mi_test_all*
503 do
504 rm -f "${D}"/usr/share/mysql/${removeme}
505 done
506
507 # Clean up stuff for a minimal build
508 if useq "minimal" ; then
509 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
510 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}
511 rm -f "${D}/usr/sbin/mysqld"
512 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
513 fi
514
515 # Configuration stuff
516 if mysql_version_is_at_least "4.01.00.00" ; then
517 mysql_mycnf_version="4.1"
518 else
519 mysql_mycnf_version="4.0"
520 fi
521 insinto "${MY_SYSCONFDIR}"
522 doins "scripts/mysqlaccess.conf"
523 sed -e "s!@DATADIR@!${DATADIR}!g" \
524 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
525 > "${TMPDIR}/my.cnf.ok"
526 if mysql_version_is_at_least "4.01.00.00" && useq "latin1" ; then
527 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
528 fi
529 newins "${TMPDIR}/my.cnf.ok" my.cnf
530
531 insinto "/etc/conf.d"
532 newins "${FILESDIR}/mysql.conf.d" "mysql"
533 mysql_version_is_at_least "5.00.11.00" \
534 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
535
536 # Minimal builds don't have the MySQL server
537 if ! useq "minimal" ; then
538 exeinto "/etc/init.d"
539 newexe "${FILESDIR}/mysql.rc6" "mysql"
540 mysql_version_is_at_least "5.00.11.00" \
541 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
542
543 insinto "/etc/logrotate.d"
544 newins "${FILESDIR}/logrotate.mysql" "mysql"
545
546 # Empty directories ...
547 diropts "-m0750"
548 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
549 dodir "${DATADIR}"
550 keepdir "${DATADIR}"
551 chown -R mysql:mysql "${D}/${DATADIR}"
552 fi
553
554 diropts "-m0755"
555 for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
556 dodir "${folder}"
557 keepdir "${folder}"
558 chown -R mysql:mysql "${D}/${folder}"
559 done
560 fi
561
562 # Docs
563 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
564
565 # Minimal builds don't have the MySQL server
566 if ! useq "minimal" ; then
567 docinto "support-files"
568 for script in \
569 support-files/my-*.cnf \
570 support-files/magic \
571 support-files/ndb-config-2-node.ini
572 do
573 dodoc "${script}"
574 done
575
576 docinto "scripts"
577 for script in scripts/mysql* ; do
578 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
579 done
580 fi
581
582 ROOT="${D}" mysql_lib_symlinks
583 }
584
585 mysql_pkg_preinst() {
586 enewgroup mysql 60 || die "problem adding 'mysql' group"
587 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
588 }
589
590 mysql_pkg_postinst() {
591 # Make sure the vars are correctly initialized
592 mysql_init_vars
593
594 # Check FEATURES="collision-protect" before removing this
595 [[ -d "${ROOT}/var/log/mysql" ]] \
596 || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
597
598 # Secure the logfiles
599 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
600 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
601 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
602
603 if ! useq "minimal" ; then
604 # Your friendly public service announcement ...
605 einfo
606 elog "You might want to run:"
607 elog "\"emerge --config =${CATEGORY}/${PF}\""
608 elog "if this is a new install."
609 einfo
610 mysql_version_is_at_least "5.01.00.00" \
611 || elog "InnoDB is *not* optional as of MySQL-4.0.24, at the request of upstream."
612 fi
613 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
614 && useq "berkdb" \
615 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
616 }
617
618 mysql_pkg_config() {
619 # Make sure the vars are correctly initialized
620 mysql_init_vars
621
622 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
623
624 if built_with_use ${CATEGORY}/${PN} minimal ; then
625 die "Minimal builds do NOT include the MySQL server"
626 fi
627
628 local pwd1="a"
629 local pwd2="b"
630 local maxtry=5
631
632 if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
633 ewarn "You have already a MySQL database in place."
634 ewarn "(${ROOT}/${DATADIR}/*)"
635 ewarn "Please rename or delete it if you wish to replace it."
636 die "MySQL database already exists!"
637 fi
638
639 einfo "Creating the mysql database and setting proper"
640 einfo "permissions on it ..."
641
642 einfo "Insert a password for the mysql 'root' user"
643 ewarn "Avoid [\"'\\_%] characters in the password"
644 read -rsp " >" pwd1 ; echo
645
646 einfo "Retype the password"
647 read -rsp " >" pwd2 ; echo
648
649 if [[ "x$pwd1" != "x$pwd2" ]] ; then
650 die "Passwords are not the same"
651 fi
652
653 local options=""
654 local sqltmp="$(emktemp)"
655
656 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
657 [[ -r "${help_tables}" ]] \
658 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
659 || touch "${TMPDIR}/fill_help_tables.sql"
660 help_tables="${TMPDIR}/fill_help_tables.sql"
661
662 pushd "${TMPDIR}" &>/dev/null
663 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
664 popd &>/dev/null
665 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
666 || die "MySQL databases not installed"
667 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
668 chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
669
670 if mysql_version_is_at_least "4.01.03.00" ; then
671 options="--skip-ndbcluster"
672
673 # Filling timezones, see
674 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
675 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
676
677 if [[ -r "${help_tables}" ]] ; then
678 cat "${help_tables}" >> "${sqltmp}"
679 fi
680 fi
681
682 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
683 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
684 local mysqld="${ROOT}/usr/sbin/mysqld \
685 ${options} \
686 --user=mysql \
687 --skip-grant-tables \
688 --basedir=${ROOT}/usr \
689 --datadir=${ROOT}/${DATADIR} \
690 --skip-innodb \
691 --skip-bdb \
692 --skip-networking \
693 --max_allowed_packet=8M \
694 --net_buffer_length=16K \
695 --socket=${socket} \
696 --pid-file=${pidfile}"
697 ${mysqld} &
698 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
699 maxtry=$((${maxtry}-1))
700 echo -n "."
701 sleep 1
702 done
703
704 # Do this from memory, as we don't want clear text passwords in temp files
705 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
706 "${ROOT}/usr/bin/mysql" \
707 --socket=${socket} \
708 -hlocalhost \
709 -e "${sql}"
710
711 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
712
713 "${ROOT}/usr/bin/mysql" \
714 --socket=${socket} \
715 -hlocalhost \
716 -uroot \
717 -p"${pwd1}" \
718 mysql < "${sqltmp}"
719
720 # Stop the server and cleanup
721 kill $(< "${pidfile}" )
722 rm -f "${sqltmp}"
723 einfo "Stopping the server ..."
724 wait %1
725 einfo "Done"
726 }
727
728 mysql_pkg_postrm() {
729 : #mysql_lib_symlinks
730 }

  ViewVC Help
Powered by ViewVC 1.1.20