diff --git a/.gitignore b/.gitignore index ec76ec2..8693bb1 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ +# Build artifacts backup diff --git a/backup.go b/backup.go deleted file mode 100644 index 1620507..0000000 --- a/backup.go +++ /dev/null @@ -1,189 +0,0 @@ -package main - -import ( - "archive/zip" - "bufio" - "fmt" - "io" - "log" - "os" - "os/exec" - "path/filepath" - "strings" - "time" - - "github.com/otiai10/copy" - "github.com/pelletier/go-toml" -) - -var backup_locations []string - -func parsePacmanConf() (string, error) { - var err error - var path string - - file, err := os.Open("/etc/pacman.conf") - if err != nil { - return "", err - } - - scanner := bufio.NewScanner(file) - for scanner.Scan() { - line := scanner.Text() - if !strings.Contains(line, "DBPath") { - continue - } - path = strings.TrimSpace(strings.Split(line, "=")[1]) - break - } - - err = file.Close() - if err != nil { - return "", err - } - - return fmt.Sprint(path, "local"), nil -} - -func zipIt(pathToZip string, pathToFiles string) error { - var err error - - zipFile, err := os.Create(pathToZip) - if err != nil { - return err - } - - zipWriter := zip.NewWriter(zipFile) - - walker := func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - if info.IsDir() { - return nil - } - file, err := os.Open(path) - if err != nil { - return err - } - defer file.Close() - - f, err := zipWriter.Create(path[len(pathToFiles):]) - if err != nil { - return err - } - - _, err = io.Copy(f, file) - if err != nil { - return err - } - - return nil - } - err = filepath.Walk(pathToFiles, walker) - if err != nil { - return err - } - - err = zipWriter.Close() - if err != nil { - return err - } - err = zipFile.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 { - return err - } - defer func() { - os.RemoveAll("/tmp/update") - }() - - output, err := exec.Command("pacman", "--verbose", "--query").Output() - if err != nil { - return err - } - - err = os.WriteFile(fmt.Sprint(tmpPath, "/", when, "_pacman.txt"), output, 0666) - if err != nil { - return err - } - - if strings.Compare(when, "post") != 0 { - err = copy.Copy(pacmanDb, fmt.Sprint(tmpPath, "/", pacmanDb)) - if err != nil { - return err - } - } - - 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 { - 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 - } - } - - return nil -} - -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") - if err != nil { - fmt.Println("backup failed for the following reason: ", err) - os.Exit(1) - } - - backup_locations = tree.GetArray("backup.locations").([]string) - log.Printf("backup_locations are: %s\n", backup_locations) - - err = backup(os.Args[1]) - if err != nil { - fmt.Println("backup failed for the following reason: ", err) - os.Exit(1) - } -} diff --git a/go.mod b/go.mod deleted file mode 100644 index 366ae1a..0000000 --- a/go.mod +++ /dev/null @@ -1,14 +0,0 @@ -module backup - -go 1.23.0 - -require ( - github.com/otiai10/copy v1.14.1 - github.com/pelletier/go-toml v1.9.5 -) - -require ( - github.com/otiai10/mint v1.6.3 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect -) diff --git a/go.sum b/go.sum deleted file mode 100644 index 5b2f824..0000000 --- a/go.sum +++ /dev/null @@ -1,10 +0,0 @@ -github.com/otiai10/copy v1.14.1 h1:5/7E6qsUMBaH5AnQ0sSLzzTg1oTECmcCmT6lvF45Na8= -github.com/otiai10/copy v1.14.1/go.mod h1:oQwrEDDOci3IM8dJF0d8+jnbfPDllW6vUjNc3DoZm9I= -github.com/otiai10/mint v1.6.3 h1:87qsV/aw1F5as1eH1zS/yqHY85ANKVMgkDrf9rcxbQs= -github.com/otiai10/mint v1.6.3/go.mod h1:MJm72SBthJjz8qhefc4z1PYEieWmy8Bku7CjcAqyUSM= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= diff --git a/legacy/README.md b/legacy/README.md deleted file mode 100644 index a071038..0000000 --- a/legacy/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Update - -Update script written in Bash for Arch Linux only. Keeps all your official, aur packages and your flatpaks up to date with one simple script. It also backups a list of all your installed packages and flatpaks. - -## Installation - -```bash -git clone https://gitea.hopeless-cloud.xyz/AustrianToast/update.git && cd update -``` - -Before installing, please edit the config and configure it to your liking. -Then install using -```bash -make -``` - -## Usage - -``` -Usage: update [OPTION] -options: ---help displays this message ---preview shows a preview of which pkg's will be updates ---version prints out the version number -``` - -## Contributing -Contributions are always welcome! diff --git a/legacy/makefile b/legacy/makefile deleted file mode 100644 index 0c34d80..0000000 --- a/legacy/makefile +++ /dev/null @@ -1,10 +0,0 @@ -install: - @echo "==> Installing update into /usr/local/bin" - @sudo install -Dm755 update /usr/local/bin/update - @[[ -f ${HOME}/.config/update.conf ]] || cp update.conf ${HOME}/.config/ - @echo "==> Finished." - -uninstall: - @echo "==> Uninstalling update from /usr/local/bin" - @sudo rm /usr/local/bin/update ${HOME}/.config/update.conf - @echo "==> Finished." diff --git a/legacy/update b/legacy/update deleted file mode 100755 index 5975bf9..0000000 --- a/legacy/update +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/bash - -VERSION="3.2" -IGREEN="\033[0;92m" # Intense Green -IYELLOW="\033[0;93m" # Intense Yellow -IRED='\033[0;91m' # Red -NO_COLOR="\033[0m" # Text Reset -TMP="/tmp/update" -DATE="$(date +"%Y-%m-%dT%H:%M:%S%:z")" # RFC 3339 date-time https://datatracker.ietf.org/doc/html/rfc3339#section-5.6 - -trap interrupt_function INT - -interrupt_function() { - echo -e "${IRED}\nInterrupt has been detected${NO_COLOR}" - if [ -f /var/lib/pacman/db.lck ]; then - echo -e "${IRED}Trying to unlock the pacman db. Please enter your password.${NO_COLOR}" - su --command="rm --force /var/lib/pacman/db.lck" - fi - [[ -d $TMP ]] && rm --recursive --force "$TMP" - [[ -f "$BACKUP_LOCATION"/before-backup_"$DATE".tar.zst.new ]] && rm --force "$BACKUP_LOCATION"/before-backup_"$DATE".tar.zst.new - [[ -f "$BACKUP_LOCATION"/after-backup_"$DATE".tar.zst.new ]] && rm --force "$BACKUP_LOCATION"/after-backup_"$DATE".tar.zst.new - exit 1 -} - -help() { - echo "Usage: update [OPTION]" - echo "options:" - echo "--help displays this message" - echo "--preview shows a preview of pkg's and flatpaks which can be updated" - echo "--version prints out the version number" -} - -source "$HOME"/.config/update.conf || echo -e "${IRED}No config found${NO_COLOR}" || exit 1 - -if [[ ${1:0:2} == \-\- ]]; then - case "${1:2}" in - help) - help ;; - preview) - "$PACMAN_WRAPPER" -Syy - "$PACMAN_WRAPPER" --query --upgrades - [[ -x /usr/bin/flatpak ]] && flatpak remote-ls --updates ;; - version) - echo "$VERSION" ;; - ?) - help; exit 1;; - esac - exit 0 -fi - -check_for_valid_backup_location() { - if [ ! -d "$1" ]; then - echo -e "${IYELLOW}$1 doesn't exist${NO_COLOR}" - read -p "Do you want to create the path and continue? [y/N]" input - case $input in - [Yy]) mkdir --parents "$1" ;; - [Nn]) exit 0;; - * ) exit 0 ;; - esac - fi -} - -check_nfs_mount() { - if ! findmnt -rno SOURCE,TARGET,FSTYPE "$1" | grep -q nfs; then - echo -e "${IYELLOW}$1 is not an active NFS mount.${NO_COLOR}" - read -p "Do you want to continue without an active NFS mount? [y/N] " input - case $input in - [Yy]) return 0 ;; - [Nn]|*) exit 1 ;; - esac - fi -} - -if [ "$BACKUP_LOCATION" ]; then - check_for_valid_backup_location "$BACKUP_LOCATION" - check_nfs_mount "$BACKUP_LOCATION" -else - echo -e "${IRED}No BACKUP_LOCATION in $HOME/.config/update.conf specified${NO_COLOR}" - exit 1 -fi -[[ $SECONDARY_BACKUP_LOCATION ]] && check_for_valid_backup_location "$SECONDARY_BACKUP_LOCATION" - -lock_pacman_db() { - if [ -f /var/lib/pacman/db.lck ]; then - echo -e "${IYELLOW}->${NO_COLOR} /var/lib/pacman/db.lck exists" - echo -e "${IYELLOW}->${NO_COLOR} there might be another instance of pacman running. exiting..." - exit 1 - fi - - echo -e "${IYELLOW}Trying to lock the pacman db. Please enter your password.${NO_COLOR}" - su --command="touch /var/lib/pacman/db.lck" -} - -unlock_pacman_db() { - echo -e "${IYELLOW}Trying to unlock the pacman db. Please enter your password.${NO_COLOR}" - su --command="rm --force /var/lib/pacman/db.lck" -} - -delete_oldest_backup() { - if [[ $(find $BACKUP_LOCATION -name '*$1*' -exec printf %c {} + | wc -c) -ge $BACKUP_AMOUNT ]]; then - rm --force $(find "$BACKUP_LOCATION" -name '*$1*' | sort -rn | head -1) - fi -} - -before_backup() { - lock_pacman_db - - [[ -d $TMP ]] && rm --recursive --force "$TMP" - mkdir --parents "$TMP"/before-backup_"$DATE" "$TMP"/after-backup_"$DATE" - - pacman --verbose --query > "$TMP"/before-backup_"$DATE"/pacman-before.txt - [[ -x /usr/bin/flatpak ]] && flatpak list --all --show-details > "$TMP"/before-backup_"$DATE"/flatpak-before.txt - - tar --create --zstd --file "$TMP"/before-backup_"$DATE".tar.zst.new "$TMP"/before-backup_"$DATE" /var/lib/pacman/local - cp "$TMP"/before-backup_"$DATE".tar.zst.new "$BACKUP_LOCATION" - [[ $SECONDARY_BACKUP_LOCATION ]] && cp "$TMP"/before-backup_"$DATE".tar.zst.new "$SECONDARY_BACKUP_LOCATION" - - unlock_pacman_db -} - -after_backup() { - lock_pacman_db - - pacman --verbose --query > "$TMP"/after-backup_"$DATE"/pacman-after.txt - [[ -x /usr/bin/flatpak ]] && flatpak list --all --show-details > "$TMP"/after-backup_"$DATE"/flatpak-after.txt - tar --create --zstd --file "$TMP"/after-backup_"$DATE".tar.zst.new "$TMP"/after-backup_"$DATE" - - cp "$TMP"/after-backup_"$DATE".tar.zst.new "$BACKUP_LOCATION" - [[ $SECONDARY_BACKUP_LOCATION ]] && cp "$TMP"/after-backup_"$DATE".tar.zst.new "$SECONDARY_BACKUP_LOCATION" - - delete_oldest_backup after-backup - mv "$BACKUP_LOCATION"/after-backup_"$DATE".tar.zst.new "$BACKUP_LOCATION"/after-backup_"$DATE".tar.zst - [[ $SECONDARY_BACKUP_LOCATION ]] && mv "$SECONDARY_BACKUP_LOCATION"/after-backup_"$DATE".tar.zst.new "$SECONDARY_BACKUP_LOCATION"/after-backup_"$DATE".tar.zst - - delete_oldest_backup before-backup - mv "$BACKUP_LOCATION"/before-backup_"$DATE".tar.zst.new "$BACKUP_LOCATION"/before-backup_"$DATE".tar.zst - [[ $SECONDARY_BACKUP_LOCATION ]] && mv "$SECONDARY_BACKUP_LOCATION"/before-backup_"$DATE".tar.zst.new "$SECONDARY_BACKUP_LOCATION"/before-backup_"$DATE".tar.zst - - unlock_pacman_db - rm --recursive --force "$TMP" -} - -update() { - "$PACMAN_WRAPPER" - if [[ -x /usr/bin/flatpak ]]; then - flatpak update --assumeyes - flatpak list --all --show-details > "$TMP"/after-backup_"$DATE"/flatpak-after.txt - fi -} - -before_backup && echo -e "${IGREEN}before-backup complete${NO_COLOR}" -update -after_backup && echo -e "${IGREEN}after-backup complete${NO_COLOR}" diff --git a/legacy/update.conf b/legacy/update.conf deleted file mode 100644 index dba235d..0000000 --- a/legacy/update.conf +++ /dev/null @@ -1,11 +0,0 @@ -# backup to this folder -#BACKUP_LOCATION=~ - -# optional secondary backup loaction -#SECONDARY_BACKUP_LOCATION=~ - -# use this pacman-wrapper -PACMAN_WRAPPER=yay - -# how many different backups to keep -BACKUP_AMOUNT=10 diff --git a/makefile b/makefile deleted file mode 100644 index 5794ed9..0000000 --- a/makefile +++ /dev/null @@ -1,32 +0,0 @@ -IGREEN := \033[0;92m -NO_COLOR := \033[0m - -help: - @echo "Usage: make [OPTION]" - @echo "Available options are:" - @echo "help" - @echo "compile" - @echo "install This will also compile" - @echo "uninstall" - -compile: - @echo -e "$(IGREEN)==> Compiling backup$(NO_COLOR)" - go build . - -install: compile - @echo -e "$(IGREEN)==> Copying the hooks into /etc/pacman.d/hooks$(NO_COLOR)" - [[ -d /etc/pacman.d/hooks ]] || sudo mkdir /etc/pacman.d/hooks - sudo cp pre_backup.hook post_backup.hook /etc/pacman.d/hooks - @echo -e "$(IGREEN)==> Copying backup into /usr/local/bin$(NO_COLOR)" - sudo install -Dm755 backup /usr/local/bin/backup - @echo -e "$(IGREEN)==> Copying the config into /etc$(NO_COLOR)" - [[ -f /etc/update.toml ]] || sudo cp update.toml /etc - @echo -e "$(IGREEN)==> Finished.$(NO_COLOR)" - -uninstall: - @echo -e "$(IGREEN)==> Removing the hooks from /etc/pacman.d/hooks$(NO_COLOR)" - sudo rm /etc/pacman.d/hooks/pre_backup.hook /etc/pacman.d/hooks/post_backup.hook - @echo -e "$(IGREEN)==> Removing backup into /usr/local/bin$(NO_COLOR)" - sudo rm /usr/local/bin/backup - @echo -e "$(IGREEN)==> /etc/update.toml will remain$(NO_COLOR)" - @echo -e "$(IGREEN)==> Finished.$(NO_COLOR)" diff --git a/post_backup.hook b/post_backup.hook deleted file mode 100644 index 0bf6567..0000000 --- a/post_backup.hook +++ /dev/null @@ -1,11 +0,0 @@ -[Trigger] -Operation = Install -Operation = Upgrade -Operation = Remove -Type = Package -Target = * - -[Action] -Description = Backing up a list of all packages... -When = PostTransaction -Exec = /usr/local/bin/backup post diff --git a/pre_backup.hook b/pre_backup.hook deleted file mode 100644 index 97857eb..0000000 --- a/pre_backup.hook +++ /dev/null @@ -1,12 +0,0 @@ -[Trigger] -Operation = Install -Operation = Upgrade -Operation = Remove -Type = Package -Target = * - -[Action] -Description = Backing up the pacman db... -When = PreTransaction -Exec = /usr/local/bin/backup pre -AbortOnFail diff --git a/update.toml b/update.toml deleted file mode 100644 index 54117ec..0000000 --- a/update.toml +++ /dev/null @@ -1,6 +0,0 @@ -# Config for update - -[backup] -# All locations need to be an absolute path -# Don't specify a path multiple times, else the zip will likely be broken -locations = ['/opt'] diff --git a/update.zsh b/update.zsh deleted file mode 100644 index e3279e5..0000000 --- a/update.zsh +++ /dev/null @@ -1,30 +0,0 @@ -preview() { - yay -Syy && yay -Qu - [[ -x /usr/bin/flatpak ]] && flatpak remote-ls --updates -} - -flatpak-update() { - TMP="/tmp/update" - DATE="$(date +"%Y-%m-%dT%H:%M:%S%:z")" - BACKUP_LOCATION="/opt" - - [[ -d $TMP ]] && rm --recursive --force "$TMP" - mkdir --parents "$TMP"/before-backup_"$DATE" "$TMP"/after-backup_"$DATE" - - flatpak list --all --show-details > "$TMP"/before-backup_"$DATE"/flatpak-before.txt - tar --create --zstd --file "$TMP"/before-backup_"$DATE".tar.zst "$TMP"/before-backup_"$DATE" - - flatpak update --assumeyes - - flatpak list --all --show-details > "$TMP"/after-backup_"$DATE"/flatpak-after.txt - tar --create --zstd --file "$TMP"/after-backup_"$DATE".tar.zst "$TMP"/after-backup_"$DATE" - - rsync -a "$TMP"/before-backup_"$DATE".tar.zst "$TMP"/after-backup_"$DATE".tar.zst "$BACKUP_LOCATION" - - rm --recursive --force "$TMP" -} - -update () { - yay - flatpak-update -}