From 754cb2501c51a0fde27abb5a5fc34ecb3766c21b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Radoslav=20Bod=C3=B3?= <bodik@cesnet.cz>
Date: Tue, 26 Mar 2024 17:34:41 +0100
Subject: [PATCH] general: update documentation and examples

---
 README.md                 | 86 ++++++++++++++++-----------------------
 examples/rwm-backups.conf | 63 ++++++++++++++++++++++++++++
 examples/rwm-rclone.conf  |  8 ++++
 examples/rwm-restic.conf  |  8 ++++
 rwm.conf.example          | 16 --------
 rwm.py                    |  3 +-
 6 files changed, 115 insertions(+), 69 deletions(-)
 create mode 100644 examples/rwm-backups.conf
 create mode 100644 examples/rwm-rclone.conf
 create mode 100644 examples/rwm-restic.conf
 delete mode 100644 rwm.conf.example

diff --git a/README.md b/README.md
index 7142e3f..6101db8 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,7 @@
 # RWM - Restic WORM Manager
 
+## The story
+
 Restic is a fast and secure backup program. Uses client-storage architecture to backup
 local filesystem to the variety of backends including local and remote storages such
 as S3. Given it's server-less nature, a backed-up resource has ability to manipulate it's
@@ -26,18 +28,21 @@ credentials for the managed bucket.
 
 RWM can:
 
-* check if used bucket is configured for versioning
+* provide low-level S3 access for aws cli, rclone
+* rclone crypt over S3 backend
+* restic with S3 repository
+* configurable backup manager/executor
+
+
+todo:
 
+* check if used bucket is configured for versioning
 * check if used access_key does not have administrator privileges to manipulate
   with WORM policies
-
 * generate and store current bucket state state-data
-
 * recreate bucket contents on local filesystem (or remote bucket) acording to specified
   state data
-
 * ??? check completeness of the current state of the bucket
-
 * prune all non-recent object versions to reclaim storage space
 
 
@@ -48,30 +53,29 @@ TBD:
 
 ## Usage
 
-Beside the WORM management features, `rwm` can also be used as simple wrapper to other S3 related
-tools such as `aws` CLI, `rclone` and `restic`.
-
-It can be also used as simple backup manager for intended usecases.
-
-
 ### Install
 ```
-git clone git@gitlab.flab.cesnet.cz:bodik/rwm.git /opt/rwm
+git clone git@gitlab.cesnet.cz:radoslav_bodo/rwm.git /opt/rwm
 cd /opt/rwm
 make install
 ```
 
-### Simple copy: rclone with crypt overlay
+### Low-level S3
 
 ```
-cat > rwm.conf <<__EOF__
-rwm_s3_endpoint_url: ""
-rwm_s3_access_key: ""
-rwm_s3_secret_key: ""
-rwm_rclone_crypt_bucket: "rwmcrypt"
-rwm_rclone_crypt_password: ""
-__EOF__
+cp examples/rwm-rclone.conf rwm.conf
+rwm aws s3 ls s3://
+rwm aws s3api list-buckets
+rwm rclone lsd rwmbe:/
+```
 
+
+### Simple copy: rclone with crypt overlay
+
+rclone_crypt defines single default remote named "rwmbe:/" pointed to `rwm_rclone_crypt_bucket` path.
+
+```
+cp examples/rwm-rclone.conf rwm.conf
 rwm rclone_crypt sync /data rwmbe:/
 rwm rclone_crypt lsl rwmbe:/
 ```
@@ -79,47 +83,25 @@ rwm rclone_crypt lsl rwmbe:/
 ### Restic: manual restic backup
 
 ```
-cat > rwm.conf <<__EOF__
-rwm_s3_endpoint_url: ""
-rwm_s3_access_key: ""
-rwm_s3_secret_key: ""
-rwm_restic_bucket: "rwmrestic"
-rwm_restic_password: ""
-__EOF__
-
+cp examples/rwm-restic.conf rwm.conf
 rwm restic init
 rwm restic backup /data
 rwm restic snapshots
+rwm restic mount /mnt/restore
 ```
 
+note: executed tools stdout is buffered, mount does not have immediate output as normal `restic mount` would
+
+
 ### RWM: simple backups
 
-```
-cat > rwm.conf <<__EOF__
-rwm_s3_endpoint_url: ""
-rwm_s3_access_key: ""
-rwm_s3_secret_key: ""
-
-rwm_restic_bucket: "rwmrestic"
-rwm_restic_password: ""
-
-rwm_backups:
-  backup1:
-    filesdirs:
-      - /etc
-      - /data
-    excludes:
-      - *.cache
-    extras:
-      - --tag
-      - mytag1
-
-rwm_retention:
-  keep-daily: "14"
-  keep-weekly: "20"
-__EOF__
+backups follows standard restic procedures, but adds profile like configuration to easily run in schedulers
 
+```
+cp examples/rwm-backups.conf rwm.conf
 rwm backup_all
+rwm restic snapshots
+rwm restic mount /mnt/restore
 ```
 
 
diff --git a/examples/rwm-backups.conf b/examples/rwm-backups.conf
new file mode 100644
index 0000000..342f380
--- /dev/null
+++ b/examples/rwm-backups.conf
@@ -0,0 +1,63 @@
+# rwm aws, rclone, restic, backup, backup_all
+
+rwm_s3_endpoint_url: ""
+rwm_s3_access_key: ""
+rwm_s3_secret_key: ""
+
+rwm_restic_bucket: "rwmbackups"
+rwm_restic_password: ""
+
+rwm_backups:
+  linux1:
+    filesdirs:
+      - "/"
+    excludes:
+      #- "*.cache"
+      #- "*.log"
+      - "/dev/*"
+      - "/home/*/.cache/*"
+      - "/media/*"
+      - "/mnt/*"
+      - "/proc/*"
+      - "/sys/*"
+      - "/tmp/*"
+      - "/var/cache/*"
+      - "/var/lib/mysql"
+      - "/var/lib/postgresql"
+      - "/var/log/journal*"
+      - "/var/run/*"
+      - "/var/tmp/*"
+
+  simplefs:
+    filesdirs:
+      - "/"
+    exludes:
+      - "/mnt/*"
+      - "/tmp/*"
+      - "/var/cache/*"
+      - "/var/lib/mysql/*"
+      - "/var/lib/postgresql/*"
+      - "/var/run/*"
+    extras:
+      - --one-file-system
+
+  mysql:
+    filesdirs:
+      - /var/lib/rwm/database.tar.gz
+    extras: ["--tag", "mysql"]
+    prerun:
+      - dump_database
+    postrun:
+      - cleanup_dump_database
+
+  nas:
+    filesdirs:
+        - /mnt/nas
+    prerun:
+      - mount
+    postrun:
+      - unmount
+
+rwm_retention:
+  keep-daily: "14"
+  keep-weekly: "20"
diff --git a/examples/rwm-rclone.conf b/examples/rwm-rclone.conf
new file mode 100644
index 0000000..f287c8b
--- /dev/null
+++ b/examples/rwm-rclone.conf
@@ -0,0 +1,8 @@
+# rwm aws, rclone, rclone_crypt
+
+rwm_s3_endpoint_url: ""
+rwm_s3_access_key: ""
+rwm_s3_secret_key: ""
+
+rwm_rclone_crypt_bucket: "rwmcrypt"
+rwm_rclone_crypt_password: ""
diff --git a/examples/rwm-restic.conf b/examples/rwm-restic.conf
new file mode 100644
index 0000000..70a4d5a
--- /dev/null
+++ b/examples/rwm-restic.conf
@@ -0,0 +1,8 @@
+# rwm aws, rclone, restic
+
+rwm_s3_endpoint_url: ""
+rwm_s3_access_key: ""
+rwm_s3_secret_key: ""
+
+rwm_restic_bucket: "rwmrestic"
+rwm_restic_password: ""
diff --git a/rwm.conf.example b/rwm.conf.example
deleted file mode 100644
index 0931e9f..0000000
--- a/rwm.conf.example
+++ /dev/null
@@ -1,16 +0,0 @@
-# all commands
-rwm_s3_endpoint_url: ""
-rwm_s3_access_key: ""
-rwm_s3_secret_key: ""
-
-# rclone_crypt
-rwm_rclone_crypt_bucket: "rwmcrypt"
-rwm_rclone_crypt_password: ""
-
-# restic, backup
-rwm_restic_bucket: "rwmcrypt"
-rwm_restic_password: ""
-
-# backup
-rwm_backups: {}
-rwm_retention: {}
diff --git a/rwm.py b/rwm.py
index 239826b..a45f015 100755
--- a/rwm.py
+++ b/rwm.py
@@ -329,10 +329,11 @@ def main(argv=None):
 
     if args.command == "backup":
         ret = rwmi.backup_cmd(args.name).returncode
+        logger.info("rwm backup finished with %s (ret %d)", "success" if ret == 0 else "errors", ret)
     if args.command == "backup_all":
         ret = rwmi.backup_all_cmd()
+        logger.info("rwm backup_all finished with %s (ret %d)", "success" if ret == 0 else "errors", ret)
 
-    logger.info("rwm finished with %s (ret %d)", "success" if ret == 0 else "errors", ret)
     return ret
 
 
-- 
GitLab