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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.22 - (hide annotations) (download)
Fri Mar 3 09:28:58 2006 UTC (8 years, 4 months ago) by vivo
Branch: MAIN
Changes since 1.21: +2 -2 lines
inherit autotools

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

  ViewVC Help
Powered by ViewVC 1.1.20