「🏗️」 wip(Mariadb-entry): entrypoint starting to work
This commit is contained in:
117
cmd/mariadb/entrypoint/entrypoint.go
Normal file
117
cmd/mariadb/entrypoint/entrypoint.go
Normal file
@ -0,0 +1,117 @@
|
||||
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)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user