unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#64883] [PATCH] doc: cookbook: Document a dynamic DNS update mcron job.
@ 2023-07-27  2:04 Maxim Cournoyer
  2023-08-16 20:15 ` Ludovic Courtès
  0 siblings, 1 reply; 3+ messages in thread
From: Maxim Cournoyer @ 2023-07-27  2:04 UTC (permalink / raw)
  To: 64883, maxim.cournoyer

* doc/guix-cookbook.texi (System Configuration)
<Dynamic DNS mcron job>: New subsection.
---
 doc/guix-cookbook.texi | 56 +++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 55 insertions(+), 1 deletion(-)

diff --git a/doc/guix-cookbook.texi b/doc/guix-cookbook.texi
index 2e58c6c795..8e069f921e 100644
--- a/doc/guix-cookbook.texi
+++ b/doc/guix-cookbook.texi
@@ -1460,9 +1460,10 @@ System Configuration
 * Customizing the Kernel::       Creating and using a custom Linux kernel on Guix System.
 * Guix System Image API::        Customizing images to target specific platforms.
 * Using security keys::          How to use security keys with Guix System.
+* Dynamic DNS mcron job::        Job to update the IP address behind a DuckDNS host name.
 * Connecting to Wireguard VPN::  Connecting to a Wireguard VPN.
 * Customizing a Window Manager:: Handle customization of a Window manager on Guix System.
-* Running Guix on a Linode Server:: Running Guix on a Linode Server
+* Running Guix on a Linode Server:: Running Guix on a Linode Server.
 * Setting up a bind mount:: Setting up a bind mount in the file-systems definition.
 * Getting substitutes from Tor:: Configuring Guix daemon to get substitutes through Tor.
 * Setting up NGINX with Lua:: Configuring NGINX web-server to load Lua modules.
@@ -2022,6 +2023,59 @@ Using security keys
 ready to be used with applications supporting two-factor authentication
 (2FA).
 
+@node Dynamic DNS mcron job
+@section Dynamic DNS mcron job
+
+@cindex dynamic DNS, DDNS
+If your @acronym{ISP, Internet Service Provider} only provides dynamic
+IP addresses, it can be useful to setup a dynamic @acronym{DNS, Domain
+Name System} (also known as @acronym{DDNS, Dynamic DNS}) service to
+associate a static host name to a public but dynamic (often changing) IP
+address.  There are multiple existing services that can be used for
+this; in the following mcron job, @url{https://duckdns.org, DuckDNS} is
+used.  It should also work with other dynamic DNS services that offer a
+similar interface to update the IP address, such as
+@url{https://freedns.afraid.org/}, with minor adjustments.
+
+The mcron job is provided below, where @var{DOMAIN} should be
+substituted for your own domain prefix, and the DuckDNS provided token
+associated to @var{DOMAIN} added to the
+@file{/etc/duckdns/@var{DOMAIN}.token} file.
+
+@lisp
+(define duckdns-job
+  ;; Update personal domain IP every 5 minutes.
+  #~(job '(next-minute (range 0 60 5))
+	 #$(program-file
+            "duckdns-update"
+            (with-extensions (list guile-gnutls) ;required by (web client)
+              #~(begin
+                  (use-modules (ice-9 textual-ports)
+                               (web client))
+                  (let ((token (string-trim-both
+                                (call-with-input-file "/etc/duckdns/@var{DOMAIN}.token"
+                                  get-string-all)))
+                        (query-template (string-append "https://www.duckdns.org/"
+                                                       "update?domains=@var{DOMAIN}"
+                                                       "&token=~a&ip=")))
+                    (http-get (format #f query-template token))))))
+         "duckdns-update"
+         #:user "nobody"))
+@end lisp
+
+The job then needs to be added to the list of mcron jobs for your
+system, using something like:
+
+@lisp
+(operating-system
+ (services
+  (cons* (service mcron-service-type
+           (mcron-configuration
+             (jobs (list duckdns-job ...))))
+         ...
+         %base-services)))
+@end lisp
+
 @node Connecting to Wireguard VPN
 @section Connecting to Wireguard VPN
 

base-commit: c7e45139faa27b60f2c7d0a4bc140f9793d97d47
-- 
2.41.0





^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [bug#64883] [PATCH] doc: cookbook: Document a dynamic DNS update mcron job.
  2023-07-27  2:04 [bug#64883] [PATCH] doc: cookbook: Document a dynamic DNS update mcron job Maxim Cournoyer
@ 2023-08-16 20:15 ` Ludovic Courtès
  2023-08-17  3:57   ` bug#64883: " Maxim Cournoyer
  0 siblings, 1 reply; 3+ messages in thread
From: Ludovic Courtès @ 2023-08-16 20:15 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 64883

Hi,

Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:

> * doc/guix-cookbook.texi (System Configuration)
> <Dynamic DNS mcron job>: New subsection.

Neat!  Looks great to me; there’s a lot of demand for task-oriented
tutorials like this one.

Ludo’.




^ permalink raw reply	[flat|nested] 3+ messages in thread

* bug#64883: [PATCH] doc: cookbook: Document a dynamic DNS update mcron job.
  2023-08-16 20:15 ` Ludovic Courtès
@ 2023-08-17  3:57   ` Maxim Cournoyer
  0 siblings, 0 replies; 3+ messages in thread
From: Maxim Cournoyer @ 2023-08-17  3:57 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 64883-done

Hello,

Ludovic Courtès <ludo@gnu.org> writes:

> Hi,
>
> Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:
>
>> * doc/guix-cookbook.texi (System Configuration)
>> <Dynamic DNS mcron job>: New subsection.
>
> Neat!  Looks great to me; there’s a lot of demand for task-oriented
> tutorials like this one.

Great, thanks for reviewing!  The change is now installed.

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-08-17  3:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-07-27  2:04 [bug#64883] [PATCH] doc: cookbook: Document a dynamic DNS update mcron job Maxim Cournoyer
2023-08-16 20:15 ` Ludovic Courtès
2023-08-17  3:57   ` bug#64883: " Maxim Cournoyer

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).