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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.29 - (hide annotations) (download)
Wed Apr 12 21:15:17 2006 UTC (8 years, 4 months ago) by chtekk
Branch: MAIN
Changes since 1.28: +8 -10 lines
Fix unneeded $ char in libdir and default back to utf8 for MySQL 5.X, as it should.

1 vivo 1.1 # Copyright 1999-2005 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 chtekk 1.29 # $Header: /var/cvsroot/gentoo-x86/eclass/mysql.eclass,v 1.28 2006/04/11 17:23:42 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 chtekk 1.29 MY_LIBDIR=${MY_LIBDIR="/usr/$(get_libdir)/mysql"}
81 vivo 1.26 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 chtekk 1.29 if mysql_version_is_at_least "4.01.00.00" ; then
276     myconf="${myconf} --with-charset=utf8"
277     myconf="${myconf} --with-collation=utf8_general_ci"
278     else
279     myconf="${myconf} --with-charset=latin1"
280     myconf="${myconf} --with-collation=latin1_swedish_ci"
281 vivo 1.1 fi
282    
283     # optional again from 2005-12-05
284     if mysql_version_is_at_least "5.01.00.00" ; then
285     myconf="${myconf} $(use_with innodb)"
286     else
287     myconf="${myconf} --with-innodb"
288     fi
289    
290     # lots of chars
291     myconf="${myconf} --with-extra-charsets=all"
292    
293     #The following fix is due to a bug with bdb on sparc's. See:
294     #http://www.geocrawler.com/mail/msg.php3?msg_id=4754814&list=8
295     # it comes down to non-64-bit safety problems
296 vivo 1.26 if useq "sparc" || useq "alpha" || useq "hppa" || useq "mips" \
297     || useq "amd64" || mysql_check_version_range "5.01.00.00 to 5.01.06.99"
298 vivo 1.1 then
299     ewarn "bdb berkeley-db disabled due to arch or version"
300     myconf="${myconf} --without-berkeley-db"
301     else
302 vivo 1.21 #TODO berkdb in 5.1 need to be worked on
303 vivo 1.26 useq "berkdb" && \
304 vivo 1.21 ! mysql_check_version_range "5.01.00.00 to 5.01.08.99" \
305 vivo 1.1 && myconf="${myconf} --with-berkeley-db=./bdb" \
306     || myconf="${myconf} --without-berkeley-db"
307     fi
308    
309     if mysql_version_is_at_least "4.01.03.00" ; then
310     #myconf="${myconf} $(use_with geometry)"
311     myconf="${myconf} --with-geometry"
312     myconf="${myconf} $(use_with cluster ndbcluster)"
313     fi
314    
315 vivo 1.26 mysql_version_is_at_least "4.01.11.00" \
316     && myconf="${myconf} `use_with big-tables`"
317 vivo 1.19
318 vivo 1.26 mysql_version_is_at_least "5.01.06.00" \
319     && myconf="${myconf} --with-ndb-binlog"
320 vivo 1.21
321 vivo 1.26 if useq "embedded" ; then
322 vivo 1.21 #REMIND, need the privilege control enabled ?
323     myconf="${myconf} --without-embedded-privilege-control"
324     myconf="${myconf} --with-embedded-server"
325     else
326     myconf="${myconf} --without-embedded-privilege-control"
327     myconf="${myconf} --without-embedded-server"
328     fi
329 vivo 1.26
330     # benchmarking stuff needs perl
331     if useq "perl" ; then
332     myconf="${myconf} --with-bench"
333     else
334     myconf="${myconf} --without-bench"
335     fi
336 vivo 1.1 else
337     for i in ${minimal_exclude_list}; do
338     myconf="${myconf} --without-${i}"
339     done
340     myconf="${myconf} --without-berkeley-db"
341     myconf="${myconf} --with-extra-charsets=none"
342     fi
343    
344 vivo 1.26 if mysql_version_is_at_least "4.01.03.00" && useq "extraengine"; then
345 vivo 1.1 # http://dev.mysql.com/doc/mysql/en/archive-storage-engine.html
346     myconf="${myconf} --with-archive-storage-engine"
347     # http://dev.mysql.com/doc/mysql/en/csv-storage-engine.html
348    
349     mysql_version_is_at_least "4.01.04.00" \
350     && myconf="${myconf} --with-csv-storage-engine"
351    
352     mysql_version_is_at_least "4.01.11.00" \
353     && myconf="${myconf} --with-blackhole-storage-engine"
354    
355     # http://dev.mysql.com/doc/mysql/en/federated-description.html
356     # http://dev.mysql.com/doc/mysql/en/federated-limitations.html
357     if mysql_version_is_at_least "5.00.03.00" ; then
358     einfo "before to use federated engine be sure to read"
359     einfo "http://dev.mysql.com/doc/refman/5.0/en/federated-limitations.html"
360     myconf="${myconf} --with-federated-storage-engine"
361    
362     # http://dev.mysql.com/doc/refman/5.1/en/partitioning-overview.html
363     if mysql_version_is_at_least "5.01.00.00" ; then
364     myconf="${myconf} --with-partition"
365     fi
366     fi
367    
368 vivo 1.8 fi
369    
370     mysql_version_is_at_least "5.00.18.00" \
371     && useq "max-idx-128" \
372     && myconf="${myconf} --with-max-indexes=128"
373    
374     if mysql_version_is_at_least "5.01.05.00" ; then
375     myconf="${myconf} --with-row-based-replication"
376 vivo 1.1 fi
377    
378 vivo 1.26 #TODO rechek again later, had problem with assembler enabled
379 vivo 1.23 # and some combination of use-flags with 5.1
380     if mysql_check_version_range "5.01.00.00 to 5.01.08.99" ; then
381     myconf="${myconf} --disable-assembler"
382     else
383     myconf="${myconf} --enable-assembler"
384     fi
385    
386 vivo 1.1 #Bug #114895,Bug #110149
387     filter-flags "-O" "-O[01]"
388     #glibc-2.3.2_pre fix; bug #16496
389     append-flags "-DHAVE_ERRNO_AS_DEFINE=1"
390    
391     #the compiler flags are as per their "official" spec ;)
392     #CFLAGS="${CFLAGS/-O?/} -O3" \
393     export CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-exceptions -fno-rtti"
394     mysql_version_is_at_least "5.00.00.00" \
395     && export CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
396    
397     econf \
398     --libexecdir="/usr/sbin" \
399     --sysconfdir="${MY_SYSCONFDIR}" \
400     --localstatedir="${MY_LOCALSTATEDIR}" \
401     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
402     --libdir="${MY_LIBDIR}" \
403     --includedir="${MY_INCLUDEDIR}" \
404     --with-low-memory \
405     --enable-local-infile \
406     --with-mysqld-user=mysql \
407     --with-client-ldflags=-lstdc++ \
408     --enable-thread-safe-client \
409     --with-comment="Gentoo Linux ${PF}" \
410 vivo 1.14 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
411 vivo 1.1 --without-readline \
412     --without-docs \
413     ${myconf} || die "bad ./configure"
414    
415     # TODO Move this before autoreconf !!!
416 vivo 1.21 find . -type f -name Makefile -print0 \
417     | xargs -0 -n100 sed -i \
418     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
419 vivo 1.1
420     emake || die "compile problem"
421     }
422    
423     mysql_src_install() {
424    
425     mysql_init_vars
426     make install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die
427    
428     insinto "${MY_INCLUDEDIR}"
429     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
430    
431     # convenience links
432 vivo 1.26 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
433     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
434     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
435 vivo 1.1
436     # various junk (my-*.cnf moved elsewhere)
437     rm -rf "${D}/usr/share/info"
438     for removeme in "mysql-log-rotate" mysql.server* \
439     binary-configure* my-*.cnf mi_test_all*
440     do
441     rm -f ${D}/usr/share/mysql/${removeme}
442     done
443    
444     # clean up stuff for a minimal build
445     # this is anything server-specific
446 vivo 1.26 if useq "minimal" ; then
447 vivo 1.1 rm -rf ${D}${MY_SHAREDSTATEDIR}/{mysql-test,sql-bench}
448     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}
449 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
450 vivo 1.1 rm -f ${D}${MY_LIBDIR}/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
451     fi
452    
453     # config stuff
454     insinto "${MY_SYSCONFDIR}"
455     doins scripts/mysqlaccess.conf
456 vivo 1.26 sed -e "s!@MY_SUFFIX@!!g" \
457 vivo 1.9 -e "s!@DATADIR@!${DATADIR}!g" \
458     "${FILESDIR}/my.cnf-4.1-r1" \
459     > "${TMPDIR}/my.cnf.ok"
460     newins "${TMPDIR}/my.cnf.ok" my.cnf
461    
462 vivo 1.1 insinto "/etc/conf.d"
463 vivo 1.25 newins "${FILESDIR}/mysql.conf.d-r1" "mysql"
464 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
465 vivo 1.25 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
466 vivo 1.1
467     # minimal builds don't have the server
468 vivo 1.26 if ! useq "minimal" ; then
469 vivo 1.1 exeinto /etc/init.d
470 vivo 1.25 newexe "${FILESDIR}/mysql.rc6-r3" "mysql"
471 vivo 1.5
472 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
473 vivo 1.25 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
474 vivo 1.1 insinto /etc/logrotate.d
475 vivo 1.26 newins "${FILESDIR}/logrotate.mysql" "mysql"
476 vivo 1.1
477     #empty dirs...
478     diropts "-m0750"
479     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
480     dodir "${DATADIR}"
481     keepdir "${DATADIR}"
482     chown -R mysql:mysql "${D}/${DATADIR}"
483     fi
484    
485     diropts "-m0755"
486     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
487     dodir "${folder}"
488     keepdir "${folder}"
489     chown -R mysql:mysql "${D}/${folder}"
490     done
491     fi
492    
493     # docs
494     dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
495     # minimal builds don't have the server
496 vivo 1.26 if ! useq "minimal" ; then
497 vivo 1.1 docinto "support-files"
498     for script in \
499     support-files/my-*.cnf \
500     support-files/magic \
501     support-files/ndb-config-2-node.ini
502     do
503     dodoc "${script}"
504     done
505    
506     docinto "scripts"
507 vivo 1.4 for script in scripts/mysql* ; do
508     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
509 vivo 1.1 done
510     fi
511 vivo 1.4
512 vivo 1.26 ROOT="${D}" mysql_lib_symlinks
513 vivo 1.15 }
514    
515     mysql_pkg_preinst() {
516    
517 vivo 1.1 enewgroup mysql 60 || die "problem adding group mysql"
518     enewuser mysql 60 -1 /dev/null mysql \
519     || die "problem adding user mysql"
520     }
521    
522     mysql_pkg_postinst() {
523    
524     mysql_init_vars
525    
526     # mind at FEATURES=collision-protect before to remove this
527     [ -d "${ROOT}/var/log/mysql" ] \
528     || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
529    
530     #secure the logfiles... does this bother anybody?
531     touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
532     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
533     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
534    
535 vivo 1.26 if ! useq "minimal" ; then
536 vivo 1.1 # your friendly public service announcement...
537     einfo
538     einfo "You might want to run:"
539     einfo "\"emerge --config =${CATEGORY}/${PF}\""
540     einfo "if this is a new install."
541     einfo
542 vivo 1.21 mysql_version_is_at_least "5.01.00.00" \
543     || einfo "InnoDB is not optional as of MySQL-4.0.24, at the request of upstream."
544 vivo 1.4 fi
545 vivo 1.1 }
546    
547     mysql_pkg_config() {
548     mysql_init_vars
549     [[ -z "${DATADIR}" ]] && die "sorry, unable to find DATADIR"
550    
551     if built_with_use dev-db/mysql minimal; then
552     die "Minimal builds do NOT include the MySQL server"
553     fi
554    
555     local pwd1="a"
556     local pwd2="b"
557     local maxtry=5
558    
559     if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
560     ewarn "You have already a MySQL database in place."
561     ewarn "(${ROOT}/${DATADIR}/*)"
562     ewarn "Please rename or delete it if you wish to replace it."
563     die "MySQL database already exists!"
564     fi
565    
566     einfo "Creating the mysql database and setting proper"
567     einfo "permissions on it..."
568    
569     einfo "Insert a password for the mysql 'root' user"
570     ewarn "Avoid [\"'\\_%] characters in the password"
571    
572     read -rsp " >" pwd1 ; echo
573     einfo "Check the password"
574     read -rsp " >" pwd2 ; echo
575    
576     if [[ "x$pwd1" != "x$pwd2" ]] ; then
577     die "Passwords are not the same"
578     fi
579    
580     local options=""
581     local sqltmp="$(emktemp)"
582    
583 vivo 1.8 local help_tables="${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
584 vivo 1.1 [[ -r "${help_tables}" ]] \
585 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
586 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
587     help_tables="${TMPDIR}/fill_help_tables.sql"
588    
589 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
590 vivo 1.26 ${ROOT}/usr/bin/mysql_install_db | grep -B5 -A999 -i "ERROR"
591 vivo 1.4 popd &>/dev/null
592 vivo 1.26 [[ -f ${ROOT}/${DATADIR}/mysql/user.frm ]] \
593     || die "MySQL databases not installed"
594 vivo 1.1 chown -R mysql:mysql ${ROOT}/${DATADIR} 2> /dev/null
595     chmod 0750 ${ROOT}/${DATADIR} 2> /dev/null
596    
597     if mysql_version_is_at_least "4.01.03.00" ; then
598     options="--skip-ndbcluster"
599    
600     # Filling timezones, see
601     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
602 vivo 1.26 ${ROOT}/usr/bin/mysql_tzinfo_to_sql ${ROOT}/usr/share/zoneinfo \
603 vivo 1.1 > "${sqltmp}" 2>/dev/null
604    
605     if [[ -r "${help_tables}" ]] ; then
606     cat "${help_tables}" >> "${sqltmp}"
607     fi
608     fi
609    
610 vivo 1.14 local socket=${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock
611 vivo 1.26 local pidfile=${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid
612     local mysqld="${ROOT}/usr/sbin/mysqld \
613 vivo 1.1 ${options} \
614     --user=mysql \
615     --skip-grant-tables \
616     --basedir=${ROOT}/usr \
617     --datadir=${ROOT}/${DATADIR} \
618     --skip-innodb \
619     --skip-bdb \
620     --skip-networking \
621     --max_allowed_packet=8M \
622     --net_buffer_length=16K \
623     --socket=${socket} \
624     --pid-file=${pidfile}"
625     $mysqld &
626     while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
627     maxtry=$(($maxtry-1))
628     echo -n "."
629     sleep 1
630     done
631    
632     # do this from memory we don't want clear text password in temp files
633     local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
634 vivo 1.26 ${ROOT}/usr/bin/mysql \
635 vivo 1.1 --socket=${socket} \
636     -hlocalhost \
637     -e "${sql}"
638    
639     einfo "Loading \"zoneinfo\" this step may require few seconds"
640    
641 vivo 1.26 ${ROOT}/usr/bin/mysql \
642 vivo 1.1 --socket=${socket} \
643     -hlocalhost \
644     -uroot \
645     -p"${pwd1}" \
646     mysql < "${sqltmp}"
647    
648     # server stop and cleanup
649     kill $(< "${pidfile}" )
650     rm "${sqltmp}"
651     einfo "stopping the server,"
652     wait %1
653     einfo "done"
654     }
655    
656     mysql_pkg_postrm() {
657     mysql_lib_symlinks
658 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20