Compare commits

...

47 Commits

Author SHA1 Message Date
8024e86962 getting started 2025-05-27 19:03:10 +02:00
88742c2ea5 remove useless stuff 2025-05-27 16:36:03 +02:00
d101e186c4 go get -u && go mod tidy 2025-03-23 20:13:23 +01:00
2d881a0d34 Add nfs check (#28)
For users that use a nfs share for their backup, this will check if it is mounted.

Co-authored-by: AustrianToast <austriantoast@hopeless-cloud.xyz>
Reviewed-on: #28
Co-authored-by: ProfessionalUwU <andre.fuhry@hopeless-cloud.xyz>
Co-committed-by: ProfessionalUwU <andre.fuhry@hopeless-cloud.xyz>
2025-01-29 18:13:39 +01:00
cb735a01a1 switch to different copy 2024-09-27 16:36:44 +02:00
e3c9924fbc progress 2024-09-27 16:36:43 +02:00
3645f7f30c critical fixes 2024-09-12 19:01:16 +02:00
66ca74441d change ZSH_CUSTOM default path 2024-09-08 23:06:20 +02:00
7bca34cc89 add newline 2024-09-08 23:05:16 +02:00
e4ab48fb22 fix typo 2024-09-08 23:04:11 +02:00
67c7f48cd7 update README.md 2024-09-08 23:02:34 +02:00
e2d4253050 re-add functionality
This file is needed to restore preview and flatpak update functionality
2024-09-08 22:48:27 +02:00
81b07991aa move stuff around 2024-09-08 16:36:19 +02:00
452b0e92e2 remove justfile 2024-09-08 00:24:39 +02:00
f89e7112a4 remove executable 2024-09-08 00:24:03 +02:00
b28009f83b done with new version 2024-09-08 00:23:20 +02:00
0cf266dd87 starting from scratch 2024-09-03 03:38:43 +02:00
6fce70ba3c fixed some stuff 2024-07-23 19:57:36 +02:00
b13189e7de move stuff around 2024-07-13 01:23:58 +02:00
92777bbbf8 update README.md
Requirements section no longer needed
2024-07-13 01:14:42 +02:00
91eb6be7c6 also lock pacman db in after_backup 2024-07-13 01:11:15 +02:00
c28fbf309e switch from sudo to su
and moved some stuff around
2024-07-13 01:04:31 +02:00
fe9d5936e7 modify README.md 2024-07-13 00:26:05 +02:00
30462c50c8 modify defaults 2024-07-13 00:25:14 +02:00
6f9ee34a94 add new color for errors 2024-07-13 00:23:49 +02:00
3198a02081 modify check 2024-07-13 00:19:42 +02:00
6593f087c4 move check for backup location to function 2024-07-13 00:15:05 +02:00
8b5704f397 remove most options 2024-07-13 00:11:03 +02:00
3c2ecc72ae Implemented secondary backup location #25 2024-07-07 23:34:27 +02:00
e86a004a28 add missing check for flatpak 2024-07-07 02:17:51 +02:00
a8eee49762 remove trailing slash 2024-07-07 01:53:09 +02:00
e4e6f51bdb fix indentation 2024-07-07 01:31:29 +02:00
0db312e8a0 now supports secondary backup 2024-07-07 01:30:36 +02:00
2fff3ce2a2 better backup location checks 2024-07-07 01:17:06 +02:00
b7a2dc89be add secondary backup location 2024-07-07 01:16:00 +02:00
afab665ca6 switch to makefile
and more changes
2024-07-07 01:15:10 +02:00
bbec26f438 switch justfile to makefile 2024-07-07 00:39:37 +02:00
624371e8f1 refactor
too many to say
2024-04-10 18:30:11 +02:00
355abbf36b doing stuff 2024-01-02 16:32:56 +01:00
ea112d4ceb QOL Improvement (#22)
Added some sanity checks inside the script. Rewrote some parts in the README.md. Completely removed the makefile, because I don't fell like supporting it anymore.

Co-authored-by: ProfessionalUwU <andre.fuhry@hopeless-cloud.xyz>
Reviewed-on: #22
Reviewed-by: ProfessionalUwU <andre.fuhry@hopeless-cloud.xyz>
Co-authored-by: AustrianToast <austriantoast@hopeless-cloud.xyz>
Co-committed-by: AustrianToast <austriantoast@hopeless-cloud.xyz>
2023-12-01 17:13:10 +01:00
92669692f6 Merge branch 'main' into dev 2023-12-01 17:12:07 +01:00
5d3cefb4ac Merge pull request #21 from AustrianToast/dev
Fixing typos is fun
2023-06-06 23:48:44 +02:00
767fda2d93 Merge pull request #20 from AustrianToast/dev
new backup flag
2023-05-24 12:23:27 +02:00
87e4d172ca Change verbosity && Pacman package file exports cleaner
slight improvements
2023-05-13 00:30:06 +02:00
e790f0196b Just a tiny fix
small fix
2023-04-07 00:49:18 +02:00
5b8e9af05a It should work #16
Proper support for long options and finally correct handling of an interrupt.
A bit of code cleanup and refactoring
2023-04-04 10:42:44 +02:00
cf69e69377 Merge pull request #12 from AustrianToast/dev
Created Justfile and updated README
2023-03-29 15:37:30 +02:00
7 changed files with 105 additions and 179 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
# Build artifacts
update

2
Makefile Normal file
View File

@ -0,0 +1,2 @@
update:
gcc -ansi -o update update.c

View File

@ -1,49 +1,33 @@
# Update
Update script written in Bash for Arch Linux only. Keeps all your pacman and aur packages as well as your flatpaks up to date with one simple script. It also backups a list of all your pacman and aur packages and flatpaks.
## Requirements
Here is what is required.
```bash
pacman -S just
```
It also technically requires sudo, but if you use something else, then just create a softlink for this script to work.<br/>
Doing that would look like this.
```bash
ln -s /usr/bin/your_program /usr/bin/sudo
```
Alpm hooks for the pacman package manager.<br>
This project consists of two hooks, one for pre-transaction and the other for
post-transaction.
## Installation
```bash
git clone https://gitea.hopeless-cloud.xyz/AustrianToast/update.git && cd update
git clone https://gitea.hopeless-cloud.xyz/AustrianToast/update.git
cd update
```
Before installing, please edit the config and configure it to your liking.<br/>
Before installing, please edit the config and configure it to your liking.
Then install using
```bash
just install
make install
```
## Usage
If your require the previous functionality of being able to update flatpak and
having the ability to preview the updateable packages and flatpaks.<br>
This functionality has been re-packaged into `update.zsh`.<br>
If you use oh-my-zsh, then you just throw this file into your `$ZSH_CUSTOM`.<br>
This path is by default `~/.oh-my-zsh/custom`. If you use only plain zsh or any other
shell, then you can just take the contained functions and put them inside the
according shell config file. For example your `.bashrc`.
```
Usage: update [OPTION]
options:
no flag same as -p
-f updates using flatpak update only
-p updates using a pacman-wrapper only
-a updates using flatpak update and a pacman-wrapper
-g shutdowns the computer afterwards
-r reboots the computer afterwards
--help displays this message
--preview shows a preview of which pkg's will be updates
--version prints out the version number
--backup just does the before-backup without updating
```
## Contributing
The function `flatpak-update` contains a variable called `BACKUP_LOCATION`.<br>
Please change this path to your desired backup location.
## Contributing
Contributions are always welcome!

View File

@ -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."

127
update
View File

@ -1,127 +0,0 @@
#!/usr/bin/bash
source "$HOME"/.config/update.conf || exit 1
[[ ! -d $BACKUP_LOCATION ]] && mkdir --parents "$BACKUP_LOCATION"
VERSION="2.0.9"
IGREEN="\033[0;92m" # Intense Green
IYELLOW="\033[0;93m" # Intense Yellow
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
FINAL_COMMAND=""
trap interrupt_function INT
interrupt_function() {
echo "Interrupt has been detected"
[[ -f /var/lib/pacman/db.lck ]] && sudo rm /var/lib/pacman/db.lck > /dev/null 2>&1
rm --recursive "$TMP" > /dev/null 2>&1
exit 1
}
help() {
echo "Usage: update [OPTION]"
echo
echo "options:"
echo "no flag same as -p"
echo "-f updates using flatpak update only"
echo "-p updates using a pacman-wrapper only"
echo "-a updates using flatpak update and a pacman-wrapper"
echo "-g shutdowns the computer afterwards"
echo "-r reboots the computer afterwards"
echo "--help displays this message"
echo "--preview shows a preview of which pkg's can be updated"
echo "--version prints out the version number"
echo "--backup just does the before-backup without updating"
}
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
sudo touch /var/lib/pacman/db.lck
}
delete_oldest_backup() {
if [[ $(ls -Ub "$BACKUP_LOCATION" | grep -c $1) -ge $BACKUP_AMOUNT ]]; then
OLDEST_FILE="$(ls -rt1 $BACKUP_LOCATION | grep $1 | head -1)" # sorts by time (oldes first) and gets the first item
rm "$BACKUP_LOCATION"/"$OLDEST_FILE"
fi
}
before_backup() {
lock_pacman_db
delete_oldest_backup before-backup
[[ -d $TMP ]] && rm -r "$TMP"
mkdir --parents "$TMP"/before-backup_"$DATE" "$TMP"/after-backup_"$DATE"
pacman -Q > "$TMP"/before-backup_"$DATE"/pacman-before.txt
[[ -f /usr/bin/flatpak ]] && flatpak list --all --show-details > "$TMP"/before-backup_"$DATE"/flatpak-before.txt
tar --create --xz --file "$TMP"/before-backup_"$DATE".tar.xz.new "$TMP"/before-backup_"$DATE" /var/lib/pacman/local > /dev/null 2>&1 # for some reason it needs the output suppresion
sudo rm /var/lib/pacman/db.lck
mv "$TMP"/before-backup_"$DATE".tar.xz.new "$BACKUP_LOCATION"
mv "$BACKUP_LOCATION"/before-backup_"$DATE".tar.xz.new "$BACKUP_LOCATION"/before-backup_"$DATE".tar.xz
}
after_backup() {
delete_oldest_backup after-backup
tar --create --xz --file "$TMP"/after-backup_"$DATE".tar.xz.new "$TMP"/after-backup_"$DATE" > /dev/null 2>&1
mv "$TMP"/after-backup_"$DATE".tar.xz.new "$BACKUP_LOCATION"
mv "$BACKUP_LOCATION"/after-backup_"$DATE".tar.xz.new "$BACKUP_LOCATION"/after-backup_"$DATE".tar.xz
rm --recursive "$TMP"
}
update_with_pacman_wrapper() {
"$PACMAN_WRAPPER"
pacman -Q > "$TMP"/after-backup_"$DATE"/pacman-after.txt
}
update_with_flatpak() {
flatpak update --assumeyes
flatpak list --all --show-details > "$TMP"/after-backup_"$DATE"/flatpak-after.txt
}
if [[ ${1:0:2} = -- ]]; then
case "${1:2}" in
help)
help ;;
preview)
"$PACMAN_WRAPPER" -Sy
"$PACMAN_WRAPPER" -Qu ;;
version)
echo "$VERSON" ;;
backup)
before_backup
rm --recursive "$TMP" ;;
?)
help; exit 1;;
esac
exit 0
fi
before_backup && echo -e "${IGREEN}pre-backup complete${NO_COLOR}"
[[ $1 ]] || update_with_pacman_wrapper
while getopts 'fpagr' OPTIONS; do
case $OPTIONS in
f)
update_with_flatpak ;;
p)
update_with_pacman_wrapper ;;
a)
update_with_pacman_wrapper; update_with_flatpak ;;
g)
[[ $1 = -g ]] && update_with_pacman_wrapper
FINAL_COMMAND="systemctl --check-inhibitors=yes poweroff" ;;
r)
[[ $1 = -r ]] && update_with_pacman_wrapper
FINAL_COMMAND="systemctl --check-inhibitors=yes reboot" ;;
?)
help; exit 1;;
esac
done
after_backup && echo -e "${IGREEN}after-backup complete${NO_COLOR}"
$FINAL_COMMAND; exit

83
update.c Normal file
View File

@ -0,0 +1,83 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int command_builder(char *command, char **args) {
char *tmp_command = malloc(strlen(command));
memcpy(tmp_command, command, strlen(command));
char *tmp_token;
size_t index = 0;
if (tmp_command == NULL) { return 1; }
tmp_token = strtok(tmp_command, " ");
while(tmp_token != NULL) {
args[index] = malloc(strlen(tmp_token));
memcpy(args[index], tmp_token, strlen(tmp_token));
tmp_token = strtok(NULL, " ");
index++;
}
free(tmp_command);
args[index++] = NULL;
return 0;
}
int run_cmd_and_wait(char *command) {
char **args = malloc(strlen(command));
int ret = command_builder(command, args);
if (ret != 0) {
return 1;
}
signed int pid = fork();
int status;
if (pid == -1) {
fprintf(stderr, "Couldn't fork. Error = %s\n", strerror(errno));
return 1;
} else if (pid > 0) {
waitpid(pid, &status, 0);
} else {
execvp(args[0], args);
}
free(args);
return status;
}
int main() {
FILE *os_release = fopen("/etc/os-release", "r");
if (!os_release) {
fprintf(stderr, "Couldn't open os-release. Error = %s\n", strerror(errno));
}
char buffer[1024];
while (fgets(buffer, sizeof buffer, os_release)) {
if (strncmp(buffer, "NAME=", 5) == 0) {
memmove(buffer, buffer + 6, (sizeof buffer) - 6);
buffer[strcspn(buffer, "\"")] = '\0';
break;
}
}
int ret;
char *args[100];
if (strcmp(buffer, "EndeavourOS") == 0) {
ret = run_cmd_and_wait("yay");
} else if (strcmp(buffer, "Debian") == 0) {
ret = run_cmd_and_wait("apt update");
if (ret != 0) {
return ret;
}
ret = run_cmd_and_wait("apt upgrade");
} else if (strcmp(buffer, "FreeBSD") == 0) {
ret = run_cmd_and_wait("pkg update");
if (ret != 0) {
return ret;
}
ret = run_cmd_and_wait("pkg upgrade");
} else {
fprintf(stderr, "OS %s not suported\n", buffer);
return 1;
}
return ret;
}

View File

@ -1,8 +0,0 @@
# Backup to this folder
BACKUP_LOCATION=~/
# use this pacman-wrapper
PACMAN_WRAPPER=yay
# how many different backups to keep
BACKUP_AMOUNT=2