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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.24 - (hide annotations) (download)
Fri Mar 10 11:41:39 2006 UTC (8 years, 6 months ago) by vivo
Branch: MAIN
Changes since 1.23: +8 -2 lines
re-add symlinking of libraryes for un-slotted (screwed before)

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

  ViewVC Help
Powered by ViewVC 1.1.20