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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.34 - (hide annotations) (download)
Fri Oct 13 12:36:08 2006 UTC (7 years, 11 months ago) by chtekk
Branch: MAIN
Changes since 1.33: +5 -4 lines
Improve flags ordering, add -fno-strict-aliasing to fix failures on tests.

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

  ViewVC Help
Powered by ViewVC 1.1.20