#Requires -Version 5.1 function Ask-Continue { Write-Output ""; pause; Write-Output "" } Write-Output "This script will automatically install MariaDB and configure it for you." Write-Output "You may interrupt the installation by pressing CTRL+C or closing this window." Ask-Continue if (-Not (Select-String -Quiet -SimpleMatch -Pattern "db_password: ""ragnarok""" -LiteralPath "$PSScriptRoot\..\conf\global\sql_connection.conf")) { Write-Output "WARNING: It seems you already configured the sql connection for your server." Write-Output "If you decide to continue, your settings will be overwritten." Ask-Continue } # step 1: install scoop if (-Not (Get-Command scoop -errorAction SilentlyContinue)) { Set-ExecutionPolicy RemoteSigned -scope Process -Force # <= this will trigger a yes/no prompt if not already authorized Invoke-Expression (new-object net.webclient).downloadstring('https://get.scoop.sh') scoop update } # step 2: install mariadb if (Test-Path $env:USERPROFILE\scoop\apps\mariadb) { # usually we'd want to capture the output of "scoop list mariadb", but it uses # Write-Host, so we can't, hence why we check manually for the folder Write-Output "WARNING: MariaDB is already installed!" Write-Output "If you decide to continue, your hercules user password will be overwritten." Ask-Continue } elseif (Get-Command mysqld -errorAction SilentlyContinue) { Write-Output "ERROR: You already have a MySQL provider installed. To avoid conflict, MariaDB will not be installed." Write-Output "If you wish to continue you will have to uninstall your current MySQL provider." exit 1 } else { scoop install mariadb } # step 3: add the herc user, set up the new database $userpw = -join ((48..57) + (97..122) | Get-Random -Count 32 | % {[char]$_}) $rootpw = -join ((48..57) + (97..122) | Get-Random -Count 32 | % {[char]$_}) $maria_job = Start-Process -NoNewWindow -FilePath "mysqld.exe" -ArgumentList "--console" -PassThru -RedirectStandardError "$PSScriptRoot\maria.out" while (-Not $maria_job.HasExited) { if ($lt -Lt 1 -And (Select-String -Quiet -SimpleMatch -Pattern "ready for connections" -LiteralPath "$PSScriptRoot\maria.out")) { @" CREATE DATABASE IF NOT EXISTS hercules; DROP USER IF EXISTS 'hercules'@'localhost'; DROP USER IF EXISTS 'hercules'@'127.0.0.1'; CREATE USER 'hercules'@'localhost' IDENTIFIED BY '$userpw'; CREATE USER 'hercules'@'127.0.0.1' IDENTIFIED BY '$userpw'; -- ALTER USER 'root'@'localhost' IDENTIFIED BY '$rootpw'; GRANT ALTER,CREATE,SELECT,INSERT,UPDATE,DELETE,DROP,INDEX ON `hercules`.* TO 'hercules'@'localhost'; GRANT ALTER,CREATE,SELECT,INSERT,UPDATE,DELETE,DROP,INDEX ON `hercules`.* TO 'hercules'@'127.0.0.1'; FLUSH PRIVILEGES; USE `hercules`; \. $PSScriptRoot\..\sql-files\main.sql \. $PSScriptRoot\..\sql-files\logs.sql shutdown; \q "@ | mysql.exe -u root $lt++ } Start-Sleep 1 } if ($lt -Lt 1) { Write-Output "ERROR: MariaDB could not execute the query." Write-Output "This might happen if your root user already has a password, or if the MySQL service is currently running." $maria_job.close() exit 1 } # step 4: finish up @" sql_connection: { db_username: "hercules" db_password: "$userpw" db_database: "hercules" } "@ | Out-File -Encoding UTF8 -LiteralPath "$PSScriptRoot\..\conf\global\sql_connection.conf" Remove-Item -Force -errorAction SilentlyContinue "$PSScriptRoot\maria.out" & "$PSScriptRoot\install_mariadb.bat" # <= we need admin permissions, so we use an external script Write-Output "========= ALL DONE =========" Write-Output "" Write-Output "Your hercules installation is now configured to use MariaDB." Write-Output "You can find the password in conf\global\sql_connection.conf." Write-Output "" Write-Output "If you want to start MariaDB on boot, use services.msc and set ""MySQL"" to Automatic." Write-Output "" Write-Output "Make sure you set a password for the root user. You can do this from the command line or from HeidiSQL." Write-Output "You can obtain HeidiSQL at https://www.microsoft.com/store/productId/9NXPRT2T0ZJF"