1
0

118 lines
2.8 KiB
Go
Raw Normal View History

package main
import (
"errors"
"fmt"
"log"
"os"
"os/exec"
"time"
"git.keyzox.me/42_adjoly/inception/internal/env"
"git.keyzox.me/42_adjoly/inception/internal/log"
)
func createDBDir(dataDir string) {
if dataDir == "/var/lib/mysql" {
return
}
err := os.Mkdir(dataDir, 750)
if err != nil {
log.Fatal(err)
}
err = os.Mkdir(dataDir+"/.already", 750)
if err != nil {
log.Fatal(err)
}
}
func checkOlderDB(dataDir string) bool {
if _, err := os.Stat(dataDir+"/.already"); errors.Is(err, os.ErrNotExist) {
return false
}
return true
}
func waitForMariaDB() {
for i := 0; i < 30; i++ {
cmd := exec.Command("mysql", "-uroot", "-e", "SELECT 1")
if err := cmd.Run(); err == nil {
return
}
fmt.Println("MariaDB init process in progress...")
time.Sleep(1 * time.Second)
}
fmt.Println("MariaDB init process failed.")
os.Exit(1)
}
func configureMariaDB(rootPassword, user, password, database string) {
cmd := exec.Command("mysql", "-uroot", "-e", fmt.Sprintf(`
ALTER USER 'root'@'localhost' IDENTIFIED BY '%s';
CREATE DATABASE IF NOT EXISTS %s;
CREATE USER IF NOT EXISTS '%s'@'%%' IDENTIFIED BY '%s';
GRANT ALL PRIVILEGES ON %s.* TO '%s'@'%%';
FLUSH PRIVILEGES;
`, rootPassword, database, user, password, database, user))
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
fmt.Printf("Error configuring MariaDB: %v\n", err)
os.Exit(1)
}
}
func main() {
args := os.Args
if args[1] == "mariadbd" || args[1] == "mysqld" {
_log.Log("note", "Entrypoint script for MariaDB Server started")
rootPass := env.FileEnv("MYSQL_ROOT_PASSWORD", "default")
pass := env.FileEnv("MYSQL_PASSWORD", "default")
user := env.FileEnv("MYSQL_USER", "mariadb")
dbName := env.EnvCheck("MYSQL_DATABASE", "default")
dataDir := env.EnvCheck("DATADIR", "/var/lib/mysql")
oldDB := checkOlderDB(dataDir)
if oldDB == false {
createDBDir(dataDir)
// Init DB
cmd := exec.Command("mariadb-install-db", "--user=mysql", "--ldata="+dataDir)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
createDBDir(dataDir)
if err := cmd.Run(); err != nil {
_log.Log("error", "Error initializing MariaDB")
}
// Starting temp mariadb server for config
cmd = exec.Command("mariadbd-safe", "--skip-networking")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Start(); err != nil {
fmt.Printf("Error starting MariaDB: %v\n", err)
os.Exit(1)
}
// Wait for mariadb to start
waitForMariaDB()
configureMariaDB(rootPass, user, pass, dbName)
if err := cmd.Process.Kill(); err != nil {
fmt.Printf("Error stopping MariaDB: %v\n", err)
}
}
}
cmd := exec.Command(args[1], args[2:]...)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Stdin = os.Stdin
if err := cmd.Run(); err != nil {
fmt.Printf("Error running MariaDB: %v\n", err)
os.Exit(1)
}
}