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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.28 - (hide annotations) (download)
Tue Apr 11 17:23:42 2006 UTC (8 years, 8 months ago) by vivo
Branch: MAIN
Changes since 1.27: +2 -2 lines
fig bug #129584

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

  ViewVC Help
Powered by ViewVC 1.1.20