mirror of
https://github.com/HerculesWS/Hercules
synced 2026-08-15 12:23:13 -04:00
PowerShell's Out-File function uses UTF8 with BOM for UTf8 encoding, this encoding is not compatible with Hercules' libconfig implementation, causing several errors during config reading. Using Set-Content and encoding it to UTF8 beforehand will ensure sql_connection is always generated in UTF8 without BOM
93 lines
4.1 KiB
PowerShell
93 lines
4.1 KiB
PowerShell
#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
|
|
$utf8 = New-Object System.Text.UTF8Encoding $false
|
|
$connectionFile = @"
|
|
sql_connection: {
|
|
db_username: "hercules"
|
|
db_password: "$userpw"
|
|
db_database: "hercules"
|
|
}
|
|
"@
|
|
|
|
Set-Content -Value $utf8.GetBytes($connectionFile) -Encoding Byte -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"
|