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

Diff of /eclass/mysql.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

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

Legend:
Removed from v.1.25  
changed lines
  Added in v.1.30

  ViewVC Help
Powered by ViewVC 1.1.20