I created an upstream bug also, https://bugs.mysql.com/bug.php?id=108947 If a host has mysql configured to use a tmpdir that only the mysql user can access, then compiling mysql will fail towards the very end: [100%] Generating Docs/INFO_BIN /usr/bin/cmake -DMYSQLD_EXECUTABLE=/var/tmp/portage/dev-db/mysql-8.0.31/work/mysql_build/runtime_output_directory/mysqld -DCMAKE_BUILD_TYPE=RelWithDebInfo -P /var/tmp/portage/dev-db/mysql-8.0.31/work/mysql/cmake/info_bin.cmake CMake Error at info_macros.cmake:185 (MESSAGE): mysqld --help failed: mysqld: Can't get stat of '/usr/local/mysql-data/tmp' (OS errno 13 - Permission denied) 2022-11-01T03:14:41.014206Z 0 [ERROR] [MY-010119] [Server] Aborting Call Stack (most recent call first): /var/tmp/portage/dev-db/mysql-8.0.31/work/mysql/cmake/info_bin.cmake:36 (CREATE_INFO_BIN) make[2]: *** [CMakeFiles/INFO_BIN.dir/build.make:71: CMakeFiles/INFO_BIN] Error 1 make[2]: Leaving directory '/var/tmp/portage/dev-db/mysql-8.0.31/work/mysql_build' make[1]: *** [CMakeFiles/Makefile2:2735: CMakeFiles/INFO_BIN.dir/all] Error 2 make[1]: Leaving directory '/var/tmp/portage/dev-db/mysql-8.0.31/work/mysql_build' make: *** [Makefile:156: all] Error 2 Here info_bin.cmake is calling CREATE_INFO_BIN defined in cmake/info_macros.cmake.in In my case, mysql's tmpdir = /usr/local/mysql-data/tmp, which is mysql-only, inaccessible to user portage: # namei -l /usr/local/mysql-data/tmp f: /usr/local/mysql-data/tmp drwxr-xr-x root root / drwxr-xr-x root root usr drwxr-xr-x root root local drwxrwx--T root mysql mysql-data drwxr-xr-x mysql mysql tmp This was never a problem until recently; between 8.0.27 and 8.0.31 this was added: $ diff -u \ /var/tmp/portage/dev-db/mysql-8.0.27/work/mysql/cmake/info_macros.cmake.in \ /var/tmp/portage/dev-db/mysql-8.0.31/work/mysql/cmake/info_macros.cmake.in ... + IF(HAVE_BUILD_ID_SUPPORT AND NOT WITHOUT_SERVER) + FILE(APPEND ${INFO_BIN} "\n===== BUILD ID =====\n") + EXECUTE_PROCESS(COMMAND + ${MYSQLD_EXECUTABLE} --help + OUTPUT_VARIABLE mysqld_help ... This will call the just-built mysqld binary, but it reads in configs from the real /etc/mysql/ if present, causing an error. It seems that adding --no-defaults to that mysqld invocation avoids the problem of user portage trying to follow paths only user mysql can access, but still includes the BuildID in the output that the recipe wants. Fix: --- a/cmake/info_macros.cmake.in 2022-09-13 12:15:16.000000000 -0400 +++ b/cmake/info_macros.cmake.in 2022-11-01 00:12:06.270464679 -0400 @@ -175,7 +175,7 @@ IF(HAVE_BUILD_ID_SUPPORT AND NOT WITHOUT_SERVER) FILE(APPEND ${INFO_BIN} "\n===== BUILD ID =====\n") EXECUTE_PROCESS(COMMAND - ${MYSQLD_EXECUTABLE} --help + ${MYSQLD_EXECUTABLE} --no-defaults --help OUTPUT_VARIABLE mysqld_help RESULT_VARIABLE mysqld_help_result ERROR_VARIABLE mysqld_help_error
Upstream has declared unsupported/WONTFIX, they require that the building user have access to any production mysql instance's tmpdir. PR incoming...
The bug has been closed via the following commit(s): https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b0d5d24230e62e69f4bae50be4746551f1d95451 commit b0d5d24230e62e69f4bae50be4746551f1d95451 Author: Hank Leininger <hlein@korelogic.com> AuthorDate: 2022-11-01 17:34:22 +0000 Commit: Sam James <sam@gentoo.org> CommitDate: 2022-11-01 23:21:41 +0000 dev-db/mysql: fix compilation when tmpdir not accessible by portage Upstream has declared WONTFIX; gentoo is not supported, and neither is compiling as a user who cannot read mysql-only directories: https://bugs.mysql.com/bug.php?id=108947 Closes: https://bugs.gentoo.org/878951 Closes: https://github.com/gentoo/gentoo/pull/28085 Signed-off-by: Hank Leininger <hlein@korelogic.com> Signed-off-by: Sam James <sam@gentoo.org> .../mysql-8.0.31-build-tmpdir-nodefault.patch | 12 + dev-db/mysql/mysql-8.0.31-r1.ebuild | 1224 ++++++++++++++++++++ 2 files changed, 1236 insertions(+)