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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.50 - (show annotations) (download)
Sat Dec 16 12:34:29 2006 UTC (7 years, 6 months ago) by chtekk
Branch: MAIN
Changes since 1.49: +9 -1 lines
Fix charset support with minimal build.

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

  ViewVC Help
Powered by ViewVC 1.1.20