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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.33 - (hide annotations) (download)
Thu Aug 31 21:37:03 2006 UTC (8 years ago) by chtekk
Branch: MAIN
Changes since 1.32: +2 -2 lines
Add support for mysql re-releases, thanks to vivo.

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.32 # $Header: $
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     # CFLAGS="${CFLAGS/-O?/} -O3"
414 vivo 1.1 export CXXFLAGS="${CXXFLAGS} -felide-constructors -fno-exceptions -fno-rtti"
415     mysql_version_is_at_least "5.00.00.00" \
416     && export CXXFLAGS="${CXXFLAGS} -fno-implicit-templates"
417    
418     econf \
419     --libexecdir="/usr/sbin" \
420     --sysconfdir="${MY_SYSCONFDIR}" \
421     --localstatedir="${MY_LOCALSTATEDIR}" \
422     --sharedstatedir="${MY_SHAREDSTATEDIR}" \
423     --libdir="${MY_LIBDIR}" \
424     --includedir="${MY_INCLUDEDIR}" \
425     --with-low-memory \
426     --enable-local-infile \
427     --with-mysqld-user=mysql \
428     --with-client-ldflags=-lstdc++ \
429     --enable-thread-safe-client \
430     --with-comment="Gentoo Linux ${PF}" \
431 vivo 1.14 --with-unix-socket-path="/var/run/mysqld/mysqld.sock" \
432 vivo 1.1 --without-readline \
433     --without-docs \
434     ${myconf} || die "bad ./configure"
435    
436 chtekk 1.30 # TODO: Move this before autoreconf !!!
437 vivo 1.21 find . -type f -name Makefile -print0 \
438     | xargs -0 -n100 sed -i \
439     -e 's|^pkglibdir *= *$(libdir)/mysql|pkglibdir = $(libdir)|;s|^pkgincludedir *= *$(includedir)/mysql|pkgincludedir = $(includedir)|'
440 vivo 1.1
441     emake || die "compile problem"
442     }
443    
444     mysql_src_install() {
445 chtekk 1.30 # Make sure the vars are correctly initialized
446     mysql_init_vars
447 vivo 1.1
448 chtekk 1.30 make install DESTDIR="${D}" benchdir_root="${MY_SHAREDSTATEDIR}" || die "make install error"
449 vivo 1.1
450     insinto "${MY_INCLUDEDIR}"
451     doins "${MY_INCLUDEDIR}"/my_{config,dir}.h
452    
453 chtekk 1.30 # Convenience links
454 vivo 1.26 dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlanalyze"
455     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqlrepair"
456     dosym "/usr/bin/mysqlcheck" "/usr/bin/mysqloptimize"
457 vivo 1.1
458 chtekk 1.30 # Various junk (my-*.cnf moved elsewhere)
459     rm -Rf "${D}/usr/share/info"
460     for removeme in "mysql-log-rotate" mysql.server* binary-configure* my-*.cnf mi_test_all* ; do
461     rm -f "${D}"/usr/share/mysql/${removeme}
462 vivo 1.1 done
463    
464 chtekk 1.30 # Clean up stuff for a minimal build
465 vivo 1.26 if useq "minimal" ; then
466 chtekk 1.30 rm -Rf "${D}${MY_SHAREDSTATEDIR}"/{mysql-test,sql-bench}
467     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}
468 vivo 1.26 rm -f "${D}/usr/sbin/mysqld"
469 chtekk 1.30 rm -f "${D}${MY_LIBDIR}"/lib{heap,merge,nisam,my{sys,strings,sqld,isammrg,isam},vio,dbug}.a
470 vivo 1.1 fi
471    
472 chtekk 1.30 # Configuration stuff
473     if mysql_version_is_at_least "4.01.00.00" ; then
474     mysql_mycnf_version="4.1"
475     else
476     mysql_mycnf_version="4.0"
477     fi
478 vivo 1.1 insinto "${MY_SYSCONFDIR}"
479 chtekk 1.30 doins "scripts/mysqlaccess.conf"
480     sed -e "s!@DATADIR@!${DATADIR}!g" \
481     "${FILESDIR}/my.cnf-${mysql_mycnf_version}" \
482 vivo 1.9 > "${TMPDIR}/my.cnf.ok"
483 chtekk 1.30 if mysql_version_is_at_least "4.01.00.00" && useq "latin1" ; then
484     sed -e "s|utf8|latin1|g" -i "${TMPDIR}/my.cnf.ok"
485     fi
486 vivo 1.9 newins "${TMPDIR}/my.cnf.ok" my.cnf
487    
488 vivo 1.1 insinto "/etc/conf.d"
489 chtekk 1.30 newins "${FILESDIR}/mysql.conf.d" "mysql"
490 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
491 vivo 1.25 && newins "${FILESDIR}/mysqlmanager.conf.d" "mysqlmanager"
492 vivo 1.1
493 chtekk 1.30 # Minimal builds don't have the MySQL server
494 vivo 1.26 if ! useq "minimal" ; then
495 chtekk 1.30 exeinto "/etc/init.d"
496     newexe "${FILESDIR}/mysql.rc6" "mysql"
497 vivo 1.1 mysql_version_is_at_least "5.00.11.00" \
498 vivo 1.25 && newexe "${FILESDIR}/mysqlmanager.rc6" "mysqlmanager"
499 chtekk 1.30
500     insinto "/etc/logrotate.d"
501 vivo 1.26 newins "${FILESDIR}/logrotate.mysql" "mysql"
502 vivo 1.1
503 chtekk 1.30 # Empty directories ...
504 vivo 1.1 diropts "-m0750"
505     if [[ "${PREVIOUS_DATADIR}" != "yes" ]] ; then
506     dodir "${DATADIR}"
507     keepdir "${DATADIR}"
508     chown -R mysql:mysql "${D}/${DATADIR}"
509     fi
510    
511     diropts "-m0755"
512     for folder in "${MY_LOGDIR}" "/var/run/mysqld" ; do
513     dodir "${folder}"
514     keepdir "${folder}"
515     chown -R mysql:mysql "${D}/${folder}"
516     done
517     fi
518    
519 chtekk 1.30 # Docs
520 vivo 1.1 dodoc README COPYING ChangeLog EXCEPTIONS-CLIENT INSTALL-SOURCE
521 chtekk 1.30
522     # Minimal builds don't have the MySQL server
523 vivo 1.26 if ! useq "minimal" ; then
524 vivo 1.1 docinto "support-files"
525     for script in \
526     support-files/my-*.cnf \
527     support-files/magic \
528     support-files/ndb-config-2-node.ini
529     do
530     dodoc "${script}"
531     done
532    
533     docinto "scripts"
534 vivo 1.4 for script in scripts/mysql* ; do
535     [[ "${script%.sh}" == "${script}" ]] && dodoc "${script}"
536 vivo 1.1 done
537     fi
538 vivo 1.4
539 vivo 1.26 ROOT="${D}" mysql_lib_symlinks
540 vivo 1.15 }
541    
542     mysql_pkg_preinst() {
543 chtekk 1.30 enewgroup mysql 60 || die "problem adding 'mysql' group"
544     enewuser mysql 60 -1 /dev/null mysql || die "problem adding 'mysql' user"
545 vivo 1.1 }
546    
547     mysql_pkg_postinst() {
548 chtekk 1.30 # Make sure the vars are correctly initialized
549 vivo 1.1 mysql_init_vars
550    
551 chtekk 1.30 # Check FEATURES="collision-protect" before removing this
552     [[ -d "${ROOT}/var/log/mysql" ]] || install -d -m0750 -o mysql -g mysql "${ROOT}${MY_LOGDIR}"
553 vivo 1.1
554 chtekk 1.30 # Secure the logfiles
555 vivo 1.1 touch "${ROOT}${MY_LOGDIR}"/mysql.{log,err}
556     chown mysql:mysql "${ROOT}${MY_LOGDIR}"/mysql*
557     chmod 0660 "${ROOT}${MY_LOGDIR}"/mysql*
558    
559 vivo 1.26 if ! useq "minimal" ; then
560 chtekk 1.30 # Your friendly public service announcement ...
561 vivo 1.1 einfo
562     einfo "You might want to run:"
563     einfo "\"emerge --config =${CATEGORY}/${PF}\""
564     einfo "if this is a new install."
565     einfo
566 vivo 1.21 mysql_version_is_at_least "5.01.00.00" \
567 chtekk 1.30 || einfo "InnoDB is *not* optional as of MySQL-4.0.24, at the request of upstream."
568 vivo 1.4 fi
569 vivo 1.1 }
570    
571     mysql_pkg_config() {
572 chtekk 1.30 # Make sure the vars are correctly initialized
573 vivo 1.1 mysql_init_vars
574    
575 chtekk 1.30 [[ -z "${DATADIR}" ]] && die "Sorry, unable to find DATADIR"
576    
577     if built_with_use dev-db/mysql minimal ; then
578 vivo 1.1 die "Minimal builds do NOT include the MySQL server"
579     fi
580    
581     local pwd1="a"
582     local pwd2="b"
583     local maxtry=5
584    
585     if [[ -d "${ROOT}/${DATADIR}/mysql" ]] ; then
586     ewarn "You have already a MySQL database in place."
587     ewarn "(${ROOT}/${DATADIR}/*)"
588     ewarn "Please rename or delete it if you wish to replace it."
589     die "MySQL database already exists!"
590     fi
591    
592     einfo "Creating the mysql database and setting proper"
593 chtekk 1.30 einfo "permissions on it ..."
594 vivo 1.1
595     einfo "Insert a password for the mysql 'root' user"
596     ewarn "Avoid [\"'\\_%] characters in the password"
597 chtekk 1.30 read -rsp " >" pwd1 ; echo
598 vivo 1.1
599 chtekk 1.30 einfo "Retype the password"
600 vivo 1.1 read -rsp " >" pwd2 ; echo
601    
602     if [[ "x$pwd1" != "x$pwd2" ]] ; then
603     die "Passwords are not the same"
604     fi
605    
606     local options=""
607     local sqltmp="$(emktemp)"
608    
609 chtekk 1.30 local help_tables="${ROOT}${MY_SHAREDSTATEDIR}/fill_help_tables.sql"
610 vivo 1.1 [[ -r "${help_tables}" ]] \
611 vivo 1.8 && cp "${help_tables}" "${TMPDIR}/fill_help_tables.sql" \
612 vivo 1.1 || touch "${TMPDIR}/fill_help_tables.sql"
613     help_tables="${TMPDIR}/fill_help_tables.sql"
614    
615 vivo 1.4 pushd "${TMPDIR}" &>/dev/null
616 chtekk 1.30 "${ROOT}/usr/bin/mysql_install_db" | grep -B5 -A999 -i "ERROR"
617 vivo 1.4 popd &>/dev/null
618 chtekk 1.30 [[ -f "${ROOT}/${DATADIR}/mysql/user.frm" ]] \
619 vivo 1.26 || die "MySQL databases not installed"
620 chtekk 1.30 chown -R mysql:mysql "${ROOT}/${DATADIR}" 2> /dev/null
621     chmod 0750 "${ROOT}/${DATADIR}" 2> /dev/null
622 vivo 1.1
623     if mysql_version_is_at_least "4.01.03.00" ; then
624     options="--skip-ndbcluster"
625    
626     # Filling timezones, see
627     # http://dev.mysql.com/doc/mysql/en/time-zone-support.html
628 chtekk 1.30 "${ROOT}/usr/bin/mysql_tzinfo_to_sql" "${ROOT}/usr/share/zoneinfo" > "${sqltmp}" 2>/dev/null
629 vivo 1.1
630     if [[ -r "${help_tables}" ]] ; then
631     cat "${help_tables}" >> "${sqltmp}"
632     fi
633     fi
634    
635 chtekk 1.30 local socket="${ROOT}/var/run/mysqld/mysqld${RANDOM}.sock"
636     local pidfile="${ROOT}/var/run/mysqld/mysqld${RANDOM}.pid"
637 vivo 1.26 local mysqld="${ROOT}/usr/sbin/mysqld \
638 vivo 1.1 ${options} \
639     --user=mysql \
640     --skip-grant-tables \
641     --basedir=${ROOT}/usr \
642     --datadir=${ROOT}/${DATADIR} \
643     --skip-innodb \
644     --skip-bdb \
645     --skip-networking \
646     --max_allowed_packet=8M \
647     --net_buffer_length=16K \
648     --socket=${socket} \
649     --pid-file=${pidfile}"
650 chtekk 1.30 ${mysqld} &
651 vivo 1.1 while ! [[ -S "${socket}" || "${maxtry}" -lt 1 ]] ; do
652 chtekk 1.30 maxtry=$((${maxtry}-1))
653 vivo 1.1 echo -n "."
654     sleep 1
655     done
656    
657 chtekk 1.30 # Do this from memory, as we don't want clear text passwords in temp files
658 vivo 1.1 local sql="UPDATE mysql.user SET Password = PASSWORD('${pwd1}') WHERE USER='root'"
659 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
660 vivo 1.1 --socket=${socket} \
661     -hlocalhost \
662     -e "${sql}"
663    
664 chtekk 1.30 einfo "Loading \"zoneinfo\", this step may require a few seconds ..."
665 vivo 1.1
666 chtekk 1.30 "${ROOT}/usr/bin/mysql" \
667 vivo 1.1 --socket=${socket} \
668     -hlocalhost \
669     -uroot \
670     -p"${pwd1}" \
671     mysql < "${sqltmp}"
672    
673 chtekk 1.30 # Stop the server and cleanup
674 vivo 1.1 kill $(< "${pidfile}" )
675 chtekk 1.30 rm -f "${sqltmp}"
676     einfo "Stopping the server ..."
677 vivo 1.1 wait %1
678 chtekk 1.30 einfo "Done"
679 vivo 1.1 }
680    
681     mysql_pkg_postrm() {
682     mysql_lib_symlinks
683 vivo 1.25 }

  ViewVC Help
Powered by ViewVC 1.1.20