From 52f93c6183bf951befba9dbf3e2df625f0075971 Mon Sep 17 00:00:00 2001 From: Dusko Dobranic <101048884+ddobranic@users.noreply.github.com> Date: Thu, 31 Mar 2022 08:11:08 +0200 Subject: [PATCH] Remove Ubuntu20 mysql workaround (#5306) * Remove Ubuntu20 mysql workaround * Removing unneded init script and related test --- .../scripts/helpers/mysql-service-helper.sh | 193 ------------------ images/linux/scripts/installers/mysql.sh | 60 +----- .../linux/scripts/tests/Databases.Tests.ps1 | 7 - 3 files changed, 7 insertions(+), 253 deletions(-) delete mode 100644 images/linux/scripts/helpers/mysql-service-helper.sh diff --git a/images/linux/scripts/helpers/mysql-service-helper.sh b/images/linux/scripts/helpers/mysql-service-helper.sh deleted file mode 100644 index 9c184a4c4..000000000 --- a/images/linux/scripts/helpers/mysql-service-helper.sh +++ /dev/null @@ -1,193 +0,0 @@ -#!/bin/bash -e -# -# Temporary fix for the https://github.com/actions/virtual-environments/issues/4732 issue -# Taken from the official ubuntu:20.04 docker container -### BEGIN INIT INFO -# Provides: mysql -# Required-Start: $remote_fs $syslog -# Required-Stop: $remote_fs $syslog -# Should-Start: $network $time -# Should-Stop: $network $time -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start and stop the mysql database server daemon -# Description: Controls the main MySQL database server daemon "mysqld" -# and its wrapper script "mysqld_safe". -### END INIT INFO -# -set -e -set -u -${DEBIAN_SCRIPT_DEBUG:+ set -v -x} - -test -x /usr/bin/mysqld_safe || exit 0 - -. /lib/lsb/init-functions - -SELF=$(cd $(dirname $0); pwd -P)/$(basename $0) -CONF=/etc/mysql/my.cnf -MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf" - -# priority can be overriden and "-s" adds output to stderr -ERR_LOGGER="logger -p daemon.err -t /etc/init.d/mysql -i" - -# Safeguard (relative paths, core dumps..) -cd / -umask 077 - -# mysqladmin likes to read /root/.my.cnf. This is usually not what I want -# as many admins e.g. only store a password without a username there and -# so break my scripts. -export HOME=/etc/mysql/ - -## Fetch a particular option from mysql's invocation. -# -# Usage: void mysqld_get_param option -mysqld_get_param() { - /usr/sbin/mysqld --print-defaults \ - | tr " " "\n" \ - | grep -- "--$1" \ - | tail -n 1 \ - | cut -d= -f2 -} - -## Do some sanity checks before even trying to start mysqld. -sanity_checks() { - # check for config file - if [ ! -r /etc/mysql/my.cnf ]; then - log_warning_msg "$0: WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz" - echo "WARNING: /etc/mysql/my.cnf cannot be read. See README.Debian.gz" | $ERR_LOGGER - fi - - # check for diskspace shortage - datadir=`mysqld_get_param datadir` - if LC_ALL=C BLOCKSIZE= df --portability $datadir/. | tail -n 1 | awk '{ exit ($4>4096) }'; then - log_failure_msg "$0: ERROR: The partition with $datadir is too full!" - echo "ERROR: The partition with $datadir is too full!" | $ERR_LOGGER - exit 1 - fi -} - -## Checks if there is a server running and if so if it is accessible. -# -# check_alive insists on a pingable server -# check_dead also fails if there is a lost mysqld in the process list -# -# Usage: boolean mysqld_status [check_alive|check_dead] [warn|nowarn] -mysqld_status () { - ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? )) - - ps_alive=0 - pidfile=`mysqld_get_param pid-file` - if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi - - if [ "$1" = "check_alive" -a $ping_alive = 1 ] || - [ "$1" = "check_dead" -a $ping_alive = 0 -a $ps_alive = 0 ]; then - return 0 # EXIT_SUCCESS - else - if [ "$2" = "warn" ]; then - echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug - fi - return 1 # EXIT_FAILURE - fi -} - -# -# main() -# - -case "${1:-''}" in - 'start') - sanity_checks; - # Start daemon - log_daemon_msg "Starting MySQL database server" "mysqld" - if mysqld_status check_alive nowarn; then - log_progress_msg "already running" - log_end_msg 0 - else - # Could be removed during boot - test -e /var/run/mysqld || install -m 755 -o mysql -g root -d /var/run/mysqld - - # Start MySQL! - su - mysql -s /bin/sh -c "/usr/bin/mysqld_safe > /dev/null 2>&1 &" - - # 6s was reported in #352070 to be too few when using ndbcluster - # 14s was reported in #736452 to be too few with large installs - for i in $(seq 1 30); do - sleep 1 - if mysqld_status check_alive nowarn ; then break; fi - log_progress_msg "." - done - if mysqld_status check_alive warn; then - log_end_msg 0 - # Now start mysqlcheck or whatever the admin wants. - output=$(/etc/mysql/debian-start) - [ -n "$output" ] && log_action_msg "$output" - else - log_end_msg 1 - log_failure_msg "Please take a look at the syslog" - fi - fi - ;; - - 'stop') - # * As a passwordless mysqladmin (e.g. via ~/.my.cnf) must be possible - # at least for cron, we can rely on it here, too. (although we have - # to specify it explicit as e.g. sudo environments points to the normal - # users home and not /root) - log_daemon_msg "Stopping MySQL database server" "mysqld" - if ! mysqld_status check_dead nowarn; then - set +e - shutdown_out=`$MYADMIN shutdown 2>&1`; r=$? - set -e - if [ "$r" -ne 0 ]; then - log_end_msg 1 - [ "$VERBOSE" != "no" ] && log_failure_msg "Error: $shutdown_out" - log_daemon_msg "Killing MySQL database server by signal" "mysqld" - killall -15 mysqld - server_down= - for i in 1 2 3 4 5 6 7 8 9 10; do - sleep 1 - if mysqld_status check_dead nowarn; then server_down=1; break; fi - done - if test -z "$server_down"; then killall -9 mysqld; fi - fi - fi - - if ! mysqld_status check_dead warn; then - log_end_msg 1 - log_failure_msg "Please stop MySQL manually and read /usr/share/doc/mysql-server-5.7/README.Debian.gz!" - exit -1 - else - log_end_msg 0 - fi - ;; - - 'restart') - set +e; $SELF stop; set -e - $SELF start - ;; - - 'reload'|'force-reload') - log_daemon_msg "Reloading MySQL database server" "mysqld" - $MYADMIN reload - log_end_msg 0 - ;; - - 'status') - if mysqld_status check_alive nowarn; then - log_action_msg "$($MYADMIN version)" - else - log_action_msg "MySQL is stopped." - exit 3 - fi - ;; - - *) - echo "Usage: $SELF start|stop|restart|reload|force-reload|status" - exit 1 - ;; -esac - -# Some success paths end up returning non-zero so exit 0 explicitly. See -# bug #739846. -exit 0 diff --git a/images/linux/scripts/installers/mysql.sh b/images/linux/scripts/installers/mysql.sh index ebe57cd6d..893915118 100644 --- a/images/linux/scripts/installers/mysql.sh +++ b/images/linux/scripts/installers/mysql.sh @@ -12,62 +12,16 @@ MYSQL_ROOT_PASSWORD=root echo "mysql-server mysql-server/root_password password $MYSQL_ROOT_PASSWORD" | debconf-set-selections echo "mysql-server mysql-server/root_password_again password $MYSQL_ROOT_PASSWORD" | debconf-set-selections -# Ubuntu's repo now contains 8.0.28 which is buggy, -# see https://bugs.mysql.com/bug.php?id=105288 +export ACCEPT_EULA=Y -if isUbuntu20 ; then - mkdir -p /tmp/mysql - pushd /tmp +# Install MySQL Client +apt-get install mysql-client -y - # Mandatory dependency - apt-get install -y libmecab2 libaio1 +# Install MySQL Server +apt-get install -y mysql-server - wget -q https://downloads.mysql.com/archives/get/p/23/file/mysql-server_8.0.26-1ubuntu${VERSION_ID}_amd64.deb-bundle.tar - tar -xf mysql-server_8.0.26-1ubuntu${VERSION_ID}_amd64.deb-bundle.tar -C /tmp/mysql - - pushd mysql - - # Remove debs with debug info - rm mysql-community-*debug*.deb - - mysql_debs=( - mysql-common* - mysql-community-client-plugins* - mysql-community-client-core* - mysql-community-client* - mysql-client* - mysql-community-server-core* - mysql-community-server* - mysql-server* - libmysqlclient21* - libmysqlclient-dev* - ) - - for package in ${mysql_debs[@]}; do - dpkg -i $package - done - - # Install the /etc/init.d/mysql script for backward compatibility with sysVinit - cp $HELPER_SCRIPTS/mysql-service-helper.sh /etc/init.d/mysql - # Fix permission - chmod 755 /etc/init.d/mysql - - # Start mysql to change its settings - systemctl start mysql.service - # Enable mysql log-in without sudo by activation of the mysql_native_password plugin - mysql -s -N -h localhost -uroot -proot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES;" -else - export ACCEPT_EULA=Y - - # Install MySQL Client - apt-get install mysql-client -y - - # Install MySQL Server - apt-get install -y mysql-server - - #Install MySQL Dev tools - apt install libmysqlclient-dev -y -fi +#Install MySQL Dev tools +apt install libmysqlclient-dev -y # Disable mysql.service systemctl is-active --quiet mysql.service && systemctl stop mysql.service diff --git a/images/linux/scripts/tests/Databases.Tests.ps1 b/images/linux/scripts/tests/Databases.Tests.ps1 index 4b004963a..1108a0ed4 100644 --- a/images/linux/scripts/tests/Databases.Tests.ps1 +++ b/images/linux/scripts/tests/Databases.Tests.ps1 @@ -36,11 +36,4 @@ Describe "MySQL" { "sudo mysql -vvv -e 'DROP DATABASE smoke_test' -uroot -proot" | Should -ReturnZeroExitCode "sudo systemctl stop mysql" | Should -ReturnZeroExitCode } - - It "MySQL sysVinit script works" { - sudo /etc/init.d/mysql start | Out-Null - systemctl is-active mysql | Should -Be "active" - sudo /etc/init.d/mysql stop | Out-Null - systemctl is-active mysql | Should -Be "inactive" - } }