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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.46 - (show annotations) (download)
Sun Dec 10 01:11:47 2006 UTC (7 years, 4 months ago) by vivo
Branch: MAIN
Changes since 1.45: +10 -9 lines
added --enable-local-infile to minimal use flag

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.45 2006/12/09 22:35:13 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
172 configure_common() {
173 myconf="${myconf} $(use_with big-tables)"
174 myconf="${myconf} --enable-local-infile"
175 myconf="${myconf} --with-extra-charsets=all"
176 myconf="${myconf} --with-mysqld-user=mysql"
177 myconf="${myconf} --with-server"
178 myconf="${myconf} --with-unix-socket-path=/var/run/mysqld/mysqld.sock"
179 myconf="${myconf} --without-libwrap"
180
181 if useq "static" ; then
182 myconf="${myconf} --with-mysqld-ldflags=-all-static"
183 myconf="${myconf} --with-client-ldflags=-all-static"
184 myconf="${myconf} --disable-shared"
185 else
186 myconf="${myconf} --enable-shared --enable-static"
187 fi
188
189 if useq "debug" ; then
190 myconf="${myconf} --with-debug=full"
191 else
192 myconf="${myconf} --without-debug"
193 mysql_version_is_at_least "4.01.03.00" \
194 && useq "cluster" \
195 && myconf="${myconf} --without-ndb-debug"
196 fi
197
198 if mysql_version_is_at_least "4.01.00.00" && ! useq "latin1" ; then
199 myconf="${myconf} --with-charset=utf8"
200 myconf="${myconf} --with-collation=utf8_general_ci"
201 else
202 myconf="${myconf} --with-charset=latin1"
203 myconf="${myconf} --with-collation=latin1_swedish_ci"
204 fi
205
206 if useq "embedded" ; then
207 myconf="${myconf} --with-embedded-privilege-control"
208 myconf="${myconf} --with-embedded-server"
209 else
210 myconf="${myconf} --without-embedded-privilege-control"
211 myconf="${myconf} --without-embedded-server"
212 fi
213
214 }
215
216 configure_40_41_50() {
217 myconf="${myconf} $(use_with perl bench)"
218 myconf="${myconf} --enable-assembler"
219 myconf="${myconf} --with-extra-tools"
220 myconf="${myconf} --with-innodb"
221 myconf="${myconf} --without-readline"
222 mysql_version_is_at_least "5.00.00.00" || myconf="${myconf} $(use_with raid)"
223
224 if useq "ssl" ; then
225 # --with-vio is not needed anymore, it's on by default and
226 # has been removed from configure
227 mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio"
228 if mysql_version_is_at_least "5.00.06.00" ; then
229 # myconf="${myconf} --with-yassl"
230 myconf="${myconf} --with-openssl"
231 else
232 myconf="${myconf} --with-openssl"
233 fi
234 else
235 myconf="${myconf} --without-openssl"
236 fi
237
238 # The following fix is due to a bug with bdb on SPARC's. See:
239 # http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
240 # It comes down to non-64-bit safety problems.
241 if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" || useq "amd64" ; then
242 elog "Berkeley DB support was disabled due to incompatible arch"
243 myconf="${myconf} --without-berkeley-db"
244 else
245 if useq "berkdb" ; then
246 myconf="${myconf} --with-berkeley-db=./bdb"
247 else
248 myconf="${myconf} --without-berkeley-db"
249 fi
250 fi
251
252 if mysql_version_is_at_least "4.01.03.00" ; then
253 myconf="${myconf} --with-geometry"
254 myconf="${myconf} $(use_with cluster ndbcluster)"
255 fi
256
257 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine" ; then
258 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
259 myconf="${myconf} --with-archive-storage-engine"
260
261 # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
262 myconf="${myconf} --with-csv-storage-engine"
263
264 # http://dev.mysql.com/doc/mysql/en/blackhole-storage-engine.html
265 myconf="${myconf} --with-blackhole-storage-engine"
266
267 # http://dev.mysql.com/doc/mysql/en/federated-storage-engine.html
268 # http://dev.mysql.com/doc/mysql/en/federated-description.html
269 # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
270 if mysql_version_is_at_least "5.00.03.00" ; then
271 elog "Before using the Federated storage engine, please be sure to read"
272 elog "http://dev.mysql.com/doc/mysql/en/federated-limitations.html"
273 myconf="${myconf} --with-federated-storage-engine"
274 fi
275 fi
276
277 mysql_version_is_at_least "5.00.18.00" \
278 && useq "max-idx-128" \
279 && myconf="${myconf} --with-max-indexes=128"
280 }
281
282 configure_51() {
283 # TODO: !!!! readd --without-readline
284 # the failure depend upon config/ac-macros/readline.m4 checking into
285 # readline.h instead of history.h
286 myconf="${myconf} $(use_with ssl)"
287 myconf="${myconf} --enable-assembler"
288 myconf="${myconf} --with-geometry"
289 myconf="${myconf} --with-readline"
290 myconf="${myconf} --with-row-based-replication"
291 myconf="${myconf} --with-zlib=/usr/$(get_libdir)"
292 myconf="${myconf} --without-pstack"
293 useq "max-idx-128" && myconf="${myconf} --with-max-indexes=128"
294
295 # 5.1 introduces a new way to manage storage engines (plugins)
296 # like configuration=none
297 local plugins="csv,myisam,myisammrg,heap"
298 if useq "extraengine" ; then
299 # like configuration=max-no-ndb, archive and example removed in 5.1.11
300 plugins="${plugins},archive,blackhole,example,federated,ftexample,partition"
301
302 elog "Before using the Federated storage engine, please be sure to read"
303 elog "http://dev.mysql.com/doc/refman/5.1/en/federated-limitations.html"
304 fi
305
306 if useq "innodb" ; then
307 plugins="${plugins},innobase"
308 fi
309
310 # like configuration=max-no-ndb
311 if useq "cluster" ; then
312 plugins="${plugins},ndbcluster"
313 myconf="${myconf} --with-ndb-binlog"
314 fi
315
316 myconf="${myconf} --with-plugins=${plugins}"
317 }
318
319 #
320 # EBUILD FUNCTIONS
321 #
322
323 mysql_pkg_setup() {
324 enewgroup mysql 60 || die "problem adding 'mysql' group"
325 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
326
327 if mysql_version_is_at_least "5.01.12.00" && useq "innodb" ; then
328 eerror "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
329 die "InnoDB now uses cmake to build, this is a TODO item, will be fixed shortly!"
330 fi
331
332 # Check for USE flag problems in pkg_setup
333 if useq "static" && useq "ssl" ; then
334 eerror "MySQL does not support being built statically with SSL support enabled!"
335 die "MySQL does not support being built statically with SSL support enabled!"
336 fi
337
338 if ! mysql_version_is_at_least "5.00.00.00" \
339 && useq "raid" \
340 && useq "static" ; then
341 eerror "USE flags 'raid' and 'static' conflict, you cannot build MySQL statically"
342 eerror "with RAID support enabled."
343 die "USE flags 'raid' and 'static' conflict!"
344 fi
345
346 if mysql_version_is_at_least "4.01.03.00" \
347 && ( useq "cluster" || useq "extraengine" ) \
348 && useq "minimal" ; then
349 eerror "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
350 die "USE flags 'cluster' and 'extraengine' conflict with 'minimal' USE flag!"
351 fi
352
353 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
354 && useq "berkdb" \
355 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
356 }
357
358 mysql_src_unpack() {
359 # Initialize the proper variables first
360 mysql_init_vars
361
362 unpack ${A}
363
364 mv -f "${WORKDIR}/${MY_P}${MYSQL_RERELEASE}" "${S}"
365 cd "${S}"
366
367 # Apply the patches for this MySQL version
368 if [[ -d "${WORKDIR}/${MY_FIXED_PV}" ]] ; then
369 EPATCH_SOURCE="${WORKDIR}/${MY_FIXED_PV}" EPATCH_SUFFIX="patch" epatch
370 fi
371
372 # Additional checks, remove bundled zlib
373 rm -f "${S}/zlib/"*.[ch]
374 sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
375 rm -f "scripts/mysqlbug"
376
377 # Make charsets install in the right place
378 find . -name 'Makefile.am' \
379 -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
380
381 # Manage mysqlmanager
382 mysql_version_is_at_least "5.00.15.00" \
383 && sed -i -e "s!@GENTOO_EXT@!!g" \
384 -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
385 "${S}/server-tools/instance-manager/Makefile.am"
386
387 if mysql_version_is_at_least "4.01.00.00" ; then
388 # Remove what needs to be recreated, so we're sure it's actually done
389 find . -name Makefile \
390 -o -name Makefile.in \
391 -o -name configure \
392 -exec rm -f {} \;
393 rm -f "ltmain.sh"
394 rm -f "scripts/mysqlbug"
395 fi
396
397 local rebuilddirlist bdbdir d
398
399 if mysql_version_is_at_least "5.01.12.00" ; then
400 # TODO: innodb is using cmake now?
401 rebuilddirlist="."
402 bdbdir=''
403 else
404 rebuilddirlist=". innobase"
405 bdbdir='bdb/dist'
406 fi
407
408 for d in ${rebuilddirlist} ; do
409 einfo "Reconfiguring dir '${d}'"
410 pushd "${d}" &>/dev/null
411 AT_GNUCONF_UPDATE="yes" eautoreconf
412 popd &>/dev/null
413 done
414
415 if mysql_check_version_range "4.01.00.00 to 5.00.99.99" \
416 && useq "berkdb" ; then
417 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f "ltmain.sh" "${bdbdir}/ltmain.sh"
418 pushd "${bdbdir}" \
419 && sh s_all \
420 || die "Failed bdb reconfigure" \
421 &>/dev/null
422 popd &>/dev/null
423 fi
424 }
425
426 mysql_src_compile() {
427 # Make sure the vars are correctly initialized
428 mysql_init_vars
429
430 # $myconf is modified by the configure_* functions
431 local myconf=""
432
433 if useq "minimal" ; then
434 configure_minimal
435 else
436 configure_common
437 if mysql_version_is_at_least "5.01.10.00" ; then
438 configure_51
439 else
440 configure_40_41_50
441 fi
442 fi
443
444 # Bug #114895, bug #110149
445 filter-flags "-O" "-O[01]"
446
447 # glib-2.3.2_pre fix, bug #16496
448 append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
449
450 append-flags "-fno-exceptions -fno-strict-aliasing"
451 CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-rtti"
452 mysql_version_is_at_least "5.00.00.00" \
453 && CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
454 export CXXFLAGS
455
456 econf \
457 --libexecdir="/usr/sbin" \
458 --sysconfdir="${MY_SYSCONFDIR}" \
459 --localstatedir="${MY_LOCALSTATEDIR}" \
460 --sharedstatedir="${MY_SHAREDSTATEDIR}" \
461 --libdir="${MY_LIBDIR}" \
462 --includedir="${MY_INCLUDEDIR}" \
463 --with-low-memory \
464 --with-client-ldflags=-lstdc++ \
465 --enable-thread-safe-client \
466 --with-comment="Gentoo Linux ${PF}" \
467 --without-docs \
468 ${myconf} || die "econf failed"
469
470 # TODO: Move this before autoreconf !!!
471 find . -type f -name Makefile -print0 \
472 | xargs -0 -n100 sed -i \
473 -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
474
475 emake || die "emake failed"
476 }
477
478 mysql_src_install() {
479 # Make sure the vars are correctly initialized
480 mysql_init_vars
481
482 emake install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "emake install failed"
483
484 insinto "${MY_INCLUDEDIR}"
485 doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
486
487 # Convenience links
488 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
489 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
490 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
491
492 # Various junk (my-*.cnf moved elsewhere)
493 rm -Rf "${D}/usr/share/info"
494 for removeme in "mysql-log-rotate" mysql.server* \
495 binary-configure* my-*.cnf mi_test_all*
496 do
497 rm -f "${D}"/usr/share/mysql/${removeme}
498 done
499
500 # Clean up stuff for a minimal build
501 if useq "minimal" ; then
502 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
503 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}
504 rm -f "${D}/usr/sbin/mysqld"
505 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
506 fi
507
508 # Configuration stuff
509 if mysql_version_is_at_least "4.01.00.00" ; then
510 mysql_mycnf_version="4.1"
511 else
512 mysql_mycnf_version="4.0"
513 fi
514 insinto "${MY_SYSCONFDIR}"
515 doins "scripts/mysqlaccess.conf"
516 sed -e "s!@DATADIR@!${DATADIR}!g" \
517 "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
518 > "${TMPDIR}/my.cnf.ok"
519 if mysql_version_is_at_least "4.01.00.00" && useq "latin1" ; then
520 sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
521 fi
522 newins "${TMPDIR}/my.cnf.ok" my.cnf
523
524 insinto "/etc/conf.d"
525 newins "${FILESDIR}/mysql.conf.d" "mysql"
526 mysql_version_is_at_least "5.00.11.00" \
527 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
528
529 # Minimal builds don't have the MySQL server
530 if ! useq "minimal" ; then
531 exeinto "/etc/init.d"
532 newexe "${FILESDIR}/mysql.rc6" "mysql"
533 mysql_version_is_at_least "5.00.11.00" \
534 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
535
536 insinto "/etc/logrotate.d"
537 newins "${FILESDIR}/logrotate.mysql" "mysql"
538
539 # Empty directories ...
540 diropts "-m0750"
541 if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
542 dodir "${DATADIR}"
543 keepdir "${DATADIR}"
544 chown -R mysql:mysql "${D}/${DATADIR}"
545 fi
546
547 diropts "-m0755"
548 for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
549 dodir "${folder}"
550 keepdir "${folder}"
551 chown -R mysql:mysql "${D}/${folder}"
552 done
553 fi
554
555 # Docs
556 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
557
558 # Minimal builds don't have the MySQL server
559 if ! useq "minimal" ; then
560 docinto "support-files"
561 for script in \
562 support-files/my-*.cnf \
563 support-files/magic \
564 support-files/ndb-config-2-node.ini
565 do
566 dodoc "${script}"
567 done
568
569 docinto "scripts"
570 for script in scripts/mysql* ; do
571 [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
572 done
573 fi
574
575 ROOT="${D}" mysql_lib_symlinks
576 }
577
578 mysql_pkg_preinst() {
579 enewgroup mysql 60 || die "problem adding 'mysql' group"
580 enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
581 }
582
583 mysql_pkg_postinst() {
584 # Make sure the vars are correctly initialized
585 mysql_init_vars
586
587 # Check FEATURES="collision-protect" before removing this
588 [[ -d "${ROOT}/var/log/mysql" ]] \
589 || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
590
591 # Secure the logfiles
592 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
593 chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
594 chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
595
596 if ! useq "minimal" ; then
597 # Your friendly public service announcement ...
598 einfo
599 elog "You might want to run:"
600 elog "\"emerge --config =${CATEGORY}/${PF}\""
601 elog "if this is a new install."
602 einfo
603 mysql_version_is_at_least "5.01.00.00" \
604 || elog "InnoDB is *not* optional as of MySQL-4.0.24, at the request of upstream."
605 fi
606 mysql_check_version_range "4.00.00.00 to 5.00.99.99" \
607 && useq "berkdb" \
608 && elog "Berkeley DB support is deprecated and will be removed in future versions!"
609 }
610
611 mysql_pkg_config() {
612 # Make sure the vars are correctly initialized
613 mysql_init_vars
614
615 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
616
617 if built_with_use dev-db/mysql minimal ; then
618 die "Minimal builds do NOT include the MySQL server"
619 fi
620
621 local pwd1="a"
622 local pwd2="b"
623 local maxtry=5
624
625 if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
626 ewarn "You have already a MySQL database in place."
627 ewarn "(${ROOT}/${DATADIR}/*)"
628 ewarn "Please rename or delete it if you wish to replace it."
629 die "MySQL database already exists!"
630 fi
631
632 einfo "Creating the mysql database and setting proper"
633 einfo "permissions on it ..."
634
635 einfo "Insert a password for the mysql 'root' user"
636 ewarn "Avoid [\"'\\_%] characters in the password"
637 read -rsp " >" pwd1 ; echo
638
639 einfo "Retype the password"
640 read -rsp " >" pwd2 ; echo
641
642 if [[ "x$pwd1" != "x$pwd2" ]] ; then
643 die "Passwords are not the same"
644 fi
645
646 local options=""
647 local sqltmp="$(emktemp)"
648
649 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
650 [[ -r "${help_tables}" ]] \
651 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
652 || touch "${TMPDIR}/fill_help_tables.sql"
653 help_tables="${TMPDIR}/fill_help_tables.sql"
654
655 pushd "${TMPDIR}" &>/dev/null
656 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
657 popd &>/dev/null
658 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
659 || die "MySQL databases not installed"
660 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
661 chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
662
663 if mysql_version_is_at_least "4.01.03.00" ; then
664 options="--skip-ndbcluster"
665
666 # Filling timezones, see
667 # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
668 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
669
670 if [[ -r "${help_tables}" ]] ; then
671 cat "${help_tables}" >> "${sqltmp}"
672 fi
673 fi
674
675 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
676 local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
677 local mysqld="${ROOT}/usr/sbin/mysqld \
678 ${options} \
679 --user=mysql \
680 --skip-grant-tables \
681 --basedir=${ROOT}/usr \
682 --datadir=${ROOT}/${DATADIR} \
683 --skip-innodb \
684 --skip-bdb \
685 --skip-networking \
686 --max_allowed_packet=8M \
687 --net_buffer_length=16K \
688 --socket=${socket} \
689 --pid-file=${pidfile}"
690 ${mysqld} &
691 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
692 maxtry=$((${maxtry}-1))
693 echo -n "."
694 sleep 1
695 done
696
697 # Do this from memory, as we don't want clear text passwords in temp files
698 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
699 "${ROOT}/usr/bin/mysql" \
700 --socket=${socket} \
701 -hlocalhost \
702 -e "${sql}"
703
704 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
705
706 "${ROOT}/usr/bin/mysql" \
707 --socket=${socket} \
708 -hlocalhost \
709 -uroot \
710 -p"${pwd1}" \
711 mysql < "${sqltmp}"
712
713 # Stop the server and cleanup
714 kill $(< "${pidfile}" )
715 rm -f "${sqltmp}"
716 einfo "Stopping the server ..."
717 wait %1
718 einfo "Done"
719 }
720
721 mysql_pkg_postrm() {
722 mysql_lib_symlinks
723 }

  ViewVC Help
Powered by ViewVC 1.1.20