「🏗️」 wip: Removed ftp server and started borgbackup container
This commit is contained in:
119
srcs/cmd/borg-backup/entrypoint/entrypoint.go
Normal file
119
srcs/cmd/borg-backup/entrypoint/entrypoint.go
Normal file
@ -0,0 +1,119 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"os/exec"
|
||||
"bufio"
|
||||
|
||||
"git.keyzox.me/42_adjoly/inception/internal/cmd"
|
||||
"git.keyzox.me/42_adjoly/inception/internal/env"
|
||||
_log "git.keyzox.me/42_adjoly/inception/internal/log"
|
||||
"git.keyzox.me/42_adjoly/inception/internal/pass"
|
||||
)
|
||||
|
||||
func overrideCronFile(filePath string, jobs []string) error {
|
||||
file, err := os.Create(filePath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
writer := bufio.NewWriter(file)
|
||||
for _, job := range jobs {
|
||||
_, err := writer.WriteString(job + "\n")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return writer.Flush()
|
||||
}
|
||||
|
||||
func isBorgInit(repo string) (bool, error) {
|
||||
cmd := exec.Command("borg", "info", repo)
|
||||
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
if exitError, ok := err.(*exec.ExitError); ok {
|
||||
if exitError.ExitCode() == 2 {
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
return true, err
|
||||
}
|
||||
|
||||
func main() {
|
||||
args := os.Args
|
||||
|
||||
src := env.EnvCheck("BORG_SRC", "/source")
|
||||
if _, err := os.ReadDir(src); err != nil {
|
||||
_log.Log("error", src+" does not exist can't perform backup")
|
||||
}
|
||||
|
||||
repo := env.EnvCheck("BORG_REPO", "/backup")
|
||||
if _, err := os.ReadDir(src); err != nil {
|
||||
_log.Log("error", repo+" does not exist can't perform backup")
|
||||
}
|
||||
is, err := isBorgInit(repo)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
} else if is == true {
|
||||
_log.Log("note", "Repo already initialize, skipping...")
|
||||
} else {
|
||||
_log.Log("note", "Initializing repo...")
|
||||
|
||||
passphrase := env.FileEnv("BORG_PASSPHRASE", "")
|
||||
if passphrase == "" {
|
||||
_log.Log("error", "No passphrase specified, exiting...")
|
||||
}
|
||||
|
||||
err = cmd.ExecCmd([]string{"borg", "init", "--encryption=" + passphrase, repo})
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
interval := env.EnvCheck("CRON_INTERVAL", "0 0 * * *")
|
||||
cronFilePath := "/etc/crontabs/root"
|
||||
newJobs := []string{
|
||||
"# Borg Backup Cron Job",
|
||||
interval + " root run-parts /docker-backup.d >> /var/log/cron.log 2>&1",
|
||||
}
|
||||
err = overrideCronFile(cronFilePath, newJobs)
|
||||
if err != nil {
|
||||
fmt.Printf("Error overriding cron file: %v\n", err)
|
||||
} else {
|
||||
fmt.Println("Cron file overridden successfully.")
|
||||
}
|
||||
|
||||
dir, err := os.ReadDir("/docker-entrypoint.d")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
_log.Log("note", "Running entrypoint scripts")
|
||||
for _, v := range dir {
|
||||
os.Chmod("/docker-entrypoint.d/"+v.Name(), 0755)
|
||||
cmd := exec.Command("/docker-entrypoint.d/" + v.Name())
|
||||
cmd.Env = os.Environ()
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
cmd.Stdin = os.Stdin
|
||||
if err := cmd.Run(); err != nil {
|
||||
fmt.Printf("Error running script(%s): %v\n", v.Name(), err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
cmd := exec.Command(args[1], args[2:]...)
|
||||
cmd.Env = os.Environ()
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
cmd.Stdin = os.Stdin
|
||||
if err := cmd.Run(); err != nil {
|
||||
fmt.Printf("Error running BORGBACKUP: %v\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user