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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (hide annotations) (download)
Tue Jan 31 00:55:36 2006 UTC (8 years, 7 months ago) by vivo
Branch: MAIN
Changes since 1.10: +5 -9 lines
see dev-db/mysql ChangeLog

1 vivo 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 vivo 1.11 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.10 2006/01/24 23:56:01 vivo Exp $
4 vivo 1.1
5     # Author: Francesco Riosa <vivo at gentoo.org>
6     # Maintainer: Francesco Riosa <vivo at gentoo.org>
7    
8 vivo 1.10 inherit eutils flag-o-matic gnuconfig mysql_fx
9 vivo 1.1
10     #major, minor only in the slot
11     SLOT=$(( ${MYSQL_VERSION_ID} / 10000 ))
12    
13     # shorten the path because the socket path length must be shorter than 107 chars
14     # and we will run a mysql server during test phase
15     S="${WORKDIR}/${PN}"
16    
17     DESCRIPTION="A fast, multi-threaded, multi-user SQL database server"
18     HOMEPAGE="http://www.mysql.com/"
19 vivo 1.7 NEWP="${P/_/-}"
20 vivo 1.1 SRC_URI="mirror://mysql/Downloads/MySQL-${PV%.*}/${NEWP}.tar.gz
21 vivo 1.7 mirror://gentoo/mysql-extras-20060115.tar.bz2"
22 vivo 1.1 LICENSE="GPL-2"
23 vivo 1.8 IUSE="big-tables berkdb debug minimal perl selinux srvdir ssl static"
24     RESTRICT="primaryuri confcache"
25 vivo 1.4 DEPEND="app-admin/eselect-mysql"
26 vivo 1.1
27     mysql_version_is_at_least "4.01.03.00" \
28 vivo 1.8 && IUSE="${IUSE} cluster extraengine"
29 vivo 1.1
30     mysql_version_is_at_least "5.00.18.00" \
31     && IUSE="${IUSE} max-idx-128"
32    
33     mysql_version_is_at_least "5.01.00.00" \
34     && IUSE="${IUSE} innodb"
35    
36 vivo 1.2 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_config pkg_postrm
37 vivo 1.1
38 vivo 1.8 # void mysql_init_vars()
39     #
40     # initialize global variables
41     # 2005-11-19 <vivo at gentoo.org>
42     mysql_init_vars() {
43    
44     if [[ ${SLOT} -eq 0 ]] ; then
45     MY_SUFFIX=""
46     else
47     MY_SUFFIX=${MY_SUFFIX:-"-${SLOT}"}
48     fi
49     MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR:-"/usr/share/mysql${MY_SUFFIX}"}
50     MY_SYSCONFDIR=${MY_SYSCONFDIR="/etc/mysql${MY_SUFFIX}"}
51     MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql${MY_SUFFIX}"}
52     MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="/var/lib/mysql${MY_SUFFIX}"}
53     MY_LOGDIR=${MY_LOGDIR="/var/log/mysql${MY_SUFFIX}"}
54     MY_INCLUDEDIR=${MY_INCLUDEDIR="/usr/include/mysql${MY_SUFFIX}"}
55    
56     if [ -z "${DATADIR}" ]; then
57     DATADIR=""
58     if [ -f "${SYSCONFDIR}/my.cnf" ] ; then
59     DATADIR=`"my_print_defaults${MY_SUFFIX}" mysqld 2>/dev/null | sed -ne '/datadir/s|^--datadir=||p' | tail -n1`
60     if [ -z "${DATADIR}" ]; then
61     if useq "srvdir" ; then
62     DATADIR="/srv/localhost/mysql/datadir"
63     else
64     DATADIR=`grep ^datadir "${SYSCONFDIR}/my.cnf" | sed -e 's/.*=\s*//'`
65     fi
66     fi
67     fi
68     if [ -z "${DATADIR}" ]; then
69     DATADIR="${MY_LOCALSTATEDIR}"
70     einfo "Using default DATADIR"
71     fi
72     einfo "MySQL DATADIR is ${DATADIR}"
73    
74     if [ -z "${PREVIOUS_DATADIR}" ] ; then
75     if [ -a "${DATADIR}" ] ; then
76     ewarn "Previous datadir found, it's YOUR job to change"
77     ewarn "ownership and have care of it"
78     PREVIOUS_DATADIR="yes"
79     export PREVIOUS_DATADIR
80     else
81     PREVIOUS_DATADIR="no"
82     export PREVIOUS_DATADIR
83     fi
84     fi
85     fi
86    
87     export MY_SUFFIX MY_SHAREDSTATEDIR MY_SYSCONFDIR
88     export MY_LIBDIR MY_LOCALSTATEDIR MY_LOGDIR
89     export MY_INCLUDEDIR
90     export DATADIR
91     }
92    
93 vivo 1.1 mysql_pkg_setup() {
94    
95     enewgroup mysql 60 || die "problem adding group mysql"
96     enewuser mysql 60 -1 /dev/null mysql \
97     || die "problem adding user mysql"
98     }
99    
100     mysql_src_unpack() {
101    
102     mysql_init_vars
103    
104     if useq static && useq ssl; then
105     local msg="MySQL does not support building statically with SSL support"
106     eerror "${msg}"
107     die "${msg}"
108     fi
109    
110     if mysql_version_is_at_least "4.01.03.00" \
111     && useq cluster \
112     || useq extraengine \
113     && useq minimal ; then
114     die "USEs cluster, extraengine conflicts with \"minimal\""
115     fi
116    
117     unpack ${A} || die
118    
119 vivo 1.4 mv -f "${WORKDIR}/${NEWP}" "${S}"
120 vivo 1.1 cd "${S}"
121    
122     EPATCH_SUFFIX="patch"
123     mkdir -p "${EPATCH_SOURCE}" || die "unable to create epatch directory"
124     mysql_mv_patches
125     epatch || die "failed to apply all patches"
126    
127     # additional check, remove bundled zlib
128     rm -f "${S}/zlib/"*.[ch]
129     sed -i -e "s/zlib\/Makefile dnl/dnl zlib\/Makefile/" "${S}/configure.in"
130     rm -f scripts/mysqlbug
131    
132     # Multilib issue with zlib detection
133     mysql_version_is_at_least "5.00.15.00" \
134     && sed -i -e "s:zlib_dir/lib:zlib_dir/$(get_libdir):g" \
135     "${S}/config/ac-macros/zlib.m4"
136    
137     # Make charsets install in the right place
138     find . -name 'Makefile.am' \
139     -exec sed --in-place -e 's!$(pkgdatadir)!'${MY_SHAREDSTATEDIR}'!g' {} \;
140    
141     # Manage mysqlmanager
142     mysql_version_is_at_least "5.00.15.00" \
143     && sed -i -e "s!@GENTOO_EXT@!${MY_SUFFIX}!g" \
144     -e "s!@GENTOO_SOCK_PATH@!var/run/mysqld!g" \
145     "${S}/server-tools/instance-manager/Makefile.am"
146    
147     # remove what need to be recreated, so we are sure it's actually done
148     find . -name Makefile -o -name Makefile.in -o -name configure -exec rm -f {} \;
149     rm ltmain.sh
150    
151     local rebuilddirlist d buildstep bdbdir
152    
153     if mysql_version_is_at_least "5.01.00.00" ; then
154     rebuilddirlist=". storage/innobase"
155     bdbdir='storage/bdb/dist'
156     else
157     rebuilddirlist=". innobase"
158     bdbdir='bdb/dist'
159     fi
160    
161     for d in ${rebuilddirlist}; do
162     einfo "reconfiguring dir \"${d}\""
163 vivo 1.4 pushd "${d}" &>/dev/null
164 vivo 1.1 for buildstep in \
165     'libtoolize --copy --force' \
166     'aclocal --force' \
167     'autoheader --force -Wnone' \
168     'autoconf --force -Wnone' \
169     'automake --force --force-missing -Wnone' \
170     'gnuconfig_update'
171     do
172     einfo "performing ${buildstep}"
173     ${buildstep} || die "failed ${buildstep/ */} dir \"${d}\""
174     done
175 vivo 1.4 popd &>/dev/null
176 vivo 1.1 done
177    
178 vivo 1.7 if useq berkdb && ! mysql_check_version_range "5.01.00.00 to 5.01.06.99"
179 vivo 1.6 then
180 vivo 1.4 [[ -w "${bdbdir}/ltmain.sh" ]] && cp -f ltmain.sh "${bdbdir}/ltmain.sh"
181     pushd "${bdbdir}" && sh s_all || die "failed bdb reconfigure" &>/dev/null
182     popd &>/dev/null
183 vivo 1.1 fi
184    
185     }
186    
187 vivo 1.6 mysql_src_compile() {
188 vivo 1.1
189     mysql_init_vars
190     local myconf
191    
192     if useq static ; then
193     myconf="${myconf} --with-mysqld-ldflags=-all-static"
194     myconf="${myconf} --with-client-ldflags=-all-static"
195     myconf="${myconf} --disable-shared"
196     else
197     myconf="${myconf} --enable-shared --enable-static"
198     fi
199    
200     #myconf="${myconf} `use_with tcpd libwrap`"
201     myconf="${myconf} --without-libwrap"
202    
203     if useq ssl ; then
204     # --with-vio is not needed anymore, it's on by default and
205     # has been removed from configure
206     mysql_version_is_at_least "5.00.04.00" || myconf="${myconf} --with-vio"
207     if mysql_version_is_at_least "5.00.06.00" ; then
208     # yassl-0.96 is young break with gcc-4.0 || amd64
209     #myconf="${myconf} --with-yassl"
210     myconf="${myconf} --with-openssl"
211     else
212     myconf="${myconf} --with-openssl"
213     fi
214     else
215     myconf="${myconf} --without-openssl"
216     fi
217    
218     if useq debug; then
219     myconf="${myconf} --with-debug=full"
220     else
221     myconf="${myconf} --without-debug"
222     mysql_version_is_at_least "4.01.03.00" && useq cluster && myconf="${myconf} --without-ndb-debug"
223     fi
224    
225     # benchmarking stuff needs perl
226     # and shouldn't be bothered with on minimal builds
227     if useq perl && ! useq minimal; then
228     myconf="${myconf} --with-bench"
229     else
230     myconf="${myconf} --without-bench"
231     fi
232    
233     # these are things we exclude from a minimal build
234     # note that the server actually does get built and installed
235     # but we then delete it before packaging.
236     local minimal_exclude_list="server embedded-server extra-tools innodb"
237     if ! useq minimal; then
238     for i in ${minimal_exclude_list}; do
239     myconf="${myconf} --with-${i}"
240     done
241    
242     if useq static ; then
243     myconf="${myconf} --without-raid"
244     ewarn "disabling raid support, has problem with static"
245     else
246     myconf="${myconf} --with-raid"
247     fi
248    
249     if ! mysql_version_is_at_least "5.00.00.00" ; then
250 vivo 1.8 if mysql_version_is_at_least "4.01.00.00" ; then
251 vivo 1.1 myconf="${myconf} --with-charset=utf8"
252     myconf="${myconf} --with-collation=utf8_general_ci"
253     else
254     myconf="${myconf} --with-charset=latin1"
255     myconf="${myconf} --with-collation=latin1_swedish_ci"
256     fi
257     fi
258    
259     # optional again from 2005-12-05
260     if mysql_version_is_at_least "5.01.00.00" ; then
261     myconf="${myconf} $(use_with innodb)"
262     else
263     myconf="${myconf} --with-innodb"
264     fi
265    
266     # lots of chars
267     myconf="${myconf} --with-extra-charsets=all"
268    
269     #The following fix is due to a bug with bdb on sparc's. See:
270     #http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
271     # it comes down to non-64-bit safety problems
272     if useq sparc || useq alpha || useq hppa || useq mips || useq amd64 \
273     || mysql_check_version_range "5.01.00.00 to 5.01.06.99"
274     then
275     ewarn "bdb berkeley-db disabled due to arch or version"
276     myconf="${myconf} --without-berkeley-db"
277     else
278     useq berkdb \
279     && myconf="${myconf} --with-berkeley-db=./bdb" \
280     || myconf="${myconf} --without-berkeley-db"
281     fi
282    
283     if mysql_version_is_at_least "4.01.03.00" ; then
284     #myconf="${myconf} $(use_with geometry)"
285     myconf="${myconf} --with-geometry"
286     myconf="${myconf} $(use_with cluster ndbcluster)"
287     fi
288    
289     mysql_version_is_at_least "4.01.11.00" && myconf="${myconf} `use_with big-tables`"
290     else
291     for i in ${minimal_exclude_list}; do
292     myconf="${myconf} --without-${i}"
293     done
294     myconf="${myconf} --without-berkeley-db"
295     myconf="${myconf} --with-extra-charsets=none"
296     fi
297    
298     if mysql_version_is_at_least "4.01.03.00" && useq extraengine; then
299     # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
300     myconf="${myconf} --with-archive-storage-engine"
301     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
302    
303     mysql_version_is_at_least "4.01.04.00" \
304     && myconf="${myconf} --with-csv-storage-engine"
305    
306     mysql_version_is_at_least "4.01.11.00" \
307     && myconf="${myconf} --with-blackhole-storage-engine"
308    
309     # http://dev.mysql.com/doc/mysql/en/federated-description.html
310     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
311     if mysql_version_is_at_least "5.00.03.00" ; then
312     einfo "before to use federated engine be sure to read"
313     einfo "http://dev.mysql.com/doc/refman/5.0/en/federated-limitations.html"
314     myconf="${myconf} --with-federated-storage-engine"
315    
316     # http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html
317     if mysql_version_is_at_least "5.01.00.00" ; then
318     myconf="${myconf} --with-partition"
319     fi
320     fi
321    
322 vivo 1.8 fi
323    
324     mysql_version_is_at_least "5.00.18.00" \
325     && useq "max-idx-128" \
326     && myconf="${myconf} --with-max-indexes=128"
327    
328     if mysql_version_is_at_least "5.01.05.00" ; then
329     myconf="${myconf} --with-row-based-replication"
330 vivo 1.1 fi
331    
332     #Bug #114895,Bug #110149
333     filter-flags "-O" "-O[01]"
334     #glibc-2.3.2_pre fix; bug #16496
335     append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
336    
337     #the compiler flags are as per their "official" spec ;)
338     #CFLAGS="${CFLAGS/-O?/} -O3" \
339     export CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-exceptions -fno-rtti"
340     mysql_version_is_at_least "5.00.00.00" \
341     && export CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
342    
343     econf \
344     --program-suffix="${MY_SUFFIX}" \
345     --libexecdir="/usr/sbin" \
346     --sysconfdir="${MY_SYSCONFDIR}" \
347     --localstatedir="${MY_LOCALSTATEDIR}" \
348     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
349     --libdir="${MY_LIBDIR}" \
350     --includedir="${MY_INCLUDEDIR}" \
351     --with-low-memory \
352     --enable-assembler \
353     --enable-local-infile \
354     --with-mysqld-user=mysql \
355     --with-client-ldflags=-lstdc++ \
356     --enable-thread-safe-client \
357     --with-comment="Gentoo Linux ${PF}" \
358     --with-unix-socket-path="/var/run/mysqld/mysqld${MY_SUFFIX}.sock" \
359     --with-zlib-dir=/usr \
360     --with-lib-ccflags="-fPIC" \
361     --without-readline \
362     --without-docs \
363     ${myconf} || die "bad ./configure"
364    
365     # TODO Move this before autoreconf !!!
366     find . -name 'Makefile' \
367     -exec sed --in-place \
368     -e 's|^pkglibdir\s*=\s*$(libdir)/mysql|pkglibdir = $(libdir)|' \
369     -e 's|^pkgincludedir\s*=\s*$(includedir)/mysql|pkgincludedir = $(includedir)|' \
370     {} \;
371    
372     emake || die "compile problem"
373     }
374    
375     mysql_src_install() {
376    
377     mysql_init_vars
378     make install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die
379    
380     insinto "${MY_INCLUDEDIR}"
381     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
382    
383     # convenience links
384     dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlanalyze${MY_SUFFIX}"
385     dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlrepair${MY_SUFFIX}"
386     dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqloptimize${MY_SUFFIX}"
387    
388     # various junk (my-*.cnf moved elsewhere)
389     rm -rf "${D}/usr/share/info"
390     for removeme in "mysql-log-rotate" mysql.server* \
391     binary-configure* my-*.cnf mi_test_all*
392     do
393     rm -f ${D}/usr/share/mysql/${removeme}
394     done
395    
396     # TODO change at Makefile-am level
397     for moveme in "mysql_fix_privilege_tables.sql" \
398     "fill_help_tables.sql" "ndb-config-2-node.ini"
399     do
400 vivo 1.4 mv -f "${D}/usr/share/mysql/${moveme}" "${D}/usr/share/mysql${MY_SUFFIX}/" 2>/dev/null
401 vivo 1.1 done
402    
403     if [[ -n "${MY_SUFFIX}" ]] ; then
404     local notcatched=$(ls "${D}/usr/share/mysql"/*)
405     if [[ -n "${notcatched}" ]] ; then
406     ewarn "QA notice"
407     ewarn "${notcatched} files in /usr/share/mysql"
408     ewarn "bug mysql-herd to manage them"
409     fi
410     rm -rf "${D}/usr/share/mysql"
411     fi
412    
413     # clean up stuff for a minimal build
414     # this is anything server-specific
415     if useq minimal; then
416     rm -rf ${D}${MY_SHAREDSTATEDIR}/{mysql-test,sql-bench}
417     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}
418     rm -f "${D}/usr/sbin/mysqld${MY_SUFFIX}"
419     rm -f ${D}${MY_LIBDIR}/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
420     fi
421    
422     # config stuff
423     insinto "${MY_SYSCONFDIR}"
424     doins scripts/mysqlaccess.conf
425 vivo 1.9 sed -e "s!@MY_SUFFIX@!${MY_SUFFIX}!g" \
426     -e "s!@DATADIR@!${DATADIR}!g" \
427     "${FILESDIR}/my.cnf-4.1-r1" \
428     > "${TMPDIR}/my.cnf.ok"
429     newins "${TMPDIR}/my.cnf.ok" my.cnf
430    
431 vivo 1.1 insinto "/etc/conf.d"
432 vivo 1.11 newins "${FILESDIR}/mysql-slot.conf.d-r1" "mysql"
433 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
434     && newins "${FILESDIR}/mysqlmanager-slot.conf.d" "mysqlmanager"
435    
436     # minimal builds don't have the server
437     if ! useq minimal; then
438     exeinto /etc/init.d
439 vivo 1.11 newexe "${FILESDIR}/mysql-slot.rc6-r3" "mysql"
440 vivo 1.5
441 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
442     && newexe "${FILESDIR}/mysqlmanager-slot.rc6" "mysqlmanager"
443     insinto /etc/logrotate.d
444 vivo 1.9 sed -e "s!___MY_SUFFIX___!${MY_SUFFIX}!g" \
445 vivo 1.8 "${FILESDIR}/logrotate-slot.mysql" \
446     > "${TMPDIR}/logrotate.mysql"
447     newins "${TMPDIR}/logrotate.mysql" "mysql${MY_SUFFIX}"
448 vivo 1.1
449     #empty dirs...
450     diropts "-m0750"
451     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
452     dodir "${DATADIR}"
453     keepdir "${DATADIR}"
454     chown -R mysql:mysql "${D}/${DATADIR}"
455     fi
456    
457     diropts "-m0755"
458     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
459     dodir "${folder}"
460     keepdir "${folder}"
461     chown -R mysql:mysql "${D}/${folder}"
462     done
463     fi
464    
465     # docs
466     dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
467     # minimal builds don't have the server
468     if ! useq minimal; then
469     docinto "support-files"
470     for script in \
471     support-files/my-*.cnf \
472     support-files/magic \
473     support-files/ndb-config-2-node.ini
474     do
475     dodoc "${script}"
476     done
477    
478     docinto "scripts"
479 vivo 1.4 for script in scripts/mysql* ; do
480     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
481 vivo 1.1 done
482     fi
483 vivo 1.4
484     # oops, temporary fix
485     mysql_check_version_range "5.00.16.00 to 5.00.18.99" \
486     && cp -f \
487 vivo 1.6 "${WORKDIR}/mysql-extras/fill_help_tables.sql-5.0" \
488 vivo 1.4 "${D}/usr/share/mysql${MY_SUFFIX}/fill_help_tables.sql"
489 vivo 1.1 }
490    
491     mysql_pkg_preinst() {
492    
493     enewgroup mysql 60 || die "problem adding group mysql"
494     enewuser mysql 60 -1 /dev/null mysql \
495     || die "problem adding user mysql"
496     }
497    
498     mysql_pkg_postinst() {
499    
500     mysql_init_vars
501     mysql_lib_symlinks
502    
503     # mind at FEATURES=collision-protect before to remove this
504     [ -d "${ROOT}/var/log/mysql" ] \
505     || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
506    
507     #secure the logfiles... does this bother anybody?
508     touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
509     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
510     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
511    
512 vivo 1.5 # create a list of files, to be used
513     # by external utilities
514     # uncompressed because of the small size
515     local filelist="${ROOT}/var/lib/eselect/mysql/mysql${MY_SUFFIX}"
516     pushd "${D}/" &>/dev/null
517     mkdir -p "${ROOT}/var/lib/eselect/mysql/"
518     env -i find usr/bin/ usr/sbin/ usr/share/man \
519     -type f -name "*${MY_SUFFIX}*" \
520 vivo 1.6 -and -not -name "mysql_config${MY_SUFFIX}" \
521 vivo 1.5 > "${filelist}.filelist"
522     echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}.filelist"
523     echo "${MY_LIBDIR#"/"}" >> "${filelist}.filelist"
524     echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}.filelist"
525     popd &>/dev/null
526    
527 vivo 1.1 if ! useq minimal; then
528 vivo 1.5 if [[ ${SLOT} -gt 0 ]] ; then
529     if [[ -f "${ROOT}/usr/sbin/mysqld" ]] ; then
530 vivo 1.11 einfo "you may want to read:"
531     einfo "http://www.gentoo.org/doc/en/mysql-upgrade-slotted.xml"
532 vivo 1.5 else
533     local tmpres="$( eselect mysql show )"
534     # "like grep -q unset"
535     if [[ "{$tmpres}" == "{$tmpres/unset/}" ]] ; then
536     eselect mysql set 1
537     else
538     einfo "The version of mysql emerged now stils is _NOT_ the default"
539     einfo "you may want to run \"eselect myqsl list\" followed by a "
540     einfo "\"eselect myqsl set 1\" to chose the default mysql server"
541     fi
542     fi
543     fi
544    
545 vivo 1.1 # your friendly public service announcement...
546     einfo
547     einfo "You might want to run:"
548     einfo "\"emerge --config =${CATEGORY}/${PF}\""
549     einfo "if this is a new install."
550     einfo
551 vivo 1.5 einfo "InnoDB is not optional as of MySQL-4.0.24, at the request of upstream."
552 vivo 1.4 fi
553 vivo 1.1 }
554    
555     mysql_pkg_config() {
556     mysql_init_vars
557     [[ -z "${DATADIR}" ]] && die "sorry, unable to find DATADIR"
558    
559     if built_with_use dev-db/mysql minimal; then
560     die "Minimal builds do NOT include the MySQL server"
561     fi
562    
563     local pwd1="a"
564     local pwd2="b"
565     local maxtry=5
566    
567     if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
568     ewarn "You have already a MySQL database in place."
569     ewarn "(${ROOT}/${DATADIR}/*)"
570     ewarn "Please rename or delete it if you wish to replace it."
571     die "MySQL database already exists!"
572     fi
573    
574     einfo "Creating the mysql database and setting proper"
575     einfo "permissions on it..."
576    
577     einfo "Insert a password for the mysql 'root' user"
578     ewarn "Avoid [\"'\\_%] characters in the password"
579    
580     read -rsp " >" pwd1 ; echo
581     einfo "Check the password"
582     read -rsp " >" pwd2 ; echo
583    
584     if [[ "x$pwd1" != "x$pwd2" ]] ; then
585     die "Passwords are not the same"
586     fi
587    
588     local options=""
589     local sqltmp="$(emktemp)"
590    
591 vivo 1.8 local help_tables="${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
592 vivo 1.1 [[ -r "${help_tables}" ]] \
593 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
594 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
595     help_tables="${TMPDIR}/fill_help_tables.sql"
596    
597 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
598 vivo 1.1 ${ROOT}/usr/bin/mysql_install_db${MY_SUFFIX} | grep -B5 -A999 -i "ERROR"
599 vivo 1.4 popd &>/dev/null
600 vivo 1.1 [[ -f ${ROOT}/${DATADIR}/mysql/user.frm ]] || die "MySQL databases not installed"
601     chown -R mysql:mysql ${ROOT}/${DATADIR} 2> /dev/null
602     chmod 0750 ${ROOT}/${DATADIR} 2> /dev/null
603    
604     if mysql_version_is_at_least "4.01.03.00" ; then
605     options="--skip-ndbcluster"
606    
607     # Filling timezones, see
608     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
609     ${ROOT}/usr/bin/mysql_tzinfo_to_sql${MY_SUFFIX} ${ROOT}/usr/share/zoneinfo \
610     > "${sqltmp}" 2>/dev/null
611    
612     if [[ -r "${help_tables}" ]] ; then
613     cat "${help_tables}" >> "${sqltmp}"
614     fi
615     fi
616    
617     local socket=${ROOT}/var/run/mysqld/mysqld${MY_SUFFIX}${RANDOM}.sock
618     local pidfile=${ROOT}/var/run/mysqld/mysqld${MY_SUFFIX}${RANDOM}.sock
619     local mysqld="${ROOT}/usr/sbin/mysqld${MY_SUFFIX} \
620     ${options} \
621     --user=mysql \
622     --skip-grant-tables \
623     --basedir=${ROOT}/usr \
624     --datadir=${ROOT}/${DATADIR} \
625     --skip-innodb \
626     --skip-bdb \
627     --skip-networking \
628     --max_allowed_packet=8M \
629     --net_buffer_length=16K \
630     --socket=${socket} \
631     --pid-file=${pidfile}"
632     $mysqld &
633     while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
634     maxtry=$(($maxtry-1))
635     echo -n "."
636     sleep 1
637     done
638    
639     # do this from memory we don't want clear text password in temp files
640     local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
641     ${ROOT}/usr/bin/mysql${MY_SUFFIX} \
642     --socket=${socket} \
643     -hlocalhost \
644     -e "${sql}"
645    
646     einfo "Loading \"zoneinfo\" this step may require few seconds"
647    
648     ${ROOT}/usr/bin/mysql${MY_SUFFIX} \
649     --socket=${socket} \
650     -hlocalhost \
651     -uroot \
652     -p"${pwd1}" \
653     mysql < "${sqltmp}"
654    
655     # server stop and cleanup
656     kill $(< "${pidfile}" )
657     rm "${sqltmp}"
658     einfo "stopping the server,"
659     wait %1
660     einfo "done"
661     }
662    
663     mysql_pkg_postrm() {
664     mysql_lib_symlinks
665 vivo 1.4 if [[ ${SLOT} -gt 0 ]] ; then
666     einfo "you may want to run \"eselect myqsl list\" followed by a "
667     einfo "\"eselect myqsl list\" to chose the default mysql server"
668     fi
669 vivo 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.20