diff --git a/host/home/Backup.nix b/host/home/Backup.nix index 8589c759..3613dc4f 100644 --- a/host/home/Backup.nix +++ b/host/home/Backup.nix @@ -4,7 +4,7 @@ description = "Home system backup."; serviceConfig = { Type = "oneshot"; - ExecStart = "/root/app/bin/home/Backup"; + ExecStart = "/etc/bin/Backup"; }; path = with pkgs; [ bashInteractive diff --git a/host/home/Configuration.nix b/host/home/Configuration.nix index e6c3d38d..d2981539 100644 --- a/host/home/Configuration.nix +++ b/host/home/Configuration.nix @@ -18,6 +18,9 @@ 10.1.0.2 pass.voronind.com ''; + # Extra binaries. + environment.etc.bin.source = ./bin; + # Filesystems. fileSystems."/storage/cold_1" = { device = "/dev/storage/cold_1"; diff --git a/host/home/Nextcloud.nix b/host/home/Nextcloud.nix index 6bc0ed8c..b987b63e 100644 --- a/host/home/Nextcloud.nix +++ b/host/home/Nextcloud.nix @@ -4,7 +4,7 @@ description = "Nextcloud worker."; serviceConfig = { Type = "oneshot"; - ExecStart = "/root/app/bin/home/Nextcloud"; + ExecStart = "/etc/bin/Nextcloud"; }; path = with pkgs; [ bashInteractive diff --git a/host/home/PhotosProcess.nix b/host/home/PhotosProcess.nix index 6cb10c4d..b631ccfb 100644 --- a/host/home/PhotosProcess.nix +++ b/host/home/PhotosProcess.nix @@ -4,7 +4,7 @@ description = "Process uploaded photos."; serviceConfig = { Type = "oneshot"; - ExecStart = "/root/app/bin/home/PhotosProcess"; + ExecStart = "/etc/bin/PhotosProcess"; }; path = with pkgs; [ bashInteractive diff --git a/host/home/YandexMusic.nix b/host/home/YandexMusic.nix index 602efd77..0e83f335 100644 --- a/host/home/YandexMusic.nix +++ b/host/home/YandexMusic.nix @@ -4,7 +4,7 @@ description = "Sync music from Yandex.Music."; serviceConfig = { Type = "oneshot"; - ExecStart = "/root/app/bin/home/YandexMusic"; + ExecStart = "/etc/bin/YandexMusic"; }; path = with pkgs; [ bashInteractive diff --git a/host/home/bin/Backup b/host/home/bin/Backup new file mode 100755 index 00000000..c17399d7 --- /dev/null +++ b/host/home/bin/Backup @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +# Source modules. +for file in /etc/bash/module/*.sh; do + source "${file}" +done + +function report() { + echo "${*}" + notify "${*}" +} + +# Define constants. +path_src="/storage/hot" +path_mount="/storage/cold_1" +path_backup="${path_mount}/backup" +path_docker="${path_backup}/home" +path_media="/storage/cold_1/media /storage/cold_2/media" + +# Check if backup drive is mounted. +if [ ! -f "${path_mount}"/.mount ]; then + report "Backup : ${path_mount} not mounted!" + exit 1 +fi + +# Check if hot storage is mounted. +if [ ! -f "${path_src}"/.mount ]; then + report "Backup : ${path_src} not mounted!" + exit 1 +fi + +# Cd to src storage. +cd "${path_src}" + +# Save media list. +find ${path_media} -type d > ${path_backup}/cold/ColdMedia.txt || report "Backup : Failed to save media list!" +cd ${path_backup}/cold/ +archive_fast ColdMedia.txt && rm ColdMedia.txt || report "Backup : Failed to archive media list!" +cd - + +# Backup docker. +docker=$(archive_fast docker/) +bupsize=$(tdu ${docker} | awk '{print $1}') +mv ${docker} ${path_docker}/ || report "Backup : Failed to save docker!" + +# Backup some media. +cd ${path_src}/media/ +paper=$(archive_fast paper/) +mv ${paper} ${path_backup}/paper/ || report "Backup : Failed to save paper!" +cd - + +# Prune media copies. +cd ${path_backup}/paper/ +archive_prune +cd - + +cd ${path_backup}/cold/ +archive_prune +cd - + +# Prune old Docker copies. +cd ${path_docker} +archive_prune Docker 7 +cd - + +# Prune game saves. +cd "${path_backup}/save/" +archive_prune +cd - + +# Sync writes. +sync + +# Notify completion & size. +notify_silent "Backup : Complete ${bupsize}." +echo "Backup : Complete ${bupsize}." diff --git a/host/home/bin/Nextcloud b/host/home/bin/Nextcloud new file mode 100755 index 00000000..404d7768 --- /dev/null +++ b/host/home/bin/Nextcloud @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +# Source modules. +for file in /etc/bash/module/*.sh; do + source "${file}" +done + +docker exec -u 33 cloud php -f /var/www/html/cron.php || notify 'Nextcloud : Failed to run cron.' diff --git a/host/home/bin/PhotosProcess b/host/home/bin/PhotosProcess new file mode 100755 index 00000000..d70a676f --- /dev/null +++ b/host/home/bin/PhotosProcess @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +in="/storage/hot/docker/cloud/data/data/cakee/files/media/photo/" +out="/storage/cold_1/backup/tmp/photo/" + +docker run --rm -v "${in}":/in -v "${out}":/out voronind.com/photoprocess:latest diff --git a/host/home/bin/YandexMusic b/host/home/bin/YandexMusic new file mode 100755 index 00000000..5c0e01ef --- /dev/null +++ b/host/home/bin/YandexMusic @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +music="/storage/hot/media/music/" + +docker run --rm -v "${music}":/music voronind.com/yamusic:latest