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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.20 - (hide annotations) (download)
Tue Feb 28 12:52:27 2006 UTC (8 years, 9 months ago) by vivo
Branch: MAIN
Changes since 1.19: +2 -2 lines
fix bug 124211, thanks ciaranm

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

  ViewVC Help
Powered by ViewVC 1.1.20