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

Contents of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.30 - (hide annotations) (download)
Fri May 5 19:49:43 2006 UTC (8 years, 2 months ago) by chtekk
Branch: MAIN
Changes since 1.29: +241 -220 lines
Sync with overlay.

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

  ViewVC Help
Powered by ViewVC 1.1.20