switch to different copy

This commit is contained in:
2024-09-27 16:36:44 +02:00
parent e3c9924fbc
commit cb735a01a1
4 changed files with 42 additions and 186 deletions

View File

@ -5,12 +5,14 @@ import (
"bufio"
"fmt"
"io"
"log"
"os"
"os/exec"
"path/filepath"
"strings"
"time"
"github.com/otiai10/copy"
"github.com/pelletier/go-toml"
)
@ -95,62 +97,15 @@ func zipIt(pathToZip string, pathToFiles string) error {
return nil
}
func _CopyDir(source string, destination string) error {
srcDir, err := os.Stat(source)
if err != nil {
return err
}
if !srcDir.IsDir() {
return fmt.Errorf("source is not a directory")
}
dstDir, err := os.Stat(destination)
if err != nil {
return err
}
if !dstDir.IsDir() {
return fmt.Errorf("destination is not a directory")
}
return nil
}
func _CopyFile(source string, destination string) error {
srcFile, err := os.Open(source)
dstFile, err := os.Create(destination)
_, err = io.Copy(dstFile, srcFile)
if err != nil {
return err
}
err = dstFile.Sync()
if err != nil {
return err
}
err = srcFile.Close()
if err != nil {
return err
}
err = dstFile.Close()
if err != nil {
return err
}
return nil
}
func backup(when string) error {
var err error
tmpPath := fmt.Sprint("/tmp/update/", when, "_backup")
log.Printf("tmpPath is: %s\n", tmpPath)
pacmanDb, err := parsePacmanConf()
if err != nil {
return err
}
log.Printf("pacmanDB is at: %s\n", pacmanDb)
err = os.MkdirAll(tmpPath, 0755)
if err != nil {
@ -171,7 +126,7 @@ func backup(when string) error {
}
if strings.Compare(when, "post") != 0 {
err = _CopyDir(pacmanDb, fmt.Sprint(tmpPath, "/", pacmanDb))
err = copy.Copy(pacmanDb, fmt.Sprint(tmpPath, "/", pacmanDb))
if err != nil {
return err
}
@ -179,13 +134,16 @@ func backup(when string) error {
current_time := time.Now().Format(time.RFC3339)
pathToZip := fmt.Sprint(tmpPath, "_", current_time, ".zip")
log.Printf("pathToZip is: %s\n", pathToZip)
err = zipIt(pathToZip, tmpPath)
if err != nil {
return err
}
for _, backup_location := range backup_locations {
err = _CopyFile(pathToZip, fmt.Sprint(backup_location, "/", when, "_backup_", current_time, ".zip"))
backup_path := fmt.Sprintf("%s/%s/%s_backup_%s.zip", backup_location, when, when, current_time)
log.Printf("backup_path is: %s\n", backup_path)
err = copy.Copy(pathToZip, backup_path)
if err != nil {
return err
}
@ -195,6 +153,23 @@ func backup(when string) error {
}
func main() {
if strings.Compare(os.Args[1], "debug") != 0 {
log.SetOutput(io.Discard)
} else {
logFile, err := os.OpenFile("/tmp/update.txt", os.O_CREATE | os.O_APPEND | os.O_RDWR, 0666)
if err != nil {
panic(err)
}
defer logFile.Close()
mw := io.MultiWriter(os.Stdout, logFile)
log.SetOutput(mw)
fmt.Println("Logfile is /tmp/update.txt")
}
log.Printf("Cmdline argument is: %s\n", os.Args[1])
os.RemoveAll("/tmp/update")
tree, err := toml.LoadFile("/etc/update.toml")
@ -204,6 +179,7 @@ func main() {
}
backup_locations = tree.GetArray("backup.locations").([]string)
log.Printf("backup_locations are: %s\n", backup_locations)
err = backup(os.Args[1])
if err != nil {