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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.26 - (hide annotations) (download)
Fri Mar 17 20:17:53 2006 UTC (8 years, 5 months ago) by vivo
Branch: MAIN
Changes since 1.25: +111 -144 lines
further cleanup, see MySQL changelog

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

  ViewVC Help
Powered by ViewVC 1.1.20