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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.15 - (hide annotations) (download)
Wed Feb 8 16:17:52 2006 UTC (8 years, 9 months ago) by vivo
Branch: MAIN
Changes since 1.14: +43 -21 lines
changes requested by portage team ... I'm still dubious

1 vivo 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 vivo 1.15 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.14 2006/02/03 08:48:37 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.15 EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_config mysql_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     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 vivo 1.14 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
359 vivo 1.1 --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 vivo 1.15 # MOVED HERE DUE TO BUG #121445
491 vivo 1.12 # create a list of files, to be used
492     # by external utilities
493 vivo 1.15 mkdir -p "${D}/var/lib/eselect/mysql/"
494     local filelist="${D}/var/lib/eselect/mysql/mysql${MY_SUFFIX}.filelist"
495 vivo 1.12 pushd "${D}/" &>/dev/null
496     mkdir -p "${ROOT}/var/lib/eselect/mysql/"
497     env -i find usr/bin/ usr/sbin/ usr/share/man \
498     -type f -name "*${MY_SUFFIX}*" \
499     -and -not -name "mysql_config${MY_SUFFIX}" \
500     > "${filelist}"
501     echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}"
502     echo "${MY_LIBDIR#"/"}" >> "${filelist}"
503     echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}"
504     popd &>/dev/null
505    
506 vivo 1.15 }
507    
508     mysql_pkg_preinst() {
509    
510     ## create a list of files, to be used
511     ## by external utilities
512     ## will be used in pkg_postinst
513     #local filelist="${TMPDIR}/FILELIST"
514     #pushd "${D}/" &>/dev/null
515     # mkdir -p "${ROOT}/var/lib/eselect/mysql/"
516     # env -i find usr/bin/ usr/sbin/ usr/share/man \
517     # -type f -name "*${MY_SUFFIX}*" \
518     # -and -not -name "mysql_config${MY_SUFFIX}" \
519     # > "${filelist}"
520     # echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}"
521     # echo "${MY_LIBDIR#"/"}" >> "${filelist}"
522     # echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}"
523     #popd &>/dev/null
524    
525 vivo 1.1 enewgroup mysql 60 || die "problem adding group mysql"
526     enewuser mysql 60 -1 /dev/null mysql \
527     || die "problem adding user mysql"
528     }
529    
530     mysql_pkg_postinst() {
531    
532     mysql_init_vars
533     mysql_lib_symlinks
534    
535     # mind at FEATURES=collision-protect before to remove this
536     [ -d "${ROOT}/var/log/mysql" ] \
537     || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
538    
539     #secure the logfiles... does this bother anybody?
540     touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
541     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
542     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
543    
544 vivo 1.15 ## list of files, to be used
545     ## by external utilities
546     #mkdir -p "${ROOT}/var/lib/eselect/mysql/"
547     #cp "${TMPDIR}/FILELIST" "${ROOT}/var/lib/eselect/mysql/mysql${MY_SUFFIX}.filelist"
548 vivo 1.5
549 vivo 1.1 if ! useq minimal; then
550 vivo 1.5 if [[ ${SLOT} -gt 0 ]] ; then
551 vivo 1.15 #if [[ -f "${ROOT}/usr/sbin/mysqld" ]] ; then
552 vivo 1.11 einfo "you may want to read:"
553     einfo "http://www.gentoo.org/doc/en/mysql-upgrade-slotted.xml"
554 vivo 1.15 #else
555     # local tmpres="$( eselect mysql show )"
556     # # "like grep -q unset"
557     # if [[ "{$tmpres}" == "{$tmpres/unset/}" ]] ; then
558     # eselect mysql set 1
559     # else
560     # einfo "The version of mysql emerged now stils is _NOT_ the default"
561 vivo 1.5 einfo "you may want to run \"eselect myqsl list\" followed by a "
562     einfo "\"eselect myqsl set 1\" to chose the default mysql server"
563 vivo 1.15 # fi
564     #fi
565 vivo 1.5 fi
566    
567 vivo 1.1 # your friendly public service announcement...
568     einfo
569     einfo "You might want to run:"
570     einfo "\"emerge --config =${CATEGORY}/${PF}\""
571     einfo "if this is a new install."
572     einfo
573 vivo 1.5 einfo "InnoDB is not optional as of MySQL-4.0.24, at the request of upstream."
574 vivo 1.4 fi
575 vivo 1.1 }
576    
577     mysql_pkg_config() {
578     mysql_init_vars
579     [[ -z "${DATADIR}" ]] && die "sorry, unable to find DATADIR"
580    
581     if built_with_use dev-db/mysql minimal; then
582     die "Minimal builds do NOT include the MySQL server"
583     fi
584    
585     local pwd1="a"
586     local pwd2="b"
587     local maxtry=5
588    
589     if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
590     ewarn "You have already a MySQL database in place."
591     ewarn "(${ROOT}/${DATADIR}/*)"
592     ewarn "Please rename or delete it if you wish to replace it."
593     die "MySQL database already exists!"
594     fi
595    
596     einfo "Creating the mysql database and setting proper"
597     einfo "permissions on it..."
598    
599     einfo "Insert a password for the mysql 'root' user"
600     ewarn "Avoid [\"'\\_%] characters in the password"
601    
602     read -rsp " >" pwd1 ; echo
603     einfo "Check the password"
604     read -rsp " >" pwd2 ; echo
605    
606     if [[ "x$pwd1" != "x$pwd2" ]] ; then
607     die "Passwords are not the same"
608     fi
609    
610     local options=""
611     local sqltmp="$(emktemp)"
612    
613 vivo 1.8 local help_tables="${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
614 vivo 1.1 [[ -r "${help_tables}" ]] \
615 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
616 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
617     help_tables="${TMPDIR}/fill_help_tables.sql"
618    
619 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
620 vivo 1.1 ${ROOT}/usr/bin/mysql_install_db${MY_SUFFIX} | grep -B5 -A999 -i "ERROR"
621 vivo 1.4 popd &>/dev/null
622 vivo 1.1 [[ -f ${ROOT}/${DATADIR}/mysql/user.frm ]] || die "MySQL databases not installed"
623     chown -R mysql:mysql ${ROOT}/${DATADIR} 2> /dev/null
624     chmod 0750 ${ROOT}/${DATADIR} 2> /dev/null
625    
626     if mysql_version_is_at_least "4.01.03.00" ; then
627     options="--skip-ndbcluster"
628    
629     # Filling timezones, see
630     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
631     ${ROOT}/usr/bin/mysql_tzinfo_to_sql${MY_SUFFIX} ${ROOT}/usr/share/zoneinfo \
632     > "${sqltmp}" 2>/dev/null
633    
634     if [[ -r "${help_tables}" ]] ; then
635     cat "${help_tables}" >> "${sqltmp}"
636     fi
637     fi
638    
639 vivo 1.14 local socket=${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock
640     local pidfile=${ROOT}/var/run/mysqld/mysqld${MY_SUFFIX}${RANDOM}.pid
641 vivo 1.1 local mysqld="${ROOT}/usr/sbin/mysqld${MY_SUFFIX} \
642     ${options} \
643     --user=mysql \
644     --skip-grant-tables \
645     --basedir=${ROOT}/usr \
646     --datadir=${ROOT}/${DATADIR} \
647     --skip-innodb \
648     --skip-bdb \
649     --skip-networking \
650     --max_allowed_packet=8M \
651     --net_buffer_length=16K \
652     --socket=${socket} \
653     --pid-file=${pidfile}"
654     $mysqld &
655     while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
656     maxtry=$(($maxtry-1))
657     echo -n "."
658     sleep 1
659     done
660    
661     # do this from memory we don't want clear text password in temp files
662     local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
663     ${ROOT}/usr/bin/mysql${MY_SUFFIX} \
664     --socket=${socket} \
665     -hlocalhost \
666     -e "${sql}"
667    
668     einfo "Loading \"zoneinfo\" this step may require few seconds"
669    
670     ${ROOT}/usr/bin/mysql${MY_SUFFIX} \
671     --socket=${socket} \
672     -hlocalhost \
673     -uroot \
674     -p"${pwd1}" \
675     mysql < "${sqltmp}"
676    
677     # server stop and cleanup
678     kill $(< "${pidfile}" )
679     rm "${sqltmp}"
680     einfo "stopping the server,"
681     wait %1
682     einfo "done"
683     }
684    
685 vivo 1.15 mysql_pkg_prerm() {
686     # external program
687     eselect mysql slot_remove "${SLOT}"
688     }
689    
690 vivo 1.1 mysql_pkg_postrm() {
691     mysql_lib_symlinks
692 vivo 1.4 if [[ ${SLOT} -gt 0 ]] ; then
693     einfo "you may want to run \"eselect myqsl list\" followed by a "
694     einfo "\"eselect myqsl list\" to chose the default mysql server"
695     fi
696 vivo 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.20