#!/bin/bash # Credit: https://serverfault.com/questions/783527/non-interactive-silent-install-of-mysql-5-7-on-ubuntu-16-04-lts export DEBIAN_FRONTEND=noninteractive sudo apt-get update > /dev/null MYSQL_ROOT_PASSWORD='yourrootpassword' # SET THIS! Avoid quotes/apostrophes in the password, but do use lowercase + uppercase + numbers + special chars # Install MySQL # Suggestion from @dcarrith (http://serverfault.com/a/830352/344471): echo debconf mysql-server/root_password password $MYSQL_ROOT_PASSWORD | sudo debconf-set-selections echo debconf mysql-server/root_password_again password $MYSQL_ROOT_PASSWORD | sudo debconf-set-selections #sudo debconf-set-selections <<< "mysql-server-5.7 mysql-server/root_password password $MYSQL_ROOT_PASSWORD" #sudo debconf-set-selections <<< "mysql-server-5.7 mysql-server/root_password_again password $MYSQL_ROOT_PASSWORD" sudo apt-get -qq install mysql-server expect # > /dev/null # Install MySQL quietly echo "MySQL Root Password: $MYSQL_ROOT_PASSWORD\r" # Build Expect script tee ~/secure_our_mysql.sh > /dev/null << EOF spawn $(which mysql_secure_installation) expect "Enter password for user root:" send "$MYSQL_ROOT_PASSWORD\r" expect "Press y|Y for Yes, any other key for No:" send "n\r" expect "Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:" send "0\r" expect "Change the password for root ? ((Press y|Y for Yes, any other key for No) :" send "y\r" expect "New password:" send "$MYSQL_ROOT_PASSWORD\r" expect "Re-enter new password:" send "$MYSQL_ROOT_PASSWORD\r" expect "Remove anonymous users? (Press y|Y for Yes, any other key for No) :" send "y\r" expect "Disallow root login remotely? (Press y|Y for Yes, any other key for No) :" send "y\r" expect "Remove test database and access to it? (Press y|Y for Yes, any other key for No) :" send "y\r" expect "Reload privilege tables now? (Press y|Y for Yes, any other key for No) :" send "y\r" EOF # Run Expect script. # This runs the "mysql_secure_installation" script which removes insecure defaults. sudo expect ~/secure_our_mysql.sh # SuiteCRM needed MySQL Configs echo "[mysqld] max_allowed_packet=20M innodb_log_file_size=512M" >> /etc/mysql/my.cnf /etc/init.d/mysql restart # Cleanup rm -v ~/secure_our_mysql.sh # Remove the generated Expect script #sudo apt-get -qq purge expect > /dev/null # Uninstall Expect, commented out in case you need Expect echo "MySQL setup completed. Insecure defaults are gone. Please remove this script manually when you are done with it (or at least remove the MySQL root password that you put inside it."