1 |
commit: 02fc0893c88cb59d6d9eddb2300a3c00ce791d08 |
2 |
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
3 |
AuthorDate: Wed Aug 14 22:08:35 2019 +0000 |
4 |
Commit: Thomas Deutschmann <whissi <AT> gentoo <DOT> org> |
5 |
CommitDate: Wed Aug 14 22:56:07 2019 +0000 |
6 |
URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=02fc0893 |
7 |
|
8 |
dev-db/mysql: fix prefix support |
9 |
|
10 |
Package-Manager: Portage-2.3.71, Repoman-2.3.17 |
11 |
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org> |
12 |
|
13 |
...8.0.17_pre3.ebuild => mysql-8.0.17_pre4.ebuild} | 304 +++++++++++++-------- |
14 |
1 file changed, 197 insertions(+), 107 deletions(-) |
15 |
|
16 |
diff --git a/dev-db/mysql/mysql-8.0.17_pre3.ebuild b/dev-db/mysql/mysql-8.0.17_pre4.ebuild |
17 |
similarity index 79% |
18 |
rename from dev-db/mysql/mysql-8.0.17_pre3.ebuild |
19 |
rename to dev-db/mysql/mysql-8.0.17_pre4.ebuild |
20 |
index 5b23f974d76..e83b57d1ba0 100644 |
21 |
--- a/dev-db/mysql/mysql-8.0.17_pre3.ebuild |
22 |
+++ b/dev-db/mysql/mysql-8.0.17_pre4.ebuild |
23 |
@@ -6,7 +6,7 @@ MY_EXTRAS_VER="20190802-1549Z" |
24 |
|
25 |
CMAKE_MAKEFILE_GENERATOR=emake |
26 |
|
27 |
-inherit cmake-utils eutils flag-o-matic linux-info \ |
28 |
+inherit cmake-utils flag-o-matic linux-info \ |
29 |
multiprocessing prefix toolchain-funcs |
30 |
|
31 |
MY_PV="${PV//_pre*}" |
32 |
@@ -107,49 +107,11 @@ RDEPEND="${COMMON_DEPEND} |
33 |
PDEPEND="perl? ( >=dev-perl/DBD-mysql-2.9004 )" |
34 |
|
35 |
mysql_init_vars() { |
36 |
- MY_SHAREDSTATEDIR=${MY_SHAREDSTATEDIR="${EPREFIX}/usr/share/mysql"} |
37 |
- MY_SYSCONFDIR=${MY_SYSCONFDIR="${EPREFIX}/etc/mysql"} |
38 |
- MY_LOCALSTATEDIR=${MY_LOCALSTATEDIR="${EPREFIX}/var/lib/mysql"} |
39 |
- MY_LOGDIR=${MY_LOGDIR="${EPREFIX}/var/log/mysql"} |
40 |
- |
41 |
- if [[ -z "${MY_DATADIR}" ]] ; then |
42 |
- MY_DATADIR="" |
43 |
- if [[ -f "${MY_SYSCONFDIR}/my.cnf" ]] ; then |
44 |
- MY_DATADIR=$(my_print_defaults mysqld 2>/dev/null \ |
45 |
- | sed -ne '/datadir/s|^--datadir=||p' \ |
46 |
- | tail -n1) |
47 |
- |
48 |
- if [[ -z "${MY_DATADIR}" ]] ; then |
49 |
- MY_DATADIR=$(grep ^datadir "${MY_SYSCONFDIR}/my.cnf" \ |
50 |
- | sed -e 's/.*=\s*//' \ |
51 |
- | tail -n1) |
52 |
- fi |
53 |
- fi |
54 |
- |
55 |
- if [[ -z "${MY_DATADIR}" ]] ; then |
56 |
- MY_DATADIR="${MY_LOCALSTATEDIR}" |
57 |
- einfo "Using default MY_DATADIR" |
58 |
- fi |
59 |
- elog "MySQL MY_DATADIR is ${MY_DATADIR}" |
60 |
- |
61 |
- if [[ -z "${PREVIOUS_DATADIR}" ]] ; then |
62 |
- if [[ -e "${MY_DATADIR}" ]] ; then |
63 |
- # If you get this and you're wondering about it, see bug #207636 |
64 |
- elog "MySQL datadir found in ${MY_DATADIR}" |
65 |
- elog "A new one will not be created." |
66 |
- PREVIOUS_DATADIR="yes" |
67 |
- else |
68 |
- PREVIOUS_DATADIR="no" |
69 |
- fi |
70 |
- export PREVIOUS_DATADIR |
71 |
- fi |
72 |
- else |
73 |
- if [[ ${EBUILD_PHASE} == "config" ]] ; then |
74 |
- MY_DATADIR=$(my_print_defaults mysqld 2>/dev/null \ |
75 |
- | sed -ne '/datadir/s|^--datadir=||p' \ |
76 |
- | tail -n1) |
77 |
- fi |
78 |
- fi |
79 |
+ : ${MY_SHAREDSTATEDIR="${EPREFIX}/usr/share/mysql"} |
80 |
+ : ${MY_SYSCONFDIR="${EPREFIX}/etc/mysql"} |
81 |
+ : ${MY_LOCALSTATEDIR="${EPREFIX}/var/lib/mysql"} |
82 |
+ : ${MY_LOGDIR="${EPREFIX}/var/log/mysql"} |
83 |
+ MY_DATADIR="${MY_LOCALSTATEDIR}" |
84 |
|
85 |
export MY_SHAREDSTATEDIR MY_SYSCONFDIR |
86 |
export MY_LOCALSTATEDIR MY_LOGDIR |
87 |
@@ -500,7 +462,7 @@ src_install() { |
88 |
# testsuite. It DOES have a use to be installed, esp. when you want to do a |
89 |
# validation of your database configuration after tuning it. |
90 |
if ! use test ; then |
91 |
- rm -rf "${D}/${MY_SHAREDSTATEDIR}/mysql-test" |
92 |
+ rm -rf "${ED}/${MY_SHAREDSTATEDIR#${EPREFIX}}/mysql-test" |
93 |
fi |
94 |
|
95 |
# Configuration stuff |
96 |
@@ -556,7 +518,8 @@ pkg_postinst() { |
97 |
mysql_init_vars |
98 |
|
99 |
# Create log directory securely if it does not exist |
100 |
- [[ -d "${EROOT}/${MY_LOGDIR#/}" ]] || install -d -m0750 -o mysql -g mysql "${EROOT}/${MY_LOGDIR#/}" |
101 |
+ # NOTE: $MY_LOGDIR contains $EPREFIX by default |
102 |
+ [[ -d "${MY_LOGDIR}" ]] || install -d -m0750 -o mysql -g mysql "${MY_LOGDIR}" |
103 |
|
104 |
# Note about configuration change |
105 |
einfo |
106 |
@@ -598,11 +561,38 @@ pkg_config() { |
107 |
die "'${my_print_defaults_binary}' not found! Please re-install dev-db/mysql-connector-c!" |
108 |
fi |
109 |
|
110 |
+ if [[ -z "${MYSQL_USER}" ]] ; then |
111 |
+ MYSQL_USER=mysql |
112 |
+ if use prefix ; then |
113 |
+ MYSQL_USER=$(id -u -n 2>/dev/null) |
114 |
+ if [[ -z "${MYSQL_USER}" ]] ; then |
115 |
+ die "Failed to determine current username!" |
116 |
+ fi |
117 |
+ fi |
118 |
+ fi |
119 |
+ |
120 |
+ if [[ -z "${MYSQL_GROUP}" ]] ; then |
121 |
+ MYSQL_GROUP=mysql |
122 |
+ if use prefix ; then |
123 |
+ MYSQL_GROUP=$(id -g -n 2>/dev/null) |
124 |
+ if [[ -z "${MYSQL_GROUP}" ]] ; then |
125 |
+ die "Failed to determine current user groupname!" |
126 |
+ fi |
127 |
+ fi |
128 |
+ fi |
129 |
+ |
130 |
+ einfo "Will use username '${MYSQL_USER}' and group '${MYSQL_GROUP}' ..." |
131 |
+ |
132 |
_getoptval() { |
133 |
local section="$1" |
134 |
local flag="--${2}=" |
135 |
local extra_options="${3}" |
136 |
- local results=( $("${my_print_defaults_binary}" ${extra_options} ${section} | sed -n "/^${flag}/s,${flag},,gp") ) |
137 |
+ local cmd=( |
138 |
+ "${my_print_defaults_binary}" |
139 |
+ "${extra_options}" |
140 |
+ "${section}" |
141 |
+ ) |
142 |
+ local results=( $(eval "${cmd[@]}" 2>/dev/null | sed -n "/^${flag}/s,${flag},,gp") ) |
143 |
|
144 |
if [[ ${#results[@]} -gt 0 ]] ; then |
145 |
# When option is set multiple times only return last value |
146 |
@@ -610,33 +600,81 @@ pkg_config() { |
147 |
fi |
148 |
} |
149 |
|
150 |
- local old_MY_DATADIR="${MY_DATADIR}" |
151 |
- local old_HOME="${HOME}" |
152 |
+ _mktemp_dry() { |
153 |
+ # emktemp has no --dry-run option |
154 |
+ local template="${1}" |
155 |
+ |
156 |
+ if [[ -z "${template}" ]] ; then |
157 |
+ if [[ -z "${T}" ]] ; then |
158 |
+ template="/tmp/XXXXXXX" |
159 |
+ else |
160 |
+ template="${T}/XXXXXXX" |
161 |
+ fi |
162 |
+ fi |
163 |
+ |
164 |
+ local template_wo_X=${template//X/} |
165 |
+ local n_X |
166 |
+ let n_X=${#template}-${#template_wo_X} |
167 |
+ if [[ ${n_X} -lt 3 ]] ; then |
168 |
+ echo "${FUNCNAME[0]}: too few X's in template ‘${template}’" >&2 |
169 |
+ return |
170 |
+ fi |
171 |
+ |
172 |
+ local attempts=0 |
173 |
+ local character tmpfile |
174 |
+ while [[ true ]] ; do |
175 |
+ let attempts=attempts+1 |
176 |
+ |
177 |
+ new_file= |
178 |
+ while read -n1 character ; do |
179 |
+ if [[ "${character}" == "X" ]] ; then |
180 |
+ tmpfile+="${RANDOM:0:1}" |
181 |
+ else |
182 |
+ tmpfile+="${character}" |
183 |
+ fi |
184 |
+ done < <(echo -n "${template}") |
185 |
+ |
186 |
+ if [[ ! -f "${tmpfile}" ]] |
187 |
+ then |
188 |
+ echo "${tmpfile}" |
189 |
+ return |
190 |
+ fi |
191 |
+ |
192 |
+ if [[ ${attempts} -ge 100 ]] ; then |
193 |
+ echo "${FUNCNAME[0]}: Cannot create temporary file after 100 attempts." >&2 |
194 |
+ return |
195 |
+ fi |
196 |
+ done |
197 |
+ } |
198 |
+ |
199 |
# my_print_defaults needs to read stuff in $HOME/.my.cnf |
200 |
local -x HOME="${EROOT}/root" |
201 |
|
202 |
# Make sure the vars are correctly initialized |
203 |
mysql_init_vars |
204 |
|
205 |
+ # Read currently set data directory |
206 |
+ MY_DATADIR="$(_getoptval mysqld datadir "--defaults-file='${MY_SYSCONFDIR}/my.cnf'")" |
207 |
+ |
208 |
# Bug #213475 - MySQL _will_ object strenously if your machine is named |
209 |
# localhost. Also causes weird failures. |
210 |
[[ "${HOSTNAME}" == "localhost" ]] && die "Your machine must NOT be named localhost" |
211 |
|
212 |
if [[ -z "${MY_DATADIR}" ]] ; then |
213 |
die "Sorry, unable to find MY_DATADIR!" |
214 |
- elif [[ -d "${EROOT}/${MY_DATADIR#/}/mysql" ]] ; then |
215 |
- ewarn "Looks like your data directory '${EROOT}/${MY_DATADIR#/}' is already initialized!" |
216 |
+ elif [[ -d "${MY_DATADIR}/mysql" ]] ; then |
217 |
+ ewarn "Looks like your data directory '${MY_DATADIR}' is already initialized!" |
218 |
ewarn "Please rename or delete its content if you wish to initialize a new data directory." |
219 |
- die "${PN} data directory at '${EROOT}/${MY_DATADIR#/}' looks already initialized!" |
220 |
+ die "${PN} data directory at '${MY_DATADIR}' looks already initialized!" |
221 |
else |
222 |
- einfo "${PN} data directory detected as '${EROOT}/${MY_DATADIR#/}' ..." |
223 |
+ einfo "${PN} data directory detected as '${MY_DATADIR}' ..." |
224 |
fi |
225 |
|
226 |
- MYSQL_TMPDIR="$(_getoptval mysqld tmpdir)" |
227 |
+ MYSQL_TMPDIR="$(_getoptval mysqld tmpdir "--defaults-file='${MY_SYSCONFDIR}/my.cnf'")" |
228 |
# These are dir+prefix |
229 |
- MYSQL_LOG_BIN="$(_getoptval mysqld log-bin)" |
230 |
+ MYSQL_LOG_BIN="$(_getoptval mysqld log-bin "--defaults-file='${MY_SYSCONFDIR}/my.cnf'")" |
231 |
MYSQL_LOG_BIN=${MYSQL_LOG_BIN%/*} |
232 |
- MYSQL_RELAY_LOG="$(_getoptval mysqld relay-log)" |
233 |
+ MYSQL_RELAY_LOG="$(_getoptval mysqld relay-log "--defaults-file='${MY_SYSCONFDIR}/my.cnf'")" |
234 |
MYSQL_RELAY_LOG=${MYSQL_RELAY_LOG%/*} |
235 |
|
236 |
# Create missing directories. |
237 |
@@ -646,79 +684,129 @@ pkg_config() { |
238 |
PID_DIR="${EROOT}/run/mysqld" |
239 |
if [[ ! -d "${PID_DIR}" ]] ; then |
240 |
einfo "Creating ${PN} PID directory '${PID_DIR}' ..." |
241 |
- install -d -m 755 -o mysql -g mysql "${PID_DIR}" \ |
242 |
+ install -d -m 755 -o ${MYSQL_USER} -g ${MYSQL_GROUP} "${PID_DIR}" \ |
243 |
|| die "Failed to create PID directory '${PID_DIR}'!" |
244 |
fi |
245 |
|
246 |
- local _pid_dir_testfile="$(mktemp --dry-run "${PID_DIR}/.pkg_config-access-test.XXXXXXXXX")" |
247 |
- su -s /bin/sh -c "touch ${_pid_dir_testfile}" mysql &>/dev/null |
248 |
+ local _pid_dir_testfile="$(_mktemp_dry "${PID_DIR}/.pkg_config-access-test.XXXXXXXXX")" |
249 |
+ [[ -z "${_pid_dir_testfile}" ]] \ |
250 |
+ && die "_mktemp_dry() for '${PID_DIR}/.pkg_config-access-test.XXXXXXXXX' failed!" |
251 |
+ |
252 |
+ if use prefix ; then |
253 |
+ touch "${_pid_dir_testfile}" &>/dev/null |
254 |
+ else |
255 |
+ su -s /bin/sh -c "touch ${_pid_dir_testfile}" ${MYSQL_USER} &>/dev/null |
256 |
+ fi |
257 |
+ |
258 |
if [[ $? -ne 0 ]] ; then |
259 |
- die "mysql user cannot write into PID dir '${PID_DIR}'!" |
260 |
+ die "${MYSQL_USER} user cannot write into PID dir '${PID_DIR}'!" |
261 |
else |
262 |
rm "${_pid_dir_testfile}" || die |
263 |
unset _pid_dir_testfile |
264 |
fi |
265 |
|
266 |
- if [[ ! -d "${EROOT}/${MY_DATADIR#/}" ]] ; then |
267 |
- einfo "Creating ${PN} data directory '${EROOT}/${MY_DATADIR#/}' ..." |
268 |
- install -d -m 770 -o mysql -g mysql "${EROOT}/${MY_DATADIR#/}" \ |
269 |
- || die "Failed to create ${PN} data directory '${EROOT}/${MY_DATADIR#/}'!" |
270 |
+ if [[ ! -d "${MY_DATADIR}" ]] ; then |
271 |
+ einfo "Creating ${PN} data directory '${MY_DATADIR}' ..." |
272 |
+ install -d -m 770 -o ${MYSQL_USER} -g ${MYSQL_GROUP} "${MY_DATADIR}" \ |
273 |
+ || die "Failed to create ${PN} data directory '${MY_DATADIR}'!" |
274 |
+ fi |
275 |
+ |
276 |
+ local _my_datadir_testfile="$(_mktemp_dry "${MY_DATADIR}/.pkg_config-access-test.XXXXXXXXX")" |
277 |
+ [[ -z "${_my_datadir_testfile}" ]] \ |
278 |
+ && die "_mktemp_dry() for '${MY_DATADIR}/.pkg_config-access-test.XXXXXXXXX' failed!" |
279 |
+ |
280 |
+ if use prefix ; then |
281 |
+ touch "${_my_datadir_testfile}" &>/dev/null |
282 |
+ else |
283 |
+ su -s /bin/sh -c "touch ${_my_datadir_testfile}" ${MYSQL_USER} &>/dev/null |
284 |
fi |
285 |
|
286 |
- local _my_datadir_testfile="$(mktemp --dry-run "${EROOT}/${MY_DATADIR#/}/.pkg_config-access-test.XXXXXXXXX")" |
287 |
- su -s /bin/sh -c "touch '${_my_datadir_testfile}'" mysql &>/dev/null |
288 |
if [[ $? -ne 0 ]]; then |
289 |
- die "mysql user cannot write into data directory '${EROOT}/${MY_DATADIR#/}'!" |
290 |
+ die "${MYSQL_USER} user cannot write into data directory '${MY_DATADIR}'!" |
291 |
else |
292 |
rm "${_my_datadir_testfile}" || die |
293 |
unset _my_datadir_testfile |
294 |
fi |
295 |
|
296 |
- if [[ -n "${MYSQL_TMPDIR}" && ! -d "${EROOT}/${MYSQL_TMPDIR#/}" ]] ; then |
297 |
- einfo "Creating ${PN} tmpdir '${EROOT}/${MYSQL_TMPDIR#/}' ..." |
298 |
- install -d -m 770 -o mysql -g mysql "${EROOT}/${MYSQL_TMPDIR#/}" \ |
299 |
- || die "Failed to create ${PN} tmpdir '${EROOT}/${MYSQL_TMPDIR#/}'!" |
300 |
+ if [[ -n "${MYSQL_TMPDIR}" && ! -d "${MYSQL_TMPDIR}" ]] ; then |
301 |
+ einfo "Creating ${PN} tmpdir '${MYSQL_TMPDIR}' ..." |
302 |
+ install -d -m 770 -o ${MYSQL_USER} -g ${MYSQL_GROUP} "${MYSQL_TMPDIR}" \ |
303 |
+ || die "Failed to create ${PN} tmpdir '${MYSQL_TMPDIR}'!" |
304 |
fi |
305 |
|
306 |
if [[ -n "${MYSQL_TMPDIR}" ]] ; then |
307 |
- local _my_tmpdir_testfile="$(mktemp --dry-run "${EROOT}/${MYSQL_TMPDIR#/}/.pkg_config-access-test.XXXXXXXXX")" |
308 |
- su -s /bin/sh -c "touch '${_my_tmpdir_testfile}'" mysql &>/dev/null |
309 |
+ local _my_tmpdir_testfile="$(_mktemp_dry "${MYSQL_TMPDIR}/.pkg_config-access-test.XXXXXXXXX")" |
310 |
+ [[ -z "${_my_tmpdir_testfile}" ]] \ |
311 |
+ && die "_mktemp_dry() for '${MYSQL_TMPDIR}/.pkg_config-access-test.XXXXXXXXX' failed!" |
312 |
+ |
313 |
+ if use prefix ; then |
314 |
+ touch "${_my_tmpdir_testfile}" &>/dev/null |
315 |
+ else |
316 |
+ su -s /bin/sh -c "touch ${_my_tmpdir_testfile}" ${MYSQL_USER} &>/dev/null |
317 |
+ fi |
318 |
+ |
319 |
if [[ $? -ne 0 ]]; then |
320 |
- die "mysql user cannot write into data directory '${EROOT}/${MYSQL_TMPDIR#/}'!" |
321 |
+ die "${MYSQL_USER} user cannot write into data directory '${MYSQL_TMPDIR}'!" |
322 |
else |
323 |
rm "${_my_tmpdir_testfile}" || die |
324 |
unset _my_tmpdir_testfile |
325 |
fi |
326 |
+ else |
327 |
+ # If no tmpdir is set, mysqld will use default system tmpdir. |
328 |
+ # However, we are using tmpdir from package manager at the |
329 |
+ # moment which maybe isn't writeable for $MYSQL_USER... |
330 |
+ MYSQL_TMPDIR="$(_mktemp_dry "${T}/mysqld-tmp.XXXXXXXXX")" |
331 |
+ [[ -z "${MYSQL_TMPDIR}" ]] \ |
332 |
+ && die "_mktemp_dry() for '${MYSQL_TMPDIR}' failed!" |
333 |
+ |
334 |
+ mkdir "${MYSQL_TMPDIR}" || die |
335 |
+ chown ${MYSQL_USER} "${MYSQL_TMPDIR}" || die |
336 |
fi |
337 |
|
338 |
- if [[ -n "${MYSQL_LOG_BIN}" && ! -d "${EROOT}/${MYSQL_LOG_BIN#/}" ]] ; then |
339 |
- einfo "Creating ${PN} log-bin directory '${EROOT}/${MYSQL_LOG_BIN}' ..." |
340 |
- install -d -m 770 -o mysql -g mysql "${EROOT}/${MYSQL_LOG_BIN}" \ |
341 |
- || die "Failed to create ${PN} log-bin directory '${EROOT}/${MYSQL_LOG_BIN}'" |
342 |
+ if [[ -n "${MYSQL_LOG_BIN}" && ! -d "${MYSQL_LOG_BIN}" ]] ; then |
343 |
+ einfo "Creating ${PN} log-bin directory '${MYSQL_LOG_BIN}' ..." |
344 |
+ install -d -m 770 -o ${MYSQL_USER} -g ${MYSQL_GROUP} "${MYSQL_LOG_BIN}" \ |
345 |
+ || die "Failed to create ${PN} log-bin directory '${MYSQL_LOG_BIN}'" |
346 |
fi |
347 |
|
348 |
if [[ -n "${MYSQL_LOG_BIN}" ]] ; then |
349 |
- local _my_logbin_testfile="$(mktemp --dry-run "${EROOT}/${MYSQL_LOG_BIN#/}/.pkg_config-access-test.XXXXXXXXX")" |
350 |
- su -s /bin/sh -c "touch '${_my_logbin_testfile}'" mysql &>/dev/null |
351 |
+ local _my_logbin_testfile="$(_mktemp_dry "${MYSQL_LOG_BIN}/.pkg_config-access-test.XXXXXXXXX")" |
352 |
+ [[ -z "${_my_logbin_testfile}" ]] \ |
353 |
+ && die "_mktemp_dry() for '${MYSQL_LOG_BIN}/.pkg_config-access-test.XXXXXXXXX' failed!" |
354 |
+ |
355 |
+ if use prefix ; then |
356 |
+ touch "${_my_logbin_testfile}" &>/dev/null |
357 |
+ else |
358 |
+ su -s /bin/sh -c "touch ${_my_logbin_testfile}" ${MYSQL_USER} &>/dev/null |
359 |
+ fi |
360 |
+ |
361 |
if [[ $? -ne 0 ]]; then |
362 |
- die "mysql user cannot write into data directory '${EROOT}/${MYSQL_LOG_BIN#/}'!" |
363 |
+ die "${MYSQL_USER} user cannot write into log-bin directory '${MYSQL_LOG_BIN}'!" |
364 |
else |
365 |
rm "${_my_logbin_testfile}" || die |
366 |
unset _my_logbin_testfile |
367 |
fi |
368 |
fi |
369 |
|
370 |
- if [[ -n "${MYSQL_RELAY_LOG}" && ! -d "${EROOT}/${MYSQL_RELAY_LOG#/}" ]] ; then |
371 |
- einfo "Creating ${PN} relay-log directory '${EROOT}/${MYSQL_RELAY_LOG#/}' ..." |
372 |
- install -d -m 770 -o mysql -g mysql "${EROOT}/${MYSQL_RELAY_LOG#/}" \ |
373 |
- || die "Failed to create ${PN} relay-log directory '${EROOT}/${MYSQL_RELAY_LOG#/}'!" |
374 |
+ if [[ -n "${MYSQL_RELAY_LOG}" && ! -d "${MYSQL_RELAY_LOG}" ]] ; then |
375 |
+ einfo "Creating ${PN} relay-log directory '${MYSQL_RELAY_LOG}' ..." |
376 |
+ install -d -m 770 -o ${MYSQL_USER} -g ${MYSQL_GROUP} "${MYSQL_RELAY_LOG}" \ |
377 |
+ || die "Failed to create ${PN} relay-log directory '${MYSQL_RELAY_LOG}'!" |
378 |
fi |
379 |
|
380 |
if [[ -n "${MYSQL_RELAY_LOG}" ]] ; then |
381 |
- local _my_relaylog_testfile="$(mktemp --dry-run "${EROOT}/${MYSQL_RELAY_LOG#/}/.pkg_config-access-test.XXXXXXXXX")" |
382 |
- su -s /bin/sh -c "touch '${_my_relaylog_testfile}'" mysql &>/dev/null |
383 |
+ local _my_relaylog_testfile="$(_mktemp_dry "${MYSQL_RELAY_LOG}/.pkg_config-access-test.XXXXXXXXX")" |
384 |
+ [[ -z "${_my_relaylog_testfile}" ]] \ |
385 |
+ && die "_mktemp_dry() for '${MYSQL_RELAY_LOG}/.pkg_config-access-test.XXXXXXXXX' failed!" |
386 |
+ |
387 |
+ if use prefix ; then |
388 |
+ touch "${_my_relaylog_testfile}" &>/dev/null |
389 |
+ else |
390 |
+ su -s /bin/sh -c "touch ${_my_relaylog_testfile}" ${MYSQL_USER} &>/dev/null |
391 |
+ fi |
392 |
+ |
393 |
if [[ $? -ne 0 ]]; then |
394 |
- die "mysql user cannot write into data directory '${EROOT}/${MYSQL_RELAY_LOG#/}'!" |
395 |
+ die "${MYSQL_USER} user cannot write into relay-log directory '${MYSQL_RELAY_LOG}'!" |
396 |
else |
397 |
rm "${_my_relaylog_testfile}" || die |
398 |
unset _my_relaylog_testfile |
399 |
@@ -743,7 +831,7 @@ pkg_config() { |
400 |
|
401 |
if [[ ${#config_files[@]} -gt 0 ]] ; then |
402 |
if [[ -z "${MYSQL_DEFAULT_AUTHENTICATION_PLUGIN}" ]] ; then |
403 |
- local tmp_mysql_default_authentication_plugin |
404 |
+ local user_answer |
405 |
|
406 |
echo |
407 |
einfo "Please select default authentication plugin (enter number or plugin name):" |
408 |
@@ -752,10 +840,10 @@ pkg_config() { |
409 |
einfo |
410 |
einfo "For details see:" |
411 |
einfo "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password" |
412 |
- read -p " >" tmp_mysql_default_authentication_plugin |
413 |
+ read -p " >" user_answer |
414 |
echo |
415 |
|
416 |
- case "${tmp_mysql_default_authentication_plugin}" in |
417 |
+ case "${user_answer}" in |
418 |
1|caching_sha2_password) |
419 |
MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=caching_sha2_password |
420 |
;; |
421 |
@@ -766,9 +854,11 @@ pkg_config() { |
422 |
die "No authentication plugin selected!" |
423 |
;; |
424 |
*) |
425 |
- die "Authentication plugin '${tmp_mysql_default_authentication_plugin}' is unknown/unsupported!" |
426 |
+ die "Authentication plugin '${user_answer}' is unknown/unsupported!" |
427 |
;; |
428 |
esac |
429 |
+ |
430 |
+ unset user_answer |
431 |
fi |
432 |
|
433 |
local cfg_option cfg_option_tabs cfg_section |
434 |
@@ -880,11 +970,11 @@ pkg_config() { |
435 |
die "mysql_tzinfo_to_sql failed!" |
436 |
fi |
437 |
|
438 |
- chown mysql "${tz_sql}" || die |
439 |
+ chown ${MYSQL_USER} "${tz_sql}" || die |
440 |
|
441 |
local mysql_install_log="${TMPDIR}/mysql_install_db.log" |
442 |
touch "${mysql_install_log}" || die |
443 |
- chown mysql "${mysql_install_log}" || die |
444 |
+ chown ${MYSQL_USER} "${mysql_install_log}" || die |
445 |
|
446 |
# --initialize-insecure will not set root password |
447 |
# --initialize would set a random one in the log which we don't need as we set it ourselves |
448 |
@@ -894,17 +984,17 @@ pkg_config() { |
449 |
"--initialize-insecure" |
450 |
"--init-file='${tz_sql}'" |
451 |
"--basedir='${EROOT}/usr'" |
452 |
- "--datadir='${EROOT}/${MY_DATADIR#/}'" |
453 |
- "--tmpdir='${EROOT}/${MYSQL_TMPDIR#/}'" |
454 |
+ "--datadir='${MY_DATADIR}'" |
455 |
+ "--tmpdir='${MYSQL_TMPDIR}'" |
456 |
"--log-error='${mysql_install_log}'" |
457 |
+ "--user=${MYSQL_USER}" |
458 |
) |
459 |
|
460 |
einfo "Initializing ${PN} data directory: ${cmd[@]}" |
461 |
- su -s /bin/sh -c "${cmd[*]}" mysql \ |
462 |
- >>"${mysql_install_log}" 2>&1 |
463 |
+ eval "${cmd[@]}" >>"${mysql_install_log}" 2>&1 |
464 |
|
465 |
- if [[ $? -ne 0 || ! -f "${EROOT}/${MY_DATADIR#/}/mysql.ibd" ]] ; then |
466 |
- grep -B5 -A999 -iE "(Aborting|ERROR|errno)" "${mysql_install_log}" |
467 |
+ if [[ $? -ne 0 || ! -f "${MY_DATADIR}/mysql.ibd" ]] ; then |
468 |
+ grep -B5 -A999 -iE "(Aborting|ERROR|errno)" "${mysql_install_log}" 1>&2 |
469 |
die "Failed to initialize ${PN} data directory. Please review '${mysql_install_log}'!" |
470 |
fi |
471 |
|
472 |
@@ -915,24 +1005,24 @@ pkg_config() { |
473 |
|
474 |
local mysqld_logfile="${TMPDIR}/mysqld.log" |
475 |
touch "${mysqld_logfile}" || die |
476 |
- chown mysql "${mysqld_logfile}" || die |
477 |
+ chown ${MYSQL_USER} "${mysqld_logfile}" || die |
478 |
|
479 |
cmd=( |
480 |
"${mysqld_binary}" |
481 |
"${mysqld_options[@]}" |
482 |
"--basedir='${EROOT}/usr'" |
483 |
- "--datadir='${EROOT}/${MY_DATADIR#/}'" |
484 |
+ "--datadir='${MY_DATADIR}'" |
485 |
+ "--tmpdir='${MYSQL_TMPDIR}'" |
486 |
--max_allowed_packet=8M |
487 |
--net_buffer_length=16K |
488 |
"--socket='${socket}'" |
489 |
"--pid-file='${pidfile}'" |
490 |
- "--tmpdir='${EROOT}/${MYSQL_TMPDIR#/}'" |
491 |
"--log-error='${mysqld_logfile}'" |
492 |
+ "--user=${MYSQL_USER}" |
493 |
) |
494 |
|
495 |
einfo "Starting mysqld to finalize initialization: ${cmd[@]}" |
496 |
- su -s /bin/sh -c "${cmd[*]} &" mysql \ |
497 |
- >>"${mysqld_logfile}" 2>&1 |
498 |
+ eval "${cmd[@]}" >>"${mysqld_logfile}" 2>&1 & |
499 |
|
500 |
echo -n "Waiting for mysqld to accept connections " |
501 |
local maxtry=15 |
502 |
@@ -956,7 +1046,7 @@ pkg_config() { |
503 |
echo |
504 |
|
505 |
if [[ ! -S "${socket}" ]] ; then |
506 |
- grep -B5 -A999 -iE "(Aborting|ERROR|errno)" "${mysqld_logfile}" |
507 |
+ grep -B5 -A999 -iE "(Aborting|ERROR|errno)" "${mysqld_logfile}" 1>&2 |
508 |
die "mysqld was unable to start from initialized data directory. Please review '${mysqld_logfile}'!" |
509 |
fi |
510 |
|
511 |
@@ -1008,5 +1098,5 @@ pkg_config() { |
512 |
fi |
513 |
fi |
514 |
|
515 |
- einfo "${PN} data directory at '${EROOT}/${MY_DATADIR#/}' successfully initialized!" |
516 |
+ einfo "${PN} data directory at '${MY_DATADIR}' successfully initialized!" |
517 |
} |