From 5402fb13b6ba3c489a09a28e6fd57c9fb16d11f8 Mon Sep 17 00:00:00 2001 From: Adam JOLY Date: Thu, 9 Jan 2025 17:29:36 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=94=A8=E3=80=8D=20fix(Mariadb):?= =?UTF-8?q?=20entrypoint=20working=20!!!!!!!!!!!!1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 14 +++++-- cmd/mariadb/entrypoint/entrypoint.go | 52 +++++++++++++++++--------- cmd/mariadb/healthcheck/healthcheck.go | 32 ++++++++++------ docker/mariadb/Dockerfile | 1 - 4 files changed, 66 insertions(+), 33 deletions(-) diff --git a/Makefile b/Makefile index b078281..9fe8868 100644 --- a/Makefile +++ b/Makefile @@ -8,13 +8,21 @@ DOCKERFILE_DB := $(DOCKER_FOLDER)/$(DB_SERVER_NAME)/Dockerfile DOCKERFILE_WEVSRV := $(DOCKER_FOLDER)/$(WEB_SERVER_NAME)/Dockerfile DOCKERFILE_CMS := $(DOCKER_FOLDER)/$(CMS_NAME)/Dockerfile -db-build: +build-db: docker build -f $(DOCKERFILE_DB) -t $(DB_SERVER_NAME) . -websrv-build: +build-websrv: docker build -f $(DOCKERFILE_WEVSRV) -t $(WEB_SERVER_NAME) . -cms-build: +build-cms: docker build -f $(DOCKERFILE_CMS) -t $(CMS_NAME) . +start-db: + docker compose up db --build + +clean-db: + docker stop inception-db + docker container rm inception-db + docker volume rm inception_wp-db + .PHONY: cms-build db-build websrv-build diff --git a/cmd/mariadb/entrypoint/entrypoint.go b/cmd/mariadb/entrypoint/entrypoint.go index 587805b..d0c5725 100644 --- a/cmd/mariadb/entrypoint/entrypoint.go +++ b/cmd/mariadb/entrypoint/entrypoint.go @@ -111,30 +111,44 @@ func waitForMariaDB(rootPass string) { os.Exit(1) } -func escapeIdentifier(identifier string) string { - // Replace backticks with double backticks to safely escape identifiers - return fmt.Sprintf("`%s`", strings.ReplaceAll(identifier, "'", "\"")) -} +//func escapeIdentifier(identifier string) string { +// // Replace backticks with double backticks to safely escape identifiers +// return fmt.Sprintf("%s", strings.ReplaceAll(identifier, "'", "\"")) +//} func escapePassword(password string) string { // Escape single quotes in passwords - return strings.ReplaceAll(password, "'", "\\'") + new := strings.ReplaceAll(password, "\"", "") + return strings.ReplaceAll(new, "'", "\\'") } func configureMariaDB(rootPassword, user, password, database string) { - cmd := exec.Command("mariadb", "-uroot", "-p"+rootPassword, "-e", fmt.Sprintf(` + cmd := exec.Command("mariadb", "-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'; + CREATE USER IF NOT EXISTS '%s'@'%%'; + GRANT ALL PRIVILEGES ON %s.* TO '%s'@'localhost' IDENTIFIED BY '%s'; GRANT ALL PRIVILEGES ON %s.* TO '%s'@'%%'; FLUSH PRIVILEGES; - `, escapePassword(rootPassword), escapeIdentifier(database), escapeIdentifier(user), escapePassword(password), escapeIdentifier(database), escapeIdentifier(user))) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - if err := cmd.Run(); err != nil { + `, + escapePassword(rootPassword), + escapePassword(database), + escapePassword(user), + escapePassword(database), + escapePassword(user), + escapePassword(password), + escapePassword(database), + escapePassword(user), + )) + + // Capture standard output and error + output, err := cmd.CombinedOutput() + if err != nil { fmt.Printf("Error configuring MariaDB: %v\n", err) + fmt.Printf("Command Output: %s\n", string(output)) os.Exit(1) } + fmt.Println("MariaDB configured successfully.") } func main() { @@ -159,27 +173,29 @@ func main() { cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr if err := cmd.Run(); err != nil { - _log.Log("error", "Error initializing MariaDB") + _log.Log("error", fmt.Sprintf("Error initializing MariaDB: %v", err)) } // Starting temp mariadb server for config - cmd = exec.Command("mariadbd-safe", "--skip-networking") + cmd = exec.Command("mariadbd-safe", "--datadir="+dataDir, "--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) + _log.Log("error", fmt.Sprintf("Error starting MariaDB: %v", err)) } + // Wait for mariadb to start waitForMariaDB(rootPass) configureMariaDB(rootPass, user, pass, dbName) - - cmd = exec.Command("mysqladmin", "-uroot", "-p"+rootPass, "shutdown") - if err := cmd.Run(); err != nil { + cmd_stop := exec.Command("mariadb-admin", "-uroot", "-p"+escapePassword(rootPass), "shutdown") + cmd_stop.Stdout = os.Stdout + cmd_stop.Stderr = os.Stderr + if err := cmd_stop.Run(); err != nil { fmt.Printf("Error stopping MariaDB: %v\n", err) } + } if err := removeSkipNetworking(filePath); err != nil { fmt.Printf("Error: %v\n", err) diff --git a/cmd/mariadb/healthcheck/healthcheck.go b/cmd/mariadb/healthcheck/healthcheck.go index 900dab9..4f81522 100644 --- a/cmd/mariadb/healthcheck/healthcheck.go +++ b/cmd/mariadb/healthcheck/healthcheck.go @@ -3,14 +3,13 @@ package main import ( "database/sql" "fmt" - "strings" "os" + "strings" "git.keyzox.me/42_adjoly/inception/internal/env" "git.keyzox.me/42_adjoly/inception/internal/log" ) - func escapeIdentifier(identifier string) string { // Replace backticks with double backticks to safely escape identifiers return fmt.Sprintf("`%s`", strings.ReplaceAll(identifier, "'", "\"")) @@ -21,30 +20,41 @@ func escapePassword(password string) string { return strings.ReplaceAll(password, "'", "\\'") } -func checkHealth(host, user, pass, port, dbName string) bool { +func checkHealth(host, user, pass, port, dbName string) bool { dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", user, pass, host, port, dbName) - + + // Attempt to open a database connection db, err := sql.Open("mysql", dsn) if err != nil { - _log.Log("error", "Failed to open database connection") + _log.Log("warning", fmt.Sprintf("Failed to open database connection: %v", err)) + return false } defer db.Close() + + // Attempt to ping the database if err := db.Ping(); err != nil { - _log.Log("error", "Health check failed") + _log.Log("warning", fmt.Sprintf("Health check failed: %v", err)) + return false } + + _log.Log("note", "Health check passed successfully") return true } -func main() { +func main() { + // Load environment variables pass := escapePassword(env.FileEnv("MYSQL_PASSWORD", "default")) user := escapeIdentifier(env.FileEnv("MYSQL_USER", "mariadb")) dbName := escapeIdentifier(env.EnvCheck("MYSQL_DATABASE", "default")) - dbHost := escapeIdentifier("localhost") + dbHost := "127.0.0.1" + // Perform the health check res := checkHealth(dbHost, user, pass, "3306", dbName) - if res == true{ - _log.Log("note", "Mariadb is healthy") + if res { + _log.Log("note", "MariaDB is healthy") os.Exit(0) } - _log.Log("error", "Health check failed") + + _log.Log("warning", "Health check failed") + os.Exit(1) } diff --git a/docker/mariadb/Dockerfile b/docker/mariadb/Dockerfile index 4ab4d1d..f562064 100644 --- a/docker/mariadb/Dockerfile +++ b/docker/mariadb/Dockerfile @@ -36,7 +36,6 @@ VOLUME /var/lib/mysql ENTRYPOINT [ "/docker-entrypoint" ] WORKDIR /var/lib/mysql -#USER mysql EXPOSE 3306 CMD [ "mariadbd", "--user=mysql" ] HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD /docker-healthcheck