[PATCH] gnu: Add zfs-auto-snapshot.

DoneSubmitted by raid5atemyhomework.
Details
2 participants
  • Arun Isaac
  • raid5atemyhomework
Owner
unassigned
Severity
normal
R
R
raid5atemyhomework wrote on 14 Mar 2021 09:55
(name . Guix Patches)(address . guix-patches@gnu.org)
8khDgDFm8YAH3rsudpda_ASV2o4CdQLmejmEXU3QkRkUFrMfewbzBrqrC4OO2mvpuQUckFSwYmSGadSjNy87Z7NKas5fupZILvGtvPJSa3Y=@protonmail.com
From be0c4d4ef73e68ace117f2a1b1396331a4fcdf84 Mon Sep 17 00:00:00 2001
From: raid5atemyhomework <raid5atemyhomework@protonmail.com>
Date: Sun, 14 Mar 2021 16:40:47 +0800
Subject: [PATCH] gnu: Add zfs-auto-snapshot.

* gnu/packages/file-systems.scm (zfs-auto-snapshot): New variable.
---
gnu/packages/file-systems.scm | 54 +++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)

Toggle diff (65 lines)
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index e7d78e41fb..0543be2d82 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -975,6 +975,60 @@ originally developed for Solaris and is now maintained by the OpenZFS
 community.")
     (license license:cddl1.0)))

+(define-public zfs-auto-snapshot
+  (package
+    (name "zfs-auto-snapshot")
+    (version "1.2.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://github.com/zfsonlinux/zfs-auto-snapshot/archive/upstream/"
+               version ".tar.gz"))
+        (sha256
+          (base32 "16ry1w43i44xc67gr73x6fa48ninfhqxr498ad4m3kya93vp2zrh"))))
+    (build-system gnu-build-system)
+    (arguments
+      `(#:tests? #f ; No tests
+        #:phases
+        (modify-phases %standard-phases
+          (delete 'configure)
+          (delete 'build)
+          ;; Guix System may not have a traditional cron system, but
+          ;; the cron scripts installed by this package are convenient
+          ;; to use as targets for an mcron job specification, so make
+          ;; sure they can be run in-store.
+          (add-before 'install 'fix-cron-scripts
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let* ((out                (assoc-ref outputs "out"))
+                     (zfs-auto-snapshot  (string-append
+                                           out
+                                           "/sbin/zfs-auto-snapshot")))
+                (substitute* '("etc/zfs-auto-snapshot.cron.daily"
+                               "etc/zfs-auto-snapshot.cron.frequent"
+                               "etc/zfs-auto-snapshot.cron.hourly"
+                               "etc/zfs-auto-snapshot.cron.monthly"
+                               "etc/zfs-auto-snapshot.cron.weekly")
+                  (("zfs-auto-snapshot")
+                   zfs-auto-snapshot)))))
+          ;; Provide DESTDIR and PREFIX on make command.
+          (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (invoke "make" "install"
+                        "PREFIX="
+                        (string-append "DESTDIR=" out)))
+              #t)))))
+    (home-page "https://github.com/zfsonlinux/zfs-auto-snapshot")
+    (synopsis "Automatically create, rotate, and destroy periodic ZFS snapshots")
+    (description
+      "An alternative implementation of the zfs-auto-snapshot service for Linux
+that is compatible with zfs-linux and zfs-fuse.
+
+On Guix System, you will need to invoke the installed shell scripts as @code{job}
+declarations in your @code{operating-system} configuration.")
+    (license license:gpl2+)))
+
 (define-public mergerfs
   (package
     (name "mergerfs")
--
2.30.2
R
R
raid5atemyhomework wrote on 14 Mar 2021 12:07
(name . 47134@debbugs.gnu.org)(address . 47134@debbugs.gnu.org)
cFZtsT-Osf6JnCduXoi5G147PJ79gE7lnMKDLGbaQtSlfDttpd_NpRSPquWwYInyoRxHeqjW-Wqp-yMqhPtBrJS0-KKRmg7mZu8m1n0cx1Y=@protonmail.com
It works if you have `zfs` installed in your profile and invoke the shell script within the profile, but not if you are running from a non-profile environment, such as from `mcron`.

Lemme think what is best to do...
R
R
raid5atemyhomework wrote on 14 Mar 2021 13:04
[PATCH v2] gnu: Add zfs-auto-snapshot.
(name . 47134@debbugs.gnu.org)(address . 47134@debbugs.gnu.org)
vFeyg6oSb1vLNonWd3wE9MHvg23Axb7YdzyIpIOuiZOE894ODcKjKBq9Z0J9AP8xw-bCsgUma9ixgjWrKDHCcQza54WQpkHQTaXei00BmkM=@protonmail.com
Have it refer to specific zfs package.

Users that inherit from the zfs package in order to compile for a specific kernel version should also inherit from this package and pass in their zfs.

Testing done:

* `guix build -f zfs-auto-snapshot.scm` on a scheme file containing only this package.
* Ran the hourly, daily, weekly, and monthly scripts "by hand". Also confirmed `com.sun:auto-snapshot` and `com.sun:auto-snapshot:*` settings work.
* Currently have it running in a homelab server with mcron triggers on the hourly, daily, weekly, and monthly scripts, at least one hourly trigger has passed and snapshots were indeed created without any errors in `/var/log/messages`.
* Checked the installed scripts and verified that the `zfs` and `zpool` commands refer to specific in-store binaries.

Please merge!

Thanks
raid5atemyhomework

From 7425298029dd1c9b4f2b3bba675ddbe7eb730744 Mon Sep 17 00:00:00 2001
From: raid5atemyhomework <raid5atemyhomework@protonmail.com>
Date: Sun, 14 Mar 2021 16:40:47 +0800
Subject: [PATCH] gnu: Add zfs-auto-snapshot.

* gnu/packages/file-systems.scm (zfs-auto-snapshot): New variable.
---
gnu/packages/file-systems.scm | 75 +++++++++++++++++++++++++++++++++++
1 file changed, 75 insertions(+)

Toggle diff (86 lines)
diff --git a/gnu/packages/file-systems.scm b/gnu/packages/file-systems.scm
index e7d78e41fb..4d01b3da46 100644
--- a/gnu/packages/file-systems.scm
+++ b/gnu/packages/file-systems.scm
@@ -975,6 +975,81 @@ originally developed for Solaris and is now maintained by the OpenZFS
 community.")
     (license license:cddl1.0)))

+(define-public zfs-auto-snapshot
+  (package
+    (name "zfs-auto-snapshot")
+    (version "1.2.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (string-append
+               "https://github.com/zfsonlinux/zfs-auto-snapshot/archive/upstream/"
+               version ".tar.gz"))
+        (sha256
+          (base32 "16ry1w43i44xc67gr73x6fa48ninfhqxr498ad4m3kya93vp2zrh"))))
+    (build-system gnu-build-system)
+    (inputs
+      ;; Note: if you are inheriting from the above zfs package in order
+      ;; to provide a specific stable kernel version, you should also
+      ;; inherit this package and replace the sole input below.
+      `(("zfs" ,zfs)))
+    (arguments
+      `(#:tests? #f ; No tests
+        #:phases
+        (modify-phases %standard-phases
+          (delete 'configure)
+          (delete 'build)
+          ;; Guix System may not have a traditional cron system, but
+          ;; the cron scripts installed by this package are convenient
+          ;; to use as targets for an mcron job specification, so make
+          ;; sure they can be run in-store.
+          (add-before 'install 'fix-scripts
+            (lambda* (#:key outputs inputs #:allow-other-keys)
+              (let* ((out                (assoc-ref outputs "out"))
+                     (zfs-auto-snapshot  (string-append
+                                           out
+                                           "/sbin/zfs-auto-snapshot"))
+                     (zfs-package        (assoc-ref inputs "zfs"))
+                     (zpool              (string-append
+                                           zfs-package
+                                           "/sbin/zpool"))
+                     (zfs                (string-append
+                                           zfs-package
+                                           "/sbin/zfs")))
+                (substitute* '("etc/zfs-auto-snapshot.cron.daily"
+                               "etc/zfs-auto-snapshot.cron.frequent"
+                               "etc/zfs-auto-snapshot.cron.hourly"
+                               "etc/zfs-auto-snapshot.cron.monthly"
+                               "etc/zfs-auto-snapshot.cron.weekly")
+                  (("zfs-auto-snapshot")
+                   zfs-auto-snapshot))
+                (substitute* "src/zfs-auto-snapshot.sh"
+                  (("LC_ALL=C zfs list")
+                   (string-append "LC_ALL=C " zfs " list"))
+                  (("LC_ALL=C zpool status")
+                   (string-append "LC_ALL=C " zpool " status"))
+                  (("zfs snapshot")
+                   (string-append zfs " snapshot"))
+                  (("zfs destroy")
+                   (string-append zfs " destroy"))))))
+          ;; Provide DESTDIR and PREFIX on make command.
+          (replace 'install
+            (lambda* (#:key outputs #:allow-other-keys)
+              (let ((out (assoc-ref outputs "out")))
+                (invoke "make" "install"
+                        "PREFIX="
+                        (string-append "DESTDIR=" out)))
+              #t)))))
+    (home-page "https://github.com/zfsonlinux/zfs-auto-snapshot")
+    (synopsis "Automatically create, rotate, and destroy periodic ZFS snapshots")
+    (description
+      "An alternative implementation of the zfs-auto-snapshot service for Linux
+that is compatible with zfs-linux and zfs-fuse.
+
+On Guix System, you will need to invoke the included shell scripts as @code{job}
+definitions in your @code{operating-system} declaration.")
+    (license license:gpl2+)))
+
 (define-public mergerfs
   (package
     (name "mergerfs")
--
2.30.2
A
A
Arun Isaac wrote on 2 Oct 2021 13:39
Re: bug#47134: [PATCH] gnu: Add zfs-auto-snapshot.
(name . raid5atemyhomework)(address . raid5atemyhomework@protonmail.com)(address . 47134-done@debbugs.gnu.org)
87a6jrirjn.fsf@systemreboot.net
Hi,

It looks like Danny Milosavljevic applied this patch to master with
commit ba3b295a3ee956ac7500b5f9bb1d151b28ab30ed, but probably forgot to
close this bug. So, I'm closing now.

Thanks for contributing to Guix!
Arun
-----BEGIN PGP SIGNATURE-----

iQFPBAEBCAA5FiEEf3MDQ/Lwnzx3v3nTLiXui2GAK7MFAmFYRQwbHGFydW5pc2Fh
Y0BzeXN0ZW1yZWJvb3QubmV0AAoJEC4l7othgCuzIjEH/jL24Qzj1wi7e46OsMNc
FxQwubqHbR7WnSYeFo/5OTg9KoSNlaPr0epXAxV5jki8XGaYnjH31xsa/X+AWacV
JFuGKf4Xj4dJZeG55OkGarphUi9Jft4/bcXJrcj9rEl0gE/UCaGCPwCMpZ7nl4RV
9s/RKfD4kaw7j1LjelaYitBfbDBk/2/VhWaSevWf7quLE43Y/yLVxJuj0x2l9HPv
Mrdfe8BNxHj1Kr24MvTfsOGhZoT2YSJoQtYb3ytx6jdgXCC+0eU5q4GWSF1U6vKS
R6hFxVkoJBStHPh9hebvn9/yT+APxqLhgwYc3VxuFnROxePjoShlj8mWvfnigXWu
/xE=
=YhEH
-----END PGP SIGNATURE-----

Closed
?
Your comment

This issue is archived.

To comment on this conversation send email to 47134@debbugs.gnu.org