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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.17 - (hide annotations) (download)
Thu Feb 9 13:15:43 2006 UTC (8 years, 7 months ago) by vivo
Branch: MAIN
Changes since 1.16: +9 -5 lines
fixed bug #122180

1 vivo 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 vivo 1.17 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.16 2006/02/08 21:25:53 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 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     else
295     for i in ${minimal_exclude_list}; do
296     myconf="${myconf} --without-${i}"
297     done
298     myconf="${myconf} --without-berkeley-db"
299     myconf="${myconf} --with-extra-charsets=none"
300     fi
301    
302     if mysql_version_is_at_least "4.01.03.00" && useq extraengine; then
303     # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
304     myconf="${myconf} --with-archive-storage-engine"
305     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
306    
307     mysql_version_is_at_least "4.01.04.00" \
308     && myconf="${myconf} --with-csv-storage-engine"
309    
310     mysql_version_is_at_least "4.01.11.00" \
311     && myconf="${myconf} --with-blackhole-storage-engine"
312    
313     # http://dev.mysql.com/doc/mysql/en/federated-description.html
314     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
315     if mysql_version_is_at_least "5.00.03.00" ; then
316     einfo "before to use federated engine be sure to read"
317     einfo "http://dev.mysql.com/doc/refman/5.0/en/federated-limitations.html"
318     myconf="${myconf} --with-federated-storage-engine"
319    
320     # http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html
321     if mysql_version_is_at_least "5.01.00.00" ; then
322     myconf="${myconf} --with-partition"
323     fi
324     fi
325    
326 vivo 1.8 fi
327    
328     mysql_version_is_at_least "5.00.18.00" \
329     && useq "max-idx-128" \
330     && myconf="${myconf} --with-max-indexes=128"
331    
332     if mysql_version_is_at_least "5.01.05.00" ; then
333     myconf="${myconf} --with-row-based-replication"
334 vivo 1.1 fi
335    
336     #Bug #114895,Bug #110149
337     filter-flags "-O" "-O[01]"
338     #glibc-2.3.2_pre fix; bug #16496
339     append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
340    
341     #the compiler flags are as per their "official" spec ;)
342     #CFLAGS="${CFLAGS/-O?/} -O3" \
343     export CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-exceptions -fno-rtti"
344     mysql_version_is_at_least "5.00.00.00" \
345     && export CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
346    
347     econf \
348     --program-suffix="${MY_SUFFIX}" \
349     --libexecdir="/usr/sbin" \
350     --sysconfdir="${MY_SYSCONFDIR}" \
351     --localstatedir="${MY_LOCALSTATEDIR}" \
352     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
353     --libdir="${MY_LIBDIR}" \
354     --includedir="${MY_INCLUDEDIR}" \
355     --with-low-memory \
356     --enable-assembler \
357     --enable-local-infile \
358     --with-mysqld-user=mysql \
359     --with-client-ldflags=-lstdc++ \
360     --enable-thread-safe-client \
361     --with-comment="Gentoo Linux ${PF}" \
362 vivo 1.14 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
363 vivo 1.1 --with-zlib-dir=/usr \
364     --with-lib-ccflags="-fPIC" \
365     --without-readline \
366     --without-docs \
367     ${myconf} || die "bad ./configure"
368    
369     # TODO Move this before autoreconf !!!
370     find . -name 'Makefile' \
371     -exec sed --in-place \
372     -e 's|^pkglibdir\s*=\s*$(libdir)/mysql|pkglibdir = $(libdir)|' \
373     -e 's|^pkgincludedir\s*=\s*$(includedir)/mysql|pkgincludedir = $(includedir)|' \
374     {} \;
375    
376     emake || die "compile problem"
377     }
378    
379     mysql_src_install() {
380    
381     mysql_init_vars
382     make install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die
383    
384     insinto "${MY_INCLUDEDIR}"
385     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
386    
387     # convenience links
388     dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlanalyze${MY_SUFFIX}"
389     dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqlrepair${MY_SUFFIX}"
390     dosym "/usr/bin/mysqlcheck${MY_SUFFIX}" "/usr/bin/mysqloptimize${MY_SUFFIX}"
391    
392     # various junk (my-*.cnf moved elsewhere)
393     rm -rf "${D}/usr/share/info"
394     for removeme in "mysql-log-rotate" mysql.server* \
395     binary-configure* my-*.cnf mi_test_all*
396     do
397     rm -f ${D}/usr/share/mysql/${removeme}
398     done
399    
400     # TODO change at Makefile-am level
401     for moveme in "mysql_fix_privilege_tables.sql" \
402     "fill_help_tables.sql" "ndb-config-2-node.ini"
403     do
404 vivo 1.4 mv -f "${D}/usr/share/mysql/${moveme}" "${D}/usr/share/mysql${MY_SUFFIX}/" 2>/dev/null
405 vivo 1.1 done
406    
407     if [[ -n "${MY_SUFFIX}" ]] ; then
408     local notcatched=$(ls "${D}/usr/share/mysql"/*)
409     if [[ -n "${notcatched}" ]] ; then
410     ewarn "QA notice"
411     ewarn "${notcatched} files in /usr/share/mysql"
412     ewarn "bug mysql-herd to manage them"
413     fi
414     rm -rf "${D}/usr/share/mysql"
415     fi
416    
417     # clean up stuff for a minimal build
418     # this is anything server-specific
419     if useq minimal; then
420     rm -rf ${D}${MY_SHAREDSTATEDIR}/{mysql-test,sql-bench}
421     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}
422     rm -f "${D}/usr/sbin/mysqld${MY_SUFFIX}"
423     rm -f ${D}${MY_LIBDIR}/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
424     fi
425    
426     # config stuff
427     insinto "${MY_SYSCONFDIR}"
428     doins scripts/mysqlaccess.conf
429 vivo 1.9 sed -e "s!@MY_SUFFIX@!${MY_SUFFIX}!g" \
430     -e "s!@DATADIR@!${DATADIR}!g" \
431     "${FILESDIR}/my.cnf-4.1-r1" \
432     > "${TMPDIR}/my.cnf.ok"
433     newins "${TMPDIR}/my.cnf.ok" my.cnf
434    
435 vivo 1.1 insinto "/etc/conf.d"
436 vivo 1.11 newins "${FILESDIR}/mysql-slot.conf.d-r1" "mysql"
437 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
438     && newins "${FILESDIR}/mysqlmanager-slot.conf.d" "mysqlmanager"
439    
440     # minimal builds don't have the server
441     if ! useq minimal; then
442     exeinto /etc/init.d
443 vivo 1.11 newexe "${FILESDIR}/mysql-slot.rc6-r3" "mysql"
444 vivo 1.5
445 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
446     && newexe "${FILESDIR}/mysqlmanager-slot.rc6" "mysqlmanager"
447     insinto /etc/logrotate.d
448 vivo 1.9 sed -e "s!___MY_SUFFIX___!${MY_SUFFIX}!g" \
449 vivo 1.8 "${FILESDIR}/logrotate-slot.mysql" \
450     > "${TMPDIR}/logrotate.mysql"
451     newins "${TMPDIR}/logrotate.mysql" "mysql${MY_SUFFIX}"
452 vivo 1.1
453     #empty dirs...
454     diropts "-m0750"
455     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
456     dodir "${DATADIR}"
457     keepdir "${DATADIR}"
458     chown -R mysql:mysql "${D}/${DATADIR}"
459     fi
460    
461     diropts "-m0755"
462     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
463     dodir "${folder}"
464     keepdir "${folder}"
465     chown -R mysql:mysql "${D}/${folder}"
466     done
467     fi
468    
469     # docs
470     dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
471     # minimal builds don't have the server
472     if ! useq minimal; then
473     docinto "support-files"
474     for script in \
475     support-files/my-*.cnf \
476     support-files/magic \
477     support-files/ndb-config-2-node.ini
478     do
479     dodoc "${script}"
480     done
481    
482     docinto "scripts"
483 vivo 1.4 for script in scripts/mysql* ; do
484     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
485 vivo 1.1 done
486     fi
487 vivo 1.4
488     # oops, temporary fix
489     mysql_check_version_range "5.00.16.00 to 5.00.18.99" \
490     && cp -f \
491 vivo 1.6 "${WORKDIR}/mysql-extras/fill_help_tables.sql-5.0" \
492 vivo 1.4 "${D}/usr/share/mysql${MY_SUFFIX}/fill_help_tables.sql"
493 vivo 1.1
494 vivo 1.15 # MOVED HERE DUE TO BUG #121445
495 vivo 1.12 # create a list of files, to be used
496     # by external utilities
497 vivo 1.15 mkdir -p "${D}/var/lib/eselect/mysql/"
498     local filelist="${D}/var/lib/eselect/mysql/mysql${MY_SUFFIX}.filelist"
499 vivo 1.12 pushd "${D}/" &>/dev/null
500     env -i find usr/bin/ usr/sbin/ usr/share/man \
501     -type f -name "*${MY_SUFFIX}*" \
502     -and -not -name "mysql_config${MY_SUFFIX}" \
503     > "${filelist}"
504     echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}"
505     echo "${MY_LIBDIR#"/"}" >> "${filelist}"
506     echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}"
507     popd &>/dev/null
508    
509 vivo 1.15 }
510    
511     mysql_pkg_preinst() {
512    
513     ## create a list of files, to be used
514     ## by external utilities
515     ## will be used in pkg_postinst
516     #local filelist="${TMPDIR}/FILELIST"
517     #pushd "${D}/" &>/dev/null
518     # mkdir -p "${ROOT}/var/lib/eselect/mysql/"
519     # env -i find usr/bin/ usr/sbin/ usr/share/man \
520     # -type f -name "*${MY_SUFFIX}*" \
521     # -and -not -name "mysql_config${MY_SUFFIX}" \
522     # > "${filelist}"
523     # echo "${MY_SYSCONFDIR#"/"}" >> "${filelist}"
524     # echo "${MY_LIBDIR#"/"}" >> "${filelist}"
525     # echo "${MY_SHAREDSTATEDIR#"/"}" >> "${filelist}"
526     #popd &>/dev/null
527    
528 vivo 1.1 enewgroup mysql 60 || die "problem adding group mysql"
529     enewuser mysql 60 -1 /dev/null mysql \
530     || die "problem adding user mysql"
531     }
532    
533     mysql_pkg_postinst() {
534    
535     mysql_init_vars
536     mysql_lib_symlinks
537    
538     # mind at FEATURES=collision-protect before to remove this
539     [ -d "${ROOT}/var/log/mysql" ] \
540     || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
541    
542     #secure the logfiles... does this bother anybody?
543     touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
544     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
545     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
546    
547 vivo 1.15 ## list of files, to be used
548     ## by external utilities
549     #mkdir -p "${ROOT}/var/lib/eselect/mysql/"
550     #cp "${TMPDIR}/FILELIST" "${ROOT}/var/lib/eselect/mysql/mysql${MY_SUFFIX}.filelist"
551 vivo 1.5
552 vivo 1.1 if ! useq minimal; then
553 vivo 1.5 if [[ ${SLOT} -gt 0 ]] ; then
554 vivo 1.15 #if [[ -f "${ROOT}/usr/sbin/mysqld" ]] ; then
555 vivo 1.11 einfo "you may want to read:"
556     einfo "http://www.gentoo.org/doc/en/mysql-upgrade-slotted.xml"
557 vivo 1.15 #else
558     # local tmpres="$( eselect mysql show )"
559     # # "like grep -q unset"
560     # if [[ "{$tmpres}" == "{$tmpres/unset/}" ]] ; then
561     # eselect mysql set 1
562     # else
563     # einfo "The version of mysql emerged now stils is _NOT_ the default"
564 vivo 1.5 einfo "you may want to run \"eselect myqsl list\" followed by a "
565     einfo "\"eselect myqsl set 1\" to chose the default mysql server"
566 vivo 1.15 # fi
567     #fi
568 vivo 1.5 fi
569    
570 vivo 1.1 # your friendly public service announcement...
571     einfo
572     einfo "You might want to run:"
573     einfo "\"emerge --config =${CATEGORY}/${PF}\""
574     einfo "if this is a new install."
575     einfo
576 vivo 1.5 einfo "InnoDB is not optional as of MySQL-4.0.24, at the request of upstream."
577 vivo 1.4 fi
578 vivo 1.1 }
579    
580     mysql_pkg_config() {
581     mysql_init_vars
582     [[ -z "${DATADIR}" ]] && die "sorry, unable to find DATADIR"
583    
584     if built_with_use dev-db/mysql minimal; then
585     die "Minimal builds do NOT include the MySQL server"
586     fi
587    
588     local pwd1="a"
589     local pwd2="b"
590     local maxtry=5
591    
592     if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
593     ewarn "You have already a MySQL database in place."
594     ewarn "(${ROOT}/${DATADIR}/*)"
595     ewarn "Please rename or delete it if you wish to replace it."
596     die "MySQL database already exists!"
597     fi
598    
599     einfo "Creating the mysql database and setting proper"
600     einfo "permissions on it..."
601    
602     einfo "Insert a password for the mysql 'root' user"
603     ewarn "Avoid [\"'\\_%] characters in the password"
604    
605     read -rsp " >" pwd1 ; echo
606     einfo "Check the password"
607     read -rsp " >" pwd2 ; echo
608    
609     if [[ "x$pwd1" != "x$pwd2" ]] ; then
610     die "Passwords are not the same"
611     fi
612    
613     local options=""
614     local sqltmp="$(emktemp)"
615    
616 vivo 1.8 local help_tables="${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
617 vivo 1.1 [[ -r "${help_tables}" ]] \
618 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
619 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
620     help_tables="${TMPDIR}/fill_help_tables.sql"
621    
622 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
623 vivo 1.1 ${ROOT}/usr/bin/mysql_install_db${MY_SUFFIX} | grep -B5 -A999 -i "ERROR"
624 vivo 1.4 popd &>/dev/null
625 vivo 1.1 [[ -f ${ROOT}/${DATADIR}/mysql/user.frm ]] || die "MySQL databases not installed"
626     chown -R mysql:mysql ${ROOT}/${DATADIR} 2> /dev/null
627     chmod 0750 ${ROOT}/${DATADIR} 2> /dev/null
628    
629     if mysql_version_is_at_least "4.01.03.00" ; then
630     options="--skip-ndbcluster"
631    
632     # Filling timezones, see
633     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
634     ${ROOT}/usr/bin/mysql_tzinfo_to_sql${MY_SUFFIX} ${ROOT}/usr/share/zoneinfo \
635     > "${sqltmp}" 2>/dev/null
636    
637     if [[ -r "${help_tables}" ]] ; then
638     cat "${help_tables}" >> "${sqltmp}"
639     fi
640     fi
641    
642 vivo 1.14 local socket=${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock
643     local pidfile=${ROOT}/var/run/mysqld/mysqld${MY_SUFFIX}${RANDOM}.pid
644 vivo 1.1 local mysqld="${ROOT}/usr/sbin/mysqld${MY_SUFFIX} \
645     ${options} \
646     --user=mysql \
647     --skip-grant-tables \
648     --basedir=${ROOT}/usr \
649     --datadir=${ROOT}/${DATADIR} \
650     --skip-innodb \
651     --skip-bdb \
652     --skip-networking \
653     --max_allowed_packet=8M \
654     --net_buffer_length=16K \
655     --socket=${socket} \
656     --pid-file=${pidfile}"
657     $mysqld &
658     while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
659     maxtry=$(($maxtry-1))
660     echo -n "."
661     sleep 1
662     done
663    
664     # do this from memory we don't want clear text password in temp files
665     local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
666     ${ROOT}/usr/bin/mysql${MY_SUFFIX} \
667     --socket=${socket} \
668     -hlocalhost \
669     -e "${sql}"
670    
671     einfo "Loading \"zoneinfo\" this step may require few seconds"
672    
673     ${ROOT}/usr/bin/mysql${MY_SUFFIX} \
674     --socket=${socket} \
675     -hlocalhost \
676     -uroot \
677     -p"${pwd1}" \
678     mysql < "${sqltmp}"
679    
680     # server stop and cleanup
681     kill $(< "${pidfile}" )
682     rm "${sqltmp}"
683     einfo "stopping the server,"
684     wait %1
685     einfo "done"
686     }
687    
688 vivo 1.15 mysql_pkg_prerm() {
689     # external program
690     eselect mysql slot_remove "${SLOT}"
691     }
692    
693 vivo 1.1 mysql_pkg_postrm() {
694     mysql_lib_symlinks
695 vivo 1.4 if [[ ${SLOT} -gt 0 ]] ; then
696     einfo "you may want to run \"eselect myqsl list\" followed by a "
697     einfo "\"eselect myqsl list\" to chose the default mysql server"
698     fi
699 vivo 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.20